Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

В разработке Разрешить разлив лавы только в своём регионе

Sitmobedaf

Старожил
Пользователь
Баллы
103
Имя в Minecraft
SiT
Нормально ли будет работать такой код при одновременном использовании лавы несколькими игроками, и не будут ли оставаться лишние данные в памяти?

Код:
        Boolean can = false;
        if (conf.getBoolean("ItemRestrictor.Enabled")) {
            Player p = e.getPlayer();
            UUID uuid = p.getUniqueId();
            if (e.getItem() != null) {
                Material item = e.getItem().getType();
                if (item.equals(Material.LAVA_BUCKET) || item.equals(Material.WATER_BUCKET)) {
                    for (ProtectedRegion r : WGBukkit.getRegionManager(e.getClickedBlock().getWorld()).getApplicableRegions(e.getClickedBlock().getLocation())) {
                        for (UUID id : r.getOwners().getUniqueIds()) {
                            if (id.equals(uuid)) {
                                can = true;
                            }
                        }
                    }
                    if (!can) {
                        e.setCancelled(true);
                        p.sendMessage(conf.getString("Messages.ItemIsRestricted"));
                    }
                }
            }
 
Код:
for (UUID id : r.getOwners().getUniqueIds())
.contains не поможет?
 
Проскакивает, если одновременно зажимать обе кнопки мыши.
Есть PlayerBucketEvent, но при его использовании выдаётся ошибка.
 
Проскакивает, если одновременно зажимать обе кнопки мыши.
Есть PlayerBucketEvent, но при его использовании выдаётся ошибка.
Жалко, что ошибку ты не кинул :/

PHP:
if(r.getOwners().stream.anyMatch(uuid -> uuid.equals(id))) {
    can = true;
}

А вообще, лучше реально через contains.
 
Последнее редактирование:
Жалко, что ошибку ты не кинул :/

PHP:
if(r.getOwners().stream.anyMatch(uuid -> uuid.equals(id))) {
    can = true;
}

А вообще, лучше реально через contains.
Через contains я уже сделал. Ошибок никаких нет.
Проскакивает из-за того, что нет жёсткой привязки к действию (не знаю, как это более точно объяснить).
 
Нормально ли будет работать такой код при одновременном использовании лавы несколькими игроками, и не будут ли оставаться лишние данные в памяти?
java довольно взрослая платформа, так что про утечку памяти даже не заморачивайся. другое дело когда ты лепишь итерации с динамическими переменными. тогда в памяти мертвым грузом они будут висеть до тех пор, пока их не обнулят или приложение не закроется. просто не забывай после итерации обнулять переменные, если они не прописаны в глобале и не понадобятся позже.

а по теме: почему ты привязываешься к player?
 
Последнее редактирование:

Поделиться этой страницей

Назад
Верх