Skip to main content

Custom Economy

zAuctionHouse supports custom economy implementations. This allows you to integrate any currency system with the auction house.

Requirements

Your plugin must load before zAuctionHouse. Add the following to your plugin.yml:

loadbefore:
- zAuctionHouse

AuctionEconomy Interface

To create a custom economy, implement the AuctionEconomy interface:

public interface AuctionEconomy {

String getName();

String getDisplayName();

String getSymbol();

String getFormat();

default String format(String priceAsString, long amount) {
return getFormat().replace("%price%", priceAsString).replace("%s%", amount > 1 ? "s" : "");
}

CompletableFuture<BigDecimal> get(OfflinePlayer offlinePlayer);

CompletableFuture<Boolean> has(OfflinePlayer offlinePlayer, BigDecimal price);

default boolean hasSync(Player player, BigDecimal price) {
return has(player, price).join();
}

void deposit(OfflinePlayer offlinePlayer, BigDecimal value, String reason);

void withdraw(OfflinePlayer offlinePlayer, BigDecimal value, String reason);

String getDepositReason();

String getWithdrawReason();

@Nullable
String getPermission();

PriceFormat getPriceFormat();

boolean isAutoClaim();

boolean mustBeOnline();

BigDecimal getMaxPrice(ItemType itemType);

BigDecimal getMinPrice(ItemType itemType);

TaxConfiguration getTaxConfiguration();
}

Registering Your Economy

Register your economy using the AuctionLoadEconomyEvent. This event provides access to the EconomyManager which allows you to register your custom economy.

import fr.maxlego08.zauctionhouse.api.event.AuctionLoadEconomyEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class EconomyListener implements Listener {

private final MyEconomy myEconomy;

public EconomyListener(MyEconomy myEconomy) {
this.myEconomy = myEconomy;
}

@EventHandler
public void onLoadEconomy(AuctionLoadEconomyEvent event) {
boolean success = event.getEconomyManager().registerEconomy(this.myEconomy);
if (success) {
// Economy registered successfully
}
}
}

Example: Vault Economy

Here's a complete example integrating Vault as a custom economy:

import fr.maxlego08.zauctionhouse.api.economy.AuctionEconomy;
import fr.maxlego08.zauctionhouse.api.economy.PriceFormat;
import fr.maxlego08.zauctionhouse.api.economy.TaxConfiguration;
import fr.maxlego08.zauctionhouse.api.item.ItemType;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.OfflinePlayer;
import org.bukkit.plugin.RegisteredServiceProvider;

import java.math.BigDecimal;
import java.util.concurrent.CompletableFuture;

public class VaultEconomy implements AuctionEconomy {

private final Economy economy;

public VaultEconomy() {
RegisteredServiceProvider<Economy> provider =
Bukkit.getServicesManager().getRegistration(Economy.class);
this.economy = provider != null ? provider.getProvider() : null;
}

@Override
public String getName() {
return "vault";
}

@Override
public String getDisplayName() {
return "Money";
}

@Override
public String getSymbol() {
return "$";
}

@Override
public String getFormat() {
return "%price%$";
}

@Override
public CompletableFuture<BigDecimal> get(OfflinePlayer offlinePlayer) {
return CompletableFuture.completedFuture(
BigDecimal.valueOf(this.economy.getBalance(offlinePlayer))
);
}

@Override
public CompletableFuture<Boolean> has(OfflinePlayer offlinePlayer, BigDecimal price) {
return CompletableFuture.completedFuture(
this.economy.has(offlinePlayer, price.doubleValue())
);
}

@Override
public void deposit(OfflinePlayer offlinePlayer, BigDecimal value, String reason) {
this.economy.depositPlayer(offlinePlayer, value.doubleValue());
}

@Override
public void withdraw(OfflinePlayer offlinePlayer, BigDecimal value, String reason) {
this.economy.withdrawPlayer(offlinePlayer, value.doubleValue());
}

@Override
public String getDepositReason() {
return "zAuctionHouse sale";
}

@Override
public String getWithdrawReason() {
return "zAuctionHouse purchase";
}

@Override
public String getPermission() {
return null;
}

@Override
public PriceFormat getPriceFormat() {
return PriceFormat.FORMATTED;
}

@Override
public boolean isAutoClaim() {
return true;
}

@Override
public boolean mustBeOnline() {
return false;
}

@Override
public BigDecimal getMaxPrice(ItemType itemType) {
return BigDecimal.valueOf(1000000000);
}

@Override
public BigDecimal getMinPrice(ItemType itemType) {
return BigDecimal.ONE;
}

@Override
public TaxConfiguration getTaxConfiguration() {
return TaxConfiguration.empty();
}
}

Main Plugin Class

import org.bukkit.plugin.java.JavaPlugin;

public class MyPlugin extends JavaPlugin {

@Override
public void onEnable() {
VaultEconomy vaultEconomy = new VaultEconomy();
getServer().getPluginManager().registerEvents(
new EconomyListener(vaultEconomy),
this
);
}
}
Copyright © 2026 GroupeZ|Build #loading...|-