From 5796ccdfcf0413375a62ec86d3dffb34caefcdeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=BB=E9=AD=82=E5=9C=A3=E4=BD=BF?= Date: Thu, 19 Dec 2024 23:25:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AF=E9=80=89=E4=BE=9D=E8=B5=96=E8=87=B3Au?= =?UTF-8?q?thMe=EF=BC=8C=E5=AE=9E=E7=8E=B0=E5=9C=A8=E7=BA=BF=E7=8E=A9?= =?UTF-8?q?=E5=AE=B6=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 17 ++++++ .../Commands/ZbCommand.java | 31 ++++++++++ .../CoordinateRecorder.java | 19 +++++++ .../PlayerAuthMeLoginEventListener.java | 19 +++++++ .../Listener/PlayerEventListener.java | 22 ++++++++ .../Listener/PlayerLoginEventListener.java | 14 +++++ .../Listener/PlayerMap.java | 56 +++++++++++++++++++ .../coordinateRecorder/data/PlayerData.java | 17 ++++++ src/main/resources/plugin.yml | 6 ++ 9 files changed, 201 insertions(+) create mode 100644 src/main/java/ling/coordinateRecorder/Commands/ZbCommand.java create mode 100644 src/main/java/ling/coordinateRecorder/Listener/PlayerAuthMeLoginEventListener.java create mode 100644 src/main/java/ling/coordinateRecorder/Listener/PlayerEventListener.java create mode 100644 src/main/java/ling/coordinateRecorder/Listener/PlayerLoginEventListener.java create mode 100644 src/main/java/ling/coordinateRecorder/Listener/PlayerMap.java create mode 100644 src/main/java/ling/coordinateRecorder/data/PlayerData.java diff --git a/pom.xml b/pom.xml index 71e1ead..dc6e813 100644 --- a/pom.xml +++ b/pom.xml @@ -131,9 +131,20 @@ sonatype https://oss.sonatype.org/content/groups/public/ + + codemc-repo + https://repo.codemc.org/repository/maven-public/ + + + fr.xephi + authme + 5.6.1-SNAPSHOT + provided + + org.spigotmc spigot-api @@ -152,5 +163,11 @@ jooq 3.19.16 + + org.jetbrains + annotations + 24.0.0 + compile + diff --git a/src/main/java/ling/coordinateRecorder/Commands/ZbCommand.java b/src/main/java/ling/coordinateRecorder/Commands/ZbCommand.java new file mode 100644 index 0000000..bf47027 --- /dev/null +++ b/src/main/java/ling/coordinateRecorder/Commands/ZbCommand.java @@ -0,0 +1,31 @@ +package ling.coordinateRecorder.Commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +/// zb命令处理器 +public class ZbCommand implements CommandExecutor, TabCompleter { + @Override + public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, + @NotNull String s, @NotNull String[] strings) { + assert s.equals("zb"); + if (!(commandSender instanceof Player)) { + System.out.println("该命令只能由玩家执行"); + return false; + } + Player player = (Player) commandSender; + + return false; + } + + @Override + public List onTabComplete(CommandSender commandSender, Command command, String s, String[] strings) { + return List.of(); + } +} diff --git a/src/main/java/ling/coordinateRecorder/CoordinateRecorder.java b/src/main/java/ling/coordinateRecorder/CoordinateRecorder.java index 57aaeda..410bcb3 100644 --- a/src/main/java/ling/coordinateRecorder/CoordinateRecorder.java +++ b/src/main/java/ling/coordinateRecorder/CoordinateRecorder.java @@ -1,6 +1,11 @@ package ling.coordinateRecorder; +import ling.coordinateRecorder.Listener.PlayerAuthMeLoginEventListener; +import ling.coordinateRecorder.Listener.PlayerEventListener; +import ling.coordinateRecorder.Listener.PlayerLoginEventListener; import ling.coordinateRecorder.data.Database; +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import java.sql.SQLException; @@ -9,18 +14,32 @@ public final class CoordinateRecorder extends JavaPlugin { private static CoordinateRecorder current; private static Database database; + private static Plugin authMePlugin; private static void start() throws SQLException { database.installPlugin(); } + private void loadListener() { + Bukkit.getPluginManager().registerEvents(new PlayerEventListener(), this); + if (authMePlugin != null && authMePlugin.isEnabled()) { + getLogger().info("找到AuthMe插件,将使用AuthMe兼容接口"); + Bukkit.getPluginManager().registerEvents(new PlayerAuthMeLoginEventListener(), this); + } else { + getLogger().info("没有找到AuthMe插件,使用原版接口"); + Bukkit.getPluginManager().registerEvents(new PlayerLoginEventListener(), this); + } + } + @Override public void onEnable() { // Plugin startup logic current = this; + authMePlugin = Bukkit.getPluginManager().getPlugin("AuthMe"); try { database = new Database(this); start(); + loadListener(); getLogger().info("加载完毕"); } catch (SQLException e) { throw new RuntimeException("插件初始化失败", e); diff --git a/src/main/java/ling/coordinateRecorder/Listener/PlayerAuthMeLoginEventListener.java b/src/main/java/ling/coordinateRecorder/Listener/PlayerAuthMeLoginEventListener.java new file mode 100644 index 0000000..65fc1ff --- /dev/null +++ b/src/main/java/ling/coordinateRecorder/Listener/PlayerAuthMeLoginEventListener.java @@ -0,0 +1,19 @@ +package ling.coordinateRecorder.Listener; + +import fr.xephi.authme.events.LoginEvent; +import fr.xephi.authme.events.LogoutEvent; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +/// 玩家通过AuthMe插件登录验证 +public class PlayerAuthMeLoginEventListener implements Listener { + @EventHandler + public void playerLogin(LoginEvent event) { + PlayerMap.getCurrent().playerLogin(event.getPlayer()); + } + + @EventHandler + public void playerLogout(LogoutEvent event) { + PlayerMap.getCurrent().playerQuit(event.getPlayer()); + } +} diff --git a/src/main/java/ling/coordinateRecorder/Listener/PlayerEventListener.java b/src/main/java/ling/coordinateRecorder/Listener/PlayerEventListener.java new file mode 100644 index 0000000..d8aa3f4 --- /dev/null +++ b/src/main/java/ling/coordinateRecorder/Listener/PlayerEventListener.java @@ -0,0 +1,22 @@ +package ling.coordinateRecorder.Listener; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +/// 玩家事件监听器 +public class PlayerEventListener implements Listener { + + /// 玩家登出 + @EventHandler + public void playerQuit(PlayerQuitEvent event) { + PlayerMap.getCurrent().playerQuit(event.getPlayer()); + } + + /// 玩家移动 + @EventHandler + public void playerMove(PlayerMoveEvent event) { + PlayerMap.getCurrent().playerMove(event.getPlayer()); + } +} diff --git a/src/main/java/ling/coordinateRecorder/Listener/PlayerLoginEventListener.java b/src/main/java/ling/coordinateRecorder/Listener/PlayerLoginEventListener.java new file mode 100644 index 0000000..a09f249 --- /dev/null +++ b/src/main/java/ling/coordinateRecorder/Listener/PlayerLoginEventListener.java @@ -0,0 +1,14 @@ +package ling.coordinateRecorder.Listener; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +/// 玩家连入服务器 +public class PlayerLoginEventListener implements Listener { + + @EventHandler + public void playerLogin(PlayerJoinEvent event) { + PlayerMap.getCurrent().playerLogin(event.getPlayer()); + } +} diff --git a/src/main/java/ling/coordinateRecorder/Listener/PlayerMap.java b/src/main/java/ling/coordinateRecorder/Listener/PlayerMap.java new file mode 100644 index 0000000..4282fe6 --- /dev/null +++ b/src/main/java/ling/coordinateRecorder/Listener/PlayerMap.java @@ -0,0 +1,56 @@ +package ling.coordinateRecorder.Listener; + +import ling.coordinateRecorder.CoordinateRecorder; +import ling.coordinateRecorder.data.PlayerData; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.HashMap; +import java.util.UUID; + +/// 在线玩家集合 +public class PlayerMap { + protected HashMap playerList = new HashMap<>(); + protected static final CoordinateRecorder plugin = CoordinateRecorder.getCurrent(); + protected static final PlayerMap current = new PlayerMap(); + + private PlayerMap() { + + } + + public static PlayerMap getCurrent() { + return current; + } + + public PlayerData getPlayerData(@NotNull Player player) { + return getPlayerData(player.getUniqueId()); + } + + public PlayerData getPlayerData(UUID uuid) { + return playerList.get(uuid); + } + + /// 玩家登录 + protected void playerLogin(Player player) { + if (!playerList.containsKey(player.getUniqueId())) { + plugin.getLogger().info("玩家[" + player.getName() + "]登录服务器,已添加到管理列表"); + playerList.put(player.getUniqueId(), new PlayerData(player)); + } else { + plugin.getLogger().warning("玩家[" + player.getName() + "]已经在管理列表中"); + } + } + + /// 玩家退出 + protected void playerQuit(Player player) { + if (playerList.containsKey(player.getUniqueId())) { + playerList.remove(player.getUniqueId()); + plugin.getLogger().info("玩家[" + player.getName() + "]退出服务器,停止管理"); + } + } + + protected void playerMove(Player player) { + var data = playerList.get(player.getUniqueId()); + if (data != null) + data.updateLocal(); + } +} diff --git a/src/main/java/ling/coordinateRecorder/data/PlayerData.java b/src/main/java/ling/coordinateRecorder/data/PlayerData.java new file mode 100644 index 0000000..10dc057 --- /dev/null +++ b/src/main/java/ling/coordinateRecorder/data/PlayerData.java @@ -0,0 +1,17 @@ +package ling.coordinateRecorder.data; + +import org.bukkit.entity.Player; + +/// 玩家的附加信息 +public class PlayerData { + protected final Player player; + + public PlayerData(Player player) { + this.player = player; + } + + /// 玩家位置信息发生改变 + public void updateLocal() { + + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 4ed05b2..6f1f4b0 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,3 +2,9 @@ name: CoordinateRecorder version: '1.0' main: ling.coordinateRecorder.CoordinateRecorder api-version: '1.21' +softdepend: + - AuthMe +commands: + zb: + usage: "/zb <选项> <参数>" + description: "使用坐标管理器来记录坐标位置" \ No newline at end of file