diff --git a/core/src/mindustry/mod/DataPatcher.java b/core/src/mindustry/mod/DataPatcher.java index d9f9045996..f2e3418fbd 100644 --- a/core/src/mindustry/mod/DataPatcher.java +++ b/core/src/mindustry/mod/DataPatcher.java @@ -370,10 +370,10 @@ public class DataPatcher{ Reflect.set(fobj, fdata.field, fv); }, value, true); }else if(value instanceof JsonValue jsv && object instanceof Block bl && jsv.isObject() && field.equals("consumes")){ - modifiedField(bl, "consumeBuilder", Reflect.>get(Block.class, bl, "consumeBuilder").copy()); - modifiedField(bl, "consumers", Reflect.get(Block.class, bl, "consumers")); + Seq prevBuilder = Reflect.>get(Block.class, bl, "consumeBuilder").copy(); boolean hadItems = bl.hasItems, hadLiquids = bl.hasLiquids, hadPower = bl.hasPower, acceptedItems = bl.acceptsItems; reset(() -> { + Reflect.set(Block.class, bl, "consumeBuilder", prevBuilder); bl.reinitializeConsumers(); bl.hasItems = hadItems; bl.hasLiquids = hadLiquids; diff --git a/tests/src/test/java/PatcherTests.java b/tests/src/test/java/PatcherTests.java index 4d92900ffb..b68c795f72 100644 --- a/tests/src/test/java/PatcherTests.java +++ b/tests/src/test/java/PatcherTests.java @@ -138,6 +138,26 @@ public class PatcherTests{ assertEquals(prev, reconstructor.upgrades); } + @Test + void consumeApply() throws Exception{ + Vars.state.patcher.apply(Seq.with( + """ + block.conveyor.consumes: {power: 1} + """ + )); + + assertNoWarnings(); + assertTrue(Blocks.conveyor.hasPower); + assertNotNull(Blocks.conveyor.consPower); + assertEquals(1, Blocks.conveyor.consumers.length); + + resetAfter(); + + assertFalse(Blocks.conveyor.hasPower); + assertNull(Blocks.conveyor.consPower); + assertEquals(0, Blocks.conveyor.consumers.length); + } + @Test void unitWeapons() throws Exception{ UnitTypes.dagger.checkStats();