From 11a7a4164861bf195c7e086d029026b9447773fe Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 4 Nov 2025 23:54:39 -0500 Subject: [PATCH] Better patcher multi-dimensional array support --- core/src/mindustry/mod/ContentPatcher.java | 7 ++++ gradle.properties | 2 +- tests/src/test/java/PatcherTests.java | 42 +++++++++++++++++++++- 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/mod/ContentPatcher.java b/core/src/mindustry/mod/ContentPatcher.java index 751b73527d..5976aa685b 100644 --- a/core/src/mindustry/mod/ContentPatcher.java +++ b/core/src/mindustry/mod/ContentPatcher.java @@ -238,6 +238,13 @@ public class ContentPatcher{ }, value, false); } }else{ + if(metadata != null){ + var meta = new FieldData(metadata.type.isArray() ? metadata.type.getComponentType() : metadata.elementType, null, null); + if(meta.type != null){ + metadata = meta; + } + } + int i = Strings.parseInt(field); int length = object instanceof Seq s ? s.size : Array.getLength(object); diff --git a/gradle.properties b/gradle.properties index 7d56263ea4..6208c5dd07 100644 --- a/gradle.properties +++ b/gradle.properties @@ -26,4 +26,4 @@ org.gradle.caching=true org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 android.enableR8.fullMode=false -archash=9087cfbb2b +archash=d677d2a72c diff --git a/tests/src/test/java/PatcherTests.java b/tests/src/test/java/PatcherTests.java index 5ce66e6c38..ad51d1bfc8 100644 --- a/tests/src/test/java/PatcherTests.java +++ b/tests/src/test/java/PatcherTests.java @@ -73,7 +73,7 @@ public class PatcherTests{ @Test void reconstructorPlans() throws Exception{ var reconstructor = ((Reconstructor)Blocks.additiveReconstructor); - var prev = reconstructor.upgrades; + var prev = reconstructor.upgrades.copy(); var prevConsumes = reconstructor.findConsumer(c -> c instanceof ConsumeItems).items; Vars.state.patcher.apply(Seq.with( @@ -98,6 +98,46 @@ public class PatcherTests{ } + @Test + void reconstructorPlansEditSpecific() throws Exception{ + var reconstructor = ((Reconstructor)Blocks.additiveReconstructor); + var prev = reconstructor.upgrades.copy(); + + Vars.state.patcher.apply(Seq.with( + """ + block.additive-reconstructor.upgrades.1: [dagger, flare] + """ + )); + + assertNoWarnings(); + var plan = reconstructor.upgrades.get(1); + assertArrayEquals(new UnitType[]{UnitTypes.dagger, UnitTypes.flare}, plan); + + resetAfter(); + + assertEquals(prev, reconstructor.upgrades); + } + + @Test + void reconstructorPlansAdd() throws Exception{ + var reconstructor = ((Reconstructor)Blocks.additiveReconstructor); + var prev = reconstructor.upgrades.copy(); + + Vars.state.patcher.apply(Seq.with( + """ + block.additive-reconstructor.upgrades.+: [[dagger, flare]] + """ + )); + + assertNoWarnings(); + var plan = reconstructor.upgrades.peek(); + assertArrayEquals(new UnitType[]{UnitTypes.dagger, UnitTypes.flare}, plan); + + resetAfter(); + + assertEquals(prev, reconstructor.upgrades); + } + @Test void unitWeapons() throws Exception{ UnitTypes.dagger.checkStats();