因此,我正在開發一個Java插件,並且我需要像KitPvP服務器那樣做一些事情,玩家選擇一個套件,然後他們只被允許獲得一個一旦他們死了,再試一次。bukkit - 防止玩家在戰鬥中運行命令
我已經嘗試過使用字符串來檢查玩家是否在命令,但我真的不知道如何與他們做「如何」。有什麼建議麼?
因此,我正在開發一個Java插件,並且我需要像KitPvP服務器那樣做一些事情,玩家選擇一個套件,然後他們只被允許獲得一個一旦他們死了,再試一次。bukkit - 防止玩家在戰鬥中運行命令
我已經嘗試過使用字符串來檢查玩家是否在命令,但我真的不知道如何與他們做「如何」。有什麼建議麼?
你可以使用一個列表來檢查,如果玩家已經得到了在「今生」的套件。 例如在主插件類,可以在命令類,你可以添加一個靜態成員是這樣的:
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,因爲你可以在我的世界中改變你的名字。
我假設你使用插口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
。
發件人的說法可能是您的播放器,你可以檢查通過
if (sender instanceof Player) {
Player commandPlayer = (Player) sender;
}
謝謝!是的,但是我怎麼能通過我所有的課程通過這個列表?我有一個類到每個工具包。 – MucaP
不錯!如何在我的其他課程中獲得此列表? – MucaP
勺子餵食太多,但一個很好的答案。只有一點,最好通過方法訪問列表,而不是僅通過靜態變量。 – Kerooker