From 9367ff81a3bd8890ffa25d15e55d9d5b15725448 Mon Sep 17 00:00:00 2001 From: oiQwQio <3299893806@qq.com> Date: Sat, 2 Mar 2024 07:42:48 +0800 Subject: [PATCH] =?UTF-8?q?tpa=20=E9=83=A8=E5=88=86bug=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=8F=8A=E5=BC=82=E5=B8=B8=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/tp/Tp.java | 221 +++++++++++++++++++--------------- src/main/resources/config.yml | 0 2 files changed, 121 insertions(+), 100 deletions(-) create mode 100644 src/main/resources/config.yml diff --git a/src/main/java/org/tp/Tp.java b/src/main/java/org/tp/Tp.java index f9e4658..d19a23e 100644 --- a/src/main/java/org/tp/Tp.java +++ b/src/main/java/org/tp/Tp.java @@ -12,6 +12,8 @@ import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; +import java.io.PrintWriter; +import java.io.StringWriter; import java.time.Duration; import java.time.LocalDateTime; import java.util.HashMap; @@ -27,9 +29,18 @@ public final class Tp extends JavaPlugin implements Listener, CommandExecutor { public void onEnable() { // Plugin startup logic out.info("插件 tpa 启动成功"); + if (!getDataFolder().exists()){ + out.info("Creating "+ getDataFolder() +" main directory "); + getDataFolder().mkdir(); + } + saveDefaultConfig(); + config=getConfig(); + request=new HashMap<>(); getServer().getPluginManager().registerEvents(this, this); - this.saveDefaultConfig(); - config=this.getConfig(); + Objects.requireNonNull(getCommand("tpa")).setExecutor(this); + Objects.requireNonNull(getCommand("tpaccept")).setExecutor(this); + Objects.requireNonNull(getCommand("tpdeny")).setExecutor(this); + Objects.requireNonNull(getCommand("back")).setExecutor(this); } @Override public void onDisable() { @@ -50,121 +61,131 @@ public final class Tp extends JavaPlugin implements Listener, CommandExecutor { return playerObj; } + public static String getStackTrace(Throwable throwable){ + StringWriter sw = new StringWriter(); + try (PrintWriter pw = new PrintWriter(sw)) { + throwable.printStackTrace(pw); + return sw.toString(); + } + } @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull String label, String[] args){ - if(!(sender instanceof Player)){ - out.warning("此命令是玩家命令"); - return false; - } - Player player=(Player) sender; - ConfigurationSection playInfo=config.getConfigurationSection(player.getUniqueId().toString()); - Location pos; - Player playerObj; - long time; - switch (label) { - case "back": - if (playInfo == null || (pos=playInfo.getLocation("back")) == null){ - player.sendMessage("§4未找到上一传送点"); - }else{ - playInfo.set("back",player.getLocation()); - player.teleport(pos); - saveConfig(); - player.sendMessage("§2返回上一传送点成功"); - } - break; - case "tpa": - if(args==null||args[0]==null){ - player.sendMessage("§4参数不正确,请输入 /tpa <玩家名>"); - return false; - } - if((playerObj=cmdGetPlayer(player,args[0]))==null){ - return false; - } - time=Duration.between(LocalDateTime.now(),request.get(player.getName()).dateTime).toMillis(); - if(request.get(player.getName())==null|| time>30000){ - request.put(player.getName(),new Request(player.getName(),args[0])); - player.sendMessage("§2已发送传送请求"); - playerObj.sendMessage(player.getName()+"请求传送到你这里"); - playerObj.sendMessage("输入[/tpaccept 接受]|[/tpdeny 拒绝] 请求"); - }else{ - player.sendMessage("§e已有传送请求,请等待"+(30000-time)/1000+"秒后再次发送"); - } - break; - case "tpaccept": - if(args!=null&&args[0]!=null){ - if((playerObj=cmdGetPlayer(player,args[0]))==null){ + try { + if (!(sender instanceof Player)) { + out.warning("此命令是玩家命令"); + return false; + } + Player player = (Player) sender; + ConfigurationSection playInfo = config.getConfigurationSection(player.getUniqueId().toString()); + Location pos; + Player playerObj; + long time; + switch (label) { + case "back": + if (playInfo == null || (pos = playInfo.getLocation("back")) == null) { + player.sendMessage("§4未找到上一传送点"); + } else { + playInfo.set("back", player.getLocation()); + player.teleport(pos); + saveConfig(); + player.sendMessage("§2返回上一传送点成功"); + } + break; + case "tpa": + if (args == null || args.length<1 || args[0] == null) { + player.sendMessage("§4参数不正确,请输入 /tpa <玩家名>"); return false; } - if(request.get(playerObj.getName())!=null){ - time=Duration.between(LocalDateTime.now(),request.get(playerObj.getName()).dateTime).toMillis(); - if(time>30000){ - player.sendMessage("§e请求超时"); - }else { - player.sendMessage("§2已接受"+playerObj.getName()+"传送"); + if ((playerObj = cmdGetPlayer(player, args[0])) == null) { + return false; + } + if (request.get(player.getName()) == null || (time = Duration.between(LocalDateTime.now(), request.get(player.getName()).dateTime).toMillis()) > 30000) { + request.put(player.getName(), new Request(player.getName(), args[0])); + player.sendMessage("§2已发送传送请求"); + playerObj.sendMessage(player.getName() + "请求传送到你这里"); + playerObj.sendMessage("输入[/tpaccept 接受]|[/tpdeny 拒绝] 请求"); + } else { + player.sendMessage("§e已有传送请求,请等待" + (30000 - time) / 1000 + "秒后再次发送"); + } + break; + case "tpaccept": + if (args != null && args.length>0 && args[0] != null) { + if ((playerObj = cmdGetPlayer(player, args[0])) == null) { + return false; + } + if (request.get(playerObj.getName()) != null) { + time = Duration.between(LocalDateTime.now(), request.get(playerObj.getName()).dateTime).toMillis(); + if (time > 30000) { + player.sendMessage("§e请求超时"); + } else { + player.sendMessage("§2已接受" + playerObj.getName() + "传送"); + playerObj.sendMessage("§2传送已被接受"); + config.set(playerObj.getUniqueId() + ".back", playerObj.getLocation()); + playerObj.teleport(player); + saveConfig(); + } + } else { + player.sendMessage("§4未发现传送请求"); + } + return true; + } + for (Request i : request.values()) { + if (i == null) continue; + time = Duration.between(LocalDateTime.now(), i.dateTime).toMillis(); + if (Objects.equals(i.toPlayer, player.getName()) && time < 30000) { + if ((playerObj = cmdGetPlayer(player, i.rawPlayer)) == null) { + continue; + } + player.sendMessage("§2已接受传送"); playerObj.sendMessage("§2传送已被接受"); - config.set(playerObj.getUniqueId() +".back",playerObj.getLocation()); + config.set(playerObj.getUniqueId() + ".back", playerObj.getLocation()); playerObj.teleport(player); saveConfig(); } - }else { - player.sendMessage("§4未发现传送请求"); } - return true; - } - for(Request i : request.values()){ - if(i==null)continue; - time=Duration.between(LocalDateTime.now(),i.dateTime).toMillis(); - if(Objects.equals(i.toPlayer, player.getName())&&time<30000){ - if((playerObj=cmdGetPlayer(player,i.rawPlayer))==null){ - continue; + break; + case "tpdeny": + if (args != null && args.length>0 && args[0] != null) { + if ((playerObj = cmdGetPlayer(player, args[0])) == null) { + return false; } - player.sendMessage("§2已接受传送"); - playerObj.sendMessage("§2传送已被接受"); - config.set(playerObj.getUniqueId() +".back",playerObj.getLocation()); - playerObj.teleport(player); - saveConfig(); - } - } - break; - case "tpdeny": - if(args!=null&&args[0]!=null){ - if((playerObj=cmdGetPlayer(player,args[0]))==null){ - return false; - } - Request tmp=request.get(playerObj.getName()); - if(tmp==null|| !player.getName().equals(tmp.toPlayer)){ - player.sendMessage("此玩家无传送请求"); - return false; - } - request.remove(playerObj.getName()); - player.sendMessage("§e已拒绝传送"); - playerObj.sendMessage("§2传送已被拒绝"); - } - for(Request i : request.values()){ - if(i==null)continue; - time=Duration.between(LocalDateTime.now(),i.dateTime).toMillis(); - if(Objects.equals(i.toPlayer, player.getName())&&time<30000){ - if((playerObj=cmdGetPlayer(player,i.rawPlayer))==null){ - continue; + Request tmp = request.get(playerObj.getName()); + if (tmp == null || !player.getName().equals(tmp.toPlayer)) { + player.sendMessage("此玩家无传送请求"); + return false; } - request.remove(i.rawPlayer); + request.remove(playerObj.getName()); player.sendMessage("§e已拒绝传送"); playerObj.sendMessage("§2传送已被拒绝"); } - } - break; - case "home": + for (Request i : request.values()) { + if (i == null) continue; + time = Duration.between(LocalDateTime.now(), i.dateTime).toMillis(); + if (Objects.equals(i.toPlayer, player.getName()) && time < 30000) { + if ((playerObj = cmdGetPlayer(player, i.rawPlayer)) == null) { + continue; + } + request.remove(i.rawPlayer); + player.sendMessage("§e已拒绝传送"); + playerObj.sendMessage("§2传送已被拒绝"); + } + } + break; + case "home": - break; - case "sethome": + break; + case "sethome": - break; - case "homes": + break; + case "homes": - break; - default: - player.sendMessage("未找到" + label + "命令"); - return false; + break; + default: + player.sendMessage("未找到" + label + "命令"); + return false; + } + }catch (Exception e){ + out.warning(getStackTrace(e)); } return true; } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..e69de29