diff --git a/core/src/mindustry/ai/types/BuilderAI.java b/core/src/mindustry/ai/types/BuilderAI.java index f900a60955..5ebe84cfed 100644 --- a/core/src/mindustry/ai/types/BuilderAI.java +++ b/core/src/mindustry/ai/types/BuilderAI.java @@ -45,6 +45,16 @@ public class BuilderAI extends AIController{ //approach request if building BuildPlan req = unit.buildPlan(); + //clear break plan if another player is breaking something. + if(!req.breaking && timer.get(timerTarget2, 40f)){ + for(Player player : Groups.player){ + if(player.isBuilder() && player.unit().activelyBuilding() && player.unit().buildPlan().samePos(req) && player.unit().buildPlan().breaking){ + unit.plans.removeFirst(); + return; + } + } + } + boolean valid = (req.tile() != null && req.tile().build instanceof ConstructBuild && req.tile().bc().cblock == req.block) || (req.breaking ? diff --git a/core/src/mindustry/entities/units/BuildPlan.java b/core/src/mindustry/entities/units/BuildPlan.java index 16ec45cb07..395f620b3e 100644 --- a/core/src/mindustry/entities/units/BuildPlan.java +++ b/core/src/mindustry/entities/units/BuildPlan.java @@ -61,6 +61,10 @@ public class BuildPlan implements Position{ } + public boolean samePos(BuildPlan other){ + return x == other.x && y == other.y; + } + /** Transforms the internal position of this config using the specified function, and return the result. */ public static Object pointConfig(Block block, Object config, Cons cons){ if(config instanceof Point2){ diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index bf6607b2fe..087563aa59 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -278,8 +278,10 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ throw new ValidateException(player, "Player cannot drop an item."); } - Fx.dropItem.at(player.x, player.y, angle, Color.white, player.unit().item()); - player.unit().clearItem(); + player.unit().eachGroup(unit -> { + Fx.dropItem.at(unit.x, unit.y, angle, Color.white, unit.item()); + unit.clearItem(); + }); } @Remote(targets = Loc.both, called = Loc.server, forward = true, unreliable = true) diff --git a/core/src/mindustry/ui/Bar.java b/core/src/mindustry/ui/Bar.java index dbb7e9cc6f..8de089041a 100644 --- a/core/src/mindustry/ui/Bar.java +++ b/core/src/mindustry/ui/Bar.java @@ -82,6 +82,10 @@ public class Bar extends Element{ lastValue = computed; } + if(Float.isNaN(lastValue)) lastValue = 0; + if(Float.isInfinite(lastValue)) lastValue = 1f; + if(Float.isNaN(value)) value = 0; + if(Float.isInfinite(value)) value = 1f; if(Float.isNaN(computed)) computed = 0; if(Float.isInfinite(computed)) computed = 1f; diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 6c28f04fb6..0f3d60bd75 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -287,7 +287,7 @@ public class Block extends UnlockableContent{ Tile tile = world.tile(x, y); if(tile == null) return 0; return tile.getLinkedTilesAs(this, tempTiles) - .sumf(other -> other.floor().attributes.get(attr)); + .sumf(other -> !floating && other.floor().isDeep() ? 0 : other.floor().attributes.get(attr)); } public TextureRegion getDisplayIcon(Tile tile){ diff --git a/core/src/mindustry/world/blocks/campaign/Accelerator.java b/core/src/mindustry/world/blocks/campaign/Accelerator.java index 9fc423509e..47c0332302 100644 --- a/core/src/mindustry/world/blocks/campaign/Accelerator.java +++ b/core/src/mindustry/world/blocks/campaign/Accelerator.java @@ -21,7 +21,7 @@ public class Accelerator extends Block{ public @Load("launch-arrow") TextureRegion arrowRegion; public Block launching = Blocks.coreNucleus; - public int[] capacities = new int[content.items().size]; + public int[] capacities; public Accelerator(String name){ super(name); @@ -35,6 +35,7 @@ public class Accelerator extends Block{ @Override public void init(){ itemCapacity = 0; + capacities = new int[content.items().size]; for(ItemStack stack : launching.requirements){ capacities[stack.item.id] = stack.amount; itemCapacity += stack.amount;