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

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

pavelf8

Активный участник
Пользователь
Баллы
66
Нужен плагин, запрета смещения блоков с помощью поршней, золота, алмаза, желательно с возможностью добавить, можно без конфига если покажите куда в исходники вставлять блоки, скомпилировать потом сам смогу. Пишите ценник и время.
 
Ценник: бесплатно.
Время: пару минут.
Но я сейчас не дома((
 
Ценник: бесценно
Время: на века
Но у меня руки кривые((
 
Ценник: бесплатно
Время: сию же секунду
Скачать - https://yadi.sk/d/PS7sCdexz8f9w

Там изи, писать нечего, отслеживать смещение блоков из листа
Можно ещё так было:
Java:
    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));
    }
 
Можно ещё так было:
Java:
    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));
    }
Слишком уж сложно, а грузит сервер так же
 
Можно ещё так было:
Java:
    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));
    }
Издеваешься?
Java:
if (lock.contains(e.getBlock().getType())) {
    e.setCancelled(true);
}
И вот тут
Java:
lock.addAll(config.getStringList("lock").stream().map(Material::valueOf).collect(Collectors.toList()));
Может возникнуть неприятный IllegalArgumentException (он же вроде там выбрасывается?), который сломает плагин, если там будет туфта какая ниб.
Вывод - Stream API хоть и хорош, но не нужно его применять везде, где можно.
 
Издеваешься?
Java:
if (lock.contains(e.getBlock().getType())) {
    e.setCancelled(true);
}
И вот тут
Java:
lock.addAll(config.getStringList("lock").stream().map(Material::valueOf).collect(Collectors.toList()));
Может возникнуть неприятный IllegalArgumentException (он же вроде там выбрасывается?), который сломает плагин, если там будет туфта какая ниб.
Вывод - Stream API хоть и хорош, но не нужно его применять везде, где можно.
Вообще, я в логику кода не вчитывался, только заменил итераторы, ибо изначально код был таким(не учитывая мелкие погрешности декомпилятора):
Java:
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);
         }
      }

   }
Вот, если переписать логику, но без проверок:

Java:
        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);
        }
    }
 
(не учитывая мелкие погрешности декомпилятора):
Мелкие?
Код:
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);
            }
        }
    }
}
 
Мелкие?
Код:
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);
            }
        }
    }
}
Не ожидал такого от fernflower'a😆Но сути не меняет, код плохой.
 
Назад
Верх