From 187b79f4e1bf639bdd160d6b9b9bfef62297c3fa Mon Sep 17 00:00:00 2001 From: Gero Date: Tue, 14 Jun 2022 10:39:35 +0200 Subject: [PATCH] Fix NPE for chat messages before join game (#456) --- .../api/data/BackwardsMappings.java | 2 +- .../api/data/VBMappingDataLoader.java | 23 ++++++++------ .../data/BackwardsMappings.java | 29 ++++++++++++++++-- .../storage/DimensionRegistryStorage.java | 2 ++ .../viabackwards/data/chat-types-1.19.nbt | Bin 0 -> 371 bytes 5 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 common/src/main/resources/assets/viabackwards/data/chat-types-1.19.nbt diff --git a/common/src/main/java/com/viaversion/viabackwards/api/data/BackwardsMappings.java b/common/src/main/java/com/viaversion/viabackwards/api/data/BackwardsMappings.java index 8673afc3..a9247796 100644 --- a/common/src/main/java/com/viaversion/viabackwards/api/data/BackwardsMappings.java +++ b/common/src/main/java/com/viaversion/viabackwards/api/data/BackwardsMappings.java @@ -51,7 +51,7 @@ public class BackwardsMappings extends MappingDataBase { } @Override - protected void loadExtras(JsonObject oldMappings, JsonObject newMappings, @Nullable JsonObject diffMappings) { + protected final void loadExtras(JsonObject oldMappings, JsonObject newMappings, @Nullable JsonObject diffMappings) { if (diffMappings != null) { JsonObject diffItems = diffMappings.getAsJsonObject("items"); if (diffItems != null) { diff --git a/common/src/main/java/com/viaversion/viabackwards/api/data/VBMappingDataLoader.java b/common/src/main/java/com/viaversion/viabackwards/api/data/VBMappingDataLoader.java index b287d0f3..85ab505b 100644 --- a/common/src/main/java/com/viaversion/viabackwards/api/data/VBMappingDataLoader.java +++ b/common/src/main/java/com/viaversion/viabackwards/api/data/VBMappingDataLoader.java @@ -29,6 +29,7 @@ import com.viaversion.viaversion.libs.gson.JsonObject; import com.viaversion.viaversion.libs.gson.JsonPrimitive; import com.viaversion.viaversion.libs.gson.JsonSyntaxException; import com.viaversion.viaversion.util.GsonUtil; +import org.checkerframework.checker.nullness.qual.Nullable; import java.io.File; import java.io.FileReader; @@ -58,10 +59,14 @@ public final class VBMappingDataLoader { return null; } + public static @Nullable InputStream getResource(String name) { + return VBMappingDataLoader.class.getClassLoader().getResourceAsStream("assets/viabackwards/data/" + name); + } + public static JsonObject loadData(String name) { - InputStream stream = VBMappingDataLoader.class.getClassLoader().getResourceAsStream("assets/viabackwards/data/" + name); - try (InputStreamReader reader = new InputStreamReader(stream)) { - return GsonUtil.getGson().fromJson(reader, JsonObject.class); + try (InputStream stream = getResource(name)) { + if (stream == null) return null; + return GsonUtil.getGson().fromJson(new InputStreamReader(stream), JsonObject.class); } catch (IOException e) { e.printStackTrace(); return null; @@ -135,12 +140,12 @@ public final class VBMappingDataLoader { public static Int2ObjectMap loadItemMappings(JsonObject oldMapping, JsonObject newMapping, JsonObject diffMapping, boolean warnOnMissing) { Int2ObjectMap itemMapping = new Int2ObjectOpenHashMap<>(diffMapping.size(), 0.99F); - Object2IntMap newIdenfierMap = MappingDataLoader.indexedObjectToMap(newMapping); - Object2IntMap oldIdenfierMap = MappingDataLoader.indexedObjectToMap(oldMapping); + Object2IntMap newIdentifierMap = MappingDataLoader.indexedObjectToMap(newMapping); + Object2IntMap oldIdentifierMap = MappingDataLoader.indexedObjectToMap(oldMapping); for (Map.Entry entry : diffMapping.entrySet()) { JsonObject object = entry.getValue().getAsJsonObject(); String mappedIdName = object.getAsJsonPrimitive("id").getAsString(); - int mappedId = newIdenfierMap.getInt(mappedIdName); + int mappedId = newIdentifierMap.getInt(mappedIdName); if (mappedId == -1) { if (!Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) { ViaBackwards.getPlatform().getLogger().warning("No key for " + mappedIdName + " :( "); @@ -148,7 +153,7 @@ public final class VBMappingDataLoader { continue; } - int oldId = oldIdenfierMap.getInt(entry.getKey()); + int oldId = oldIdentifierMap.getInt(entry.getKey()); if (oldId == -1) { if (!Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) { ViaBackwards.getPlatform().getLogger().warning("No old entry for " + mappedIdName + " :( "); @@ -162,8 +167,8 @@ public final class VBMappingDataLoader { // Look for missing keys if (warnOnMissing && !Via.getConfig().isSuppressConversionWarnings()) { - for (Object2IntMap.Entry entry : oldIdenfierMap.object2IntEntrySet()) { - if (!newIdenfierMap.containsKey(entry.getKey()) && !itemMapping.containsKey(entry.getIntValue())) { + for (Object2IntMap.Entry entry : oldIdentifierMap.object2IntEntrySet()) { + if (!newIdentifierMap.containsKey(entry.getKey()) && !itemMapping.containsKey(entry.getIntValue())) { ViaBackwards.getPlatform().getLogger().warning("No item mapping for " + entry.getKey() + " :( "); } } diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/data/BackwardsMappings.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/data/BackwardsMappings.java index 7f985265..6016a266 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/data/BackwardsMappings.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/data/BackwardsMappings.java @@ -17,23 +17,33 @@ */ package com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.data; +import com.viaversion.viabackwards.api.data.VBMappingDataLoader; +import com.viaversion.viaversion.api.minecraft.nbt.BinaryTagIO; +import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap; +import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap; import com.viaversion.viaversion.libs.gson.JsonArray; import com.viaversion.viaversion.libs.gson.JsonElement; import com.viaversion.viaversion.libs.gson.JsonObject; +import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag; +import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag; +import com.viaversion.viaversion.libs.opennbt.tag.builtin.NumberTag; +import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag; import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.Protocol1_19To1_18_2; import org.checkerframework.checker.nullness.qual.Nullable; +import java.io.IOException; + public final class BackwardsMappings extends com.viaversion.viabackwards.api.data.BackwardsMappings { private String[] argumentTypes; + private final Int2ObjectMap defaultChatTypes = new Int2ObjectOpenHashMap<>(); public BackwardsMappings() { super("1.19", "1.18", Protocol1_19To1_18_2.class, true); } @Override - protected void loadExtras(final JsonObject oldMappings, final JsonObject newMappings, @Nullable final JsonObject diffMappings) { - super.loadExtras(oldMappings, newMappings, diffMappings); + protected void loadVBExtras(final JsonObject oldMappings, final JsonObject newMappings) { int i = 0; final JsonArray types = oldMappings.getAsJsonArray("argumenttypes"); this.argumentTypes = new String[types.size()]; @@ -41,9 +51,24 @@ public final class BackwardsMappings extends com.viaversion.viabackwards.api.dat final String id = element.getAsString(); this.argumentTypes[i++] = id; } + + try { + ListTag chatTypes = BinaryTagIO.readCompressedInputStream(VBMappingDataLoader.getResource("chat-types-1.19.nbt")).get("values"); + for (final Tag chatType : chatTypes) { + final CompoundTag chatTypeCompound = (CompoundTag) chatType; + final NumberTag idTag = chatTypeCompound.get("id"); + defaultChatTypes.put(idTag.asInt(), chatTypeCompound); + } + } catch (IOException e) { + e.printStackTrace(); + } } public @Nullable String argumentType(final int argumentTypeId) { return argumentTypeId >= 0 && argumentTypeId < argumentTypes.length ? argumentTypes[argumentTypeId] : null; } + + public @Nullable CompoundTag chatType(final int id) { + return defaultChatTypes.get(id); + } } \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/storage/DimensionRegistryStorage.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/storage/DimensionRegistryStorage.java index f6c453e4..42656fa5 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/storage/DimensionRegistryStorage.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/storage/DimensionRegistryStorage.java @@ -17,6 +17,7 @@ */ package com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.storage; +import com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.Protocol1_18_2To1_19; import com.viaversion.viaversion.api.connection.StorableObject; import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap; import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap; @@ -41,6 +42,7 @@ public final class DimensionRegistryStorage implements StorableObject { } public @Nullable CompoundTag chatType(final int id) { + if (chatTypes.isEmpty()) return Protocol1_18_2To1_19.MAPPINGS.chatType(id); return chatTypes.get(id); } diff --git a/common/src/main/resources/assets/viabackwards/data/chat-types-1.19.nbt b/common/src/main/resources/assets/viabackwards/data/chat-types-1.19.nbt new file mode 100644 index 0000000000000000000000000000000000000000..5c5fe2798d644bd69ec27443cddb265828e89598 GIT binary patch literal 371 zcmV-(0gV11iwFP$GpAwz|J9UDPQx$|g{N(rq*=5`6(HDgfgFI#L?dS!Ec_GMZo#+5 zO&i4&5RH&3>YX*7_nyA7T>vZ~-J#f$EdU_TAyFs^mXa%C1~=}Ry`Y=Hl-HpS1!N>h zl5zzk`$_>tO-vhfT&o;b&Y-fQ+f}dRVYxq4I^R<1=sg^tTjvD@+oDAitQ;Ae2jwZG zmQ+m!GNzRa4tuwSLep#Kt>M~m=g)J#`|MmElxSRnfaFNzW*}m{btHQxlP^qu%$*)O zBh~ew+Jt?@)kgQi(^xpuJ2C=&)O#BxLSHd0C91mbo{b(=1PqnZTg8su*E+HYkhIMy zpky?lr=x-`C0UCNl{L3*7)r@iC~?*FNpqMpEwq88G3Y0da)*Mm$@MXO92h!6S$zX? zJ{sgY&WQ4tpJ4`z&brIN4=s8&P3PVs`T@o&}xl!y2V31RT<6iasg R7ka3M^#T6l>9D&7000`nu4@1Q literal 0 HcmV?d00001