所以我正在为我的服务器制作一个 kick/ban 命令,格式是 /kick 名称原因。我让它一切工作,但原因
只能是1个单词和任何排除它的东西,例如/kick BattleDash你好世界
会说BattleDash被踢了你好
。
这是我的代码:
if (cmd.getName().equalsIgnoreCase("kick") && sender instanceof Player) {
Player player = (Player) sender;
int length = args.length;
if (length >= 2) {
boolean playerFound = false;
for (Player playerToKick : Bukkit.getServer().getOnlinePlayers()) {
if(playerToKick.getName().equalsIgnoreCase(args[0])) {
playerToKick.kickPlayer(ChatColor.RED + "Kicked by Administrator " + player.getName() + "\nReason: " + args[1]);
player.sendMessage(ChatColor.RED + "[BATTLEDASHLOGS]: Kicked player " + playerToKick.getName() + "succesfully!");
break;
}
}
if (playerFound == false) {
player.sendMessage(ChatColor.RED + "[BATTLEDASHLOGS]: " + args[0] + " was not found!");
}
} else player.sendMessage(ChatColor.RED + "[BATTLEDASHLOGS]: Incorrect arguments!" + ChatColor.RED + " /kick <PlayerName> <reason>");
return true;
}
(此外,如果您不包括一个原因,它会在聊天中出现内部错误,并在控制台中发生异常)
您的代码之所以这样做,是因为它被编程的方式。
如果我们看一下论证的那一行:
playerToKick.kickPlayer(ChatColor.RED + "Kicked by Administrator " + player.getName() + "\nReason: " + args[1]);
我们可以看到您只使用args[1]
。如果我们将消息视为数组,问题就很清楚了:
在位置 0 处(记住数组从 0 开始):战斗哈希
1:你好
2:世界
当您只将参数[1]
添加到消息中时,将只使用hello
!相反,我们需要做的是使用所有的参数。这样做的一种方法是:
// First, transform your array into a list, so it's easier to understand
List<String> arguments = new ArrayList<>(args);
String playerName = arguments.get(0); // Get the player name
arguments.remove(0); // Remove the player name from our arguments list, we don't want it in the message
String message = String.join(" ", arguments); // Combine all the other arguments into a message
当我试图在我的bukkit服务器中加载插件时,我遇到了NullPointerExc的问题,但在Eclipse中没有错误。我的插件是Rush插件,很多东西没有使用/丢失。错误是这样的: 以下是我的代码:
我做了一个插件,可以跟踪你在《我的世界》开采的钻石数量,并保存到config.yml文件中。但是我的代码似乎不工作,我不知道为什么? 我已经在setConfig参数中尝试了1,现在我已经切换到这个,它似乎仍然不起作用。我还在我的配置.yml文件中预定义了菱形。 当玩家执行命令/mydiamonds时,它会打印出“你已经开采了(a)钻石”。但不管你开采了多少钻石,它总是打印出零。
我对代码有问题,因为它不能正常工作。这部分代码在第一个播放器上运行时有效 当第二个玩家接触水时,什么也没有发生。没有错误。下面是完整的代码: 我很确定第二个玩家的“结束”是真的,所以它不会这样做。
我想把玩家点击的块的位置保存到两个变量中。 我尝试在使用该项目后触发一个事件,但只有当我在空中单击时才会生成该事件。 如果(p.getiteminhand().gettype()==Material.blaze_rod){System.out.println(“test”);} 我也尝试了这个设计,但代码仍然不能正常工作: 如果((p.getiteminhand().gettype()==Mate
我正在尝试恢复一个插件,但发现了一个错误: 我做的一切都是对的!plugin.yml外部罐子和出口,但仍然不起作用。知道为什么吗?
在我的Spigot插件中,我使用重复任务每隔0.5秒更新一次玩家的库存。长时间运行代码后,我会得到。 我做了一些调试并使用JProfiler来查看导致内存泄漏的原因,并注意到ItemStacks的数量不断增加。堆遍历器显示这是由更新库存的代码引起的。这是当前代码: 经过更多的调试,我发现删除了将停止增加的itemStack数量。 什么可能导致内存泄漏? 编辑: 我已经更改了代码,不再为每个玻璃窗格