Fixed #11697
This commit is contained in:
@@ -289,12 +289,12 @@ public class DataPatcher{
|
|||||||
var copy = s.copy();
|
var copy = s.copy();
|
||||||
reset(() -> s.set(copy));
|
reset(() -> s.set(copy));
|
||||||
|
|
||||||
assignValue(object, field, metadata, () -> s.get(i), val -> s.set(i, val), value, false);
|
assignValue(object, field, metadata, () -> s.get(i), val -> s.set(i, val), value, true);
|
||||||
}else{
|
}else{
|
||||||
modifiedField(parentObject, parentField, copyArray(object));
|
modifiedField(parentObject, parentField, copyArray(object));
|
||||||
|
|
||||||
var fobj = object;
|
var fobj = object;
|
||||||
assignValue(object, field, metadata, () -> Array.get(fobj, i), val -> Array.set(fobj, i, val), value, false);
|
assignValue(object, field, metadata, () -> Array.get(fobj, i), val -> Array.set(fobj, i, val), value, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else if(object instanceof ObjectSet set && field.equals("+")){
|
}else if(object instanceof ObjectSet set && field.equals("+")){
|
||||||
@@ -503,7 +503,16 @@ public class DataPatcher{
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Object[]{object instanceof Seq s ? s.get(i) : Array.get(object, i), null};
|
Object prev = object instanceof Seq s ? s.get(i) : Array.get(object, i);
|
||||||
|
reset(() -> {
|
||||||
|
if(object instanceof Seq seq){
|
||||||
|
seq.set(i, prev);
|
||||||
|
}else{
|
||||||
|
Array.set(object, i, prev);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return new Object[]{prev, metadata != null ? new FieldData(object instanceof Seq<?> ? metadata.elementType : metadata.type.getComponentType(), null, null) : null};
|
||||||
}else if(object instanceof ObjectMap map){
|
}else if(object instanceof ObjectMap map){
|
||||||
Object key = convertKeyType(field, metadata.keyType);
|
Object key = convertKeyType(field, metadata.keyType);
|
||||||
if(key == null){
|
if(key == null){
|
||||||
@@ -558,6 +567,15 @@ public class DataPatcher{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}else if(target instanceof Seq<?> || target.getClass().isArray()){
|
||||||
|
int i = Integer.parseInt(field);
|
||||||
|
resetters.add(() -> {
|
||||||
|
if(target instanceof Seq seq){
|
||||||
|
seq.set(i, value);
|
||||||
|
}else{
|
||||||
|
Array.set(target, i, value);
|
||||||
|
}
|
||||||
|
});
|
||||||
}else{
|
}else{
|
||||||
warn("Missing field " + field + " for object " + target);
|
warn("Missing field " + field + " for object " + target);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -534,6 +534,50 @@ public class PatcherTests{
|
|||||||
assertEquals(oldDamage, UnitTypes.dagger.weapons.first().bullet.damage);
|
assertEquals(oldDamage, UnitTypes.dagger.weapons.first().bullet.damage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void nestedArrays() throws Exception{
|
||||||
|
|
||||||
|
Vars.state.patcher.apply(Seq.with("""
|
||||||
|
{
|
||||||
|
"block.ship-refabricator.upgrades.0": {
|
||||||
|
"0": "dagger",
|
||||||
|
"1": "mace"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""));
|
||||||
|
assertNoWarnings();
|
||||||
|
|
||||||
|
assertEquals(UnitTypes.dagger, ((Reconstructor)Blocks.shipRefabricator).upgrades.get(0)[0]);
|
||||||
|
assertEquals(UnitTypes.mace, ((Reconstructor)Blocks.shipRefabricator).upgrades.get(0)[1]);
|
||||||
|
|
||||||
|
resetAfter();
|
||||||
|
|
||||||
|
assertEquals(UnitTypes.elude, ((Reconstructor)Blocks.shipRefabricator).upgrades.get(0)[0]);
|
||||||
|
assertEquals(UnitTypes.avert, ((Reconstructor)Blocks.shipRefabricator).upgrades.get(0)[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void nestedArrays2() throws Exception{
|
||||||
|
|
||||||
|
Vars.state.patcher.apply(Seq.with("""
|
||||||
|
{
|
||||||
|
"block.ship-refabricator": {
|
||||||
|
"upgrades.0.0": "dagger",
|
||||||
|
"upgrades.0.1": "mace"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""));
|
||||||
|
assertNoWarnings();
|
||||||
|
|
||||||
|
assertEquals(UnitTypes.dagger, ((Reconstructor)Blocks.shipRefabricator).upgrades.get(0)[0]);
|
||||||
|
assertEquals(UnitTypes.mace, ((Reconstructor)Blocks.shipRefabricator).upgrades.get(0)[1]);
|
||||||
|
|
||||||
|
resetAfter();
|
||||||
|
|
||||||
|
assertEquals(UnitTypes.elude, ((Reconstructor)Blocks.shipRefabricator).upgrades.get(0)[0]);
|
||||||
|
assertEquals(UnitTypes.avert, ((Reconstructor)Blocks.shipRefabricator).upgrades.get(0)[1]);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void customAttribute() throws Exception{
|
void customAttribute() throws Exception{
|
||||||
int amount = Attribute.all.length;
|
int amount = Attribute.all.length;
|
||||||
|
|||||||
Reference in New Issue
Block a user