diff --git a/build.gradle b/build.gradle index c0650d9..aba4dc2 100644 --- a/build.gradle +++ b/build.gradle @@ -40,7 +40,7 @@ subprojects { } tasks.withType(JavaCompile) { - options.encoding = 'UTF-8' + options.setEncoding("UTF-8") } tasks.withType(Jar) { @@ -50,7 +50,7 @@ subprojects { javadoc { options.quiet() - options.encoding = 'UTF-8' + options.setEncoding("UTF-8") options.jFlags("-Dfile.encoding=utf8") options.addStringOption('Xdoclint:none', '-quiet') options.links = [ diff --git a/hamster-ball-bukkit/build.gradle b/hamster-ball-bukkit/build.gradle index e7c3c58..af46e2c 100644 --- a/hamster-ball-bukkit/build.gradle +++ b/hamster-ball-bukkit/build.gradle @@ -8,6 +8,7 @@ dependencies { compileOnly 'org.spigotmc:spigot-api:1.12.2-R0.1-SNAPSHOT' compileOnly "cn.hamster3.mc.plugin.core:bukkit:${hamster_core_version}" + apiShade("me.clip:placeholderapi:2.11.2") { transitive = false } } processResources { diff --git a/hamster-ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/HamsterBallPlugin.java b/hamster-ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/HamsterBallPlugin.java index 406daf3..15aacbc 100644 --- a/hamster-ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/HamsterBallPlugin.java +++ b/hamster-ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/HamsterBallPlugin.java @@ -1,6 +1,7 @@ package cn.hamster3.mc.plugin.ball.bukkit; import cn.hamster3.mc.plugin.ball.bukkit.api.BallBukkitAPI; +import cn.hamster3.mc.plugin.ball.bukkit.hook.PlaceholderHook; import cn.hamster3.mc.plugin.ball.bukkit.listener.BallBukkitListener; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; @@ -39,6 +40,14 @@ public class HamsterBallPlugin extends JavaPlugin { Bukkit.getPluginManager().registerEvents(BallBukkitListener.INSTANCE, this); logger.info("已注册 BallBukkitListener."); logger.info("HamsterBall 已启动."); + sync(() -> { + if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { + PlaceholderHook.INSTANCE.register(); + logger.info("已挂载 PlaceholderAPI 变量!"); + } else { + logger.warning("服务器未安装 PlaceholderAPI, 取消挂载变量!"); + } + }); } @Override diff --git a/hamster-ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/hook/PlaceholderHook.java b/hamster-ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/hook/PlaceholderHook.java new file mode 100644 index 0000000..ce1da7d --- /dev/null +++ b/hamster-ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/hook/PlaceholderHook.java @@ -0,0 +1,55 @@ +package cn.hamster3.mc.plugin.ball.bukkit.hook; + +import cn.hamster3.mc.plugin.ball.common.api.BallAPI; +import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class PlaceholderHook extends PlaceholderExpansion { + public static final PlaceholderHook INSTANCE = new PlaceholderHook(); + + private PlaceholderHook() { + } + + @Override + public @NotNull String getIdentifier() { + return "hamster_ball"; + } + + @Override + public @NotNull String getAuthor() { + return "MiniDay"; + } + + @Override + public @NotNull String getVersion() { + return "1.0.0"; + } + + @Override + public @Nullable String onRequest(OfflinePlayer player, @NotNull String params) { + switch (params) { + case "local_server_id": { + return BallAPI.getInstance().getLocalServerInfo().getId(); + } + case "local_server_name": { + return BallAPI.getInstance().getLocalServerInfo().getName(); + } + case "proxy_id": { + return BallAPI.getInstance().getPlayerInfo(player.getUniqueId()).getProxyServer(); + } + case "proxy_name": { + String id = BallAPI.getInstance().getPlayerInfo(player.getUniqueId()).getProxyServer(); + return BallAPI.getInstance().getServerInfo(id).getName(); + } + } + return null; + } + + @Override + public @Nullable String onPlaceholderRequest(Player player, @NotNull String params) { + return onRequest(player, params); + } +} diff --git a/hamster-ball-bukkit/src/main/resources/plugin.yml b/hamster-ball-bukkit/src/main/resources/plugin.yml index f5c7339..e5c4219 100644 --- a/hamster-ball-bukkit/src/main/resources/plugin.yml +++ b/hamster-ball-bukkit/src/main/resources/plugin.yml @@ -7,5 +7,10 @@ author: MiniDay website: https://github.com/MiniDay/hamster-ball description: 仓鼠球:一个基于 Netty 的 Minecraft 服务端通用消息中间件(原HamsterService) +load: STARTUP + depend: - HamsterCore + +softdepend: + - PlaceholderAPI diff --git a/hamster-ball-common/build.gradle b/hamster-ball-common/build.gradle index fda6aee..b443905 100644 --- a/hamster-ball-common/build.gradle +++ b/hamster-ball-common/build.gradle @@ -5,7 +5,7 @@ dependencies { //noinspection GradlePackageUpdate compileOnly 'com.google.code.gson:gson:2.8.0' // https://mvnrepository.com/artifact/io.netty/netty-all - compileOnly 'io.netty:netty-all:4.1.84.Final' + compileOnly 'io.netty:netty-all:4.1.82.Final' compileOnly "cn.hamster3.mc.plugin.core:common:${hamster_core_version}" diff --git a/hamster-ball-server/build.gradle b/hamster-ball-server/build.gradle index 81b5084..cf237ab 100644 --- a/hamster-ball-server/build.gradle +++ b/hamster-ball-server/build.gradle @@ -14,7 +14,7 @@ dependencies { shade 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0' // https://mvnrepository.com/artifact/io.netty/netty-all - implementationShade 'io.netty:netty-all:4.1.84.Final' + implementationShade 'io.netty:netty-all:4.1.82.Final' // https://mvnrepository.com/artifact/org.yaml/snakeyaml implementationShade 'org.yaml:snakeyaml:1.33' // https://mvnrepository.com/artifact/com.google.code.gson/gson