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,因为您可以在我的世界中更改您的名字。