2016-11-21 82 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