2016-11-21 8 views
2

Итак, я разрабатываю Java-плагин, и в этот день мне нужно сделать что-то вроде серверов KitPvP, игрок выбирает комплект, а затем им разрешается только получить снова, как только они умерли.bukkit - Предотвратить проигрыватель от запуска команды в бою

Я пробовал это, используя строки, чтобы проверить, находится ли игрок в команде, но я действительно не знаю, что/«как» делать с ними. Какие-либо предложения?

ответ

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, но вы должны попытаться использовать Uni queids, так как вы можете изменить свое имя в minecraft.

+0

Ницца! Как получить этот список в других классах? – MucaP

+1

Слишком много ложки, но хороший ответ. Как раз в один момент, лучше получить доступ к списку с помощью методов, чем только через статическую переменную. – Kerooker

-1

Я предполагаю, что вы используете Патрубок API и you'r, вероятно, искал что-то вроде этого 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

 Смежные вопросы

  • Нет связанных вопросов^_^