From 6cbc277de7a957ab5da1329b8e9f11bc5b68afde Mon Sep 17 00:00:00 2001 From: Ben Staddon Date: Fri, 16 Feb 2018 06:11:52 +0000 Subject: [PATCH] Maintain deterministic order in deserialised Forge blockstates (#4748) --- .../client/model/BlockStateLoader.java | 2 +- .../client/model/ForgeBlockStateV1.java | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/minecraftforge/client/model/BlockStateLoader.java b/src/main/java/net/minecraftforge/client/model/BlockStateLoader.java index cda7c8b559..aa6eb40f4b 100644 --- a/src/main/java/net/minecraftforge/client/model/BlockStateLoader.java +++ b/src/main/java/net/minecraftforge/client/model/BlockStateLoader.java @@ -82,7 +82,7 @@ public class BlockStateLoader { case 1: // Version 1 ForgeBlockStateV1 v1 = GSON.fromJson(reader, ForgeBlockStateV1.class); - Map variants = Maps.newHashMap(); + Map variants = Maps.newLinkedHashMap(); for (Entry> entry : v1.variants.asMap().entrySet()) { // Convert Version1 variants into vanilla variants for the ModelBlockDefinition. diff --git a/src/main/java/net/minecraftforge/client/model/ForgeBlockStateV1.java b/src/main/java/net/minecraftforge/client/model/ForgeBlockStateV1.java index dfde59b2fc..4272e68d00 100644 --- a/src/main/java/net/minecraftforge/client/model/ForgeBlockStateV1.java +++ b/src/main/java/net/minecraftforge/client/model/ForgeBlockStateV1.java @@ -24,8 +24,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.EnumMap; -import java.util.HashMap; -import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -48,8 +47,9 @@ import net.minecraftforge.fml.common.FMLLog; import java.util.Objects; import java.util.Optional; -import com.google.common.collect.HashMultimap; + import com.google.common.collect.ImmutableMap; +import com.google.common.collect.LinkedHashMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; @@ -63,7 +63,7 @@ import com.google.gson.JsonParseException; public class ForgeBlockStateV1 extends Marker { ForgeBlockStateV1.Variant defaults; - Multimap variants = HashMultimap.create(); + Multimap variants = LinkedHashMultimap.create(); public static class Deserializer implements JsonDeserializer { @@ -83,8 +83,8 @@ public class ForgeBlockStateV1 extends Marker throw new RuntimeException("\"defaults\" variant cannot contain a simple \"submodel\" definition."); } - Map> condensed = Maps.newHashMap(); // map(property name -> map(property value -> variant)) - Multimap specified = HashMultimap.create(); // Multimap containing all the states specified with "property=value". + Map> condensed = Maps.newLinkedHashMap(); // map(property name -> map(property value -> variant)) + Multimap specified = LinkedHashMultimap.create(); // Multimap containing all the states specified with "property=value". for (Entry e : JsonUtils.getJsonObject(json, "variants").entrySet()) { @@ -103,7 +103,7 @@ public class ForgeBlockStateV1 extends Marker if(obj.entrySet().iterator().next().getValue().isJsonObject()) { // first value is a json object, so we know it's not a fully-defined variant - Map subs = Maps.newHashMap(); + Map subs = Maps.newLinkedHashMap(); condensed.put(e.getKey(), subs); for (Entry se : e.getValue().getAsJsonObject().entrySet()) { @@ -236,7 +236,7 @@ public class ForgeBlockStateV1 extends Marker { List sorted = Lists.newArrayList(base.keySet()); Collections.sort(sorted); // Sort to get consistent results. - return getPermutations(sorted, base, 0, "", HashMultimap.create(), null); + return getPermutations(sorted, base, 0, "", LinkedHashMultimap.create(), null); } private List getSubmodelPermutations(ForgeBlockStateV1.Variant baseVar, List sorted, Map> map, int depth, Map parts, List ret) @@ -277,7 +277,7 @@ public class ForgeBlockStateV1 extends Marker { List sorted = Lists.newArrayList(variants.keySet()); Collections.sort(sorted); // Sort to get consistent results. - return getSubmodelPermutations(baseVar, sorted, variants, 0, new HashMap<>(), new ArrayList<>()); + return getSubmodelPermutations(baseVar, sorted, variants, 0, new LinkedHashMap<>(), new ArrayList<>()); } }