2016-11-21 39 views
2

因此,我正在开发一个Java插件,并且我需要像KitPvP服务器那样做一些事情,玩家选择一个套件,然后他们只被允许获得一个一旦他们死了,再试一次。bukkit - 防止玩家在战斗中运行命令

我已经尝试过使用字符串来检查玩家是否在命令,但我真的不知道如何与他们做“如何”。有什么建议么?

回答

2

你可以使用一个列表来检查,如果玩家已经得到了在“今生”的套件。 例如在主插件类,可以在命令类,你可以添加一个静态成员是这样的:

public static ArrayList<UUID> usedKit = new ArrayList<UUID>(); 

在按需()方法可以检查,如果玩家还没有得到他的套件尚未:

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的,但你应该尝试使用统一queIds,因为你可以在我的世界中改变你的名字。

+0

不错!如何在我的其他课程中获得此列表? – MucaP

+1

勺子喂食太多,但一个很好的答案。只有一点,最好通过方法访问列表,而不是仅通过静态变量。 – Kerooker

-1

我假设你使用插口API和找你可能寻找的东西,像这样PlayerDeathEvent

这被触发,每次一个玩家死亡,你可以将其与你的球员名单比较和更新permissions(bukkit)permission(spiggot)

希望这回答了你的问题。

+0

我假设你没有阅读我的问题。我没有使用Spigot,我应该如何使命令无法使用?我知道我应该在PlayerDeathEvent上重置它,但是如何?这是我不知道的。 – MucaP

+0

我真的不知道的是你基本没有说过:P,如何制作这个列表,这个列表包含什么? @Nordiii – MucaP

+0

据我所知,bukkit的开发停止了?用bukkit链接更新答案。 – Nordiii

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; 
} 
+0

谢谢!是的,但是我怎么能通过我所有的课程通过这个列表?我有一个类到每个工具包。 – MucaP