perf: 优化代码

This commit is contained in:
2024-01-20 22:50:51 +08:00
parent 29c6b1bf2f
commit 619f346378
10 changed files with 64 additions and 60 deletions

4
README.md Normal file
View File

@@ -0,0 +1,4 @@
# HamsterCurrency
仓鼠经济:适用于 Minecraft 跨服支持的服务器多货币经济插件

View File

@@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.logging.Logger; import java.util.logging.Logger;
@SuppressWarnings("CallToPrintStackTrace")
public class CurrencyPlugin extends JavaPlugin { public class CurrencyPlugin extends JavaPlugin {
public static final String BALL_CHANNEL = "HamsterCurrency"; public static final String BALL_CHANNEL = "HamsterCurrency";
@Getter @Getter
@@ -65,7 +66,7 @@ public class CurrencyPlugin extends JavaPlugin {
} }
} }
} else { } else {
logger.warning("未找到 Vault 插件! 取消注册 Vault 经济系统"); logger.info("未找到 Vault 插件! 取消注册 Vault 经济系统");
} }
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
logger.info("检测到 PlaceholderAPI 已安装"); logger.info("检测到 PlaceholderAPI 已安装");
@@ -73,7 +74,7 @@ public class CurrencyPlugin extends JavaPlugin {
logger.info("已挂载 PlaceholderAPI 变量"); logger.info("已挂载 PlaceholderAPI 变量");
} }
} else { } else {
logger.warning("未检测到 PlaceholderAPI"); logger.info("未检测到 PlaceholderAPI");
} }
long time = System.currentTimeMillis() - start; long time = System.currentTimeMillis() - start;
logger.info("仓鼠经济初始化完成,总计耗时 " + time + " ms"); logger.info("仓鼠经济初始化完成,总计耗时 " + time + " ms");

View File

@@ -6,16 +6,18 @@ import cn.hamster3.mc.plugin.currency.core.CurrencyDataManager;
import cn.hamster3.mc.plugin.currency.data.CurrencyType; import cn.hamster3.mc.plugin.currency.data.CurrencyType;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletableFuture;
/** /**
* 当 currencyID 为 PlayerPoints 且服务器安装了点券插件时,会自动更改为 PlayerPoints 接口 * 当 currencyID 为 PlayerPoints 且服务器安装了点券插件时,会自动更改为 PlayerPoints 接口
*/ */
@SuppressWarnings({"unused", "CallToPrintStackTrace"}) @SuppressWarnings({"unused", "UnusedReturnValue"})
public final class CurrencyAPI { public final class CurrencyAPI {
private CurrencyAPI() { private CurrencyAPI() {
} }
@@ -27,58 +29,79 @@ public final class CurrencyAPI {
return CurrencyDataManager.getPlayerCurrency(uuid, currencyID); 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<Void> setPlayerCurrency(@NotNull UUID uuid, @NotNull String currencyID, double amount) {
if (currencyID.equals("PlayerPoints") && Bukkit.getPluginManager().isPluginEnabled("PlayerPoints")) { if (currencyID.equals("PlayerPoints") && Bukkit.getPluginManager().isPluginEnabled("PlayerPoints")) {
PointAPI.setPoint(uuid, (int) amount); PointAPI.setPoint(uuid, (int) amount);
return; return CompletableFuture.completedFuture(null);
} }
CompletableFuture<Void> future = new CompletableFuture<>();
CurrencyPlugin.async(() -> { CurrencyPlugin.async(() -> {
try { try {
CurrencyDataManager.setPlayerCurrency(uuid, currencyID, amount, true); CurrencyDataManager.setPlayerCurrency(uuid, currencyID, amount, true);
future.complete(null);
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); future.completeExceptionally(e);
} }
}); });
return future;
} }
public static void addPlayerCurrency(UUID uuid, String currencyID, double amount) { @NotNull
public static CompletableFuture<Void> addPlayerCurrency(@NotNull UUID uuid, @NotNull String currencyID, double amount) {
if (currencyID.equals("PlayerPoints") && Bukkit.getPluginManager().isPluginEnabled("PlayerPoints")) { if (currencyID.equals("PlayerPoints") && Bukkit.getPluginManager().isPluginEnabled("PlayerPoints")) {
PointAPI.givePoint(uuid, (int) amount); PointAPI.givePoint(uuid, (int) amount);
return; return CompletableFuture.completedFuture(null);
} }
CompletableFuture<Void> future = new CompletableFuture<>();
CurrencyPlugin.async(() -> { CurrencyPlugin.async(() -> {
try { try {
double currency = CurrencyDataManager.getPlayerCurrency(uuid, currencyID); double currency = CurrencyDataManager.getPlayerCurrency(uuid, currencyID);
currency += amount; currency += amount;
CurrencyDataManager.setPlayerCurrency(uuid, currencyID, currency, true); CurrencyDataManager.setPlayerCurrency(uuid, currencyID, currency, true);
future.complete(null);
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); future.completeExceptionally(e);
} }
}); });
return future;
} }
public static void takePlayerCurrency(UUID uuid, String currencyID, double amount) { @NotNull
public static CompletableFuture<Void> takePlayerCurrency(@NotNull UUID uuid, @NotNull String currencyID, double amount) {
if (currencyID.equals("PlayerPoints") && Bukkit.getPluginManager().isPluginEnabled("PlayerPoints")) { if (currencyID.equals("PlayerPoints") && Bukkit.getPluginManager().isPluginEnabled("PlayerPoints")) {
PointAPI.takePoint(uuid, (int) amount); PointAPI.takePoint(uuid, (int) amount);
return; return CompletableFuture.completedFuture(null);
} }
CompletableFuture<Void> future = new CompletableFuture<>();
CurrencyPlugin.async(() -> { CurrencyPlugin.async(() -> {
try { try {
double currency = CurrencyDataManager.getPlayerCurrency(uuid, currencyID); double currency = CurrencyDataManager.getPlayerCurrency(uuid, currencyID);
currency -= amount; currency -= amount;
CurrencyDataManager.setPlayerCurrency(uuid, currencyID, currency, true); CurrencyDataManager.setPlayerCurrency(uuid, currencyID, currency, true);
future.complete(null);
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); future.completeExceptionally(e);
} }
}); });
return future;
} }
public static boolean hasPlayerCurrency(UUID uuid, String currencyID, double amount) { @Nullable
return getPlayerCurrency(uuid, currencyID) >= amount; public static CurrencyType getCurrencyType(@NotNull String id) {
return CurrencyDataManager.getCurrencyType(id);
} }
public List<CurrencyType> getAllCurrencyType() { public static CurrencyType getVaultCurrencyType() {
return CurrencyDataManager.getVaultCurrencyType();
}
@NotNull
public static List<CurrencyType> getAllCurrencyType() {
return new ArrayList<>(CurrencyDataManager.getCurrencyTypes()); return new ArrayList<>(CurrencyDataManager.getCurrencyTypes());
} }
}
}

View File

@@ -8,9 +8,9 @@ public class ConfigManager {
@Getter @Getter
private static boolean enableVaultCommands; private static boolean enableVaultCommands;
@Getter @Getter
private static String currencyNamePlural; private static String vaultNamePlural;
@Getter @Getter
private static String currencyNameSingular; private static String vaultNameSingular;
public static void init() { public static void init() {
CurrencyPlugin plugin = CurrencyPlugin.getInstance(); CurrencyPlugin plugin = CurrencyPlugin.getInstance();
@@ -20,8 +20,8 @@ public class ConfigManager {
FileConfiguration pluginConfig = plugin.getConfig(); FileConfiguration pluginConfig = plugin.getConfig();
enableVaultCommands = pluginConfig.getBoolean("enable-vault-commands", true); enableVaultCommands = pluginConfig.getBoolean("enable-vault-commands", true);
currencyNamePlural = pluginConfig.getString("vault-settings.currency-name-plural", "金币"); vaultNamePlural = pluginConfig.getString("vault-settings.currency-name-plural", "金币");
currencyNameSingular = pluginConfig.getString("vault-settings.currency-name-singular", "金币"); vaultNameSingular = pluginConfig.getString("vault-settings.currency-name-singular", "金币");
} }
} }

View File

@@ -119,7 +119,6 @@ public final class CurrencyDataManager {
return CURRENCY_TYPES.get(id); return CURRENCY_TYPES.get(id);
} }
@Nullable
public static CurrencyType getVaultCurrencyType() { public static CurrencyType getVaultCurrencyType() {
for (CurrencyType type : CURRENCY_TYPES.values()) { for (CurrencyType type : CURRENCY_TYPES.values()) {
if (type.isVault()) { if (type.isVault()) {

View File

@@ -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<String , Double> 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<String, Double> currency) {
this.uuid = uuid;
this.playerName = playerName;
this.currency = currency;
}
}

View File

@@ -15,6 +15,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@SuppressWarnings("CallToPrintStackTrace")
public class VaultEconomyHook extends AbstractEconomy { public class VaultEconomyHook extends AbstractEconomy {
private static final EconomyResponse NOT_IMPLEMENTED_RESPONSE = private static final EconomyResponse NOT_IMPLEMENTED_RESPONSE =
new EconomyResponse( new EconomyResponse(
@@ -52,12 +53,12 @@ public class VaultEconomyHook extends AbstractEconomy {
@Override @Override
public String currencyNamePlural() { public String currencyNamePlural() {
return ConfigManager.getCurrencyNamePlural(); return ConfigManager.getVaultNamePlural();
} }
@Override @Override
public String currencyNameSingular() { public String currencyNameSingular() {
return ConfigManager.getCurrencyNameSingular(); return ConfigManager.getVaultNameSingular();
} }
@Override @Override

View File

@@ -10,6 +10,7 @@ import org.bukkit.event.player.PlayerLoginEvent;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.UUID; import java.util.UUID;
@SuppressWarnings("CallToPrintStackTrace")
public class CurrencyListener implements Listener { public class CurrencyListener implements Listener {
public static final CurrencyListener INSTANCE = new CurrencyListener(); public static final CurrencyListener INSTANCE = new CurrencyListener();

View File

@@ -1,6 +1,9 @@
# 是否启用 vault 默认的指令 # 是否启用 vault 默认的指令
enable-vault-commands: true enable-vault-commands: true
# VaultAPI 相关配置
vault-settings: vault-settings:
currency-name-plural: 金币 # Vault 显示货币名称(单数)
currency-name-singular: 金币 currency-name-singular: 金币
# Vault 显示货币名称(复数)
currency-name-plural: 金币

View File

@@ -22,12 +22,15 @@ commands:
aliases: [ hcurrency, currency ] aliases: [ hcurrency, currency ]
balance: balance:
aliases: [ bal, seemoney ] aliases: [ bal, seemoney ]
balanceTop: permission: hamster.currency.see
aliases: [ baltop ] balance-top:
payMoney: aliases: [ balancetop, baltop ]
aliases: [ pay ] permission: hamster.currency.top
pay-money:
aliases: [ paymoney, pay ]
economy: economy:
aliases: [ eco, money ] aliases: [ eco, money ]
permission: hamster.currency.see
permissions: permissions:
hamster.currency.admin: hamster.currency.admin: