Skip to content

Commit

Permalink
add javadoc to mca library and make some functions public
Browse files Browse the repository at this point in the history
  • Loading branch information
Querz committed Sep 26, 2019
1 parent d39d8ef commit badcf2d
Show file tree
Hide file tree
Showing 4 changed files with 312 additions and 9 deletions.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,7 @@ local.properties
doc/

# ignore out
out/
out/

# ignore patches
*.patch
183 changes: 183 additions & 0 deletions src/main/java/net/querz/nbt/mca/Chunk.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ public class Chunk {
this.lastMCAUpdate = lastMCAUpdate;
}

/**
* Create a new chunk based on raw base data from a region file.
* @param data The raw base data to be used.
*/
public Chunk(CompoundTag data) {
this.data = data;
initReferences();
Expand Down Expand Up @@ -86,6 +90,14 @@ private void initReferences() {
}
}

/**
* Serializes this chunk to a <code>RandomAccessFile</code>.
* @param raf The RandomAccessFile to be written to.
* @param xPos The x-coordinate of the chunk.
* @param zPos The z-coodrinate of the chunk.
* @return The amount of bytes written to the RandomAccessFile.
* @throws IOException When something went wrong during writing.
*/
public int serialize(RandomAccessFile raf, int xPos, int zPos) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
try (DataOutputStream nbtOut = new DataOutputStream(new BufferedOutputStream(CompressionType.ZLIB.compress(baos)))) {
Expand All @@ -98,6 +110,11 @@ public int serialize(RandomAccessFile raf, int xPos, int zPos) throws IOExceptio
return rawData.length + 5;
}

/**
* Reads chunk data from a RandomAccessFile. The RandomAccessFile must already be at the correct position.
* @param raf The RandomAccessFile to read the chunk data from.
* @throws IOException When something went wrong during reading.
*/
public void deserialize(RandomAccessFile raf) throws IOException {
byte compressionTypeByte = raf.readByte();
CompressionType compressionType = CompressionType.getFromID(compressionTypeByte);
Expand All @@ -114,13 +131,28 @@ public void deserialize(RandomAccessFile raf) throws IOException {
}
}

/**
* Fetches a biome id at a specific block column in this chunk.
* The coordinates can be absolute coordinates or relative to the region or chunk.
* @param blockX The x-coordinate of the block column.
* @param blockZ The z-coordinate of the block column.
* @return The biome id or -1 if the biomes are not correctly initialized.
*/
public int getBiomeAt(int blockX, int blockZ) {
if (biomes == null || biomes.length != 256) {
return -1;
}
return biomes[getBlockIndex(blockX, blockZ)];
}

/**
* Sets a biome id at a specific block column.
* The coordinates can be absolute coordinates or relative to the region or chunk.
* @param blockX The x-coordinate of the block column.
* @param blockZ The z-coordinate of the block column.
* @param biomeID The biome id to be set.
* When set to a negative number, Minecraft will replace it with the block column's default biome.
*/
public void setBiomeAt(int blockX, int blockZ, int biomeID) {
if (biomes == null || biomes.length != 256) {
biomes = new int[256];
Expand All @@ -131,6 +163,14 @@ public void setBiomeAt(int blockX, int blockZ, int biomeID) {
biomes[getBlockIndex(blockX, blockZ)] = biomeID;
}

/**
* Fetches the block state at a specific block location in this chunk.
* The block coordinate can be absolute or relative to the region or chunk.
* @param blockX The x-coordinate of the block.
* @param blockY The y-coordinate of the block.
* @param blockZ The z-coordinate of the block.
* @return The block state or null if a section at the location does not exist.
*/
public CompoundTag getBlockStateAt(int blockX, int blockY, int blockZ) {
Section section = sections[MCAUtil.blockToChunk(blockY)];
if (section == null) {
Expand All @@ -139,6 +179,17 @@ public CompoundTag getBlockStateAt(int blockX, int blockY, int blockZ) {
return section.getBlockStateAt(blockX, blockY, blockZ);
}

/**
* Sets a block state at a specific location.
* The block coordinates can be absolute or relative to the region or chunk.
* @param blockX The x-coordinate of the block.
* @param blockY The y-coordinate of the block.
* @param blockZ The z-coordinate of the block.
* @param state The block state to be set.
* @param cleanup When <code>true</code>, it will cleanup all palettes of this chunk.
* This option should only be used moderately to avoid unnecessary recalculation of the palette indices.
* Recalculating the Palette should only be executed once right before saving the Chunk to file.
*/
public void setBlockStateAt(int blockX, int blockY, int blockZ, CompoundTag state, boolean cleanup) {
int sectionIndex = MCAUtil.blockToChunk(blockY);
Section section = sections[sectionIndex];
Expand All @@ -148,149 +199,281 @@ public void setBlockStateAt(int blockX, int blockY, int blockZ, CompoundTag stat
section.setBlockStateAt(blockX, blockY, blockZ, state, cleanup);
}

/**
* @return The DataVersion of this chunk.
*/
public int getDataVersion() {
return dataVersion;
}

/**
* Sets the DataVersion of this chunk. This does not check if the data of this chunk conforms
* to that DataVersion, that is the responsibility of the developer.
* @param dataVersion The DataVersion to be set.
*/
public void setDataVersion(int dataVersion) {
this.dataVersion = dataVersion;
}

/**
* @return The timestamp when this region file was last updated in seconds since 1970-01-01.
*/
public int getLastMCAUpdate() {
return lastMCAUpdate;
}

/**
* Sets the timestamp when this region file was last updated in seconds since 1970-01-01.
* @param lastMCAUpdate The time in seconds since 1970-01-01.
*/
public void setLastMCAUpdate(int lastMCAUpdate) {
this.lastMCAUpdate = lastMCAUpdate;
}

/**
* @return The generation station of this chunk.
*/
public String getStatus() {
return status;
}

/**
* Sets the generation status of this chunk.
* @param status The generation status of this chunk.
*/
public void setStatus(String status) {
this.status = status;
}

/**
* Fetches the section at the given y-coordinate.
* @param sectionY The y-coordinate of the section in this chunk ranging from 0 to 15.
* @return The Section.
*/
public Section getSection(int sectionY) {
return sections[sectionY];
}

/**
* Sets a section at a givesn y-coordinate
* @param sectionY The y-coordinate of the section in this chunk ranging from 0 to 15.
* @param section The section to be set.
*/
public void setSection(int sectionY, Section section) {
sections[sectionY] = section;
}

/**
* @return The timestamp when this chunk was last updated as a UNIX timestamp.
*/
public long getLastUpdate() {
return lastUpdate;
}

/**
* Sets the time when this chunk was last updated as a UNIX timestamp.
* @param lastUpdate The UNIX timestamp.
*/
public void setLastUpdate(long lastUpdate) {
this.lastUpdate = lastUpdate;
}

/**
* @return The cumulative amount of time players have spent in this chunk in ticks.
*/
public long getInhabitedTime() {
return inhabitedTime;
}

/**
* Sets the cumulative amount of time players have spent in this chunk in ticks.
* @param inhabitedTime The time in ticks.
*/
public void setInhabitedTime(long inhabitedTime) {
this.inhabitedTime = inhabitedTime;
}

/**
* @return A matrix of biome IDs for all block columns in this chunk.
*/
public int[] getBiomes() {
return biomes;
}

/**
* Sets the biome IDs for this chunk.
* @param biomes The biome ID matrix of this chunk. Must have a length of <code>256</code>.
* @throws IllegalArgumentException When the biome matrix does not have a length of <code>256</code>
* or is <code>null</code>
*/
public void setBiomes(int[] biomes) {
if (biomes != null && biomes.length != 256) {
throw new IllegalArgumentException("biomes array must have a length of 256");
}
this.biomes = biomes;
}

/**
* @return The height maps of this chunk.
*/
public CompoundTag getHeightMaps() {
return heightMaps;
}

/**
* Sets the height maps of this chunk.
* @param heightMaps The height maps.
*/
public void setHeightMaps(CompoundTag heightMaps) {
this.heightMaps = heightMaps;
}

/**
* @return The carving masks of this chunk.
*/
public CompoundTag getCarvingMasks() {
return carvingMasks;
}

/**
* Sets the carving masks of this chunk.
* @param carvingMasks The carving masks.
*/
public void setCarvingMasks(CompoundTag carvingMasks) {
this.carvingMasks = carvingMasks;
}

/**
* @return The entities of this chunk.
*/
public ListTag<CompoundTag> getEntities() {
return entities;
}

/**
* Sets the entities of this chunk.
* @param entities The entities.
*/
public void setEntities(ListTag<CompoundTag> entities) {
this.entities = entities;
}

/**
* @return The tile entities of this chunk.
*/
public ListTag<CompoundTag> getTileEntities() {
return tileEntities;
}

/**
* Sets the tile entities of this chunk.
* @param tileEntities The tile entities of this chunk.
*/
public void setTileEntities(ListTag<CompoundTag> tileEntities) {
this.tileEntities = tileEntities;
}

/**
* @return The tile ticks of this chunk.
*/
public ListTag<CompoundTag> getTileTicks() {
return tileTicks;
}

/**
* Sets the tile ticks of this chunk.
* @param tileTicks Thee tile ticks.
*/
public void setTileTicks(ListTag<CompoundTag> tileTicks) {
this.tileTicks = tileTicks;
}

/**
* @return The liquid ticks of this chunk.
*/
public ListTag<CompoundTag> getLiquidTicks() {
return liquidTicks;
}

/**
* Sets the liquid ticks of this chunk.
* @param liquidTicks The liquid ticks.
*/
public void setLiquidTicks(ListTag<CompoundTag> liquidTicks) {
this.liquidTicks = liquidTicks;
}

/**
* @return The light sources in this chunk.
*/
public ListTag<ListTag<?>> getLights() {
return lights;
}

/**
* Sets the light sources in this chunk.
* @param lights The light sources.
*/
public void setLights(ListTag<ListTag<?>> lights) {
this.lights = lights;
}

/**
* @return THe liquids to be ticked in this chunk.
*/
public ListTag<ListTag<?>> getLiquidsToBeTicked() {
return liquidsToBeTicked;
}

/**
* Sets the liquids to be ticked in this chunk.
* @param liquidsToBeTicked The liquids to be ticked.
*/
public void setLiquidsToBeTicked(ListTag<ListTag<?>> liquidsToBeTicked) {
this.liquidsToBeTicked = liquidsToBeTicked;
}

/**
* @return Stuff to be ticked in this chunk.
*/
public ListTag<ListTag<?>> getToBeTicked() {
return toBeTicked;
}

/**
* Sets stuff to be ticked in this chunk.
* @param toBeTicked The stuff to be ticked.
*/
public void setToBeTicked(ListTag<ListTag<?>> toBeTicked) {
this.toBeTicked = toBeTicked;
}

/**
* @return Things that are in post processing in this chunk.
*/
public ListTag<ListTag<?>> getPostProcessing() {
return postProcessing;
}

/**
* Sets things to be post processed in this chunk.
* @param postProcessing The things to be post processed.
*/
public void setPostProcessing(ListTag<ListTag<?>> postProcessing) {
this.postProcessing = postProcessing;
}

/**
* @return Data about structures in this chunk.
*/
public CompoundTag getStructures() {
return structures;
}

/**
* Sets data about structures in this chunk.
* @param structures The data about structures.
*/
public void setStructures(CompoundTag structures) {
this.structures = structures;
}
Expand Down
Loading

0 comments on commit badcf2d

Please sign in to comment.