下面列出了org.bukkit.util.BlockVector#getBlockX ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public RegionSave(RegionModule region) {
BlockVector min = blockAlign(region.getMin());
BlockVector max = blockAlign(region.getMax());
BlockVector size = max.minus(min).toBlockVector();
this.min = min;
this.size = size;
List<Pair<Material,Byte>> blocks = new ArrayList<>();
for (int z = min.getBlockZ(); z < max.getBlockZ(); z++) {
for (int y = min.getBlockY(); y < max.getBlockY(); y++) {
for (int x = min.getBlockX(); x < max.getBlockX(); x++) {
Block block = new Location(GameHandler.getGameHandler().getMatchWorld(), x, y, z).getBlock();
blocks.add(new ImmutablePair<>(block.getType(), block.getData()));
}
}
}
this.blocks = blocks;
}
public boolean containsBlock(BlockVector v) {
BlockVector min = this.getBlockMin();
BlockVector max = this.getBlockMaxInside();
return min.getBlockX() <= v.getBlockX()
&& v.getBlockX() <= max.getBlockX()
&& min.getBlockY() <= v.getBlockY()
&& v.getBlockY() <= max.getBlockY()
&& min.getBlockZ() <= v.getBlockZ()
&& v.getBlockZ() <= max.getBlockZ();
}
private int offset(BlockVector pos) {
if (!this.bounds.containsBlock(pos)) {
throw new IndexOutOfBoundsException("Block is not inside this BlockImage");
}
return (pos.getBlockZ() - this.origin.getBlockZ())
* this.size.getBlockX()
* this.size.getBlockY()
+ (pos.getBlockY() - this.origin.getBlockY()) * this.size.getBlockX()
+ (pos.getBlockX() - this.origin.getBlockX());
}
@Override
public void setRelativePosition(BlockVector vector) {
Validate.isTrue(isBetween(vector.getBlockX(), -MAX_SIZE, MAX_SIZE), "Structure Size (X) must be between -" + MAX_SIZE + " and " + MAX_SIZE);
Validate.isTrue(isBetween(vector.getBlockY(), -MAX_SIZE, MAX_SIZE), "Structure Size (Y) must be between -" + MAX_SIZE + " and " + MAX_SIZE);
Validate.isTrue(isBetween(vector.getBlockZ(), -MAX_SIZE, MAX_SIZE), "Structure Size (Z) must be between -" + MAX_SIZE + " and " + MAX_SIZE);
getSnapshot().position = new BlockPos(vector.getBlockX(), vector.getBlockY(), vector.getBlockZ()); // PAIL: rename relativePosition
}
@Override
public void setStructureSize(BlockVector vector) {
Validate.isTrue(isBetween(vector.getBlockX(), 0, MAX_SIZE), "Structure Size (X) must be between 0 and " + MAX_SIZE);
Validate.isTrue(isBetween(vector.getBlockY(), 0, MAX_SIZE), "Structure Size (Y) must be between 0 and " + MAX_SIZE);
Validate.isTrue(isBetween(vector.getBlockZ(), 0, MAX_SIZE), "Structure Size (Z) must be between 0 and " + MAX_SIZE);
getSnapshot().size = new BlockPos(vector.getBlockX(), vector.getBlockY(), vector.getBlockZ()); // PAIL: rename size
}
static BlockVector getRelative(BlockVector pos, BlockFace face) {
return new BlockVector(
pos.getBlockX() + face.getModX(),
pos.getBlockY() + face.getModY(),
pos.getBlockZ() + face.getModZ());
}
public static BlockVector getRelative(BlockVector pos, BlockFace face) {
return new BlockVector(pos.getBlockX() + face.getModX(),
pos.getBlockY() + face.getModY(),
pos.getBlockZ() + face.getModZ());
}
public Pair<Material,Byte> getBlockAt(BlockVector loc) {
int x = loc.getBlockX() - min.getBlockX();
int y = (loc.getBlockY() - this.min.getBlockY()) * this.size.getBlockX();
int z = (loc.getBlockZ() - this.min.getBlockZ()) * this.size.getBlockX() * this.size.getBlockY();
return blocks.get(x + y + z);
}