diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index fa50837ef9..6ce4ca5124 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1444,6 +1444,8 @@ rules.hidebannedblocks = Hide Banned Blocks rules.infiniteresources = Infinite Resources rules.fillitems = Fill Core With Items rules.onlydepositcore = Only Allow Core Depositing +rules.coreunloaders = Allow Core Unloaders +rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from the core.\nDoes not affect Erekir unloaders. rules.derelictrepair = Allow Derelict Block Repair rules.reactorexplosions = Reactor Explosions rules.coreincinerates = Core Incinerates Overflow diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index 370909f539..2697a1d8b1 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -120,6 +120,8 @@ public class Rules{ public boolean cleanupDeadTeams = true; /** If true, items can only be deposited in the core. */ public boolean onlyDepositCore = false; + /** If true, Serpulo unloaders can take items from the core. */ + public boolean allowCoreUnloaders = true; /** Cooldown, in seconds, of item depositing for players. */ public float itemDepositCooldown = 0.5f; /** If true, every enemy block in the radius of the (enemy) core is destroyed upon death. Used for campaign maps. */ diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 39b812bb40..64f285c15d 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -394,6 +394,13 @@ public class ContentParser{ } } + @Override + protected Object newInstance(Class type){ + Object o = super.newInstance(type); + onNewInstance(o, type); + return o; + } + @Override public T readValue(Class type, Class elementType, JsonValue jsonData, Class keyType){ T t = internalRead(type, elementType, jsonData, keyType); @@ -1347,6 +1354,8 @@ public class ContentParser{ Log.warn(string, format); } + void onNewInstance(Object object, Class type){} + public Json getJson(){ checkInit(); return parser; diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index 14cbaa5f62..599352dccc 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -162,6 +162,7 @@ public class CustomRulesDialog extends BaseDialog{ check("@rules.alloweditworldprocessors", b -> rules.allowEditWorldProcessors = b, () -> rules.allowEditWorldProcessors); check("@rules.infiniteresources", b -> rules.infiniteResources = b, () -> rules.infiniteResources); check("@rules.onlydepositcore", b -> rules.onlyDepositCore = b, () -> rules.onlyDepositCore); + check("@rules.coreunloaders", b -> rules.allowCoreUnloaders = b, () -> rules.allowCoreUnloaders); check("@rules.derelictrepair", b -> rules.derelictRepair = b, () -> rules.derelictRepair); check("@rules.reactorexplosions", b -> rules.reactorExplosions = b, () -> rules.reactorExplosions); check("@rules.schematic", b -> rules.schematicsAllowed = b, () -> rules.schematicsAllowed); diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index a11be3c21f..aa593ef25f 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -276,6 +276,11 @@ public class CoreBlock extends StorageBlock{ commandPos = target; } + @Override + public boolean canUnload(){ + return block.unloadable && state.rules.allowCoreUnloaders; + } + @Override public void draw(){ //draw thrusters when just landed diff --git a/core/src/mindustry/world/blocks/storage/StorageBlock.java b/core/src/mindustry/world/blocks/storage/StorageBlock.java index fea47a0e88..eb2c86281c 100644 --- a/core/src/mindustry/world/blocks/storage/StorageBlock.java +++ b/core/src/mindustry/world/blocks/storage/StorageBlock.java @@ -53,6 +53,11 @@ public class StorageBlock extends Block{ return linkedCore != null ? linkedCore.acceptItem(source, item) : items.get(item) < getMaximumAccepted(item); } + @Override + public boolean canUnload(){ + return linkedCore == null ? super.canUnload() : linkedCore.canUnload(); + } + @Override public void handleItem(Building source, Item item){ if(linkedCore != null){