diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/chunks/ChunkSection1_13.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/chunks/ChunkSection1_13.java index 736b6891f..4361e0d70 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/chunks/ChunkSection1_13.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/chunks/ChunkSection1_13.java @@ -135,7 +135,12 @@ public class ChunkSection1_13 implements ChunkSection { } // Read blocks - Long[] blockData = Type.LONG_ARRAY.read(input); + // Long[] blockData = Type.LONG_ARRAY.read(input); + long[] blockData = new long[Type.VAR_INT.read(input)]; + for (int i = 0; i < blockData.length; i++) { + blockData[i] = input.readLong(); + } + if (blockData.length > 0) { for (int i = 0; i < blocks.length; i++) { int bitIndex = i * bitsPerBlock; @@ -222,7 +227,7 @@ public class ChunkSection1_13 implements ChunkSection { } } for (long l : data) { - Type.LONG.write(output, l); + output.writeLong(l); } } @@ -265,7 +270,7 @@ public class ChunkSection1_13 implements ChunkSection { } } for (long l : data) { - Type.LONG.write(output, l); + output.writeLong(l); } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/data/MappingData.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/data/MappingData.java index c51cd40dc..714c0944d 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/data/MappingData.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/data/MappingData.java @@ -5,6 +5,8 @@ import com.google.common.collect.HashBiMap; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import io.netty.util.collection.IntObjectHashMap; +import io.netty.util.collection.IntObjectMap; import us.myles.ViaVersion.util.GsonUtil; import java.io.IOException; @@ -14,13 +16,13 @@ import java.util.HashMap; import java.util.Map; public class MappingData { - public static Map oldToNewBlocks = new HashMap<>(); public static BiMap oldToNewItems = HashBiMap.create(); public static Map blockTags = new HashMap<>(); public static Map itemTags = new HashMap<>(); public static Map fluidTags = new HashMap<>(); public static BiMap oldEnchantmentsIds = HashBiMap.create(); public static Map oldToNewSounds = new HashMap<>(); + public static BlockMappings blockMappings; public static void init() { JsonObject mapping1_12 = loadData("mapping-1.12.json"); @@ -28,7 +30,13 @@ public class MappingData { // TODO: Remove how verbose this is System.out.println("Loading block mapping..."); - mapIdentifiers(oldToNewBlocks, mapping1_12.getAsJsonObject("blocks"), mapping1_13.getAsJsonObject("blocks")); + try { + Class.forName("io.netty.util.collection.IntObjectMap"); + blockMappings = new BMNettyCollections(); + } catch (ClassNotFoundException e) { + blockMappings = new BMJDKCollections(); + } + blockMappings.init(mapping1_12, mapping1_13); System.out.println("Loading item mapping..."); mapIdentifiers(oldToNewItems, mapping1_12.getAsJsonObject("items"), mapping1_13.getAsJsonObject("items")); System.out.println("Loading new tags..."); @@ -115,4 +123,48 @@ public class MappingData { } } } + + public interface BlockMappings { + void init(JsonObject mapping1_12, JsonObject mapping1_13); + Integer getNewBlock(int old); + } + + private static class BMJDKCollections implements BlockMappings { + private Map oldToNew = new HashMap<>(); + + @Override + public void init(JsonObject mapping1_12, JsonObject mapping1_13) { + mapIdentifiers(oldToNew, mapping1_12.getAsJsonObject("blocks"), mapping1_13.getAsJsonObject("blocks")); + } + + @Override + public Integer getNewBlock(int old) { + return oldToNew.get(old); + } + } + + private static class BMNettyCollections implements BlockMappings { + private IntObjectMap oldToNew = new IntObjectHashMap<>(); + + @Override + public void init(JsonObject mapping1_12, JsonObject mapping1_13) { + mapIdentifiers(oldToNew, mapping1_12.getAsJsonObject("blocks"), mapping1_13.getAsJsonObject("blocks")); + } + + @Override + public Integer getNewBlock(int old) { + return oldToNew.get(old); + } + + private static void mapIdentifiers(IntObjectMap output, JsonObject oldIdentifiers, JsonObject newIdentifiers) { + for (Map.Entry entry : oldIdentifiers.entrySet()) { + Map.Entry value = findValue(newIdentifiers, entry.getValue().getAsString()); + if (value == null) { + System.out.println("No key for " + entry.getValue() + " :( "); + continue; + } + output.put(Integer.parseInt(entry.getKey()), Integer.parseInt(value.getKey())); + } + } + } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java index fcf898dca..788ac54f4 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java @@ -256,11 +256,11 @@ public class WorldPackets { } public static int toNewId(int oldId) { - Integer newId = MappingData.oldToNewBlocks.get(oldId); + Integer newId = MappingData.blockMappings.getNewBlock(oldId); if (newId != null) { return newId; } - newId = MappingData.oldToNewBlocks.get(oldId & ~0xF); // Remove data + newId = MappingData.blockMappings.getNewBlock(oldId & ~0xF); // Remove data if (newId != null) { System.out.println("Missing block " + oldId); return newId; diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_1_2to1_9_3_4/chunks/ChunkSection1_9_3_4.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_1_2to1_9_3_4/chunks/ChunkSection1_9_3_4.java index 93e5bd0a6..8539f0f14 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_1_2to1_9_3_4/chunks/ChunkSection1_9_3_4.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_1_2to1_9_3_4/chunks/ChunkSection1_9_3_4.java @@ -153,7 +153,11 @@ public class ChunkSection1_9_3_4 implements ChunkSection { } // Read blocks - Long[] blockData = Type.LONG_ARRAY.read(input); + //Long[] blockData = Type.LONG_ARRAY.read(input); + long[] blockData = new long[Type.VAR_INT.read(input)]; + for (int i = 0; i < blockData.length; i++) { + blockData[i] = input.readLong(); + } if (blockData.length > 0) { for (int i = 0; i < blocks.length; i++) { int bitIndex = i * bitsPerBlock; @@ -245,7 +249,7 @@ public class ChunkSection1_9_3_4 implements ChunkSection { } } for (long l : data) { - Type.LONG.write(output, l); + output.writeLong(l); } } @@ -288,7 +292,7 @@ public class ChunkSection1_9_3_4 implements ChunkSection { } } for (long l : data) { - Type.LONG.write(output, l); + output.writeLong(l); } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/chunks/ChunkSection1_9_1_2.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/chunks/ChunkSection1_9_1_2.java index 03bede471..fff7980bd 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/chunks/ChunkSection1_9_1_2.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9_3to1_9_1_2/chunks/ChunkSection1_9_1_2.java @@ -145,7 +145,11 @@ public class ChunkSection1_9_1_2 implements ChunkSection { } // Read blocks - Long[] blockData = Type.LONG_ARRAY.read(input); + // Long[] blockData = Type.LONG_ARRAY.read(input); + long[] blockData = new long[Type.VAR_INT.read(input)]; + for (int i = 0; i < blockData.length; i++) { + blockData[i] = input.readLong(); + } if (blockData.length > 0) { for (int i = 0; i < blocks.length; i++) { int bitIndex = i * bitsPerBlock; @@ -237,7 +241,7 @@ public class ChunkSection1_9_1_2 implements ChunkSection { } } for (long l : data) { - Type.LONG.write(output, l); + output.writeLong(l); } } @@ -280,7 +284,7 @@ public class ChunkSection1_9_1_2 implements ChunkSection { } } for (long l : data) { - Type.LONG.write(output, l); + output.writeLong(l); } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/chunks/ChunkSection1_9to1_8.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/chunks/ChunkSection1_9to1_8.java index 77ed52c0a..72a48578e 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/chunks/ChunkSection1_9to1_8.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/chunks/ChunkSection1_9to1_8.java @@ -144,7 +144,7 @@ public class ChunkSection1_9to1_8 implements ChunkSection { } } for (long l : data) { - Type.LONG.write(output, l); + output.writeLong(l); } } @@ -187,7 +187,7 @@ public class ChunkSection1_9to1_8 implements ChunkSection { } } for (long l : data) { - Type.LONG.write(output, l); + output.writeLong(l); } } diff --git a/pom.xml b/pom.xml index 8cc37e2db..7b33e133f 100644 --- a/pom.xml +++ b/pom.xml @@ -95,10 +95,12 @@ + + io.netty netty-all - 4.0.20.Final + 4.0.23.Final provided true