diff --git a/core/src/mindustry/entities/comp/BuilderComp.java b/core/src/mindustry/entities/comp/BuilderComp.java index 89249cf507..286149ba85 100644 --- a/core/src/mindustry/entities/comp/BuilderComp.java +++ b/core/src/mindustry/entities/comp/BuilderComp.java @@ -53,7 +53,9 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{ while(it.hasNext()){ BuildPlan plan = it.next(); Tile tile = world.tile(plan.x, plan.y); - if(tile == null || (plan.breaking && tile.block() == Blocks.air) || (!plan.breaking && ((tile.build != null && tile.build.rotation == plan.rotation) || !plan.block.rotate) && tile.block() == plan.block)){ + if(tile == null || (plan.breaking && tile.block() == Blocks.air) || (!plan.breaking && ((tile.build != null && tile.build.rotation == plan.rotation) || !plan.block.rotate) && + (tile.block() == plan.block || (plan.block != null && plan.block.isFloor() && plan.block == tile.floor())))){ + it.remove(); } } diff --git a/core/src/mindustry/world/Build.java b/core/src/mindustry/world/Build.java index fc6cd5f466..30f2b4c163 100644 --- a/core/src/mindustry/world/Build.java +++ b/core/src/mindustry/world/Build.java @@ -169,6 +169,10 @@ public class Build{ return false; } + if(type.isFloor() && tile.floor == type){ + return false; + } + if(!type.canPlaceOn(tile, team, rotation)){ return false; } diff --git a/core/src/mindustry/world/Tile.java b/core/src/mindustry/world/Tile.java index 2debd9effe..1b459a7d9b 100644 --- a/core/src/mindustry/world/Tile.java +++ b/core/src/mindustry/world/Tile.java @@ -303,7 +303,9 @@ public class Tile implements Position, QuadTreeObject, Displayable{ public void setFloorUnder(Floor floor){ Block overlay = this.overlay; setFloor(floor); - setOverlay(overlay); + if(this.overlay != overlay){ + setOverlay(overlay); + } } /** Sets the block to air. */ diff --git a/core/src/mindustry/world/blocks/ConstructBlock.java b/core/src/mindustry/world/blocks/ConstructBlock.java index 0d79403238..5dd9c35885 100644 --- a/core/src/mindustry/world/blocks/ConstructBlock.java +++ b/core/src/mindustry/world/blocks/ConstructBlock.java @@ -20,6 +20,7 @@ import mindustry.graphics.*; import mindustry.logic.*; import mindustry.type.*; import mindustry.world.*; +import mindustry.world.blocks.environment.*; import mindustry.world.blocks.storage.CoreBlock.*; import mindustry.world.modules.*; @@ -72,7 +73,12 @@ public class ConstructBlock extends Block{ float healthf = tile.build == null ? 1f : tile.build.healthf(); Seq prev = tile.build instanceof ConstructBuild co ? co.prevBuild : null; - tile.setBlock(block, team, rotation); + if(block instanceof Floor floor){ + tile.setFloorUnder(floor); + tile.setBlock(Blocks.air); + }else{ + tile.setBlock(block, team, rotation); + } if(tile.build != null){ tile.build.health = block.health * healthf; diff --git a/gradle.properties b/gradle.properties index ce4c75a351..0c840299c5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,4 +25,4 @@ org.gradle.caching=true #used for slow jitpack builds; TODO see if this actually works org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 -archash=eb3b8bdd10 +archash=a0bdca954b