From 16b68f7e3d196df3d085ec31d5b4b6e10048bd81 Mon Sep 17 00:00:00 2001 From: KennyTV Date: Mon, 8 Jun 2020 14:37:54 +0200 Subject: [PATCH] Use fastutil soft wrappers --- .../viabackwards/api/data/VBItemMappings.java | 9 +++- .../api/rewriters/EntityRewriterBase.java | 8 ++-- .../rewriters/LegacyBlockItemRewriter.java | 8 ++-- .../api/rewriters/LegacySoundRewriter.java | 7 +-- .../PotionSplashHandler.java | 8 ++-- .../packets/BlockItemPackets1_11.java | 2 +- .../packets/EntityPackets1_11.java | 4 +- .../data/MapColorMapping.java | 6 +-- .../FlowerPotHandler.java | 13 +++-- .../data/EntityTypeMapping.java | 17 ++++--- .../packets/EntityPackets1_13.java | 13 ++--- .../storage/BackwardsBlockStorage.java | 38 ++++++++------- .../data/EntityTypeMapping.java | 47 ------------------- .../packets/EntityPackets1_14.java | 17 +++---- .../packets/BlockItemPackets1_15.java | 2 +- 15 files changed, 81 insertions(+), 118 deletions(-) delete mode 100644 core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/data/EntityTypeMapping.java diff --git a/core/src/main/java/nl/matsv/viabackwards/api/data/VBItemMappings.java b/core/src/main/java/nl/matsv/viabackwards/api/data/VBItemMappings.java index 14ccbe81..192f1d6b 100644 --- a/core/src/main/java/nl/matsv/viabackwards/api/data/VBItemMappings.java +++ b/core/src/main/java/nl/matsv/viabackwards/api/data/VBItemMappings.java @@ -1,8 +1,11 @@ package nl.matsv.viabackwards.api.data; import nl.matsv.viabackwards.ViaBackwards; +import org.jetbrains.annotations.Nullable; import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.data.MappingDataLoader; +import us.myles.ViaVersion.util.fastutil.CollectionUtil; +import us.myles.ViaVersion.util.fastutil.IntObjectMap; import us.myles.viaversion.libs.gson.JsonElement; import us.myles.viaversion.libs.gson.JsonObject; @@ -14,9 +17,10 @@ import java.util.Map; */ public class VBItemMappings { - private final Map itemMapping = new HashMap<>(); + private final IntObjectMap itemMapping; public VBItemMappings(JsonObject oldMapping, JsonObject newMapping, JsonObject diffMapping) { + Map itemMapping = new HashMap<>(); for (Map.Entry entry : diffMapping.entrySet()) { JsonObject object = entry.getValue().getAsJsonObject(); String mappedIdName = object.getAsJsonPrimitive("id").getAsString(); @@ -41,8 +45,11 @@ public class VBItemMappings { String name = object.getAsJsonPrimitive("name").getAsString(); itemMapping.put(id, new MappedItem(mappedId, name)); } + + this.itemMapping = CollectionUtil.createIntObjectMap(itemMapping); } + @Nullable public MappedItem getMappedItem(int id) { return itemMapping.get(id); } diff --git a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriterBase.java b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriterBase.java index 49cbaab9..f114f9e4 100644 --- a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriterBase.java +++ b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriterBase.java @@ -23,6 +23,8 @@ import us.myles.ViaVersion.api.remapper.PacketRemapper; import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.exception.CancelException; import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; +import us.myles.ViaVersion.util.fastutil.CollectionUtil; +import us.myles.ViaVersion.util.fastutil.IntMap; import java.util.ArrayList; import java.util.Comparator; @@ -43,7 +45,7 @@ public abstract class EntityRewriterBase extends Re private final List metaHandlers = new ArrayList<>(); private final MetaType displayNameMetaType; private final int displayNameIndex; - private Map typeMapping; + protected IntMap typeMapping; EntityRewriterBase(T protocol) { this(protocol, MetaType1_9.String, 2); @@ -99,7 +101,7 @@ public abstract class EntityRewriterBase extends Re * @param new type class */ public & EntityType> void mapTypes(EntityType[] oldTypes, Class newTypeClass) { - if (typeMapping == null) typeMapping = new HashMap<>(oldTypes.length); + if (typeMapping == null) typeMapping = CollectionUtil.createIntMap(oldTypes.length); for (EntityType oldType : oldTypes) { try { T newType = Enum.valueOf(newTypeClass, oldType.name()); @@ -122,7 +124,7 @@ public abstract class EntityRewriterBase extends Re } private void mapEntityDirect(int oldType, int newType) { - if (typeMapping == null) typeMapping = new HashMap<>(); + if (typeMapping == null) typeMapping = CollectionUtil.createIntMap(); typeMapping.put(oldType, newType); } diff --git a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/LegacyBlockItemRewriter.java b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/LegacyBlockItemRewriter.java index fb71eabd..983579a4 100644 --- a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/LegacyBlockItemRewriter.java +++ b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/LegacyBlockItemRewriter.java @@ -22,6 +22,8 @@ import us.myles.ViaVersion.api.minecraft.chunks.ChunkSection; import us.myles.ViaVersion.api.minecraft.item.Item; import us.myles.ViaVersion.api.rewriters.IdRewriteFunction; import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.ChatRewriter; +import us.myles.ViaVersion.util.fastutil.CollectionUtil; +import us.myles.ViaVersion.util.fastutil.IntObjectMap; import us.myles.viaversion.libs.gson.JsonElement; import us.myles.viaversion.libs.gson.JsonObject; import us.myles.viaversion.libs.gson.JsonPrimitive; @@ -35,13 +37,13 @@ import java.util.Map; public abstract class LegacyBlockItemRewriter extends ItemRewriterBase { - private static final Map> LEGACY_MAPPINGS = new HashMap<>(); - protected final Map replacementData; + private static final Map> LEGACY_MAPPINGS = new HashMap<>(); + protected final IntObjectMap replacementData; static { JsonObject jsonObject = VBMappingDataLoader.loadFromDataDir("legacy-mappings.json"); for (Map.Entry entry : jsonObject.entrySet()) { - Map mappings = new HashMap<>(); + IntObjectMap mappings = CollectionUtil.createIntObjectMap(8); LEGACY_MAPPINGS.put(entry.getKey(), mappings); for (Map.Entry dataEntry : entry.getValue().getAsJsonObject().entrySet()) { JsonObject object = dataEntry.getValue().getAsJsonObject(); diff --git a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/LegacySoundRewriter.java b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/LegacySoundRewriter.java index 0c00d222..84bc788f 100644 --- a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/LegacySoundRewriter.java +++ b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/LegacySoundRewriter.java @@ -11,12 +11,13 @@ package nl.matsv.viabackwards.api.rewriters; import nl.matsv.viabackwards.api.BackwardsProtocol; +import us.myles.ViaVersion.util.fastutil.CollectionUtil; +import us.myles.ViaVersion.util.fastutil.IntObjectMap; -import java.util.HashMap; import java.util.Map; public abstract class LegacySoundRewriter extends Rewriter { - protected final Map soundRewrites = new HashMap<>(); + protected final IntObjectMap soundRewrites = CollectionUtil.createIntObjectMap(64); protected LegacySoundRewriter(T protocol) { super(protocol); @@ -43,7 +44,7 @@ public abstract class LegacySoundRewriter extends R SoundData data = soundRewrites.get(soundId); if (data != null) return data.getReplacementSound(); - for (Map.Entry entry : soundRewrites.entrySet()) { + for (Map.Entry entry : soundRewrites.getMap().entrySet()) { if (soundId > entry.getKey()) { if (entry.getValue().isAdded()) { newSoundId--; diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/PotionSplashHandler.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/PotionSplashHandler.java index 423937c1..677759cc 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/PotionSplashHandler.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/PotionSplashHandler.java @@ -1,11 +1,11 @@ package nl.matsv.viabackwards.protocol.protocol1_10to1_11; -import java.util.HashMap; -import java.util.Map; +import us.myles.ViaVersion.util.fastutil.CollectionUtil; +import us.myles.ViaVersion.util.fastutil.IntMap; public class PotionSplashHandler { - private static final Map DATA = new HashMap<>(); + private static final IntMap DATA = CollectionUtil.createIntMap(14); static { DATA.put(2039713, 5); // night vision @@ -24,7 +24,7 @@ public class PotionSplashHandler { DATA.put(3381504, 36); // luck } - public static Integer getOldData(int data) { + public static int getOldData(int data) { return DATA.get(data); } } diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/BlockItemPackets1_11.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/BlockItemPackets1_11.java index bcd0426d..905cae70 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/BlockItemPackets1_11.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/BlockItemPackets1_11.java @@ -339,7 +339,7 @@ public class BlockItemPackets1_11 extends LegacyBlockItemRewriter new MappedLegacyBlockItem(52, (short) -1, null, false)); + MappedLegacyBlockItem data = replacementData.getMap().computeIfAbsent(52, s -> new MappedLegacyBlockItem(52, (short) -1, null, false)); data.setBlockEntityHandler((b, tag) -> { EntityIdRewriter.toClientSpawner(tag, true); return tag; diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/EntityPackets1_11.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/EntityPackets1_11.java index a4455b93..503289f8 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/EntityPackets1_11.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/EntityPackets1_11.java @@ -54,8 +54,8 @@ public class EntityPackets1_11 extends LegacyEntityRewriter wrapper.set(Type.INT, 0, 2002); } - Integer mappedData = PotionSplashHandler.getOldData(wrapper.get(Type.INT, 1)); - if (mappedData != null) { + int mappedData = PotionSplashHandler.getOldData(wrapper.get(Type.INT, 1)); + if (mappedData != -1) { wrapper.set(Type.INT, 1, mappedData); } } diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_11_1to1_12/data/MapColorMapping.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_11_1to1_12/data/MapColorMapping.java index fad1554d..23aa0d3c 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_11_1to1_12/data/MapColorMapping.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_11_1to1_12/data/MapColorMapping.java @@ -1,10 +1,10 @@ package nl.matsv.viabackwards.protocol.protocol1_11_1to1_12.data; -import java.util.HashMap; -import java.util.Map; +import us.myles.ViaVersion.util.fastutil.CollectionUtil; +import us.myles.ViaVersion.util.fastutil.IntMap; public class MapColorMapping { - private static final Map MAPPING = new HashMap<>(); + private static final IntMap MAPPING = CollectionUtil.createIntMap(64); static { MAPPING.put(144, 59); // (148, 124, 114) -> (148, 124, 114) diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/block_entity_handlers/FlowerPotHandler.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/block_entity_handlers/FlowerPotHandler.java index 44c06071..3d4dc362 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/block_entity_handlers/FlowerPotHandler.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/block_entity_handlers/FlowerPotHandler.java @@ -13,20 +13,19 @@ package nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.block_entity_handler import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.providers.BackwardsBlockEntityProvider; import us.myles.ViaVersion.api.Pair; import us.myles.ViaVersion.api.data.UserConnection; +import us.myles.ViaVersion.util.fastutil.CollectionUtil; +import us.myles.ViaVersion.util.fastutil.IntObjectMap; import us.myles.viaversion.libs.opennbt.tag.builtin.CompoundTag; import us.myles.viaversion.libs.opennbt.tag.builtin.IntTag; import us.myles.viaversion.libs.opennbt.tag.builtin.StringTag; -import java.util.HashMap; -import java.util.Map; - public class FlowerPotHandler implements BackwardsBlockEntityProvider.BackwardsBlockEntityHandler { - private static final Map> flowers = new HashMap<>(); + private static final IntObjectMap> FLOWERS = CollectionUtil.createIntObjectMap(22); private static final Pair AIR = new Pair<>("minecraft:air", (byte) 0); static { - flowers.put(5265, AIR); + FLOWERS.put(5265, AIR); register(5266, "minecraft:sapling", (byte) 0); register(5267, "minecraft:sapling", (byte) 1); register(5268, "minecraft:sapling", (byte) 2); @@ -51,7 +50,7 @@ public class FlowerPotHandler implements BackwardsBlockEntityProvider.BackwardsB } private static void register(int id, String identifier, byte data) { - flowers.put(id, new Pair<>(identifier, data)); + FLOWERS.put(id, new Pair<>(identifier, data)); } public static boolean isFlowah(int id) { @@ -59,7 +58,7 @@ public class FlowerPotHandler implements BackwardsBlockEntityProvider.BackwardsB } public Pair getOrDefault(int blockId) { - Pair pair = flowers.get(blockId); + Pair pair = FLOWERS.get(blockId); return pair != null ? pair : AIR; } diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/data/EntityTypeMapping.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/data/EntityTypeMapping.java index 1ab30a21..0d195dae 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/data/EntityTypeMapping.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/data/EntityTypeMapping.java @@ -1,27 +1,26 @@ package nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.data; import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.EntityTypeRewriter; +import us.myles.ViaVersion.util.fastutil.CollectionUtil; +import us.myles.ViaVersion.util.fastutil.IntMap; import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; public class EntityTypeMapping { - private static final Map TYPES = new HashMap<>(); + private static final IntMap TYPES = CollectionUtil.createIntMap(); static { try { - Field field = EntityTypeRewriter.class.getDeclaredField("entityTypes"); + Field field = EntityTypeRewriter.class.getDeclaredField("ENTITY_TYPES"); field.setAccessible(true); - Map entityTypes = (Map) field.get(null); - entityTypes.forEach((type1_12, type1_13) -> EntityTypeMapping.TYPES.put(type1_13, type1_12)); + IntMap entityTypes = (IntMap) field.get(null); + entityTypes.getMap().forEach((type1_12, type1_13) -> EntityTypeMapping.TYPES.put(type1_13, type1_12)); } catch (NoSuchFieldException | IllegalAccessException ex) { ex.printStackTrace(); } } - public static Optional getOldId(int type1_13) { - return Optional.ofNullable(TYPES.get(type1_13)); + public static int getOldId(int type1_13) { + return TYPES.get(type1_13); } } diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/packets/EntityPackets1_13.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/packets/EntityPackets1_13.java index 6e415edb..dbcce7ff 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/packets/EntityPackets1_13.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/packets/EntityPackets1_13.java @@ -141,12 +141,13 @@ public class EntityPackets1_13 extends LegacyEntityRewriter oldId = EntityTypeMapping.getOldId(type); - if (!oldId.isPresent()) { - if (!hasData(entityType)) + int oldId = EntityTypeMapping.getOldId(type); + if (oldId == -1) { + if (!hasData(entityType)) { ViaBackwards.getPlatform().getLogger().warning("Could not find 1.12 entity type for 1.13 entity type " + type + "/" + entityType); + } } else { - wrapper.set(Type.VAR_INT, 1, oldId.get()); + wrapper.set(Type.VAR_INT, 1, oldId); } } }); @@ -266,7 +267,7 @@ public class EntityPackets1_13 extends LegacyEntityRewriter whitelist = new HashSet<>(); + private static final IntSet WHITELIST = CollectionUtil.createIntSet(779); static { // Flower pots - for (int i = 5265; i <= 5286; i++) - whitelist.add(i); + for (int i = 5265; i <= 5286; i++) { + WHITELIST.add(i); + } // Add those beds - for (int i = 0; i < (16 * 16); i++) - whitelist.add(748 + i); + for (int i = 0; i < (16 * 16); i++) { + WHITELIST.add(748 + i); + } // Add the banners - for (int i = 6854; i <= 7173; i++) - whitelist.add(i); + for (int i = 6854; i <= 7173; i++) { + WHITELIST.add(i); + } // Spawner - whitelist.add(1647); + WHITELIST.add(1647); // Skulls - for (int i = 5447; i <= 5566; i++) - whitelist.add(i); + for (int i = 5447; i <= 5566; i++) { + WHITELIST.add(i); + } // pistons for (int i = 1028; i <= 1039; i++) { - whitelist.add(i); + WHITELIST.add(i); } for (int i = 1047; i <= 1082; i++) { - whitelist.add(i); + WHITELIST.add(i); } for (int i = 1099; i <= 1110; i++) { - whitelist.add(i); + WHITELIST.add(i); } } - private final Map blocks = new ConcurrentHashMap<>(); public BackwardsBlockStorage(UserConnection user) { @@ -63,7 +67,7 @@ public class BackwardsBlockStorage extends StoredObject { } public void checkAndStore(Position position, int block) { - if (!whitelist.contains(block)) { + if (!WHITELIST.contains(block)) { // Remove if not whitelisted blocks.remove(position); return; @@ -73,7 +77,7 @@ public class BackwardsBlockStorage extends StoredObject { } public boolean isWelcome(int block) { - return whitelist.contains(block); + return WHITELIST.contains(block); } public Integer get(Position position) { diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/data/EntityTypeMapping.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/data/EntityTypeMapping.java deleted file mode 100644 index cfbd6f07..00000000 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/data/EntityTypeMapping.java +++ /dev/null @@ -1,47 +0,0 @@ -package nl.matsv.viabackwards.protocol.protocol1_13_2to1_14.data; - -import us.myles.ViaVersion.api.entities.Entity1_13Types; -import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.data.EntityTypeRewriter; - -import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.Map; - -public class EntityTypeMapping { - private static final Map entityTypes = new HashMap<>(); - private static final Map oldEntityToOldObject = new HashMap<>(); - - static { - try { - Field field = EntityTypeRewriter.class.getDeclaredField("entityTypes"); - field.setAccessible(true); - Map entityTypes = (Map) field.get(null); - entityTypes.forEach((type1_12, type1_13) -> EntityTypeMapping.entityTypes.put(type1_13, type1_12)); - } catch (NoSuchFieldException | IllegalAccessException ex) { - ex.printStackTrace(); - } - for (Map.Entry newToOld : entityTypes.entrySet()) { - Entity1_13Types.EntityType type1_13 = Entity1_13Types.getTypeFromId(newToOld.getValue(), false); - Entity1_13Types.ObjectType object1_13 = null; - for (Entity1_13Types.ObjectType objectType : Entity1_13Types.ObjectType.values()) { - if (objectType.getType() == type1_13) { - object1_13 = objectType; - break; - } - } - if (object1_13 != null) { - oldEntityToOldObject.put(type1_13.getId(), object1_13.getId()); - } - } - for (Entity1_13Types.EntityType type : Entity1_13Types.EntityType.values()) { - if (!entityTypes.containsValue(type.getId())) { - entityTypes.put(type.getId(), type.getId()); - } - } - entityTypes.put(50, 48); // ocelot - } - - public static Integer getOldId(int type1_14) { - return entityTypes.get(type1_14); - } -} diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/EntityPackets1_14.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/EntityPackets1_14.java index a213b2dd..4131961c 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/EntityPackets1_14.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/EntityPackets1_14.java @@ -8,7 +8,6 @@ import nl.matsv.viabackwards.api.entities.storage.EntityTracker; import nl.matsv.viabackwards.api.exceptions.RemovedValueException; import nl.matsv.viabackwards.api.rewriters.LegacyEntityRewriter; import nl.matsv.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14; -import nl.matsv.viabackwards.protocol.protocol1_13_2to1_14.data.EntityTypeMapping; import nl.matsv.viabackwards.protocol.protocol1_13_2to1_14.storage.ChunkLightStorage; import nl.matsv.viabackwards.protocol.protocol1_13_2to1_14.storage.EntityPositionStorage1_14; import us.myles.ViaVersion.api.PacketWrapper; @@ -134,8 +133,8 @@ public class EntityPackets1_14 extends LegacyEntityRewriter { Metadata meta = e.getData(); int typeId = meta.getMetaType().getTypeID(); @@ -575,10 +576,4 @@ public class EntityPackets1_14 extends LegacyEntityRewriter