diff --git a/core/src/mindustry/ai/UnitCommand.java b/core/src/mindustry/ai/UnitCommand.java index 5ddeaa299f..11738f7bc4 100644 --- a/core/src/mindustry/ai/UnitCommand.java +++ b/core/src/mindustry/ai/UnitCommand.java @@ -89,7 +89,7 @@ public class UnitCommand extends MappableContent{ drawTarget = true; resetTarget = false; }}; - enterPayloadCommand = new UnitCommand("enterPayload", "downOpen", Binding.unitCommandEnterPayload, null){{ + enterPayloadCommand = new UnitCommand("enterPayload", "downOpen", Binding.unitCommandEnterPayload, u -> new BoostAI()){{ switchToMove = false; drawTarget = true; resetTarget = false; diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 1da4abd811..e4f2fb4a81 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -727,6 +727,10 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, } + public boolean allowDeposit(){ + return block.alwaysAllowDeposit || !state.rules.onlyDepositCore; + } + /** Called when this block is dropped as a payload. */ public void dropped(){ diff --git a/core/src/mindustry/graphics/OverlayRenderer.java b/core/src/mindustry/graphics/OverlayRenderer.java index 0470ec54fe..ee37f6d604 100644 --- a/core/src/mindustry/graphics/OverlayRenderer.java +++ b/core/src/mindustry/graphics/OverlayRenderer.java @@ -246,7 +246,7 @@ public class OverlayRenderer{ if(input.canDropItem() && build != null && build.interactable(player.team()) && build.acceptStack(player.unit().item(), player.unit().stack.amount, player.unit()) > 0 && player.within(build, itemTransferRange) && input.itemDepositCooldown <= 0f){ - boolean invalid = (state.rules.onlyDepositCore && !(build instanceof CoreBuild)); + boolean invalid = !build.allowDeposit(); Lines.stroke(3f, Pal.gray); Lines.square(build.x, build.y, build.block.size * tilesize / 2f + 3 + Mathf.absin(Time.time, 5f, 1f)); diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 56538fafd9..317bdf76b4 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -452,7 +452,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ @Remote(targets = Loc.both, forward = true, called = Loc.server) public static void transferInventory(Player player, Building build){ - if(player == null || build == null || !player.within(build, itemTransferRange) || build.items == null || player.dead() || (state.rules.onlyDepositCore && !(build instanceof CoreBuild))) return; + if(player == null || build == null || !player.within(build, itemTransferRange) || build.items == null || player.dead() || !build.allowDeposit()) return; if(net.server() && (player.unit().stack.amount <= 0 || !Units.canInteract(player, build) || //to avoid rejecting deposit packets that happen to overlap due to packet speed differences, the actual cap is double the cooldown with 2 deposits. @@ -2089,7 +2089,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ if(build != null && build.acceptStack(stack.item, stack.amount, player.unit()) > 0 && build.interactable(player.team()) && build.block.hasItems && player.unit().stack().amount > 0 && build.interactable(player.team())){ - if(!(state.rules.onlyDepositCore && !(build instanceof CoreBuild)) && itemDepositCooldown <= 0f){ + if(build.allowDeposit() && itemDepositCooldown <= 0f){ Call.transferInventory(player, build); itemDepositCooldown = state.rules.itemDepositCooldown; } diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index ab6853d2d0..5d4a6f15df 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -463,7 +463,7 @@ public class LExecutor{ }else{ Building build = p1.building(); int dropped = Math.min(unit.stack.amount, p2.numi()); - if(build != null && build.team == unit.team && build.isValid() && dropped > 0 && unit.within(build, logicItemTransferRange + build.block.size * tilesize/2f)){ + if(build != null && build.team == unit.team && build.isValid() && build.allowDeposit() && dropped > 0 && unit.within(build, logicItemTransferRange + build.block.size * tilesize/2f)){ int accepted = build.acceptStack(unit.item(), dropped, unit); if(accepted > 0){ Call.transferItemTo(unit, unit.item(), accepted, unit.x, unit.y, build); diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 49751d8d68..05df24ed58 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -63,6 +63,8 @@ public class Block extends UnlockableContent implements Senseable{ public boolean acceptsPayload = false; /** Visual flag use for blending of certain transportation blocks. */ public boolean acceptsItems = false; + /** If true, this block won't be affected by the onlyDepositCore rule. */ + public boolean alwaysAllowDeposit = false; /** If true, all item capacities of this block are separate instead of pooled as one number. */ public boolean separateItemCapacity = false; /** maximum items this block can carry (usually, this is per-type of item) */ diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index 4c875d3439..5db4e352c7 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -68,6 +68,7 @@ public class CoreBlock extends StorageBlock{ solid = true; update = true; hasItems = true; + alwaysAllowDeposit = true; priority = TargetPriority.core; flags = EnumSet.of(BlockFlag.core); unitCapModifier = 10; diff --git a/core/src/mindustry/world/blocks/storage/StorageBlock.java b/core/src/mindustry/world/blocks/storage/StorageBlock.java index 31dd510f89..fea47a0e88 100644 --- a/core/src/mindustry/world/blocks/storage/StorageBlock.java +++ b/core/src/mindustry/world/blocks/storage/StorageBlock.java @@ -126,5 +126,10 @@ public class StorageBlock extends Block{ public boolean canPickup(){ return linkedCore == null; } + + @Override + public boolean allowDeposit(){ + return linkedCore != null || super.allowDeposit(); + } } }