From 4d2919cfb3fc4d7ab1026078b0c817989e18e02b Mon Sep 17 00:00:00 2001 From: Kaminy <1713483284@qq.com> Date: Wed, 12 Nov 2025 22:56:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81=E7=BB=93?= =?UTF-8?q?=E6=9E=84=20=E6=B7=BB=E5=8A=A0=E4=BA=86api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 4 +- .../API/PlaceholderPlusApi.java | 34 +++++++++++++ .../Command/PlaceholderPlusCommand.java | 13 +++-- .../placeholderplus/Object/PlayerData.java | 2 +- .../placeholderplus/PlaceholderPlus.java | 51 +++++++++++++++++-- .../placeholderplus/ThisPlaceholder.java | 5 +- .../{API => Util}/MathAPI.java | 2 +- .../{API => Util}/PlayerAPI.java | 2 +- .../{API => Util}/PluginAPI.java | 2 +- src/main/resources/plugin.yml | 1 + 10 files changed, 101 insertions(+), 15 deletions(-) create mode 100644 src/main/java/org/verdurae/placeholderplus/API/PlaceholderPlusApi.java rename src/main/java/org/verdurae/placeholderplus/{API => Util}/MathAPI.java (93%) rename src/main/java/org/verdurae/placeholderplus/{API => Util}/PlayerAPI.java (95%) rename src/main/java/org/verdurae/placeholderplus/{API => Util}/PluginAPI.java (99%) diff --git a/build.gradle b/build.gradle index c56f700..82be3a4 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ plugins { } group = 'org.verdurae' -version = '1.1-SNAPSHOT' +version = '1.1.2-SNAPSHOT' repositories { mavenCentral() @@ -19,7 +19,7 @@ repositories { } dependencies { - compileOnly "org.spigotmc:spigot-api:1.12.2-R0.1-SNAPSHOT" + compileOnly "org.spigotmc:spigot-api:1.20.1-R0.1-SNAPSHOT" implementation 'me.clip:placeholderapi:2.+' } diff --git a/src/main/java/org/verdurae/placeholderplus/API/PlaceholderPlusApi.java b/src/main/java/org/verdurae/placeholderplus/API/PlaceholderPlusApi.java new file mode 100644 index 0000000..7745c1e --- /dev/null +++ b/src/main/java/org/verdurae/placeholderplus/API/PlaceholderPlusApi.java @@ -0,0 +1,34 @@ +package org.verdurae.placeholderplus.API; + +import org.verdurae.placeholderplus.Util.PlayerAPI; + +/** + * @author Kaminy + * @date 2025/11/12 22:39 + * @since 1.0 + */ +public class PlaceholderPlusApi { + /** + * 获取玩家占位符对应的数据值 + * + * @param player 玩家名 + * @param placeholder 占位符名称,格式为"xxx_yyy",不需要带% + * @return 对应的玩家插件变量值 + */ + public static String getPlaceholder(String player, String placeholder) { + String[] perms = placeholder.split("_"); + return PlayerAPI.getPlayerData(player).getString(perms[0] + "." + perms[1]); + } + + /** + * 设置玩家数据中的占位符 + * + * @param player 玩家名 + * @param placeholder 占位符名称,格式为"xxx_yyy",不需要带% + * @param value 要设置的值 + */ + public static void setPlaceholder(String player, String placeholder, String value) { + String[] perms = placeholder.split("_"); + PlayerAPI.getPlayerData(player).set(perms[0] + "." + perms[1], value); + } +} diff --git a/src/main/java/org/verdurae/placeholderplus/Command/PlaceholderPlusCommand.java b/src/main/java/org/verdurae/placeholderplus/Command/PlaceholderPlusCommand.java index 5b33331..1514fe6 100644 --- a/src/main/java/org/verdurae/placeholderplus/Command/PlaceholderPlusCommand.java +++ b/src/main/java/org/verdurae/placeholderplus/Command/PlaceholderPlusCommand.java @@ -3,9 +3,9 @@ package org.verdurae.placeholderplus.Command; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; -import org.verdurae.placeholderplus.API.MathAPI; -import org.verdurae.placeholderplus.API.PlayerAPI; -import org.verdurae.placeholderplus.API.PluginAPI; +import org.verdurae.placeholderplus.Util.MathAPI; +import org.verdurae.placeholderplus.Util.PlayerAPI; +import org.verdurae.placeholderplus.Util.PluginAPI; import org.verdurae.placeholderplus.PlaceholderPlus; import java.util.concurrent.ConcurrentHashMap; @@ -34,6 +34,13 @@ public class PlaceholderPlusCommand implements CommandExecutor { } else { String holdername = args[2]; String[] perms = holdername.split("_"); + if (perms.length < 1) { + sender.sendMessage("请输入正确的变量名"); + return false; + } + if (perms.length < 2) { + perms = new String[]{"normal", perms[0]}; + } switch (args[1]) { case "set": PlayerAPI.getPlayerData(args[0]).set(perms[0] + "." + perms[1], args[3]); diff --git a/src/main/java/org/verdurae/placeholderplus/Object/PlayerData.java b/src/main/java/org/verdurae/placeholderplus/Object/PlayerData.java index f9c4446..98c31c8 100644 --- a/src/main/java/org/verdurae/placeholderplus/Object/PlayerData.java +++ b/src/main/java/org/verdurae/placeholderplus/Object/PlayerData.java @@ -2,7 +2,7 @@ package org.verdurae.placeholderplus.Object; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import org.verdurae.placeholderplus.API.PlayerAPI; +import org.verdurae.placeholderplus.Util.PlayerAPI; import org.verdurae.placeholderplus.PlaceholderPlus; import java.io.IOException; diff --git a/src/main/java/org/verdurae/placeholderplus/PlaceholderPlus.java b/src/main/java/org/verdurae/placeholderplus/PlaceholderPlus.java index 610b781..0c47c86 100644 --- a/src/main/java/org/verdurae/placeholderplus/PlaceholderPlus.java +++ b/src/main/java/org/verdurae/placeholderplus/PlaceholderPlus.java @@ -6,12 +6,19 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitTask; -import org.verdurae.placeholderplus.API.PlayerAPI; -import org.verdurae.placeholderplus.API.PluginAPI; +import org.verdurae.placeholderplus.Util.PlayerAPI; +import org.verdurae.placeholderplus.Util.PluginAPI; import org.verdurae.placeholderplus.Command.PlaceholderPlusCommand; import org.verdurae.placeholderplus.Object.PlayerData; import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; import java.util.ArrayList; import java.util.logging.Logger; @@ -25,6 +32,9 @@ public final class PlaceholderPlus extends JavaPlugin { public static boolean autosave; public static BukkitTask timer; public static int timeCount = 0; + private static final String DEPENDENCY_URL = "https://repo1.maven.org/maven2/org/openjdk/nashorn/nashorn-core/15.2/nashorn-core-15.2.jar"; + private static final File LOCAL_JAR = new File("plugins/PlaceholderPlus/lib/nashorn-core.jar"); + @Override public void onLoad() { @@ -40,6 +50,8 @@ public final class PlaceholderPlus extends JavaPlugin { logger.warning("你的运行Java中没有JS引擎,无法使用JS变量功能噢"); logger.warning("解决办法:安装一个带有nashornJs引擎的插件或模组/使用Java15-的版本/催更我内置一个JS引擎"); logger.warning("状态决定类:jdk.nashorn.api.scripting.NashornScriptEngine"); + logger.warning("准备开始自动下载nashorn...."); + loadDependencyIfMissing(); } saveDefaultConfig(); config = getConfig(); @@ -67,7 +79,6 @@ public final class PlaceholderPlus extends JavaPlugin { public static void newTimer() { timer = Bukkit.getScheduler().runTaskTimerAsynchronously(PlaceholderPlus.instance, () -> { timeCount++; - System.out.println(timeCount); if (PlaceholderPlus.config.getBoolean("Task.SaveTask.enable") && timeCount % PlaceholderPlus.config.getInt("Task.SaveTask.period") == 0) { logger.info("正在自动保存数据"); for (PlayerData playerData : PlayerAPI.playerData.values()) { @@ -76,8 +87,6 @@ public final class PlaceholderPlus extends JavaPlugin { } ConfigurationSection updates = PlaceholderPlus.config.getConfigurationSection("Placeholders.update"); for (String update : updates.getKeys(false)) { - System.out.println(update); - System.out.println(PlaceholderPlus.config.getInt("Placeholders.update." + update + ".period")); if (timeCount % PlaceholderPlus.config.getInt("Placeholders.update." + update + ".period") == 0) { for (PlayerData playerData : PlayerAPI.playerData.values()) { if (playerData.data.getInt("update." + update) < PlaceholderPlus.config.getInt("Placeholders.update." + update + ".max")) { @@ -89,4 +98,36 @@ public final class PlaceholderPlus extends JavaPlugin { } }, 1, 20); } + + public static void loadDependencyIfMissing() { + if (!LOCAL_JAR.exists()) { + LOCAL_JAR.getParentFile().mkdirs(); + downloadFile(DEPENDENCY_URL, LOCAL_JAR); + } + addJarToClasspath(LOCAL_JAR.getAbsolutePath()); + } + + private static void downloadFile(String urlStr, File destination) { + try (InputStream in = new URL(urlStr).openStream()) { + ReadableByteChannel rbc = Channels.newChannel(in); + try (FileOutputStream fos = new FileOutputStream(destination)) { + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static void addJarToClasspath(String jarPath) { + try { + URL url = new File(jarPath).toURI().toURL(); + URLClassLoader loader = (URLClassLoader) ClassLoader.getSystemClassLoader(); + Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); + method.setAccessible(true); + method.invoke(loader, url); + System.out.println("成功将依赖添加到类路径: " + jarPath); + } catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/org/verdurae/placeholderplus/ThisPlaceholder.java b/src/main/java/org/verdurae/placeholderplus/ThisPlaceholder.java index 81cc427..88189b4 100644 --- a/src/main/java/org/verdurae/placeholderplus/ThisPlaceholder.java +++ b/src/main/java/org/verdurae/placeholderplus/ThisPlaceholder.java @@ -4,12 +4,15 @@ import me.clip.placeholderapi.expansion.PlaceholderExpansion; import org.bukkit.OfflinePlayer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.verdurae.placeholderplus.API.PlayerAPI; +import org.verdurae.placeholderplus.Util.PlayerAPI; public class ThisPlaceholder extends PlaceholderExpansion { @Override public @Nullable("null") String onRequest(OfflinePlayer player, @NotNull String param) { String[] params = param.split("_"); + if (params.length < 2) { + params = new String[]{"normal", params[0]}; + } if (params[0].equals("normal")) { String a = PlayerAPI.getPlayerData(player.getName()).getString("normal." + params[1]); return (a == null) ? PlaceholderPlus.config.getString("Placeholders.normal." + params[1]) : a; diff --git a/src/main/java/org/verdurae/placeholderplus/API/MathAPI.java b/src/main/java/org/verdurae/placeholderplus/Util/MathAPI.java similarity index 93% rename from src/main/java/org/verdurae/placeholderplus/API/MathAPI.java rename to src/main/java/org/verdurae/placeholderplus/Util/MathAPI.java index d4daaa3..75a4b31 100644 --- a/src/main/java/org/verdurae/placeholderplus/API/MathAPI.java +++ b/src/main/java/org/verdurae/placeholderplus/Util/MathAPI.java @@ -1,4 +1,4 @@ -package org.verdurae.placeholderplus.API; +package org.verdurae.placeholderplus.Util; public class MathAPI { public static Number calculate(T number, String formula) { diff --git a/src/main/java/org/verdurae/placeholderplus/API/PlayerAPI.java b/src/main/java/org/verdurae/placeholderplus/Util/PlayerAPI.java similarity index 95% rename from src/main/java/org/verdurae/placeholderplus/API/PlayerAPI.java rename to src/main/java/org/verdurae/placeholderplus/Util/PlayerAPI.java index 4bc1b38..70726ad 100644 --- a/src/main/java/org/verdurae/placeholderplus/API/PlayerAPI.java +++ b/src/main/java/org/verdurae/placeholderplus/Util/PlayerAPI.java @@ -1,4 +1,4 @@ -package org.verdurae.placeholderplus.API; +package org.verdurae.placeholderplus.Util; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; diff --git a/src/main/java/org/verdurae/placeholderplus/API/PluginAPI.java b/src/main/java/org/verdurae/placeholderplus/Util/PluginAPI.java similarity index 99% rename from src/main/java/org/verdurae/placeholderplus/API/PluginAPI.java rename to src/main/java/org/verdurae/placeholderplus/Util/PluginAPI.java index cee2564..fe181f6 100644 --- a/src/main/java/org/verdurae/placeholderplus/API/PluginAPI.java +++ b/src/main/java/org/verdurae/placeholderplus/Util/PluginAPI.java @@ -1,4 +1,4 @@ -package org.verdurae.placeholderplus.API; +package org.verdurae.placeholderplus.Util; import jdk.nashorn.api.scripting.NashornScriptEngineFactory; import me.clip.placeholderapi.expansion.PlaceholderExpansion; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 20a574c..b259dfb 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,6 @@ name: PlaceholderPlus version: '${version}' +api-version: 1.13 main: org.verdurae.placeholderplus.PlaceholderPlus author: Kaminy depend: