From 1de633b0098c295c5c7095ee76a33aff50873637 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 1 Nov 2025 10:01:48 -0400 Subject: [PATCH] Patcher support for array fields in object braces --- core/src/mindustry/mod/ContentPatcher.java | 4 +++- tests/src/test/java/PatcherTests.java | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/mod/ContentPatcher.java b/core/src/mindustry/mod/ContentPatcher.java index d07ce2fda1..5b96a573e9 100644 --- a/core/src/mindustry/mod/ContentPatcher.java +++ b/core/src/mindustry/mod/ContentPatcher.java @@ -184,7 +184,7 @@ public class ContentPatcher{ }else{ warn("Content '@' cannot be assigned.", field); } - }else if(object instanceof Seq || object.getClass().isArray()){ //TODO + }else if(object instanceof Seq || object.getClass().isArray()){ if(field.equals("+")){ var meta = new FieldData(metadata.type.isArray() ? metadata.type.getComponentType() : metadata.elementType, null, null); @@ -411,6 +411,8 @@ public class ContentPatcher{ if(child.name != null){ assign(prevValue, child.name, child, metadata != null && (metadata.type == ObjectMap.class || metadata.type == ObjectFloatMap.class) ? metadata : + metadata != null && metadata.type == Seq.class ? new FieldData(metadata.elementType, null, null) : + metadata != null && metadata.type.isArray() ? new FieldData(metadata.type.getComponentType(), null, null) : !childFields.containsKey(child.name) ? null : new FieldData(childFields.get(child.name)), object, field); } diff --git a/tests/src/test/java/PatcherTests.java b/tests/src/test/java/PatcherTests.java index 14108cc46c..55b50dc8e0 100644 --- a/tests/src/test/java/PatcherTests.java +++ b/tests/src/test/java/PatcherTests.java @@ -299,6 +299,25 @@ public class PatcherTests{ assertEquals(0f, ((Drill)Blocks.mechanicalDrill).drillMultipliers.get(Items.surgeAlloy, 0f)); } + @Test + void testSpecificArrayRequirements() throws Exception{ + ItemStack[] reqs = Blocks.scatter.requirements.clone(); + Vars.state.patcher.apply(Seq.with(""" + block.scatter.requirements: { + 0: surge-alloy/10 + } + block.duo.requirements: [titanium/5, surge-alloy/20] + """)); + + assertEquals(new Seq<>(), Vars.state.patcher.patches.first().warnings); + assertEquals(Blocks.scatter.requirements[0], new ItemStack(Items.surgeAlloy, 10)); + assertEquals(Blocks.scatter.requirements[1], reqs[1]); + assertEquals(Blocks.duo.requirements[0], new ItemStack(Items.titanium, 5)); + + Vars.logic.reset(); + assertArrayEquals(reqs, Blocks.scatter.requirements); + } + @Test void testAttributes() throws Exception{ Vars.state.patcher.apply(Seq.with("""