Помогите Как сделать локальный boolen true false

  • Автор темы Автор темы koliab
  • Дата начала Дата начала

koliab

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
kolia1_1
Дело было так: Игрок должен сломать блок затем когда сломал то он не может ломать больше блоки и ставится false , и другим становится false которые еще не сломали блок как сделать что-бы это было только для того кто сломал блок.
 
Дело было так: Игрок должен сломать блок затем когда сломал то он не может ломать больше блоки и ставится false , и другим становится false которые еще не сломали блок как сделать что-бы это было только для того кто сломал блок.
Как вариант, в ArrayList добавлять игроков, которые сломали блок, а при следующей попытке сломать блок через цикл проверять наличие игрока в листе.
 
зачем юзать мапу, если же можно просто сделать Set<String>, либо Set<UUID> и просто при ломании блока добавлять игрока в этот сет, а потом проверять, есть ли он в это сете, то отменять эвент, кек
 
зачем юзать мапу, если же можно просто сделать Set<String>, либо Set<UUID> и просто при ломании блока добавлять игрока в этот сет, а потом проверять, есть ли он в это сете, то отменять эвент, кек
То же самое с Array(G 🙂 )List-ом. Хотя вариантов, как это сделать, куча, лично мне через ArrayList удобнее.
 
Скиньте пример кода буду благодарен 🙂
 
PHP:
private static final Set<String> players = new HashSet<>(); //множество игроков, которые уже сломали блоки

@EventHandler(ignoreCancelled = true) //ловим только те события, которые не отменены
public void breakBlock(BlockBreakEvent event) {
    Player p = event.getPlayer(); //взяли игрока
    if (players.contains(p.getName())) { //проверили, если он есть во множестве, то ломал блоки
        event.setCancelled(true); //значит отменяем эвент
    } else {
        players.add(p.getName());   //иначе добавляем его в это множество
    }
}
 
зачем юзать мапу, если же можно просто сделать Set<String>, либо Set<UUID> и просто при ломании блока добавлять игрока в этот сет, а потом проверять, есть ли он в это сете, то отменять эвент, кек
Нашел к чему придраться. Одинаково же придется челику читать доки.
 
При проверке меньше символов в коде будет... и Set в данном случае подходит лучше не ТУПИТЕ!!!
 
КОД С МАПОЙ
Код:
if (map.containsKey(player.getName())) {
    if (map.get(player.getName())) {
        //TODO: выполнить код, если player in map == true
    } else {
        //TODO: выполнить код, если player in map == false
    }
}
КОД С СЕТОМ
Код:
if (set.contains(player.getName())) {
    //TODO: выполнить код, если player in set
} else {
    //TODO: выполнить код, если player not in set
}
 
Java:
if (set.add(player.getName())) {
// Был успешно добавлен
} else {
// Уже имелся ранее в коллекции
}
P.S . В посту выше можно насрать на значение, и пользоваться только наличием ключа. Так выходит ровно одно и тоже, что и сет:
Java:
if (map.put(player.getName(), Boolean.TRUE) == null) {
// Был успешно добавлен
} else {
// Уже имелся ранее в коллекции
}
 
Последнее редактирование:
По производительности плюс минус одинаковы и map, и set (вот код. можете сами по одной части кода потестить). Но set удобнее, как по мне. Ещё говорят, что он чуть меньше памяти занимает
 
Назад
Верх