From 768d14088ab96740f661dda4876985b48681571c Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 12 Dec 2020 13:26:30 -0500 Subject: [PATCH] Fixed #3943 --- core/src/mindustry/entities/comp/BuilderComp.java | 5 +++-- core/src/mindustry/entities/units/BuildPlan.java | 7 +++++++ tools/build.gradle | 7 +++++++ tools/src/mindustry/tools/ScriptMainGenerator.java | 5 ++++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/entities/comp/BuilderComp.java b/core/src/mindustry/entities/comp/BuilderComp.java index e194decf8f..134b578aaa 100644 --- a/core/src/mindustry/entities/comp/BuilderComp.java +++ b/core/src/mindustry/entities/comp/BuilderComp.java @@ -78,7 +78,7 @@ abstract class BuilderComp implements Posc, Teamc, Rotc{ if(!(tile.block() instanceof ConstructBlock)){ if(!current.initialized && !current.breaking && Build.validPlace(current.block, team, current.x, current.y, current.rotation)){ - boolean hasAll = infinite || !Structs.contains(current.block.requirements, i -> core != null && !core.items.has(i.item)); + boolean hasAll = infinite || current.isRotation(team) || !Structs.contains(current.block.requirements, i -> core != null && !core.items.has(i.item)); if(hasAll){ Call.beginPlace(self(), current.block, team, current.x, current.y, current.rotation); @@ -138,7 +138,8 @@ abstract class BuilderComp implements Posc, Teamc, Rotc{ /** @return whether this request should be skipped, in favor of the next one. */ boolean shouldSkip(BuildPlan request, @Nullable Building core){ //requests that you have at least *started* are considered - if(state.rules.infiniteResources || team.rules().infiniteResources || request.breaking || core == null) return false; + if(state.rules.infiniteResources || team.rules().infiniteResources || request.breaking || core == null || request.isRotation(team)) return false; + return (request.stuck && !core.items.has(request.block.requirements)) || (Structs.contains(request.block.requirements, i -> !core.items.has(i.item) && Mathf.round(i.amount * state.rules.buildCostMultiplier) > 0) && !request.initialized); } diff --git a/core/src/mindustry/entities/units/BuildPlan.java b/core/src/mindustry/entities/units/BuildPlan.java index 395f620b3e..7249da0aad 100644 --- a/core/src/mindustry/entities/units/BuildPlan.java +++ b/core/src/mindustry/entities/units/BuildPlan.java @@ -3,6 +3,7 @@ package mindustry.entities.units; import arc.func.*; import arc.math.geom.*; import arc.util.*; +import mindustry.game.*; import mindustry.gen.*; import mindustry.world.*; @@ -61,6 +62,12 @@ public class BuildPlan implements Position{ } + public boolean isRotation(Team team){ + if(breaking) return false; + Tile tile = tile(); + return tile != null && tile.team() == team && tile.block() == block && tile.build != null && tile.build.rotation != rotation; + } + public boolean samePos(BuildPlan other){ return x == other.x && y == other.y; } diff --git a/tools/build.gradle b/tools/build.gradle index 7243ec4bd7..46f1168e33 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -428,4 +428,11 @@ task icongen(dependsOn: classes, type: JavaExec){ classpath = sourceSets.main.runtimeClasspath standardInput = System.in workingDir = "../core/assets-raw" +} + +task updateScripts(dependsOn: classes, type: JavaExec){ + main = "mindustry.tools.ScriptMainGenerator" + classpath = sourceSets.main.runtimeClasspath + standardInput = System.in + workingDir = "../" } \ No newline at end of file diff --git a/tools/src/mindustry/tools/ScriptMainGenerator.java b/tools/src/mindustry/tools/ScriptMainGenerator.java index 25b7e0455b..cfc248dca4 100644 --- a/tools/src/mindustry/tools/ScriptMainGenerator.java +++ b/tools/src/mindustry/tools/ScriptMainGenerator.java @@ -38,7 +38,10 @@ public class ScriptMainGenerator{ getClasses("arc.struct"), getClasses("arc.scene"), getClasses("arc.math"), - getClasses("arc.audio") + getClasses("arc.audio"), + getClasses("arc.input"), + getClasses("arc.util"), + getClasses("arc.struct") ); classes.addAll(whitelist); classes.sort(Structs.comparing(Class::getName));