Tutorial: Creating and processing transactions
This article will describe the lifecycle of a transaction as it's created and processed by a Spigot plugin written in Java. For an overview of how $WRLD payments work, refer to this section.
Creating plugin, initializing wallet
public class WRLDPaymentsCommands extends JavaPlugin {
private static WRLDPaymentsCommands plugin;
private static WalletAPI wallet;
public static WRLDPaymentsCommands getInstance() {
return plugin;
}
public static WalletAPI getPayments() {
return wallet;
}
public void onEnable() {
plugin = this;
wallet = new WalletAPI();
// We create this event handler below
getServer().getPluginManager().registerEvents(new PlayerTransactEventListener(), this);
}
}
Defining transaction types and payloads
Transactions are defined by a payload class which is automatically associated with the transaction and sent back to the server when the player completes payment. Payload classes serve two purposes:
- They allow the server to differentiate between multiple transaction types.
- Developers can store any arbitrary data they want and associate it with their transaction.
public class PlayerBuyItemPayload {
public ItemStack items;
public PlayerBuyItemPayload(ItemStack items) {
this.items = items;
}
}
Creating a payment request
PlayerBuyItemPayload payload = new PlayerBuyItemPayload(new ItemStack(Material.APPLE, 64));
double price = 15.0;
WRLDShopkeeperPlugin.getPayments().getNFTPlayer(player).requestWRLD(
price, Network.POLYGON, "Purchasing an apple", payload
);
Writing a transaction handler
Incoming transactions are processed by a Spigot event handler like the one below:
public class PlayerTransactEventListener implements Listener {
@EventHandler
public void onPlayerTransact(PlayerTransactEvent<?> e) {
if (e.getPayload() instanceof PlayerBuyItemPayload payload) {
e.getPlayer().sendMessage("Transaction complete!");
e.getPlayer().getInventory().addItem(payload.items);
}
}
}
Player Wallets & Live Payment Testing
If you want to test live payments, you need to connect your wallet that will spend $WRLD to your Minecraft account for NFT Worlds. You can do that through your NFT Worlds account page: https://nftworlds.com/login
Connecting your wallet allows the NFT Worlds ecosystem to globally recognize your player UUID and the wallet address(es) associated with it. This is how payment receipt & the target player who paid is determined by the wrld payments api.