From e280edac67d0b5e36a027a2dd61a123e14ec5b89 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 10 Apr 2024 15:31:09 -0400 Subject: [PATCH] Fixed #9731 --- core/src/mindustry/content/Blocks.java | 3 +++ core/src/mindustry/entities/Puddles.java | 2 +- core/src/mindustry/entities/comp/PuddleComp.java | 1 + core/src/mindustry/ui/fragments/HintsFragment.java | 4 +++- .../world/blocks/distribution/StackConveyor.java | 7 +++++++ .../world/blocks/payloads/PayloadLoader.java | 12 +++++++++++- .../mindustry/world/blocks/sandbox/LiquidVoid.java | 6 ++++++ 7 files changed, 32 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 08eb582a78..2e3d58b840 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -2782,6 +2782,7 @@ public class Blocks{ ambientSoundVolume = 0.06f; hasLiquids = true; boostScale = 1f / 9f; + itemCapacity = 0; outputLiquid = new LiquidStack(Liquids.water, 30f / 60f); consumePower(0.5f); liquidCapacity = 60f; @@ -5791,6 +5792,8 @@ public class Blocks{ heatOutput = 1000f; warmupRate = 1000f; regionRotated1 = 1; + itemCapacity = 0; + alwaysUnlocked = false; ambientSound = Sounds.none; }}; diff --git a/core/src/mindustry/entities/Puddles.java b/core/src/mindustry/entities/Puddles.java index ec546882b4..7c3a555154 100644 --- a/core/src/mindustry/entities/Puddles.java +++ b/core/src/mindustry/entities/Puddles.java @@ -74,7 +74,7 @@ public class Puddles{ Puddle puddle = Puddle.create(); puddle.tile = tile; puddle.liquid = liquid; - puddle.amount = amount; + puddle.amount = Math.min(amount, maxLiquid); puddle.set(ax, ay); register(puddle); puddle.add(); diff --git a/core/src/mindustry/entities/comp/PuddleComp.java b/core/src/mindustry/entities/comp/PuddleComp.java index 090a881060..a46bf01c32 100644 --- a/core/src/mindustry/entities/comp/PuddleComp.java +++ b/core/src/mindustry/entities/comp/PuddleComp.java @@ -59,6 +59,7 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc, Syncc{ amount -= Time.delta * (1f - liquid.viscosity) / (5f + addSpeed); amount += accepting; + amount = Math.min(amount, maxLiquid); accepting = 0f; if(amount >= maxLiquid / 1.5f){ diff --git a/core/src/mindustry/ui/fragments/HintsFragment.java b/core/src/mindustry/ui/fragments/HintsFragment.java index 2595fbb041..75528b9923 100644 --- a/core/src/mindustry/ui/fragments/HintsFragment.java +++ b/core/src/mindustry/ui/fragments/HintsFragment.java @@ -11,6 +11,7 @@ import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; import mindustry.*; +import mindustry.ai.types.*; import mindustry.content.*; import mindustry.game.EventType.*; import mindustry.game.*; @@ -169,7 +170,8 @@ public class HintsFragment{ depositItems(() -> player.unit().hasItem(), () -> !player.unit().hasItem()), desktopPause(visibleDesktop, () -> isTutorial.get() && !Vars.net.active() && state.wave >= 2, () -> Core.input.keyTap(Binding.pause)), unitControl(() -> isSerpulo() && state.rules.defaultTeam.data().units.size > 2 && !net.active() && !player.dead(), () -> !player.dead() && !player.unit().spawnedByCore), - unitSelectControl(() -> isSerpulo() && state.rules.defaultTeam.data().units.size > 3 && !net.active() && !player.dead(), () -> control.input.commandMode && control.input.selectedUnits.size > 0), + unitSelectControl(() -> isSerpulo() && state.rules.defaultTeam.data().units.size > 3 && !net.active() && !player.dead(), + () -> control.input.commandMode && control.input.selectedUnits.size > 0 && control.input.selectedUnits.first().controller() instanceof CommandAI ai && ai.targetPos != null), respawn(visibleMobile, () -> !player.dead() && !player.unit().spawnedByCore, () -> !player.dead() && player.unit().spawnedByCore), launch(() -> (isTutorial.get() || Vars.state.rules.sector == SectorPresets.onset.sector) && state.rules.sector.isCaptured(), () -> ui.planet.isShown()), schematicSelect(visibleDesktop, () -> ui.hints.placedBlocks.contains(Blocks.router) || ui.hints.placedBlocks.contains(Blocks.ductRouter), () -> Core.input.keyRelease(Binding.schematic_select) || Core.input.keyTap(Binding.pick)), diff --git a/core/src/mindustry/world/blocks/distribution/StackConveyor.java b/core/src/mindustry/world/blocks/distribution/StackConveyor.java index e107b08a67..357c3f8705 100644 --- a/core/src/mindustry/world/blocks/distribution/StackConveyor.java +++ b/core/src/mindustry/world/blocks/distribution/StackConveyor.java @@ -189,6 +189,13 @@ public class StackConveyor extends Block implements Autotiler{ Draw.rect(lastItem.fullIcon, Tmp.v1.x, Tmp.v1.y, size, size, 0); } + @Override + public void dropped(){ + super.dropped(); + var prev = Geometry.d4[(rotation + 2) % 4]; + link = Point2.pack(tile.x + prev.x, tile.y + prev.y); + } + @Override public void drawCracks(){ Draw.z(Layer.block - 0.15f); diff --git a/core/src/mindustry/world/blocks/payloads/PayloadLoader.java b/core/src/mindustry/world/blocks/payloads/PayloadLoader.java index d323c69feb..67a01ba0a7 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadLoader.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadLoader.java @@ -12,6 +12,7 @@ import mindustry.graphics.*; import mindustry.type.*; import mindustry.ui.*; import mindustry.world.blocks.payloads.PayloadUnloader.*; +import mindustry.world.blocks.sandbox.*; import static mindustry.Vars.*; @@ -152,6 +153,7 @@ public class PayloadLoader extends PayloadBlock{ //load up items if(payload.block().hasItems && items.any()){ + boolean acceptedAny = false; if(efficiency > 0.01f && timer(timerLoad, loadTime / efficiency)){ //load up items a set amount of times for(int j = 0; j < itemsLoaded && items.any(); j++){ @@ -162,6 +164,7 @@ public class PayloadLoader extends PayloadBlock{ if(payload.build.acceptItem(payload.build, item)){ payload.build.handleItem(payload.build, item); items.remove(item, 1); + acceptedAny = true; break; }else if(payload.block().separateItemCapacity || payload.block().consumesItem(item)){ exporting = true; @@ -171,6 +174,9 @@ public class PayloadLoader extends PayloadBlock{ } } } + if(!acceptedAny){ + exporting = true; + } } //load up liquids @@ -180,8 +186,12 @@ public class PayloadLoader extends PayloadBlock{ float flow = Math.min(Math.min(liquidsLoaded * edelta(), payload.block().liquidCapacity - payload.build.liquids.get(liq)), total); //TODO potential crash here if(payload.build.acceptLiquid(payload.build, liq)){ - payload.build.liquids.add(liq, flow); + if(!(payload.block() instanceof LiquidVoid)){ + payload.build.liquids.add(liq, flow); + } liquids.remove(liq, flow); + }else{ + exporting = true; } } diff --git a/core/src/mindustry/world/blocks/sandbox/LiquidVoid.java b/core/src/mindustry/world/blocks/sandbox/LiquidVoid.java index ef2c62c341..bc6a56cfe8 100644 --- a/core/src/mindustry/world/blocks/sandbox/LiquidVoid.java +++ b/core/src/mindustry/world/blocks/sandbox/LiquidVoid.java @@ -24,6 +24,12 @@ public class LiquidVoid extends Block{ } public class LiquidVoidBuild extends Building{ + @Override + public void placed(){ + super.placed(); + liquids.clear(); + } + @Override public boolean acceptLiquid(Building source, Liquid liquid){ return enabled;