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.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");

View File

@@ -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<Void> 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<Void> 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<Void> 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<Void> 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<Void> 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<Void> 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<CurrencyType> getAllCurrencyType() {
public static CurrencyType getVaultCurrencyType() {
return CurrencyDataManager.getVaultCurrencyType();
}
@NotNull
public static List<CurrencyType> getAllCurrencyType() {
return new ArrayList<>(CurrencyDataManager.getCurrencyTypes());
}
}

View File

@@ -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", "金币");
}
}

View File

@@ -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()) {

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.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

View File

@@ -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();

View File

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

View File

@@ -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: