feat: CraftBank Folia 1.21.8 经济与银行核心插件初始实现
实现完整的现金/钱包、银行卡、支票、活期储蓄与定期存款系统, 实现并以 Highest 优先级注册 Vault Economy 接口,接入 PlaceholderAPI。 全程遵循 Folia 调度模型(AsyncScheduler / 实体区域线程), 数据缓存线程安全,支票兑现与定期领取做防刷处理。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,288 @@
|
||||
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<String> 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 共享银行账户");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user