use of com.sk89q.worldedit.regions.RegionSelector in project FastAsyncWorldEdit by IntellectualSites.
the class ServerCUIHandler method createStructureBlock.
/**
* Creates a structure block that shows the region.
*
* <p>
* Null symbolises removal of the CUI.
* </p>
*
* @param player The player to create the structure block for.
* @return The structure block, or null
*/
@Nullable
public static BaseBlock createStructureBlock(Player player) {
LocalSession session = WorldEdit.getInstance().getSessionManager().get(player);
RegionSelector regionSelector = session.getRegionSelector(player.getWorld());
int posX;
int posY;
int posZ;
int width;
int height;
int length;
if (regionSelector instanceof CuboidRegionSelector) {
if (regionSelector.isDefined()) {
try {
CuboidRegion region = ((CuboidRegionSelector) regionSelector).getRegion();
posX = region.getMinimumPoint().getBlockX();
posY = region.getMinimumPoint().getBlockY();
posZ = region.getMinimumPoint().getBlockZ();
width = region.getWidth();
height = region.getHeight();
length = region.getLength();
} catch (IncompleteRegionException e) {
// This will never happen.
e.printStackTrace();
return null;
}
} else {
CuboidRegion region = ((CuboidRegionSelector) regionSelector).getIncompleteRegion();
BlockVector3 point;
if (region.getPos1() != null) {
point = region.getPos1();
} else if (region.getPos2() != null) {
point = region.getPos2();
} else {
// No more selection
return null;
}
// Just select the point.
posX = point.getBlockX();
posY = point.getBlockY();
posZ = point.getBlockZ();
width = 1;
height = 1;
length = 1;
}
} else {
// We only support cuboid regions right now.
return null;
}
int maxSize = getMaxServerCuiSize();
if (width > maxSize || length > maxSize || height > maxSize) {
// Structure blocks have a limit of maxSize^3
return null;
}
// Borrowed this math from FAWE
final Location location = player.getLocation();
double rotX = location.getYaw();
double rotY = location.getPitch();
double xz = Math.cos(Math.toRadians(rotY));
int x = (int) (location.getX() - (-xz * Math.sin(Math.toRadians(rotX))) * 12);
int z = (int) (location.getZ() - (xz * Math.cos(Math.toRadians(rotX))) * 12);
int y = Math.max(player.getWorld().getMinY(), Math.min(Math.min(player.getWorld().getMaxY(), posY + MAX_DISTANCE), posY + 3));
// FAWE start - CBT > Map<String, Tag>
CompoundBinaryTag.Builder structureTag = CompoundBinaryTag.builder();
posX -= x;
posY -= y;
posZ -= z;
if (Math.abs(posX) > MAX_DISTANCE || Math.abs(posY) > MAX_DISTANCE || Math.abs(posZ) > MAX_DISTANCE) {
// Structure blocks have a limit
return null;
}
// FAWE start - see comment of CBT
structureTag.putString("name", "worldedit:" + player.getName());
structureTag.putString("author", player.getName());
structureTag.putString("metadata", "");
structureTag.putInt("x", x);
structureTag.putInt("y", y);
structureTag.putInt("z", z);
structureTag.putInt("posX", posX);
structureTag.putInt("posY", posY);
structureTag.putInt("posZ", posZ);
structureTag.putInt("sizeX", width);
structureTag.putInt("sizeY", height);
structureTag.putInt("sizeZ", length);
structureTag.putString("rotation", "NONE");
structureTag.putString("mirror", "NONE");
structureTag.putString("mode", "SAVE");
structureTag.putByte("ignoreEntities", (byte) 1);
structureTag.putByte("showboundingbox", (byte) 1);
structureTag.putString("id", BlockTypes.STRUCTURE_BLOCK.getId());
return BlockTypes.STRUCTURE_BLOCK.getDefaultState().toBaseBlock(structureTag.build());
// FAWE end
}
use of com.sk89q.worldedit.regions.RegionSelector in project FastAsyncWorldEdit by IntellectualSites.
the class DistanceWand method actSecondary.
@Override
public boolean actSecondary(Platform server, LocalConfiguration config, Player player, LocalSession session) {
Location target = getTarget(player);
if (target == null) {
return true;
}
RegionSelector selector = session.getRegionSelector(player.getWorld());
BlockVector3 blockPoint = target.toVector().toBlockPoint();
if (selector.selectPrimary(blockPoint, ActorSelectorLimits.forActor(player))) {
selector.explainPrimarySelection(player, session, blockPoint);
}
return true;
}
Aggregations