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