use of net.modificationstation.stationapi.impl.level.chunk.ChunkSectionsAccessor in project StationAPI by ModificationStation.
the class MixinLevelManager method saveBlockStates.
@Inject(method = "method_1480(Lnet/minecraft/level/chunk/Chunk;Lnet/minecraft/level/Level;Lnet/minecraft/util/io/CompoundTag;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/io/CompoundTag;put(Ljava/lang/String;[B)V", ordinal = 0, shift = At.Shift.AFTER))
private static void saveBlockStates(Chunk chunk, Level level, CompoundTag tag, CallbackInfo ci) {
ChunkSection[] sections = ((ChunkSectionsAccessor) chunk).getSections();
ListTag listTag = new ListTag();
for (int i = 0; i < sections.length; ++i) {
ChunkSection section = sections[i];
if (section != ChunkSection.EMPTY_SECTION) {
CompoundTag compoundTag7 = new CompoundTag();
compoundTag7.put("Y", (byte) (i & 255));
section.getContainer().write(compoundTag7, "Palette", "BlockStates");
listTag.add(compoundTag7);
}
}
tag.put(SECTIONS_TAG, listTag);
}
use of net.modificationstation.stationapi.impl.level.chunk.ChunkSectionsAccessor in project StationAPI by ModificationStation.
the class MixinLevelManager method loadBlockState.
@Inject(method = "method_1479(Lnet/minecraft/level/Level;Lnet/minecraft/util/io/CompoundTag;)Lnet/minecraft/level/chunk/Chunk;", at = @At(value = "FIELD", target = "Lnet/minecraft/level/chunk/Chunk;tiles:[B", opcode = Opcodes.PUTFIELD, shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD)
private static void loadBlockState(Level arg, CompoundTag arg1, CallbackInfoReturnable<Chunk> cir, int var2, int var3, Chunk var4) {
ChunkSection[] sections = ((ChunkSectionsAccessor) var4).getSections();
if (arg1.containsKey(SECTIONS_TAG)) {
ListTag listTag = arg1.getListTag(SECTIONS_TAG);
for (int i = 0; i < listTag.size(); i++) {
CompoundTag section = (CompoundTag) listTag.get(i);
int k = section.getByte("Y");
if (section.containsKey("Palette") && section.containsKey("BlockStates")) {
ChunkSection chunkSection = new ChunkSection(k << 4);
chunkSection.getContainer().read(section.getListTag("Palette"), ((LongArrayCompound) section).getLongArray("BlockStates"));
chunkSection.calculateCounts();
if (!chunkSection.isEmpty()) {
sections[k] = chunkSection;
}
// poiStorage.initForPalette(pos, chunkSection);
}
}
}
}
Aggregations