classpublicPriority 3
GeneratedChunkSection
com.hypixel.hytale.server.core.universe.world.worldgen.GeneratedChunkSection
11
Methods
11
Public Methods
4
Fields
1
Constructors
Constructors
public
GeneratedChunkSection()Methods
Public Methods (11)
public
void deserialize(ByteBuf buf, int version)public
int getBlock(int x, int y, int z)public
int[] getData()public
int getFiller(int x, int y, int z)public
int getRotationIndex(int x, int y, int z)public
boolean isSolidAir()public
void reset()public
void serialize(ByteBuf buf)public
void setBlock(int x, int y, int z, int block, int rotation, int filler)public
void setBlock(int index, int block, int rotation, int filler)public
BlockSection toChunkSection()@Nonnull
Fields
Private/Package Fields (4)
private
int[] dataprivate
ISectionPalette fillersprivate
ISectionPalette rotationsprivate
int[] tempRelated Classes
Source Code
package com.hypixel.hytale.server.core.universe.world.worldgen;
import com.hypixel.hytale.math.util.ChunkUtil;
import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
import com.hypixel.hytale.server.core.universe.world.chunk.section.palette.EmptySectionPalette;
import com.hypixel.hytale.server.core.universe.world.chunk.section.palette.ISectionPalette;
import io.netty.buffer.ByteBuf;
import it.unimi.dsi.fastutil.ints.IntArrays;
import java.util.Arrays;
import javax.annotation.Nonnull;
public class GeneratedChunkSection {
@Nonnull
private final int[] data = new int[32768];
@Nonnull
private final int[] temp = new int[32768];
private ISectionPalette fillers = EmptySectionPalette.INSTANCE;
private ISectionPalette rotations = EmptySectionPalette.INSTANCE;
public GeneratedChunkSection() {
}
public int getRotationIndex(int x, int y, int z) {
return this.getRotationIndex(ChunkUtil.indexBlock(x, y, z));
}
private int getRotationIndex(int index) {
return this.rotations.get(index);
}
public int getBlock(int x, int y, int z) {
return this.getBlock(ChunkUtil.indexBlock(x, y, z));
}
public int getFiller(int x, int y, int z) {
return this.fillers.get(ChunkUtil.indexBlock(x, y, z));
}
private int getBlock(int index) {
return this.data[index];
}
public void setBlock(int x, int y, int z, int block, int rotation, int filler) {
this.setBlock(ChunkUtil.indexBlock(x, y, z), block, rotation, filler);
}
public void setBlock(int index, int block, int rotation, int filler) {
this.data[index] = block;
ISectionPalette.SetResult result = this.fillers.set(index, filler);
if (result == ISectionPalette.SetResult.REQUIRES_PROMOTE) {
this.fillers = this.fillers.promote();
this.fillers.set(index, filler);
} else if (result == ISectionPalette.SetResult.ADDED_OR_REMOVED && this.fillers.shouldDemote()) {
this.fillers = this.fillers.demote();
}
result = this.rotations.set(index, rotation);
if (result == ISectionPalette.SetResult.REQUIRES_PROMOTE) {
this.rotations = this.rotations.promote();
this.rotations.set(index, rotation);
} else if (result == ISectionPalette.SetResult.ADDED_OR_REMOVED && this.rotations.shouldDemote()) {
this.rotations = this.rotations.demote();
}
}
public int[] getData() {
return this.data;
}
public void reset() {
Arrays.fill(this.data, 0);
}
public boolean isSolidAir() {
for (int i = 0; i < this.data.length; i++) {
if (this.data[i] != 0) {
return false;
}
}
return true;
}
@Nonnull
public BlockSection toChunkSection() {
System.arraycopy(this.data, 0, this.temp, 0, 32768);
IntArrays.unstableSort(this.temp);
int count = 1;
for (int i = 1; i < 32768; i++) {
if (this.temp[i] != this.temp[i - 1]) {
this.temp[count++] = this.temp[i];
}
}
return new BlockSection(ISectionPalette.from(this.data, this.temp, count), this.fillers, this.rotations);
}
public void serialize(@Nonnull ByteBuf buf) {
for (int i = 0; i < 32768; i++) {
buf.writeInt(this.data[i]);
}
}
public void deserialize(@Nonnull ByteBuf buf, int version) {
int[] blocks = new int[32768];
for (int i = 0; i < blocks.length; i++) {
blocks[i] = buf.readInt();
}
}
}