update 2025/10/15 upd
update:0
This commit is contained in:
@@ -37,12 +37,14 @@ public class TeleportCommandExecutor implements CommandExecutor {
|
|||||||
sender.sendMessage(ChatColor.RED + "该玩家不在线!");
|
sender.sendMessage(ChatColor.RED + "该玩家不在线!");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (args.length == 2) {
|
||||||
if (args[1].contains("me")) {
|
if (args[1].contains("me")) {
|
||||||
playerto = Bukkit.getPlayer(args[0]);
|
playerto = Bukkit.getPlayer(args[0]);
|
||||||
if (plugin.teleport.getOrDefault(playerto, null) != null) {
|
if (plugin.teleport.getOrDefault(playerto, null) != null) {
|
||||||
sender.sendMessage(ChatColor.RED + "对方已经发送了一个请求,请等待");
|
sender.sendMessage(ChatColor.RED + "对方已经发送了一个请求,请等待");
|
||||||
return true;
|
return true;
|
||||||
}if (plugin.Ateleport.getOrDefault(sender, null) != null) {
|
}
|
||||||
|
if (plugin.Ateleport.getOrDefault(sender, null) != null) {
|
||||||
sender.sendMessage(ChatColor.RED + "你还有一个未处理的请求!");
|
sender.sendMessage(ChatColor.RED + "你还有一个未处理的请求!");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -69,6 +71,7 @@ public class TeleportCommandExecutor implements CommandExecutor {
|
|||||||
}.runTaskLater(plugin, 40 * 60);
|
}.runTaskLater(plugin, 40 * 60);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
playerto = Bukkit.getPlayer(args[0]);
|
playerto = Bukkit.getPlayer(args[0]);
|
||||||
if (plugin.teleport.getOrDefault((Player) sender, null) != null) {
|
if (plugin.teleport.getOrDefault((Player) sender, null) != null) {
|
||||||
playerto.sendMessage(ChatColor.RED + "您已经向 " + plugin.teleport.get((Player) sender).getName() + ChatColor.RED + " 发送了一份请求");
|
playerto.sendMessage(ChatColor.RED + "您已经向 " + plugin.teleport.get((Player) sender).getName() + ChatColor.RED + " 发送了一份请求");
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import org.xgqy.survival.Survival;
|
|||||||
|
|
||||||
public class TpAccCommandExecutor implements CommandExecutor {
|
public class TpAccCommandExecutor implements CommandExecutor {
|
||||||
|
|
||||||
private Survival plugin;
|
private final Survival plugin;
|
||||||
|
|
||||||
public TpAccCommandExecutor(Survival plugin) {
|
public TpAccCommandExecutor(Survival plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
@@ -19,76 +19,159 @@ public class TpAccCommandExecutor implements CommandExecutor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||||
if (sender instanceof Player) {
|
// 仅允许玩家执行命令
|
||||||
if (plugin.Ateleport.getOrDefault(sender, null) != null) {
|
if (!(sender instanceof Player player)) {
|
||||||
if (args[0].contains("accept")) {
|
sender.sendMessage(ChatColor.RED + "无法对非玩家使用此命令");
|
||||||
sender.sendMessage(ChatColor.GREEN + "传送成功!");
|
|
||||||
plugin.Ateleport.get(sender).sendMessage(ChatColor.GREEN + "传送成功!输入 /tpfin 回到原处,该命令将会在5分钟后过期。");
|
|
||||||
plugin.teleportp.put(plugin.Ateleport.get(sender), plugin.Ateleport.get(sender).getLocation());
|
|
||||||
plugin.Ateleport.get(sender).teleport(((Player) sender).getLocation());
|
|
||||||
plugin.isteleport.put(plugin.Ateleport.get(sender), 1);
|
|
||||||
new BukkitRunnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (plugin.isteleport.get(sender) != 1)
|
|
||||||
plugin.Ateleport.get(sender).sendMessage(ChatColor.RED + "返回命令已过期,你将无法返回原处!");
|
|
||||||
plugin.teleportp.remove(plugin.Ateleport.get(sender));
|
|
||||||
plugin.teleport.remove(plugin.Ateleport.get(sender));
|
|
||||||
plugin.isteleport.remove(plugin.Ateleport.get(sender));
|
|
||||||
plugin.Ateleport.remove(sender);
|
|
||||||
}
|
|
||||||
}.runTaskLater(plugin, 5 * 20 * 60);
|
|
||||||
return true;
|
return true;
|
||||||
} else if (args[0].contains("deny")) {
|
}
|
||||||
sender.sendMessage(ChatColor.GREEN + "拒绝成功");
|
|
||||||
plugin.Ateleport.get(sender).sendMessage(ChatColor.GREEN + "您的传送请求被拒绝");
|
// 检查玩家是否已登录
|
||||||
//plugin.teleportp.put(plugin.Ateleport.get(sender),plugin.Ateleport.get(sender).getLocation());
|
if (!plugin.getAccountManager().isLoggedIn(player)) {
|
||||||
plugin.teleportp.remove(plugin.Ateleport.get(sender));
|
player.sendMessage(ChatColor.RED + "请先登录或注册!");
|
||||||
plugin.teleport.remove(plugin.Ateleport.get(sender));
|
return true;
|
||||||
plugin.isteleport.remove(plugin.Ateleport.get(sender));
|
}
|
||||||
plugin.Ateleport.remove(sender);
|
|
||||||
|
// 参数长度校验(必须为1个参数)
|
||||||
|
if (args.length != 1) {
|
||||||
|
player.sendMessage(ChatColor.RED + "请输入正确参数!用法: /tpacc <accept|deny|tome|detome>");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理不同参数逻辑
|
||||||
|
String action = args[0];
|
||||||
|
switch (action) {
|
||||||
|
case "accept":
|
||||||
|
handleAccept(player);
|
||||||
|
break;
|
||||||
|
case "deny":
|
||||||
|
handleDeny(player);
|
||||||
|
break;
|
||||||
|
case "tome":
|
||||||
|
handleTome(player);
|
||||||
|
break;
|
||||||
|
case "detome":
|
||||||
|
handleDetome(player);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
player.sendMessage(ChatColor.RED + "参数错误!请使用 /tpacc <accept|deny|tome|detome>");
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else if (args[0].contains("tome")){
|
}
|
||||||
sender.sendMessage(ChatColor.GREEN + "传送成功!");
|
|
||||||
plugin.teleport.get(sender).sendMessage(ChatColor.GREEN + "传送成功!输入 /tpfin 回到原处,该命令将会在5分钟后过期。");
|
/**
|
||||||
plugin.teleportp.put(plugin.teleport.get(sender), plugin.teleport.get(sender).getLocation());
|
* 处理接受对方传送至自己的请求
|
||||||
plugin.teleport.get(sender).teleport(((Player) sender).getLocation());
|
*/
|
||||||
plugin.isteleport.put(plugin.teleport.get(sender), 1);
|
private void handleAccept(Player receiver) {
|
||||||
((Player)sender).teleport(plugin.Ateleport.get(sender));
|
// 获取请求传送的玩家(Ateleport: 接收者 -> 请求者)
|
||||||
|
Player requester = plugin.Ateleport.get(receiver);
|
||||||
|
if (requester == null || !requester.isOnline()) {
|
||||||
|
receiver.sendMessage(ChatColor.RED + "传送请求已过期或不存在");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 执行传送逻辑
|
||||||
|
receiver.sendMessage(ChatColor.GREEN + "已同意传送请求!");
|
||||||
|
requester.sendMessage(ChatColor.GREEN + "对方已同意传送!输入 /tpfin 可在5分钟内返回原处");
|
||||||
|
|
||||||
|
// 保存请求者原始位置
|
||||||
|
plugin.teleportp.put(requester, requester.getLocation());
|
||||||
|
// 传送请求者到接收者位置
|
||||||
|
requester.teleport(receiver.getLocation());
|
||||||
|
plugin.isteleport.put(requester, 1);
|
||||||
|
|
||||||
|
// 5分钟后清理传送状态
|
||||||
new BukkitRunnable() {
|
new BukkitRunnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (plugin.isteleport.get(sender) != 1)
|
if (plugin.isteleport.getOrDefault(requester, 0) != 1) {
|
||||||
plugin.teleport.get(sender).sendMessage(ChatColor.RED + "返回命令已过期,你将无法返回原处!");
|
requester.sendMessage(ChatColor.RED + "返回命令已过期,无法再返回原处");
|
||||||
plugin.teleportp.remove(plugin.teleport.get(sender));
|
|
||||||
plugin.Ateleport.remove(plugin.teleport.get(sender));
|
|
||||||
plugin.isteleport.remove(plugin.teleport.get(sender));
|
|
||||||
plugin.teleport.remove(sender);
|
|
||||||
}
|
}
|
||||||
}.runTaskLater(plugin, 5 * 20 * 60);
|
// 清理相关映射
|
||||||
return true;
|
plugin.teleportp.remove(requester);
|
||||||
}else if (args[0].contains("detome")){
|
plugin.teleport.remove(requester);
|
||||||
sender.sendMessage(ChatColor.GREEN + "拒绝成功");
|
plugin.isteleport.remove(requester);
|
||||||
plugin.teleport.get(sender).sendMessage(ChatColor.GREEN + "您的传送请求被拒绝");
|
plugin.Ateleport.remove(receiver);
|
||||||
//plugin.teleportp.put(plugin.Ateleport.get(sender),plugin.Ateleport.get(sender).getLocation());
|
|
||||||
plugin.teleportp.remove(plugin.teleport.get(sender));
|
|
||||||
plugin.Ateleport.remove(plugin.teleport.get(sender));
|
|
||||||
plugin.isteleport.remove(plugin.teleport.get(sender));
|
|
||||||
plugin.teleport.remove(sender);
|
|
||||||
return true;
|
|
||||||
}else {
|
|
||||||
sender.sendMessage(ChatColor.RED + "参数错误,请输入 /tpacc accept 或 /tpacc deny");
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
} else {
|
}.runTaskLater(plugin, 5 * 60 * 20); // 5分钟(20tick=1秒)
|
||||||
sender.sendMessage(ChatColor.RED + "现在没有传送申请或申请已过期");
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
sender.sendMessage(ChatColor.RED + "无法对非玩家类使用");
|
/**
|
||||||
return true;
|
* 处理拒绝对方传送至自己的请求
|
||||||
|
*/
|
||||||
|
private void handleDeny(Player receiver) {
|
||||||
|
Player requester = plugin.Ateleport.get(receiver);
|
||||||
|
if (requester == null || !requester.isOnline()) {
|
||||||
|
receiver.sendMessage(ChatColor.RED + "传送请求已过期或不存在");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
//return true;
|
|
||||||
|
// 发送拒绝消息
|
||||||
|
receiver.sendMessage(ChatColor.GREEN + "已拒绝传送请求");
|
||||||
|
requester.sendMessage(ChatColor.RED + "对方已拒绝你的传送请求");
|
||||||
|
|
||||||
|
// 清理相关映射
|
||||||
|
plugin.teleportp.remove(requester);
|
||||||
|
plugin.teleport.remove(requester);
|
||||||
|
plugin.isteleport.remove(requester);
|
||||||
|
plugin.Ateleport.remove(receiver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理同意自己传送至对方的请求
|
||||||
|
*/
|
||||||
|
private void handleTome(Player requester) {
|
||||||
|
// 获取请求接收者(teleport: 请求者 -> 接收者)
|
||||||
|
Player receiver = plugin.teleport.get(requester);
|
||||||
|
if (receiver == null || !receiver.isOnline()) {
|
||||||
|
requester.sendMessage(ChatColor.RED + "传送请求已过期或不存在");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 执行传送逻辑
|
||||||
|
requester.sendMessage(ChatColor.GREEN + "已同意传送至对方!");
|
||||||
|
receiver.sendMessage(ChatColor.GREEN + "对方已同意传送至你处");
|
||||||
|
|
||||||
|
// 保存请求者原始位置
|
||||||
|
plugin.teleportp.put(requester, requester.getLocation());
|
||||||
|
// 传送请求者到接收者位置
|
||||||
|
requester.teleport(receiver.getLocation());
|
||||||
|
plugin.isteleport.put(requester, 1);
|
||||||
|
|
||||||
|
// 5分钟后清理传送状态
|
||||||
|
new BukkitRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (plugin.isteleport.getOrDefault(requester, 0) != 1) {
|
||||||
|
requester.sendMessage(ChatColor.RED + "返回命令已过期,无法再返回原处");
|
||||||
|
}
|
||||||
|
// 清理相关映射
|
||||||
|
plugin.teleportp.remove(requester);
|
||||||
|
plugin.Ateleport.remove(receiver);
|
||||||
|
plugin.isteleport.remove(requester);
|
||||||
|
plugin.teleport.remove(requester);
|
||||||
|
}
|
||||||
|
}.runTaskLater(plugin, 5 * 60 * 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理拒绝自己传送至对方的请求
|
||||||
|
*/
|
||||||
|
private void handleDetome(Player requester) {
|
||||||
|
Player receiver = plugin.teleport.get(requester);
|
||||||
|
if (receiver == null || !receiver.isOnline()) {
|
||||||
|
requester.sendMessage(ChatColor.RED + "传送请求已过期或不存在");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送拒绝消息
|
||||||
|
requester.sendMessage(ChatColor.GREEN + "已拒绝传送至对方");
|
||||||
|
receiver.sendMessage(ChatColor.RED + "对方已拒绝传送至你处");
|
||||||
|
|
||||||
|
// 清理相关映射
|
||||||
|
plugin.teleportp.remove(requester);
|
||||||
|
plugin.Ateleport.remove(receiver);
|
||||||
|
plugin.isteleport.remove(requester);
|
||||||
|
plugin.teleport.remove(requester);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -48,6 +48,20 @@ commands:
|
|||||||
login:
|
login:
|
||||||
description: to login
|
description: to login
|
||||||
usage: /<command> <password>
|
usage: /<command> <password>
|
||||||
|
party:
|
||||||
|
description: to create a party
|
||||||
|
usage: /<command> <create|quit|join|invite|kick|allow|disband|help> <args>
|
||||||
|
inventory:
|
||||||
|
description: check inventory of a player
|
||||||
|
usage: /<command> <player>
|
||||||
|
permission: permission.settag
|
||||||
|
permission-message: 无权执行命令
|
||||||
|
msg:
|
||||||
|
description: private chat with friend
|
||||||
|
usage: /<command> <player> <message>
|
||||||
|
friend:
|
||||||
|
description: add friend
|
||||||
|
usage: /<command> <add|allow|deny|remove> <player>
|
||||||
permissions:
|
permissions:
|
||||||
permission.settag:
|
permission.settag:
|
||||||
description: Allows setting player tags
|
description: Allows setting player tags
|
||||||
|
|||||||
Reference in New Issue
Block a user