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

  • Автор темы Автор темы 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> можно было бы добавить блоки входящие в это пространство.
 
Как по мне, для этого лучше держать отдельный класс.
Java:
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;
    }
}
 
Как по мне, для этого лучше держать отдельный класс.
Java:
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;
    }
}
Спасибо большое. Все работает! :)
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх