1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Sitmobedaf, 5 окт 2017.

  1. Автор темы
    Sitmobedaf

    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"));
                        }
                    }
                }
     
  2. TheZefirrkka

    TheZefirrkka Активный участник Пользователь

    Баллы:
    76
    Хорошая лесенка из if'ов.
     
  3. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Код:
    for (UUID id : r.getOwners().getUniqueIds())
    .contains не поможет?
     
  4. Автор темы
    Sitmobedaf

    Sitmobedaf Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    SiT
    Думал об этом...
     
  5. Автор темы
    Sitmobedaf

    Sitmobedaf Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    SiT
    Как будет лучше?
     
  6. Автор темы
    Sitmobedaf

    Sitmobedaf Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    SiT
    Проскакивает, если одновременно зажимать обе кнопки мыши.
    Есть PlayerBucketEvent, но при его использовании выдаётся ошибка.
     
  7. iD3LSY

    iD3LSY Активный участник Пользователь

    Баллы:
    76
    Жалко, что ошибку ты не кинул :/

    PHP:
    if(r.getOwners().stream.anyMatch(uuid -> uuid.equals(id))) {
        
    can true;
    }
    А вообще, лучше реально через contains.
     
    Последнее редактирование: 6 окт 2017
  8. Автор темы
    Sitmobedaf

    Sitmobedaf Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    SiT
    Через contains я уже сделал. Ошибок никаких нет.
    Проскакивает из-за того, что нет жёсткой привязки к действию (не знаю, как это более точно объяснить).
     
  9. Дух системы

    Дух системы Новичок

    Баллы:
    6
    java довольно взрослая платформа, так что про утечку памяти даже не заморачивайся. другое дело когда ты лепишь итерации с динамическими переменными. тогда в памяти мертвым грузом они будут висеть до тех пор, пока их не обнулят или приложение не закроется. просто не забывай после итерации обнулять переменные, если они не прописаны в глобале и не понадобятся позже.

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

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