diff --git a/core/src/io/anuke/mindustry/world/BlockStorage.java b/core/src/io/anuke/mindustry/world/BlockStorage.java index 71224eb844..477ca3504f 100644 --- a/core/src/io/anuke/mindustry/world/BlockStorage.java +++ b/core/src/io/anuke/mindustry/world/BlockStorage.java @@ -115,6 +115,8 @@ public abstract class BlockStorage extends UnlockableContent{ Tile other = proximity.get((i + dump) % proximity.size); Tile in = Edges.getFacingEdge(tile, other); + other = other.block().getLiquidDestination(other, tile); + if(other.getTeam() == tile.getTeam() && other.block().hasLiquids && canDumpLiquid(tile, other, liquid) && other.entity.liquids != null){ float ofract = other.entity.liquids.get(liquid) / other.block().liquidCapacity; float fract = tile.entity.liquids.get(liquid) / liquidCapacity; @@ -142,6 +144,7 @@ public abstract class BlockStorage extends UnlockableContent{ if(next == null) return 0; next = next.link(); + next = next.block().getLiquidDestination(next, tile); if(next.getTeam() == tile.getTeam() && next.block().hasLiquids && tile.entity.liquids.get(liquid) > 0f){ @@ -179,6 +182,10 @@ public abstract class BlockStorage extends UnlockableContent{ return 0; } + public Tile getLiquidDestination(Tile tile, Tile from){ + return tile; + } + /** * Tries to put this item into a nearby container, if there are no available * containers, it gets added to the block's inventory. diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/LiquidJunction.java b/core/src/io/anuke/mindustry/world/blocks/distribution/LiquidJunction.java index c2942cb797..d7db89f637 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/LiquidJunction.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/LiquidJunction.java @@ -1,12 +1,10 @@ package io.anuke.mindustry.world.blocks.distribution; -import io.anuke.arc.Core; -import io.anuke.arc.graphics.g2d.Draw; -import io.anuke.arc.graphics.g2d.TextureRegion; -import io.anuke.mindustry.type.Liquid; -import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.LiquidBlock; -import io.anuke.mindustry.world.meta.BlockStat; +import io.anuke.arc.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.mindustry.world.*; +import io.anuke.mindustry.world.blocks.*; +import io.anuke.mindustry.world.meta.*; public class LiquidJunction extends LiquidBlock{ @@ -38,23 +36,10 @@ public class LiquidJunction extends LiquidBlock{ } @Override - public void handleLiquid(Tile tile, Tile source, Liquid liquid, float amount){ + public Tile getLiquidDestination(Tile tile, Tile source){ int dir = source.relativeTo(tile.x, tile.y); dir = (dir + 4) % 4; - Tile to = tile.getNearby(dir).link(); - - if(to.block().hasLiquids && to.block().acceptLiquid(to, tile, liquid, amount)){ - to.block().handleLiquid(to, tile, liquid, amount); - } - } - - @Override - public boolean acceptLiquid(Tile dest, Tile source, Liquid liquid, float amount){ - int dir = source.relativeTo(dest.x, dest.y); - dir = (dir + 4) % 4; - Tile to = dest.getNearby(dir); - if(to == null) return false; - to = to.link(); - return to != null && to.entity != null && to.block().hasLiquids && to.block().acceptLiquid(to, dest, liquid, amount); + Tile next = tile.getNearby(dir).link(); + return next.block().getLiquidDestination(next, tile); } }