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

Запрет смещения с помощью поршней определенных блоков

Тема в разделе "Запросы на разработку плагинов", создана пользователем pavelf8, 7 ноя 2016.

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

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

    Баллы:
    66
    Нужен плагин, запрета смещения блоков с помощью поршней, золота, алмаза, желательно с возможностью добавить, можно без конфига если покажите куда в исходники вставлять блоки, скомпилировать потом сам смогу. Пишите ценник и время.
     
  2. Mr_RoboMan

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

    Баллы:
    123
    Ценник: бесплатно.
    Время: пару минут.
    Но я сейчас не дома((
     
  3. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Ценник: бесценно
    Время: на века
    Но у меня руки кривые((
     
  4. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Ценник: бесплатно
    Время: сию же секунду
    Скачать - https://yadi.sk/d/PS7sCdexz8f9w
    Там изи, писать нечего, отслеживать смещение блоков из листа
     
  5. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Это был сарказм
     
  6. AtomicInteger

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

    Баллы:
    76
    Можно ещё так было:
    Код:
        private ArrayList<Material> lock = new ArrayList<>();
    
        public void onEnable(){
            saveDefaultConfig();
            reloadConfig();
            lock.addAll(config.getStringList("lock").stream().map(Material::valueOf).collect(Collectors.toList()));
            getServer().getPluginManager().registerEvents(this, this);
        }
    
        @EventHandler
        public void onPiston(BlockPistonEvent e) {
           lock.stream().filter(m -> e.getBlock().getType() == m).forEach(m -> e.setCancelled(true));
        }
     
  7. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Слишком уж сложно, а грузит сервер так же
     
  8. AtomicInteger

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

    Баллы:
    76
    Ну, Java 8 по идее должна работать немного быстрее, но на практике проверить нет возможности.
     
  9. Dereku

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

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Издеваешься?
    Код:
    if (lock.contains(e.getBlock().getType())) {
        e.setCancelled(true);
    }
    И вот тут
    Код:
    lock.addAll(config.getStringList("lock").stream().map(Material::valueOf).collect(Collectors.toList()));
    Может возникнуть неприятный IllegalArgumentException (он же вроде там выбрасывается?), который сломает плагин, если там будет туфта какая ниб.
    Вывод - Stream API хоть и хорош, но не нужно его применять везде, где можно.
     
  10. AtomicInteger

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

    Баллы:
    76
    Вообще, я в логику кода не вчитывался, только заменил итераторы, ибо изначально код был таким(не учитывая мелкие погрешности декомпилятора):
    Код:
    private List<Material> lock = new ArrayList();
    
    public void onEnable() {
          this.saveDefaultConfig();
          this.reloadConfig();
          Iterator var1 = this.getConfig().getStringList("Lock").iterator();
    
          while(var1.hasNext()) {
             String l = (String)var1.next();
             this.lock.add(Material.valueOf(l));
          }
    
          Bukkit.getPluginManager().registerEvents(this, this);
       }
    
       @EventHandler
       public void onPitson(BlockPistonEvent e) {
          Material material = e.getBlock().getType();
          Iterator var3 = this.lock.iterator();
    
          while(var3.hasNext()) {
             Material m = (Material)var3.next();
             if(material == m) {
                e.setCancelled(true);
             }
          }
    
       }
    Вот, если переписать логику, но без проверок:

    Код:
            private ArrayList<String> lock = new ArrayList<>();
    
    
            public void onEnable() {
                saveDefaultConfig();
                reloadConfig();
                lock.addAll(getConfig().getStringList("lock"));
                Bukkit.getPluginManager().registerEvents(this, this);
            }
    
            @EventHandler
            public void onPiston(BlockPistonEvent event) {
                if(lock.contains(event.getBlock().getType().toString()))
                    event.setCancelled(true);
            }
        }
     
  11. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Мелкие?
    Код:
    package com.dondays.pitsoncontrol;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockPistonEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class PitsonControl
        extends JavaPlugin
        implements Listener {
    
        private List<Material> lock = new ArrayList<Material>();
    
        @Override
        public void onEnable() {
            this.saveDefaultConfig();
            this.reloadConfig();
            for(String l : this.getConfig().getStringList("Lock")) {
                this.lock.add(Material.valueOf(l));
            }
            Bukkit.getPluginManager().registerEvents(this, this);
        }
    
        @EventHandler
        public void onPitson(BlockPistonEvent e) {
            Material material = e.getBlock().getType();
            for(Material m : this.lock) {
                if(material == m) {
                    e.setCancelled(true);
                }
            }
        }
    }
    
     
  12. AtomicInteger

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

    Баллы:
    76
    Не ожидал такого от fernflower'a:lol:Но сути не меняет, код плохой.
     
  13. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Сойдет
     

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