tpa 部分bug修复及异常输出

This commit is contained in:
oiQwQio 2024-03-02 07:42:48 +08:00
parent ef95751183
commit 9367ff81a3
2 changed files with 121 additions and 100 deletions

View File

@ -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;
}

View File