diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/WorldPacketRewriter1_13_1.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/WorldPacketRewriter1_13_1.java index 4c7feec4..c73cb254 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/WorldPacketRewriter1_13_1.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/WorldPacketRewriter1_13_1.java @@ -22,11 +22,7 @@ import com.viaversion.viaversion.api.minecraft.BlockFace; import com.viaversion.viaversion.api.minecraft.ClientWorld; import com.viaversion.viaversion.api.minecraft.Position; import com.viaversion.viaversion.api.minecraft.chunks.Chunk; -import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; -import com.viaversion.viaversion.api.minecraft.chunks.DataPalette; -import com.viaversion.viaversion.api.minecraft.chunks.PaletteType; import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; -import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Types; import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_13; import com.viaversion.viaversion.protocols.v1_12_2to1_13.packet.ClientboundPackets1_13; @@ -41,17 +37,7 @@ public class WorldPacketRewriter1_13_1 { ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); Chunk chunk = wrapper.passthrough(ChunkType1_13.forEnvironment(clientWorld.getEnvironment())); - for (ChunkSection section : chunk.getSections()) { - if (section == null) { - continue; - } - - DataPalette palette = section.palette(PaletteType.BLOCKS); - for (int i = 0; i < palette.size(); i++) { - int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(i)); - palette.setIdByIndex(i, mappedBlockStateId); - } - } + blockRewriter.handleChunk(chunk); }); blockRewriter.registerBlockEvent(ClientboundPackets1_13.BLOCK_EVENT); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/rewriter/BlockItemPacketRewriter1_15.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/rewriter/BlockItemPacketRewriter1_15.java index 185a126f..c148e48f 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/rewriter/BlockItemPacketRewriter1_15.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/rewriter/BlockItemPacketRewriter1_15.java @@ -20,12 +20,8 @@ package com.viaversion.viabackwards.protocol.v1_15to1_14_4.rewriter; import com.viaversion.viabackwards.api.rewriters.BackwardsItemRewriter; import com.viaversion.viabackwards.protocol.v1_15to1_14_4.Protocol1_15To1_14_4; import com.viaversion.viaversion.api.minecraft.chunks.Chunk; -import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; -import com.viaversion.viaversion.api.minecraft.chunks.DataPalette; -import com.viaversion.viaversion.api.minecraft.chunks.PaletteType; import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; -import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Types; import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_14; import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_15; @@ -89,18 +85,7 @@ public class BlockItemPacketRewriter1_15 extends BackwardsItemRewriter { - Chunk chunk = wrapper.read(ChunkType1_16_2.TYPE); - wrapper.write(ChunkType1_16.TYPE, chunk); - + blockRewriter.registerLevelChunk(ClientboundPackets1_16_2.LEVEL_CHUNK, ChunkType1_16_2.TYPE, ChunkType1_16.TYPE, (connection, chunk) -> { chunk.setIgnoreOldLightData(true); - for (int i = 0; i < chunk.getSections().length; i++) { - ChunkSection section = chunk.getSections()[i]; - if (section == null) { - continue; - } - - DataPalette palette = section.palette(PaletteType.BLOCKS); - for (int j = 0; j < palette.size(); j++) { - int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(j)); - palette.setIdByIndex(j, mappedBlockStateId); - } - } for (CompoundTag blockEntity : chunk.getBlockEntities()) { if (blockEntity != null) { diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/BlockItemPacketRewriter1_16.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/BlockItemPacketRewriter1_16.java index 044899ff..a3d8dea8 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/BlockItemPacketRewriter1_16.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/BlockItemPacketRewriter1_16.java @@ -17,7 +17,6 @@ */ package com.viaversion.viabackwards.protocol.v1_16to1_15_2.rewriter; -import com.viaversion.viabackwards.ViaBackwards; import com.viaversion.viabackwards.api.rewriters.BackwardsItemRewriter; import com.viaversion.viabackwards.api.rewriters.EnchantmentRewriter; import com.viaversion.viabackwards.api.rewriters.MapColorRewriter; @@ -25,10 +24,6 @@ import com.viaversion.viabackwards.protocol.v1_16to1_15_2.Protocol1_16To1_15_2; import com.viaversion.viabackwards.protocol.v1_16to1_15_2.data.MapColorMappings1_15_2; import com.viaversion.viabackwards.protocol.v1_16_2to1_16_1.storage.BiomeStorage; import com.viaversion.viaversion.api.connection.UserConnection; -import com.viaversion.viaversion.api.minecraft.chunks.Chunk; -import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; -import com.viaversion.viaversion.api.minecraft.chunks.DataPalette; -import com.viaversion.viaversion.api.minecraft.chunks.PaletteType; import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; @@ -105,6 +100,45 @@ public class BlockItemPacketRewriter1_16 extends BackwardsItemRewriter { + CompoundTag heightMaps = chunk.getHeightMap(); + for (Tag heightMapTag : heightMaps.values()) { + if (!(heightMapTag instanceof LongArrayTag heightMap)) { + continue; + } + + int[] heightMapData = new int[256]; + CompactArrayUtil.iterateCompactArrayWithPadding(9, heightMapData.length, heightMap.getValue(), (i, v) -> heightMapData[i] = v); + heightMap.setValue(CompactArrayUtil.createCompactArray(9, heightMapData.length, i -> heightMapData[i])); + } + + if (chunk.isBiomeData()) { + if (connection.getProtocolInfo().serverProtocolVersion().newerThanOrEqualTo(ProtocolVersion.v1_16_2)) { + BiomeStorage biomeStorage = connection.get(BiomeStorage.class); + for (int i = 0; i < 1024; i++) { + int biome = chunk.getBiomeData()[i]; + int legacyBiome = biomeStorage.legacyBiome(biome); + if (legacyBiome == -1) { + protocol.getLogger().warning("Biome sent that does not exist in the biome registry: " + biome); + legacyBiome = 1; + } + chunk.getBiomeData()[i] = legacyBiome; + } + } else { + for (int i = 0; i < 1024; i++) { + int biome = chunk.getBiomeData()[i]; + switch (biome) { + case 170, 171, 172, 173 -> chunk.getBiomeData()[i] = 8; + } + } + } + } + + if (chunk.getBlockEntities() == null) return; + for (CompoundTag blockEntity : chunk.getBlockEntities()) { + handleBlockEntity(blockEntity); + } + }); protocol.registerClientbound(ClientboundPackets1_16.SET_EQUIPMENT, ClientboundPackets1_15.SET_EQUIPPED_ITEM, wrapper -> { int entityId = wrapper.passthrough(Types.VAR_INT); @@ -143,62 +177,6 @@ public class BlockItemPacketRewriter1_16 extends BackwardsItemRewriter { - Chunk chunk = wrapper.read(ChunkType1_16.TYPE); - wrapper.write(ChunkType1_15.TYPE, chunk); - - for (int i = 0; i < chunk.getSections().length; i++) { - ChunkSection section = chunk.getSections()[i]; - if (section == null) { - continue; - } - - DataPalette palette = section.palette(PaletteType.BLOCKS); - for (int j = 0; j < palette.size(); j++) { - int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(j)); - palette.setIdByIndex(j, mappedBlockStateId); - } - } - - CompoundTag heightMaps = chunk.getHeightMap(); - for (Tag heightMapTag : heightMaps.values()) { - if (!(heightMapTag instanceof LongArrayTag heightMap)) { - continue; - } - - int[] heightMapData = new int[256]; - CompactArrayUtil.iterateCompactArrayWithPadding(9, heightMapData.length, heightMap.getValue(), (i, v) -> heightMapData[i] = v); - heightMap.setValue(CompactArrayUtil.createCompactArray(9, heightMapData.length, i -> heightMapData[i])); - } - - if (chunk.isBiomeData()) { - if (wrapper.user().getProtocolInfo().serverProtocolVersion().newerThanOrEqualTo(ProtocolVersion.v1_16_2)) { - BiomeStorage biomeStorage = wrapper.user().get(BiomeStorage.class); - for (int i = 0; i < 1024; i++) { - int biome = chunk.getBiomeData()[i]; - int legacyBiome = biomeStorage.legacyBiome(biome); - if (legacyBiome == -1) { - protocol.getLogger().warning("Biome sent that does not exist in the biome registry: " + biome); - legacyBiome = 1; - } - chunk.getBiomeData()[i] = legacyBiome; - } - } else { - for (int i = 0; i < 1024; i++) { - int biome = chunk.getBiomeData()[i]; - switch (biome) { - case 170, 171, 172, 173 -> chunk.getBiomeData()[i] = 8; - } - } - } - } - - if (chunk.getBlockEntities() == null) return; - for (CompoundTag blockEntity : chunk.getBlockEntities()) { - handleBlockEntity(blockEntity); - } - }); - blockRewriter.registerLevelEvent(ClientboundPackets1_16.LEVEL_EVENT, 1010, 2001); registerLevelParticles(ClientboundPackets1_16.LEVEL_PARTICLES, Types.DOUBLE); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/rewriter/BlockItemPacketRewriter1_17.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/rewriter/BlockItemPacketRewriter1_17.java index e6b11f7d..a2d85615 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/rewriter/BlockItemPacketRewriter1_17.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/rewriter/BlockItemPacketRewriter1_17.java @@ -28,8 +28,6 @@ import com.viaversion.viaversion.api.data.entity.EntityTracker; import com.viaversion.viaversion.api.minecraft.BlockChangeRecord; import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; -import com.viaversion.viaversion.api.minecraft.chunks.DataPalette; -import com.viaversion.viaversion.api.minecraft.chunks.PaletteType; import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; @@ -350,18 +348,7 @@ public final class BlockItemPacketRewriter1_17 extends BackwardsItemRewriter heightMapData[i])); } - for (int i = 0; i < 16; i++) { - ChunkSection section = sections[i]; - if (section == null) { - continue; - } - - DataPalette palette = section.palette(PaletteType.BLOCKS); - for (int j = 0; j < palette.size(); j++) { - int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(j)); - palette.setIdByIndex(j, mappedBlockStateId); - } - } + blockRewriter.handleChunk(chunk); chunk.getBlockEntities().removeIf(compound -> { NumberTag tag = compound.getNumberTag("y");