mirror of
https://github.com/GTMEGA/EndlessIDs.git
synced 2026-11-12 01:27:32 +00:00
109 lines
3.4 KiB
Java
109 lines
3.4 KiB
Java
package com.falsepattern.endlessids.managers;
|
|
|
|
import com.falsepattern.chunk.api.ArrayUtil;
|
|
import com.falsepattern.chunk.api.DataManager;
|
|
import com.falsepattern.endlessids.Hooks;
|
|
import com.falsepattern.endlessids.Tags;
|
|
import com.falsepattern.endlessids.mixin.helpers.IChunkMixin;
|
|
import lombok.val;
|
|
import lombok.var;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.world.chunk.Chunk;
|
|
|
|
import java.nio.ByteBuffer;
|
|
|
|
public class BiomeManager implements DataManager.PacketDataManager, DataManager.ChunkDataManager {
|
|
|
|
@Override
|
|
public String domain() {
|
|
return Tags.MODID;
|
|
}
|
|
|
|
@Override
|
|
public String id() {
|
|
return "biome";
|
|
}
|
|
|
|
@Override
|
|
public int maxPacketSize() {
|
|
return 2 * 16 * 16;
|
|
}
|
|
|
|
@Override
|
|
public void writeToBuffer(Chunk chunk, int ebsMask, boolean forceUpdate, ByteBuffer data) {
|
|
data.asShortBuffer().put(((IChunkMixin)chunk).getBiomeShortArray());
|
|
data.position(data.position() + maxPacketSize());
|
|
}
|
|
|
|
@Override
|
|
public void readFromBuffer(Chunk chunk, int ebsMask, boolean forceUpdate, ByteBuffer buffer) {
|
|
var arr = ((IChunkMixin)chunk).getBiomeShortArray();
|
|
if (arr == null) {
|
|
arr = new short[16 * 16];
|
|
((IChunkMixin)chunk).setBiomeShortArray(arr);
|
|
}
|
|
buffer.asShortBuffer().get(arr);
|
|
buffer.position(buffer.position() + maxPacketSize());
|
|
}
|
|
|
|
@Override
|
|
public boolean chunkPrivilegedAccess() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void writeChunkToNBT(Chunk chunk, NBTTagCompound nbt) {
|
|
byte[] arr = Hooks.shortToByteArray(((IChunkMixin)chunk).getBiomeShortArray());
|
|
nbt.setByteArray("Biomes16v2", arr);
|
|
}
|
|
|
|
@Override
|
|
public void readChunkFromNBT(Chunk chunk, NBTTagCompound nbt) {
|
|
var data = ((IChunkMixin) chunk).getBiomeShortArray();
|
|
if (data == null) {
|
|
data = new short[16 * 16];
|
|
((IChunkMixin)chunk).setBiomeShortArray(data);
|
|
}
|
|
if (nbt.hasKey("Biomes16v2", 7)) {
|
|
Hooks.byteToShortArray(nbt.getByteArray("Biomes16v2"), 0, data, 0, data.length * 2);
|
|
} else if (nbt.hasKey("Biomes16", 7)) { //NotEnoughBiomes DFU
|
|
Hooks.byteToShortArrayLegacy(nbt.getByteArray("Biomes16"), data);
|
|
} else if (nbt.hasKey("Biomes", 7)) { //Vanilla DFU
|
|
Hooks.scatter(nbt.getByteArray("Biomes"), data);
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public void cloneChunk(Chunk fromVanilla, Chunk toVanilla) {
|
|
val from = (IChunkMixin) fromVanilla;
|
|
val to = (IChunkMixin) toVanilla;
|
|
|
|
to.setBiomeShortArray(ArrayUtil.copyArray(from.getBiomeShortArray(), to.getBiomeShortArray()));
|
|
}
|
|
|
|
@Override
|
|
public @NotNull String version() {
|
|
return Tags.MODID;
|
|
}
|
|
|
|
@Override
|
|
public @Nullable String newInstallDescription() {
|
|
return "EndlessIDs extended biome data. Vanilla biome data is limited to 256 biomes. This allows for 65536 biomes.";
|
|
}
|
|
|
|
@Override
|
|
public @NotNull String uninstallMessage() {
|
|
return "EndlessIDs extended biome data has been uninstalled. Biomes are limited to 256,\n" +
|
|
"and any biomes with IDs above 255 in the save will be corrupted.";
|
|
}
|
|
|
|
@Override
|
|
public @Nullable String versionChangeMessage(String priorVersion) {
|
|
return null;
|
|
}
|
|
}
|