diff --git a/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/Chunk1_9_1_2Type.java b/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/Chunk1_9_1_2Type.java index fa881c54f..c35578c0f 100644 --- a/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/Chunk1_9_1_2Type.java +++ b/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/Chunk1_9_1_2Type.java @@ -8,8 +8,7 @@ import us.myles.ViaVersion.api.minecraft.chunks.Chunk; import us.myles.ViaVersion.api.minecraft.chunks.ChunkSection; import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.api.type.types.minecraft.BaseChunkType; -import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.sotrage.ClientWorld; -import us.myles.ViaVersion.protocols.protocol1_9to1_8.storage.ClientChunks; +import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; import java.util.ArrayList; import java.util.BitSet; diff --git a/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/ChunkSection1_9_1_2.java b/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/ChunkSection1_9_1_2.java index 70109671e..dc0341f97 100644 --- a/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/ChunkSection1_9_1_2.java +++ b/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/ChunkSection1_9_1_2.java @@ -7,7 +7,6 @@ import us.myles.ViaVersion.api.minecraft.chunks.ChunkSection; import us.myles.ViaVersion.api.minecraft.chunks.NibbleArray; import us.myles.ViaVersion.api.type.Type; -import java.util.Arrays; import java.util.List; public class ChunkSection1_9_1_2 implements ChunkSection { @@ -47,7 +46,7 @@ public class ChunkSection1_9_1_2 implements ChunkSection { setBlock(index(x, y, z), type, data); } - public int getBlockId(int x, int y, int z){ + public int getBlockId(int x, int y, int z) { int index = blocks[index(x, y, z)]; return palette.indexOf(index) >> 4; } @@ -97,9 +96,9 @@ public class ChunkSection1_9_1_2 implements ChunkSection { * Read blocks from input stream. * This reads all the block related data: * * * @param input The buffer to read from. @@ -111,34 +110,62 @@ public class ChunkSection1_9_1_2 implements ChunkSection { palette.clear(); // Reaad bits per block - int bitsPerBlock = input.readByte(); + int bitsPerBlock = input.readUnsignedByte(); long maxEntryValue = (1L << bitsPerBlock) - 1; - if(bitsPerBlock == 0) { - throw new RuntimeException("Aye me m8 its the global palette!"); + if (bitsPerBlock == 0) { + bitsPerBlock = 13; } + if (bitsPerBlock < 4) { + bitsPerBlock = 4; + } + if (bitsPerBlock > 8) { + bitsPerBlock = 13; + } + System.out.println("bps: " + bitsPerBlock); + if(bitsPerBlock != 13) { + // Read palette + int paletteLength = Type.VAR_INT.read(input); - // Read palette - int paletteLength = Type.VAR_INT.read(input); - for(int i = 0; i < paletteLength; i++) { - palette.add(Type.VAR_INT.read(input)); + for (int i = 0; i < paletteLength; i++) { + if (bitsPerBlock != 13) { + palette.add(Type.VAR_INT.read(input)); + } else { + Type.VAR_INT.read(input); + } + } + System.out.println("length of palette: " + paletteLength); } // Read blocks int blockLength = Type.VAR_INT.read(input); - long[] blockData = new long[blockLength]; - for(int i = 0; i < blocks.length; i++) { - int bitIndex = i * bitsPerBlock; - int startIndex = bitIndex / 64; - int endIndex = ((i + 1) * bitsPerBlock - 1) / 64; - int startBitSubIndex = bitIndex % 64; - if(startIndex == endIndex) { - blocks[i] = (int) (blockData[startIndex] >>> startBitSubIndex & maxEntryValue); - } else { - int endBitSubIndex = 64 - startBitSubIndex; - blocks[i] = (int) ((blockData[startIndex] >>> startBitSubIndex | blockData[endIndex] << endBitSubIndex) & maxEntryValue); + if (blockLength > 0) { + long[] blockData = new long[blockLength]; + System.out.println("Block Length: " + blockData.length); + for (int i = 0; i < blocks.length; i++) { + int bitIndex = i * bitsPerBlock; + int startIndex = bitIndex / 64; + int endIndex = ((i + 1) * bitsPerBlock - 1) / 64; + int startBitSubIndex = bitIndex % 64; + int val; + if (startIndex == endIndex) { + val = (int) (blockData[startIndex] >>> startBitSubIndex & maxEntryValue); + } else { + int endBitSubIndex = 64 - startBitSubIndex; + val = (int) ((blockData[startIndex] >>> startBitSubIndex | blockData[endIndex] << endBitSubIndex) & maxEntryValue); + } + + if (bitsPerBlock == 13) { + int type = val >> 4; + int data = val & 0xF; + + setBlock(i, type, data); + } else { + blocks[i] = val; + } } } + System.out.println("done"); } /** @@ -161,7 +188,7 @@ public class ChunkSection1_9_1_2 implements ChunkSection { public void readSkyLight(ByteBuf input) { byte[] handle = new byte[LIGHT_LENGTH]; input.readBytes(handle); - if(skyLight != null) { + if (skyLight != null) { skyLight.setHandle(handle); return; } diff --git a/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/Protocol1_9_3TO1_9_1_2.java b/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/Protocol1_9_3TO1_9_1_2.java index 2437523a6..a2086bd22 100644 --- a/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/Protocol1_9_3TO1_9_1_2.java +++ b/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/Protocol1_9_3TO1_9_1_2.java @@ -13,15 +13,10 @@ import us.myles.ViaVersion.api.remapper.PacketHandler; import us.myles.ViaVersion.api.remapper.PacketRemapper; import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.packets.State; -import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.sotrage.ClientWorld; -import us.myles.ViaVersion.protocols.protocol1_9to1_8.chunks.Chunk1_9to1_8; -import us.myles.ViaVersion.protocols.protocol1_9to1_8.chunks.ChunkSection1_9to1_8; -import us.myles.ViaVersion.protocols.protocol1_9to1_8.storage.ClientChunks; -import us.myles.ViaVersion.protocols.protocol1_9to1_8.types.ChunkType; +import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; import java.util.ArrayList; import java.util.List; -import java.util.Objects; public class Protocol1_9_3TO1_9_1_2 extends Protocol { @Override @@ -81,34 +76,34 @@ public class Protocol1_9_3TO1_9_1_2 extends Protocol { ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); Chunk1_9_1_2Type type = new Chunk1_9_1_2Type(clientWorld); - if (wrapper.isReadable(type, 0)) { - Chunk chunk = wrapper.read(type); + // if (wrapper.isReadable(type, 0)) { + Chunk chunk = wrapper.read(type); // if(rawChunk instanceof Chunk1_9to1_8) { // throw new RuntimeException("Sweet berry candies"); // } // Chunk1_9_1_2 chunk = (Chunk1_9_1_2) rawChunk; - List tags = new ArrayList<>(); - for (int i = 0; i < chunk.getSections().length; i++) { - ChunkSection section = chunk.getSections()[i]; - if (section == null) - continue; + List tags = new ArrayList<>(); + for (int i = 0; i < chunk.getSections().length; i++) { + ChunkSection section = chunk.getSections()[i]; + if (section == null) + continue; - for (int x = 0; x < 16; x++) - for (int y = 0; y < 16; y++) - for (int z = 0; z < 16; z++) { - int block = section.getBlockId(x, y, z); - if (FakeTileEntity.hasBlock(block)) { - // NOT SURE WHY Y AND Z WORK THIS WAY, TODO: WORK OUT WHY THIS IS OR FIX W/E BROKE IT - tags.add(FakeTileEntity.getFromBlock(x + (chunk.getX() << 4), z + (i << 4), y + (chunk.getZ() << 4), block)); - } + for (int x = 0; x < 16; x++) + for (int y = 0; y < 16; y++) + for (int z = 0; z < 16; z++) { + int block = section.getBlockId(x, y, z); + if (FakeTileEntity.hasBlock(block)) { + // NOT SURE WHY Y AND Z WORK THIS WAY, TODO: WORK OUT WHY THIS IS OR FIX W/E BROKE IT + tags.add(FakeTileEntity.getFromBlock(x + (chunk.getX() << 4), z + (i << 4), y + (chunk.getZ() << 4), block)); } - } - - wrapper.write(type, chunk); - wrapper.write(Type.NBT_ARRAY, tags.toArray(new CompoundTag[0])); + } } + + wrapper.write(type, chunk); + wrapper.write(Type.NBT_ARRAY, tags.toArray(new CompoundTag[0])); } + // } }); } }); diff --git a/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/sotrage/ClientWorld.java b/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/storage/ClientWorld.java similarity index 93% rename from src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/sotrage/ClientWorld.java rename to src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/storage/ClientWorld.java index 3acfd44fe..394274146 100644 --- a/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/sotrage/ClientWorld.java +++ b/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/storage/ClientWorld.java @@ -1,4 +1,4 @@ -package us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.sotrage; +package us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage; import lombok.Getter; import org.bukkit.World;