From f26d35070e7ceb06671f2e7435900968668d88cb Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 22 Jan 2026 20:01:26 -0500 Subject: [PATCH 1/4] Remove changelog step from release workflow [skip ci] --- .github/workflows/release.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dc478189..90c0a0a0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,10 +32,3 @@ jobs: with: files: 'bin/*' repo-token: ${{ secrets.GITHUB_TOKEN }} - - name: Add changelog to release - uses: irongut/EditRelease@v1.2.0 - with: - token: ${{ secrets.GITHUB_TOKEN }} - id: ${{ github.event.release.id }} - replacebody: true - files: "CHANGELOG.md" From 4dcdf09a0153968faa60a9e0c4bcda759ed3ba44 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Fri, 23 Jan 2026 20:17:19 -0500 Subject: [PATCH 2/4] Do not convert ModFileScanData annotation values to immutable lists Related: #627 --- .../modernfix/forge/load/ModFileScanDataCompactor.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/embeddedt/modernfix/forge/load/ModFileScanDataCompactor.java b/src/main/java/org/embeddedt/modernfix/forge/load/ModFileScanDataCompactor.java index 92ee07e7..7fb217e5 100644 --- a/src/main/java/org/embeddedt/modernfix/forge/load/ModFileScanDataCompactor.java +++ b/src/main/java/org/embeddedt/modernfix/forge/load/ModFileScanDataCompactor.java @@ -8,7 +8,7 @@ import org.embeddedt.modernfix.ModernFix; import org.objectweb.asm.Type; import java.lang.reflect.Field; -import java.util.List; +import java.util.ArrayList; import java.util.Map; import java.util.stream.Collectors; @@ -65,8 +65,8 @@ public class ModFileScanDataCompactor { memberNames.addOrGet(a.memberName()), a.annotationData().entrySet().stream().collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, e -> { Object annValue = e.getValue(); - if (annValue instanceof List list) { - annValue = List.copyOf(list); + if (annValue instanceof ArrayList list) { + list.trimToSize(); } return annValue; })) From a70f76a34dae74d033e486775bf4a2fec13219c3 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Fri, 23 Jan 2026 20:20:48 -0500 Subject: [PATCH 3/4] Document the reason for lack of optimization --- .../modernfix/forge/load/ModFileScanDataCompactor.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/embeddedt/modernfix/forge/load/ModFileScanDataCompactor.java b/src/main/java/org/embeddedt/modernfix/forge/load/ModFileScanDataCompactor.java index 7fb217e5..5bb82662 100644 --- a/src/main/java/org/embeddedt/modernfix/forge/load/ModFileScanDataCompactor.java +++ b/src/main/java/org/embeddedt/modernfix/forge/load/ModFileScanDataCompactor.java @@ -66,6 +66,8 @@ public class ModFileScanDataCompactor { a.annotationData().entrySet().stream().collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, e -> { Object annValue = e.getValue(); if (annValue instanceof ArrayList list) { + // We cannot properly compact annValue using List.of() because there are mods that + // (unnecessarily) rely on the list implementation being ArrayList. list.trimToSize(); } return annValue; From 9bc5f06a19bc9ea4c5b4109b0a5f97e6aeae43ac Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sat, 24 Jan 2026 10:39:05 -0500 Subject: [PATCH 4/4] Ensure correct order of properties in generated ModelResourceLocation variant strings Related: https://github.com/malte0811/FerriteCore/issues/219 --- .../forge/dynresources/ModelLocationBuilder.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelLocationBuilder.java b/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelLocationBuilder.java index 87d0098b..73e86966 100644 --- a/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelLocationBuilder.java +++ b/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelLocationBuilder.java @@ -21,7 +21,17 @@ public class ModelLocationBuilder { private record PropertyData(ImmutableList nameValuePairs, int maxPairLength) {} public void generateForBlock(Set destinationSet, Block block, ResourceLocation baseLocation) { - var props = block.getStateDefinition().getProperties(); + // Make sure to iterate over the properties in the order of the getValues() map rather than using + // StateDefinition.getProperties(), to match the logic in BlockModelShaper.statePropertiesToString. + // In vanilla, these have the same order, because the backing implementation of getValues() is a map + // that preserves insertion order. However, in some versions of FerriteCore, getValues() may not + // preserve insertion order, but instead rely on hash order of the keys. This results in BlockModelShape + // and ModelLocationBuilder producing different MRLs. Using the keySet produces the same ordering as + // BlockModelShaper, provided that all states were built with the keys inserted in the same order into the same + // map implementation (which should always be true in practice). + // The above issue only seems to affect versions of FerriteCore after the switch to fastutil maps, but it + // is harmless to be consistent on older versions too, especially if another mod backports the fastutil change. + var props = block.defaultBlockState().getValues().keySet(); List> optionsList = new ArrayList<>(props.size()); int requiredBuilderSize = Math.max(0, props.size() - 1); // commas for (var prop : props) {