@Override public T get(BaseVector3i pos) { checkRelativeCoords(pos.x(), pos.y(), pos.z()); return relData.get(pos); }
@Override public void set(BaseVector3i pos, T value) { checkRelativeCoords(pos.x(), pos.y(), pos.z()); relData.put(pos, value); // TODO: consider using an immutable vector here }
/** * Create a region with center point and x,y,z coordinate extents size * @param center the center point of region * @param extents the extents size of each side of region * @return a new region base on the center point and extents size */ public static Region3i createFromCenterExtents(BaseVector3i center, BaseVector3i extents) { Vector3i min = new Vector3i(center.x() - extents.x(), center.y() - extents.y(), center.z() - extents.z()); Vector3i max = new Vector3i(center.x() + extents.x(), center.y() + extents.y(), center.z() + extents.z()); return createFromMinMax(min, max); }
@Override public boolean setSunlight(BaseVector3i pos, byte amount) { return setSunlight(pos.x(), pos.y(), pos.z(), amount); }
@Override public byte getSunlightRegen(BaseVector3i pos) { return getSunlightRegen(pos.x(), pos.y(), pos.z()); }
@Override public boolean setLight(BaseVector3i pos, byte amount) { return setLight(pos.x(), pos.y(), pos.z(), amount); }
@Override public T getWorld(BaseVector3i pos) { return getWorld(pos.x(), pos.y(), pos.z()); }
@Override public boolean setSunlightRegen(BaseVector3i pos, byte amount) { return setSunlightRegen(pos.x(), pos.y(), pos.z(), amount); }
@Override public byte getLight(BaseVector3i pos) { return getLight(pos.x(), pos.y(), pos.z()); }
@Override public Biome getBiome(BaseVector3i pos) { return getBiome(pos.x(), pos.y(), pos.z()); }
@Override public Biome setBiome(BaseVector3i pos, Biome biome) { return setBiome(pos.x(), pos.y(), pos.z(), biome); }
@Override public void setExtraData(int index, BaseVector3i pos, int value) { setExtraData(index, pos.x(), pos.y(), pos.z(), value); }
@Override public T getWorld(BaseVector3i pos) { return getWorld(pos.x(), pos.y(), pos.z()); }
@Override public byte getSunlight(BaseVector3i pos) { return getSunlight(pos.x(), pos.y(), pos.z()); }
@Override public T get(BaseVector3i pos) { return get(pos.x(), pos.y(), pos.z()); }
/** * Create a region with center point and extents size * @param center the center point of region * @param extent the extents size of region * @return a new region base on the center point and extents size */ public static Region3i createFromCenterExtents(BaseVector3i center, int extent) { Vector3i min = new Vector3i(center.x() - extent, center.y() - extent, center.z() - extent); Vector3i max = new Vector3i(center.x() + extent, center.y() + extent, center.z() + extent); return createFromMinMax(min, max); }
/** * @param min the min point of the region * @param size the size of the region * @return a new region base on the min point and region size, empty if the size is negative */ public static Region3i createFromMinAndSize(BaseVector3i min, BaseVector3i size) { if (size.x() <= 0 || size.y() <= 0 || size.z() <= 0) { return empty(); } return new Region3i(min, size); }
@Override public void generateChunk(CoreChunk chunk, Region chunkRegion) { TreeFacet facet = chunkRegion.getFacet(TreeFacet.class); for (Map.Entry<BaseVector3i, TreeGenerator> entry : facet.getRelativeEntries().entrySet()) { BaseVector3i pos = entry.getKey(); TreeGenerator treeGen = entry.getValue(); int seed = relativeToWorld(facet, pos).hashCode(); Random random = new FastRandom(seed); treeGen.generate(blockManager, chunk, random, pos.x(), pos.y(), pos.z()); } }
@Override public final Block getBlock(BaseVector3i pos) { short id = (short) blockData.get(pos.x(), pos.y(), pos.z()); return blockManager.getBlock(id); }
protected final Vector3i relativeToWorld(SparseFacet3D facet, BaseVector3i pos) { Region3i worldRegion = facet.getWorldRegion(); Region3i relativeRegion = facet.getRelativeRegion(); return new Vector3i( pos.x() - relativeRegion.minX() + worldRegion.minX(), pos.y() - relativeRegion.minY() + worldRegion.minY(), pos.z() - relativeRegion.minZ() + worldRegion.minZ()); } }