package com.craftbank.economy; import com.craftbank.CraftBank; import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.economy.EconomyResponse; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import java.util.List; import java.util.UUID; /** * Vault {@link Economy} 接口实现。CraftBank 以此接管整个服务器的经济提供者 * 角色 (替代 XConomy)。所有操作均委托给线程安全的 {@link EconomyManager}。 */ public class VaultEconomyProvider implements Economy { private final CraftBank plugin; private final EconomyManager economy; public VaultEconomyProvider(CraftBank plugin) { this.plugin = plugin; this.economy = plugin.getEconomyManager(); } @Override public boolean isEnabled() { return plugin.isEnabled(); } @Override public String getName() { return "CraftBank"; } @Override public boolean hasBankSupport() { // 这里的 "bank" 指 Vault 的多人共享账户概念, CraftBank 不提供。 return false; } @Override public int fractionalDigits() { return plugin.getConfig().getInt("Economy_Settings.fractional_digits", 2); } @Override public String format(double amount) { return economy.format(amount); } @Override public String currencyNamePlural() { return plugin.getConfig().getString("Economy_Settings.currency_name_plural", ""); } @Override public String currencyNameSingular() { return plugin.getConfig().getString("Economy_Settings.currency_name_singular", ""); } // ---- 账户存在性 ---- @Override public boolean hasAccount(String playerName) { return playerName != null; } @Override public boolean hasAccount(OfflinePlayer player) { return player != null; } @Override public boolean hasAccount(String playerName, String worldName) { return hasAccount(playerName); } @Override public boolean hasAccount(OfflinePlayer player, String worldName) { return hasAccount(player); } @Override public boolean createPlayerAccount(OfflinePlayer player) { if (player == null) { return false; } economy.loadBlocking(player.getUniqueId(), player.getName(), true); return true; } @Override public boolean createPlayerAccount(OfflinePlayer player, String worldName) { return createPlayerAccount(player); } @Override public boolean createPlayerAccount(String playerName) { return false; } @Override public boolean createPlayerAccount(String playerName, String worldName) { return false; } // ---- 余额查询 ---- @Override public double getBalance(OfflinePlayer player) { return economy.getCash(player.getUniqueId()); } @Override @SuppressWarnings("deprecation") public double getBalance(String playerName) { OfflinePlayer player = plugin.getServer().getOfflinePlayer(playerName); return getBalance(player); } @Override public double getBalance(String playerName, String world) { return getBalance(playerName); } @Override public double getBalance(OfflinePlayer player, String world) { return getBalance(player); } @Override public boolean has(OfflinePlayer player, double amount) { return economy.has(player.getUniqueId(), amount); } @Override @SuppressWarnings("deprecation") public boolean has(String playerName, double amount) { return has(plugin.getServer().getOfflinePlayer(playerName), amount); } @Override public boolean has(String playerName, String worldName, double amount) { return has(playerName, amount); } @Override public boolean has(OfflinePlayer player, String worldName, double amount) { return has(player, amount); } // ---- 扣款 ---- @Override public EconomyResponse withdrawPlayer(OfflinePlayer player, double amount) { if (amount < 0) { return fail("无法扣除一个负数金额"); } UUID uuid = player.getUniqueId(); if (economy.withdraw(uuid, amount)) { return ok(amount, economy.getCash(uuid)); } return fail("余额不足"); } @Override @SuppressWarnings("deprecation") public EconomyResponse withdrawPlayer(String playerName, double amount) { return withdrawPlayer(plugin.getServer().getOfflinePlayer(playerName), amount); } @Override public EconomyResponse withdrawPlayer(String playerName, String worldName, double amount) { return withdrawPlayer(playerName, amount); } @Override public EconomyResponse withdrawPlayer(OfflinePlayer player, String worldName, double amount) { return withdrawPlayer(player, amount); } // ---- 存款 ---- @Override public EconomyResponse depositPlayer(OfflinePlayer player, double amount) { if (amount < 0) { return fail("无法存入一个负数金额"); } UUID uuid = player.getUniqueId(); if (economy.deposit(uuid, amount)) { return ok(amount, economy.getCash(uuid)); } return fail("账户不存在"); } @Override @SuppressWarnings("deprecation") public EconomyResponse depositPlayer(String playerName, double amount) { return depositPlayer(plugin.getServer().getOfflinePlayer(playerName), amount); } @Override public EconomyResponse depositPlayer(String playerName, String worldName, double amount) { return depositPlayer(playerName, amount); } @Override public EconomyResponse depositPlayer(OfflinePlayer player, String worldName, double amount) { return depositPlayer(player, amount); } // ---- 不支持的 Vault 银行账户 (多人共享) ---- @Override public EconomyResponse createBank(String name, String player) { return unsupported(); } @Override public EconomyResponse createBank(String name, OfflinePlayer player) { return unsupported(); } @Override public EconomyResponse deleteBank(String name) { return unsupported(); } @Override public EconomyResponse bankBalance(String name) { return unsupported(); } @Override public EconomyResponse bankHas(String name, double amount) { return unsupported(); } @Override public EconomyResponse bankWithdraw(String name, double amount) { return unsupported(); } @Override public EconomyResponse bankDeposit(String name, double amount) { return unsupported(); } @Override public EconomyResponse isBankOwner(String name, String playerName) { return unsupported(); } @Override public EconomyResponse isBankOwner(String name, OfflinePlayer player) { return unsupported(); } @Override public EconomyResponse isBankMember(String name, String playerName) { return unsupported(); } @Override public EconomyResponse isBankMember(String name, OfflinePlayer player) { return unsupported(); } @Override public List getBanks() { return List.of(); } // ---- 辅助 ---- private EconomyResponse ok(double amount, double balance) { return new EconomyResponse(amount, balance, EconomyResponse.ResponseType.SUCCESS, null); } private EconomyResponse fail(String msg) { return new EconomyResponse(0, 0, EconomyResponse.ResponseType.FAILURE, msg); } private EconomyResponse unsupported() { return new EconomyResponse(0, 0, EconomyResponse.ResponseType.NOT_IMPLEMENTED, "CraftBank 不支持 Vault 共享银行账户"); } }