bukkit - 防止玩家在战斗中运行命令

时间:2016-11-21 22:27:06

标签: java minecraft bukkit

所以我开发了一个Java插件,我需要像KitPvP服务器那样做一些事情,玩家选择一个工具包,然后只有他们才能再次获得一个工具包死亡。

我已经尝试使用字符串来检查玩家是否在指挥,但我真的不知道/"如何"和他们一起做。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

你可以使用一个清单来检查玩家是否已经使用了这个套件"这一生"。 例如,在主插件类或命令类中,您可以添加如下静态成员:

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

答案 1 :(得分:1)

你可以做的是创建一个列表,其中包含已经使用过该套件的玩家的名字

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

发件人参数可能是您的播放器,您可以通过

进行检查
if (sender instanceof Player) {
Player commandPlayer = (Player) sender;
}

答案 2 :(得分:-1)

我假设您使用的是Spigot API,而您可能正在搜索此类内容PlayerDeathEvent

每次玩家死亡时都会触发此操作,您可以将其与玩家列表进行比较并更新permissions(bukkit) permission(spiggot)

希望这能回答你的问题。