From ad111008353b3ec7e5af67c667bd8e3cc01fab60 Mon Sep 17 00:00:00 2001 From: YuTian <2953516620@qq.com> Date: Thu, 8 Aug 2024 04:38:59 +0800 Subject: [PATCH] 1.3.2 --- .../elementoriginlib/ElementOriginLib.java | 2 + .../chatinput/PlayerChatInput.java | 60 +++++++++++++++++++ .../listener/PlayerChatInputListener.java | 37 ++++++++++++ .../manager/PlayerChatInputManager.java | 44 ++++++++++++++ src/main/resources/lang.yml | 5 +- src/main/resources/plugin.yml | 2 +- 6 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/io/yutian/elementoriginlib/chatinput/PlayerChatInput.java create mode 100644 src/main/java/com/io/yutian/elementoriginlib/listener/PlayerChatInputListener.java create mode 100644 src/main/java/com/io/yutian/elementoriginlib/manager/PlayerChatInputManager.java diff --git a/src/main/java/com/io/yutian/elementoriginlib/ElementOriginLib.java b/src/main/java/com/io/yutian/elementoriginlib/ElementOriginLib.java index 53d2d5d..183235a 100644 --- a/src/main/java/com/io/yutian/elementoriginlib/ElementOriginLib.java +++ b/src/main/java/com/io/yutian/elementoriginlib/ElementOriginLib.java @@ -1,6 +1,7 @@ package com.io.yutian.elementoriginlib; import com.io.yutian.elementoriginlib.listener.GuiHandlerListener; +import com.io.yutian.elementoriginlib.listener.PlayerChatInputListener; import org.bukkit.plugin.java.JavaPlugin; public final class ElementOriginLib extends JavaPlugin { @@ -12,6 +13,7 @@ public final class ElementOriginLib extends JavaPlugin { instance = this; new GuiHandlerListener(this); + new PlayerChatInputListener(this); } @Override diff --git a/src/main/java/com/io/yutian/elementoriginlib/chatinput/PlayerChatInput.java b/src/main/java/com/io/yutian/elementoriginlib/chatinput/PlayerChatInput.java new file mode 100644 index 0000000..5f5fea2 --- /dev/null +++ b/src/main/java/com/io/yutian/elementoriginlib/chatinput/PlayerChatInput.java @@ -0,0 +1,60 @@ +package com.io.yutian.elementoriginlib.chatinput; + +import org.bukkit.entity.Player; + +public abstract class PlayerChatInput { + + private long time; + public Player player; + + private int timeout = 15; + + private boolean isCall = false; + private boolean cancel = false; + + public PlayerChatInput(Player player) { + this.player = player; + this.time = System.currentTimeMillis(); + } + + public abstract void call(String arg); + + public void setTimeOut(int timeout) { + this.timeout = timeout; + } + + public boolean isTimeOut() { + return time + 1000L * timeout >= System.currentTimeMillis(); + } + + public long getTime() { + return time; + } + + public Player getPlayer() { + return player; + } + + public void setCancel(boolean cancel) { + this.cancel = cancel; + } + + public boolean isCancel() { + return cancel; + } + + public boolean isCall() { + return isCall; + } + + public void setCall(boolean call) { + isCall = call; + } + + public void cancle() { + } + + public void timeOut() { + } + +} \ No newline at end of file diff --git a/src/main/java/com/io/yutian/elementoriginlib/listener/PlayerChatInputListener.java b/src/main/java/com/io/yutian/elementoriginlib/listener/PlayerChatInputListener.java new file mode 100644 index 0000000..7dbdc6b --- /dev/null +++ b/src/main/java/com/io/yutian/elementoriginlib/listener/PlayerChatInputListener.java @@ -0,0 +1,37 @@ +package com.io.yutian.elementoriginlib.listener; + +import com.io.yutian.elementoriginlib.chatinput.PlayerChatInput; +import com.io.yutian.elementoriginlib.manager.PlayerChatInputManager; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.plugin.Plugin; + +public class PlayerChatInputListener extends IListener { + + public PlayerChatInputListener(Plugin plugin) { + super(plugin); + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerChat(AsyncPlayerChatEvent event) { + if (PlayerChatInputManager.hasInput(event.getPlayer())) { + event.setCancelled(true); + String string = event.getMessage(); + Player player = event.getPlayer(); + PlayerChatInput playerInput = PlayerChatInputManager.getInput(player); + if (string.toLowerCase().trim().equalsIgnoreCase("取消") || string.toLowerCase().trim().equalsIgnoreCase("none") || string.toLowerCase().trim().equalsIgnoreCase("cancle")) { + playerInput.cancle(); + PlayerChatInputManager.removeInput(player); + player.sendMessage("playerchatinput.cancle"); + return; + } + playerInput.call(string); + if (playerInput.isCall() || playerInput.isCancel()) { + PlayerChatInputManager.removeInput(player); + } + } + } + +} diff --git a/src/main/java/com/io/yutian/elementoriginlib/manager/PlayerChatInputManager.java b/src/main/java/com/io/yutian/elementoriginlib/manager/PlayerChatInputManager.java new file mode 100644 index 0000000..46808d9 --- /dev/null +++ b/src/main/java/com/io/yutian/elementoriginlib/manager/PlayerChatInputManager.java @@ -0,0 +1,44 @@ +package com.io.yutian.elementoriginlib.manager; + +import com.io.yutian.elementoriginlib.ElementOriginLib; +import com.io.yutian.elementoriginlib.chatinput.PlayerChatInput; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class PlayerChatInputManager { + + private static Map inputMap = new HashMap<>(); + + public static boolean hasInput(Player player) { + return inputMap.containsKey(player.getUniqueId()); + } + + public static PlayerChatInput getInput(Player player) { + return inputMap.get(player.getUniqueId()); + } + + public static void addInput(Player player, PlayerChatInput playerInput) { + inputMap.put(player.getUniqueId(), playerInput); + new BukkitRunnable() { + @Override + public void run() { + if (playerInput.isTimeOut() || playerInput.isCancel()) { + if (!playerInput.isCall() && inputMap.containsValue(playerInput)) { + playerInput.timeOut(); + player.sendMessage("playerchatinput.timeout"); + } + } + removeInput(player); + } + }.runTaskLater(ElementOriginLib.inst(), 15 * 20L); + } + + public static void removeInput(Player player) { + inputMap.remove(player.getUniqueId()); + } + +} \ No newline at end of file diff --git a/src/main/resources/lang.yml b/src/main/resources/lang.yml index 4846405..c27e8d1 100644 --- a/src/main/resources/lang.yml +++ b/src/main/resources/lang.yml @@ -6,4 +6,7 @@ command: error-arg: "&f参数错误 &8(&7第$0个参数&8) &7&o[$1]" no-player: "&f该指令只能由玩家执行" player-no-online: "&f玩家 &e$0 &f不存在或不在线" - no-permission: "&f你没有执行该命令的权限" \ No newline at end of file + no-permission: "&f你没有执行该命令的权限" +playerchatinput: + timeout: "&c输入超时" + cancel: "&c输入已取消" \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ffda2a4..9365a40 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: ElementOriginLib -version: '1.3.1' +version: '1.3.2' main: com.io.yutian.elementoriginlib.ElementOriginLib api-version: '1.20' authors: [ SuperYuTian ]