diff --git a/api/src/main/java/com/viaversion/viaversion/api/ViaAPI.java b/api/src/main/java/com/viaversion/viaversion/api/ViaAPI.java index 2500b52a2..6a8922915 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/ViaAPI.java +++ b/api/src/main/java/com/viaversion/viaversion/api/ViaAPI.java @@ -63,7 +63,7 @@ public interface ViaAPI { * @return API version incremented with meaningful API changes */ default int apiVersion() { - return 17; + return 18; } /** diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/BiMappings.java b/api/src/main/java/com/viaversion/viaversion/api/data/BiMappings.java index 313895a9b..89604eb40 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/BiMappings.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/BiMappings.java @@ -29,5 +29,14 @@ public interface BiMappings extends Mappings { * * @return inverse of the bimappings */ + @Override BiMappings inverse(); + + static BiMappings of(final Mappings mappings) { + return of(mappings, mappings.inverse()); + } + + static BiMappings of(final Mappings mappings, final Mappings inverse) { + return new BiMappingsBase(mappings, inverse); + } } diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/IntArrayBiMappings.java b/api/src/main/java/com/viaversion/viaversion/api/data/BiMappingsBase.java similarity index 60% rename from api/src/main/java/com/viaversion/viaversion/api/data/IntArrayBiMappings.java rename to api/src/main/java/com/viaversion/viaversion/api/data/BiMappingsBase.java index 14da31adf..c22ff15d9 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/IntArrayBiMappings.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/BiMappingsBase.java @@ -22,48 +22,21 @@ */ package com.viaversion.viaversion.api.data; -import java.util.Arrays; +public class BiMappingsBase implements BiMappings { -public class IntArrayBiMappings implements BiMappings { + protected final Mappings mappings; + private final BiMappingsBase inverse; - private final Mappings mappings; - private final IntArrayBiMappings inverse; - - protected IntArrayBiMappings(final IntArrayMappings mappings) { + protected BiMappingsBase(final Mappings mappings, final Mappings inverse) { this.mappings = mappings; - - final int[] raw = mappings.raw(); - final int[] inverseMappings = new int[mappings.mappedSize()]; - Arrays.fill(inverseMappings, -1); - for (int id = 0; id < raw.length; id++) { - final int mappedId = raw[id]; - inverseMappings[mappedId] = id; - } - this.inverse = new IntArrayBiMappings(new IntArrayMappings(inverseMappings, raw.length), this); + this.inverse = new BiMappingsBase(inverse, this); } - protected IntArrayBiMappings(final Mappings mappings, final IntArrayBiMappings inverse) { + private BiMappingsBase(final Mappings mappings, final BiMappingsBase inverse) { this.mappings = mappings; this.inverse = inverse; } - private IntArrayBiMappings(final int[] mappings, final int mappedIds) { - this(new IntArrayMappings(mappings, mappedIds)); - } - - public static IntArrayBiMappings of(final IntArrayMappings mappings) { - return new IntArrayBiMappings(mappings); - } - - public static Mappings.Builder builder() { - return new Builder<>(IntArrayBiMappings::new); - } - - @Override - public BiMappings inverse() { - return this.inverse; - } - @Override public int getNewId(final int id) { return mappings.getNewId(id); @@ -86,7 +59,7 @@ public class IntArrayBiMappings implements BiMappings { } @Override - public Mappings createInverse() { - return mappings.createInverse(); + public BiMappings inverse() { + return this.inverse; } } diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/FullMappings.java b/api/src/main/java/com/viaversion/viaversion/api/data/FullMappings.java index 8ceef82d4..7372ccd19 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/FullMappings.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/FullMappings.java @@ -74,5 +74,6 @@ public interface FullMappings extends Mappings { */ @Nullable String mappedIdentifier(String identifier); - FullMappings createInverse(); + @Override + FullMappings inverse(); } diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/FullMappingsBase.java b/api/src/main/java/com/viaversion/viaversion/api/data/FullMappingsBase.java index cba06f757..be4aa4507 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/FullMappingsBase.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/FullMappingsBase.java @@ -41,7 +41,7 @@ public class FullMappingsBase implements FullMappings { this.stringToId = toInverseMap(unmappedIdentifiers); this.mappedStringToId = toInverseMap(mappedIdentifiers); this.idToString = unmappedIdentifiers.toArray(EMPTY_ARRAY); - this. mappedIdToString = mappedIdentifiers.toArray(EMPTY_ARRAY); + this.mappedIdToString = mappedIdentifiers.toArray(EMPTY_ARRAY); } private FullMappingsBase(final Object2IntMap stringToId, final Object2IntMap mappedStringToId, final String[] idToString, final String[] mappedIdToString, final Mappings mappings) { @@ -111,8 +111,8 @@ public class FullMappingsBase implements FullMappings { } @Override - public FullMappings createInverse() { - return new FullMappingsBase(mappedStringToId, stringToId, mappedIdToString, idToString, mappings.createInverse()); + public FullMappings inverse() { + return new FullMappingsBase(mappedStringToId, stringToId, mappedIdToString, idToString, mappings.inverse()); } private static Object2IntMap toInverseMap(final List list) { diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/IdentityMappings.java b/api/src/main/java/com/viaversion/viaversion/api/data/IdentityMappings.java index 00eea0c69..1dc78908f 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/IdentityMappings.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/IdentityMappings.java @@ -53,7 +53,7 @@ public class IdentityMappings implements Mappings { } @Override - public Mappings createInverse() { + public Mappings inverse() { return new IdentityMappings(mappedSize, size); } } diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/Int2IntMapBiMappings.java b/api/src/main/java/com/viaversion/viaversion/api/data/Int2IntMapBiMappings.java index 4d7bdc61d..3b4725df4 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/Int2IntMapBiMappings.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/Int2IntMapBiMappings.java @@ -22,9 +22,7 @@ */ package com.viaversion.viaversion.api.data; -import com.viaversion.viaversion.util.Int2IntBiHashMap; import com.viaversion.viaversion.util.Int2IntBiMap; -import it.unimi.dsi.fastutil.ints.Int2IntMap; public class Int2IntMapBiMappings implements BiMappings { @@ -46,11 +44,6 @@ public class Int2IntMapBiMappings implements BiMappings { return new Int2IntMapBiMappings(mappings); } - @Override - public BiMappings inverse() { - return this.inverse; - } - @Override public int getNewId(final int id) { return mappings.get(id); @@ -72,12 +65,7 @@ public class Int2IntMapBiMappings implements BiMappings { } @Override - public Mappings createInverse() { - final Int2IntBiMap inverseCopy = new Int2IntBiHashMap(inverse.mappings.size()); - inverseCopy.defaultReturnValue(-1); - for (final Int2IntMap.Entry entry : inverse.mappings.int2IntEntrySet()) { - inverseCopy.put(entry.getIntKey(), entry.getIntValue()); - } - return of(inverseCopy); + public BiMappings inverse() { + return this.inverse; } } diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/Int2IntMapMappings.java b/api/src/main/java/com/viaversion/viaversion/api/data/Int2IntMapMappings.java index 95c0a88f9..5e8063abe 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/Int2IntMapMappings.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/Int2IntMapMappings.java @@ -64,11 +64,13 @@ public class Int2IntMapMappings implements Mappings { } @Override - public Mappings createInverse() { + public Mappings inverse() { final Int2IntMap inverse = new Int2IntOpenHashMap(); inverse.defaultReturnValue(-1); for (final Int2IntMap.Entry entry : mappings.int2IntEntrySet()) { - inverse.put(entry.getIntValue(), entry.getIntKey()); + if (entry.getIntValue() != -1) { + inverse.putIfAbsent(entry.getIntValue(), entry.getIntKey()); + } } return of(inverse, size()); } diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/IntArrayMappings.java b/api/src/main/java/com/viaversion/viaversion/api/data/IntArrayMappings.java index b91fe831d..911ae74df 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/IntArrayMappings.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/IntArrayMappings.java @@ -37,6 +37,7 @@ public class IntArrayMappings implements Mappings { return new IntArrayMappings(mappings, mappedIds); } + @Deprecated public static Builder builder() { return Mappings.builder(IntArrayMappings::new); } @@ -62,12 +63,12 @@ public class IntArrayMappings implements Mappings { } @Override - public Mappings createInverse() { + public Mappings inverse() { final int[] inverse = new int[mappedIds]; Arrays.fill(inverse, -1); for (int id = 0; id < mappings.length; id++) { final int mappedId = mappings[id]; - if (mappedId != -1) { + if (mappedId != -1 && inverse[mappedId] == -1) { inverse[mappedId] = id; } } diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java b/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java index 03b90d686..11f29fe0b 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java @@ -110,20 +110,16 @@ public class MappingDataBase implements MappingData { } protected @Nullable Mappings loadMappings(final CompoundTag data, final String key) { - return shouldLoad(key) ? MappingDataLoader.loadMappings(data, key) : null; + return MappingDataLoader.loadMappings(data, key); } protected @Nullable FullMappings loadFullMappings(final CompoundTag data, final CompoundTag unmappedIdentifiers, final CompoundTag mappedIdentifiers, final String key) { - return shouldLoad(key) ? MappingDataLoader.loadFullMappings(data, unmappedIdentifiers, mappedIdentifiers, key) : null; + return MappingDataLoader.loadFullMappings(data, unmappedIdentifiers, mappedIdentifiers, key); } protected @Nullable BiMappings loadBiMappings(final CompoundTag data, final String key) { - if (!shouldLoad(key)) { - return null; - } - final Mappings mappings = loadMappings(data, key); - return mappings != null ? IntArrayBiMappings.of((IntArrayMappings) mappings) : null; + return mappings != null ? BiMappings.of(mappings) : null; } private void loadTags(final RegistryType type, final CompoundTag data) { @@ -246,10 +242,6 @@ public class MappingDataBase implements MappingData { return mappedId; } - protected boolean shouldLoad(final String key) { - return true; - } - protected void loadExtras(final CompoundTag data) { } } diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataLoader.java b/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataLoader.java index faaf2ccd5..8f31af942 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataLoader.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataLoader.java @@ -248,6 +248,7 @@ public final class MappingDataLoader { ); } + @Deprecated public static void mapIdentifiers(final int[] output, final JsonObject unmappedIdentifiers, final JsonObject mappedIdentifiers, @Nullable final JsonObject diffIdentifiers, final boolean warnOnMissing) { final Object2IntMap newIdentifierMap = MappingDataLoader.indexedObjectToMap(mappedIdentifiers); for (final Map.Entry entry : unmappedIdentifiers.entrySet()) { @@ -285,6 +286,7 @@ public final class MappingDataLoader { return mappedId; } + @Deprecated public static void mapIdentifiers(final int[] output, final JsonArray unmappedIdentifiers, final JsonArray mappedIdentifiers, @Nullable final JsonObject diffIdentifiers, final boolean warnOnMissing) { final Object2IntMap newIdentifierMap = MappingDataLoader.arrayToMap(mappedIdentifiers); for (int id = 0; id < unmappedIdentifiers.size(); id++) { diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/Mappings.java b/api/src/main/java/com/viaversion/viaversion/api/data/Mappings.java index 538f0a5e7..7a470b643 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/Mappings.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/Mappings.java @@ -84,11 +84,11 @@ public interface Mappings { int mappedSize(); /** - * Creates a new Mappings instance of the same type with the same mappings, but with the keys and values swapped. + * Mappings with keys and values swapped. * - * @return a new Mappings instance with the same mappings, but with the keys and values swapped + * @return mappings with keys and values swapped */ - Mappings createInverse(); + Mappings inverse(); static Builder builder(final MappingsSupplier supplier) { return new Builder<>(supplier); @@ -100,6 +100,7 @@ public interface Mappings { T supply(int[] mappings, int mappedIds); } + @Deprecated class Builder { protected final MappingsSupplier supplier; diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/entity/IdentityBiMappings.java b/api/src/main/java/com/viaversion/viaversion/api/data/entity/IdentityBiMappings.java deleted file mode 100644 index f10fb6652..000000000 --- a/api/src/main/java/com/viaversion/viaversion/api/data/entity/IdentityBiMappings.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion - * Copyright (C) 2023 ViaVersion and contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -package com.viaversion.viaversion.api.data.entity; - -import com.viaversion.viaversion.api.data.BiMappings; -import com.viaversion.viaversion.api.data.IdentityMappings; -import com.viaversion.viaversion.api.data.Mappings; - -public final class IdentityBiMappings extends IdentityMappings implements BiMappings { - - public IdentityBiMappings(final int size, final int mappedSize) { - super(size, mappedSize); - } - - @Override - public BiMappings inverse() { - return this; - } - - @Override - public Mappings createInverse() { - return new IdentityBiMappings(mappedSize(), size()); - } -}