Better patcher multi-dimensional array support

This commit is contained in:
Anuken 2025-11-04 23:54:39 -05:00
parent 3656e90ae1
commit 11a7a41648
3 changed files with 49 additions and 2 deletions

View file

@ -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);

View file

@ -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

View file

@ -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.<ConsumeItems>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();