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

Помогите Как выделить регион?

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

Статус темы:
Закрыта.
  1. Автор темы
    BCyclik

    BCyclik Активный участник

    Баллы:
    61
    Имя в Minecraft:
    BCyclik
    Доброго времени суток. Возник такой вопрос, как выделить регион не подключая (WorldEdit, WorldGuard и т.д).
    Пример:
    Location minLoc, maxLoc;
    @EventHandler
    private void PlayerInteract(PlayerInteractEvent e){
    Player player = e.getPlayer();
    if(e.getAction() == Action.RIGHT_CLICK_BLOCK) {
    minLoc = e.getClickedBlock().getLocation();
    }
    if(e.getAction() == Action.LEFT_CLICK_BLOCK) {
    maxLoc = e.getClickedBlock().getLocation();
    }

    В данном коде предоставлено только выделение двух крайних точек. А как сделать так чтобы в пространстве между ними происходили какие то определенные действия. Например: в List<Block> можно было бы добавить блоки входящие в это пространство.
     
  2. Blc_Dragon

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

    Баллы:
    76
    Как по мне, для этого лучше держать отдельный класс.
    Код:
    import java.util.HashSet;
    
    import org.bukkit.Location;
    import org.bukkit.block.Block;
    
    public class Selection{
    
        protected Location min;
        protected Location max;
        protected HashSet<Block> blocks = new HashSet<>();
     
        public Selection(Location first, Location second){
            this.max=first;
            this.min=second;
            this.normalise();
        }
     
        public void normalise(){ //нормализуем
            double minX,minY,minZ,maxX,maxY,maxZ;
         
            if (this.min.getX()<this.max.getX()) {
                minX=this.min.getX();
                maxX=this.max.getX();
            }else {
                minX=this.max.getX();
                maxX=this.min.getX();
            }
         
            if (this.min.getY()<this.max.getY()) {
                minY=this.min.getY();
                maxY=this.max.getY();
            }else {
                minY=this.max.getY();
                maxY=this.min.getY();
            }
         
            if (this.min.getZ()<this.max.getZ()) {
                minZ=this.min.getZ();
                maxZ=this.max.getZ();
            }else {
                minZ=this.max.getZ();
                maxZ=this.min.getZ();
            }
            this.min = new Location(this.min.getWorld(), minX, minY, minZ);
            this.max = new Location(this.min.getWorld(), maxX, maxY, maxZ);
        }
     
        public Location getMin() {
            return this.min;
        }
        public void setMin(Location min) {
            this.min = min;
        }
        public Location getMax() {
            return this.max;
        }
        public void setMax(Location max) {
            this.max = max;
        }
     
        public void fillBlocks(){
            for (int y = this.min.getBlockY(); y<=this.max.getBlockY(); y++){
                for (int x = this.min.getBlockX(); x<=this.max.getBlockX(); x++){
                    for (int z = this.min.getBlockZ(); z<=this.max.getBlockZ(); z++){
                        this.blocks.add(new Location(this.min.getWorld(), x, y, z).getBlock());
                    }
                }
            }
        }
     
        public HashSet<Block> getBlocks(){
            if (this.blocks.isEmpty()) this.fillBlocks(); //делается, чтобы не генерировать это каждый раз. экономьте ресурсы
            return this.blocks;
        }
    }
    
     
  3. Автор темы
    BCyclik

    BCyclik Активный участник

    Баллы:
    61
    Имя в Minecraft:
    BCyclik
    Спасибо большое. Все работает! :)
     
Статус темы:
Закрыта.

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