diff --git a/README.md b/README.md new file mode 100644 index 0000000..5330860 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# HamsterCurrency + +仓鼠经济:适用于 Minecraft 跨服支持的服务器多货币经济插件 + diff --git a/src/main/java/cn/hamster3/mc/plugin/currency/CurrencyPlugin.java b/src/main/java/cn/hamster3/mc/plugin/currency/CurrencyPlugin.java index 9d3a631..ada2086 100644 --- a/src/main/java/cn/hamster3/mc/plugin/currency/CurrencyPlugin.java +++ b/src/main/java/cn/hamster3/mc/plugin/currency/CurrencyPlugin.java @@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull; import java.sql.SQLException; import java.util.logging.Logger; +@SuppressWarnings("CallToPrintStackTrace") public class CurrencyPlugin extends JavaPlugin { public static final String BALL_CHANNEL = "HamsterCurrency"; @Getter @@ -65,7 +66,7 @@ public class CurrencyPlugin extends JavaPlugin { } } } else { - logger.warning("未找到 Vault 插件! 取消注册 Vault 经济系统"); + logger.info("未找到 Vault 插件! 取消注册 Vault 经济系统"); } if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { logger.info("检测到 PlaceholderAPI 已安装"); @@ -73,7 +74,7 @@ public class CurrencyPlugin extends JavaPlugin { logger.info("已挂载 PlaceholderAPI 变量"); } } else { - logger.warning("未检测到 PlaceholderAPI"); + logger.info("未检测到 PlaceholderAPI"); } long time = System.currentTimeMillis() - start; logger.info("仓鼠经济初始化完成,总计耗时 " + time + " ms"); diff --git a/src/main/java/cn/hamster3/mc/plugin/currency/api/CurrencyAPI.java b/src/main/java/cn/hamster3/mc/plugin/currency/api/CurrencyAPI.java index bfcc91a..af7040a 100644 --- a/src/main/java/cn/hamster3/mc/plugin/currency/api/CurrencyAPI.java +++ b/src/main/java/cn/hamster3/mc/plugin/currency/api/CurrencyAPI.java @@ -6,16 +6,18 @@ import cn.hamster3.mc.plugin.currency.core.CurrencyDataManager; import cn.hamster3.mc.plugin.currency.data.CurrencyType; import org.bukkit.Bukkit; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.concurrent.CompletableFuture; /** * 当 currencyID 为 PlayerPoints 且服务器安装了点券插件时,会自动更改为 PlayerPoints 接口 */ -@SuppressWarnings({"unused", "CallToPrintStackTrace"}) +@SuppressWarnings({"unused", "UnusedReturnValue"}) public final class CurrencyAPI { private CurrencyAPI() { } @@ -27,58 +29,79 @@ public final class CurrencyAPI { return CurrencyDataManager.getPlayerCurrency(uuid, currencyID); } - public static void setPlayerCurrency(UUID uuid, @NotNull String currencyID, double amount) { + public static boolean hasPlayerCurrency(UUID uuid, @NotNull String currencyID, double amount) { + return getPlayerCurrency(uuid, currencyID) >= amount; + } + + @NotNull + public static CompletableFuture setPlayerCurrency(@NotNull UUID uuid, @NotNull String currencyID, double amount) { if (currencyID.equals("PlayerPoints") && Bukkit.getPluginManager().isPluginEnabled("PlayerPoints")) { PointAPI.setPoint(uuid, (int) amount); - return; + return CompletableFuture.completedFuture(null); } + CompletableFuture future = new CompletableFuture<>(); CurrencyPlugin.async(() -> { try { CurrencyDataManager.setPlayerCurrency(uuid, currencyID, amount, true); + future.complete(null); } catch (SQLException e) { - e.printStackTrace(); + future.completeExceptionally(e); } }); + return future; } - public static void addPlayerCurrency(UUID uuid, String currencyID, double amount) { + @NotNull + public static CompletableFuture addPlayerCurrency(@NotNull UUID uuid, @NotNull String currencyID, double amount) { if (currencyID.equals("PlayerPoints") && Bukkit.getPluginManager().isPluginEnabled("PlayerPoints")) { PointAPI.givePoint(uuid, (int) amount); - return; + return CompletableFuture.completedFuture(null); } + CompletableFuture future = new CompletableFuture<>(); CurrencyPlugin.async(() -> { try { double currency = CurrencyDataManager.getPlayerCurrency(uuid, currencyID); currency += amount; CurrencyDataManager.setPlayerCurrency(uuid, currencyID, currency, true); + future.complete(null); } catch (SQLException e) { - e.printStackTrace(); + future.completeExceptionally(e); } }); + return future; } - public static void takePlayerCurrency(UUID uuid, String currencyID, double amount) { + @NotNull + public static CompletableFuture takePlayerCurrency(@NotNull UUID uuid, @NotNull String currencyID, double amount) { if (currencyID.equals("PlayerPoints") && Bukkit.getPluginManager().isPluginEnabled("PlayerPoints")) { PointAPI.takePoint(uuid, (int) amount); - return; + return CompletableFuture.completedFuture(null); } + CompletableFuture future = new CompletableFuture<>(); CurrencyPlugin.async(() -> { try { double currency = CurrencyDataManager.getPlayerCurrency(uuid, currencyID); currency -= amount; CurrencyDataManager.setPlayerCurrency(uuid, currencyID, currency, true); + future.complete(null); } catch (SQLException e) { - e.printStackTrace(); + future.completeExceptionally(e); } }); + return future; } - public static boolean hasPlayerCurrency(UUID uuid, String currencyID, double amount) { - return getPlayerCurrency(uuid, currencyID) >= amount; + @Nullable + public static CurrencyType getCurrencyType(@NotNull String id) { + return CurrencyDataManager.getCurrencyType(id); } - public List getAllCurrencyType() { + public static CurrencyType getVaultCurrencyType() { + return CurrencyDataManager.getVaultCurrencyType(); + } + + @NotNull + public static List getAllCurrencyType() { return new ArrayList<>(CurrencyDataManager.getCurrencyTypes()); } - -} +} \ No newline at end of file diff --git a/src/main/java/cn/hamster3/mc/plugin/currency/core/ConfigManager.java b/src/main/java/cn/hamster3/mc/plugin/currency/core/ConfigManager.java index be8cd20..66bfcee 100644 --- a/src/main/java/cn/hamster3/mc/plugin/currency/core/ConfigManager.java +++ b/src/main/java/cn/hamster3/mc/plugin/currency/core/ConfigManager.java @@ -8,9 +8,9 @@ public class ConfigManager { @Getter private static boolean enableVaultCommands; @Getter - private static String currencyNamePlural; + private static String vaultNamePlural; @Getter - private static String currencyNameSingular; + private static String vaultNameSingular; public static void init() { CurrencyPlugin plugin = CurrencyPlugin.getInstance(); @@ -20,8 +20,8 @@ public class ConfigManager { FileConfiguration pluginConfig = plugin.getConfig(); enableVaultCommands = pluginConfig.getBoolean("enable-vault-commands", true); - currencyNamePlural = pluginConfig.getString("vault-settings.currency-name-plural", "金币"); - currencyNameSingular = pluginConfig.getString("vault-settings.currency-name-singular", "金币"); + vaultNamePlural = pluginConfig.getString("vault-settings.currency-name-plural", "金币"); + vaultNameSingular = pluginConfig.getString("vault-settings.currency-name-singular", "金币"); } } diff --git a/src/main/java/cn/hamster3/mc/plugin/currency/core/CurrencyDataManager.java b/src/main/java/cn/hamster3/mc/plugin/currency/core/CurrencyDataManager.java index 8d725ee..3089ae7 100644 --- a/src/main/java/cn/hamster3/mc/plugin/currency/core/CurrencyDataManager.java +++ b/src/main/java/cn/hamster3/mc/plugin/currency/core/CurrencyDataManager.java @@ -119,7 +119,6 @@ public final class CurrencyDataManager { return CURRENCY_TYPES.get(id); } - @Nullable public static CurrencyType getVaultCurrencyType() { for (CurrencyType type : CURRENCY_TYPES.values()) { if (type.isVault()) { diff --git a/src/main/java/cn/hamster3/mc/plugin/currency/data/PlayerData.java b/src/main/java/cn/hamster3/mc/plugin/currency/data/PlayerData.java deleted file mode 100644 index 3416d42..0000000 --- a/src/main/java/cn/hamster3/mc/plugin/currency/data/PlayerData.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.hamster3.mc.plugin.currency.data; - -import lombok.Data; -import org.jetbrains.annotations.NotNull; - -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -@Data -public class PlayerData { - @NotNull - private UUID uuid; - @NotNull - private String playerName; - @NotNull - private Map currency; - - public PlayerData(@NotNull UUID uuid, @NotNull String playerName) { - this.uuid = uuid; - this.playerName = playerName; - currency = new ConcurrentHashMap<>(); - } - - public PlayerData(@NotNull UUID uuid, @NotNull String playerName, @NotNull Map currency) { - this.uuid = uuid; - this.playerName = playerName; - this.currency = currency; - } -} diff --git a/src/main/java/cn/hamster3/mc/plugin/currency/hook/VaultEconomyHook.java b/src/main/java/cn/hamster3/mc/plugin/currency/hook/VaultEconomyHook.java index ddb8dab..8542697 100644 --- a/src/main/java/cn/hamster3/mc/plugin/currency/hook/VaultEconomyHook.java +++ b/src/main/java/cn/hamster3/mc/plugin/currency/hook/VaultEconomyHook.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; +@SuppressWarnings("CallToPrintStackTrace") public class VaultEconomyHook extends AbstractEconomy { private static final EconomyResponse NOT_IMPLEMENTED_RESPONSE = new EconomyResponse( @@ -52,12 +53,12 @@ public class VaultEconomyHook extends AbstractEconomy { @Override public String currencyNamePlural() { - return ConfigManager.getCurrencyNamePlural(); + return ConfigManager.getVaultNamePlural(); } @Override public String currencyNameSingular() { - return ConfigManager.getCurrencyNameSingular(); + return ConfigManager.getVaultNameSingular(); } @Override diff --git a/src/main/java/cn/hamster3/mc/plugin/currency/listener/CurrencyListener.java b/src/main/java/cn/hamster3/mc/plugin/currency/listener/CurrencyListener.java index ba08892..ca6e9c6 100644 --- a/src/main/java/cn/hamster3/mc/plugin/currency/listener/CurrencyListener.java +++ b/src/main/java/cn/hamster3/mc/plugin/currency/listener/CurrencyListener.java @@ -10,6 +10,7 @@ import org.bukkit.event.player.PlayerLoginEvent; import java.sql.SQLException; import java.util.UUID; +@SuppressWarnings("CallToPrintStackTrace") public class CurrencyListener implements Listener { public static final CurrencyListener INSTANCE = new CurrencyListener(); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 3fa7179..80130d0 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,6 +1,9 @@ # 是否启用 vault 默认的指令 enable-vault-commands: true +# VaultAPI 相关配置 vault-settings: - currency-name-plural: 金币 + # Vault 显示货币名称(单数) currency-name-singular: 金币 + # Vault 显示货币名称(复数) + currency-name-plural: 金币 diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index fdf8da7..0378f6e 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -22,12 +22,15 @@ commands: aliases: [ hcurrency, currency ] balance: aliases: [ bal, seemoney ] - balanceTop: - aliases: [ baltop ] - payMoney: - aliases: [ pay ] + permission: hamster.currency.see + balance-top: + aliases: [ balancetop, baltop ] + permission: hamster.currency.top + pay-money: + aliases: [ paymoney, pay ] economy: aliases: [ eco, money ] + permission: hamster.currency.see permissions: hamster.currency.admin: