bukkit - 阻止玩家在战斗中使用 运行 命令
bukkit - Prevent player from running command when in combat
所以我正在开发一个 Java 插件,我需要做一些像现在 KitPvP 服务器所做的事情,玩家选择一个套件,然后他们只能在他们获得套件后再次获得套件已经死了。
我试过使用字符串来检查玩家是否处于指挥状态,但我真的不知道/"how" 用它们做什么。有什么建议吗?
我假设您使用的是 Spigot API 并且您可能正在搜索类似这样的内容 PlayerDeathEvent
每次玩家死亡时都会触发此事件,您可以将他们与您的玩家列表进行比较并更新 permissions(bukkit) permission(spiggot)。
希望这能回答您的问题。
你可以做的是创建一个列表,其中包含已经使用过这些工具包的玩家的名字
List<String> players = new ArrayList<String>();
然后每当他们使用命令时,您检查播放器是否在您的列表中
boolean isInList = players.contain(yourPlayer.getName());
您可以在处理命令时检查
if (isInList) {
player.sendMessage("You must die to use this again!");
return true; //To commandExecutor
}
如果玩家不在列表中,将他添加到列表中并给予套件
players.add(yourPlayer.getName());
//Give the kit
每当玩家死亡时,您应该尝试将他的名字从列表中删除。
@EventHandler
public void onDeath(PlayerDeathEvent e) {
//Remove player from the list
}
请注意,在 onCommand
中,您具有命令的以下属性:CommandSender sender, Command cmd, String label, String[] args
。
sender参数可能是你的播放器,你可以通过
检查
if (sender instanceof Player) {
Player commandPlayer = (Player) sender;
}
您可以使用列表来检查玩家是否在 "this life" 中获得了套件。
例如,在您的主插件 class 或您的命令 class 中,您可以像这样添加一个静态成员:
public static ArrayList<UUID> usedKit = new ArrayList<UUID>();
在 onCommand() 方法中,您可以检查玩家是否还没有得到他的工具包:
if (!usedKit.contains(player.getUniqueId())) {
// Code to give the kit here...
usedKit.add(player.getUniqueId()); // Adds the player to the list
} else
player.sendMessage("You already got your kit.");
return true;
当玩家死亡时,您必须将他从列表中移除:
@EventHandler
public void onPlayerDeath(PlayerDeathEvent event) {
if (usedKit.contains(event.getPlayer().getUniqueId()))
usedKit.remove(event.getPlayer().getUniqueId());
}
我知道这个答案与 Kerooker 的相似,但您应该尝试使用 UniqueIds,因为您可以在我的世界中更改您的名字。
所以我正在开发一个 Java 插件,我需要做一些像现在 KitPvP 服务器所做的事情,玩家选择一个套件,然后他们只能在他们获得套件后再次获得套件已经死了。
我试过使用字符串来检查玩家是否处于指挥状态,但我真的不知道/"how" 用它们做什么。有什么建议吗?
我假设您使用的是 Spigot API 并且您可能正在搜索类似这样的内容 PlayerDeathEvent
每次玩家死亡时都会触发此事件,您可以将他们与您的玩家列表进行比较并更新 permissions(bukkit) permission(spiggot)。
希望这能回答您的问题。
你可以做的是创建一个列表,其中包含已经使用过这些工具包的玩家的名字
List<String> players = new ArrayList<String>();
然后每当他们使用命令时,您检查播放器是否在您的列表中
boolean isInList = players.contain(yourPlayer.getName());
您可以在处理命令时检查
if (isInList) {
player.sendMessage("You must die to use this again!");
return true; //To commandExecutor
}
如果玩家不在列表中,将他添加到列表中并给予套件
players.add(yourPlayer.getName());
//Give the kit
每当玩家死亡时,您应该尝试将他的名字从列表中删除。
@EventHandler
public void onDeath(PlayerDeathEvent e) {
//Remove player from the list
}
请注意,在 onCommand
中,您具有命令的以下属性:CommandSender sender, Command cmd, String label, String[] args
。
sender参数可能是你的播放器,你可以通过
检查if (sender instanceof Player) {
Player commandPlayer = (Player) sender;
}
您可以使用列表来检查玩家是否在 "this life" 中获得了套件。 例如,在您的主插件 class 或您的命令 class 中,您可以像这样添加一个静态成员:
public static ArrayList<UUID> usedKit = new ArrayList<UUID>();
在 onCommand() 方法中,您可以检查玩家是否还没有得到他的工具包:
if (!usedKit.contains(player.getUniqueId())) {
// Code to give the kit here...
usedKit.add(player.getUniqueId()); // Adds the player to the list
} else
player.sendMessage("You already got your kit.");
return true;
当玩家死亡时,您必须将他从列表中移除:
@EventHandler
public void onPlayerDeath(PlayerDeathEvent event) {
if (usedKit.contains(event.getPlayer().getUniqueId()))
usedKit.remove(event.getPlayer().getUniqueId());
}
我知道这个答案与 Kerooker 的相似,但您应该尝试使用 UniqueIds,因为您可以在我的世界中更改您的名字。