diff --git a/android/src/mindustry/android/AndroidLauncher.java b/android/src/mindustry/android/AndroidLauncher.java index 5084cbc67d..1c9ee8f144 100644 --- a/android/src/mindustry/android/AndroidLauncher.java +++ b/android/src/mindustry/android/AndroidLauncher.java @@ -45,6 +45,7 @@ public class AndroidLauncher extends AndroidApplication{ handler.uncaughtException(thread, error); }else{ error.printStackTrace(); + Log.err(error); System.exit(1); } }); diff --git a/core/src/mindustry/entities/comp/PayloadComp.java b/core/src/mindustry/entities/comp/PayloadComp.java index f29d988d74..8db8656d88 100644 --- a/core/src/mindustry/entities/comp/PayloadComp.java +++ b/core/src/mindustry/entities/comp/PayloadComp.java @@ -136,7 +136,9 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{ int rot = (int)((rotation + 45f) / 90f) % 4; payload.place(on, rot); - if(isPlayer()) payload.build.lastAccessed = getPlayer().name; + if(getControllerName() != null){ + payload.build.lastAccessed = getControllerName(); + } Fx.unitDrop.at(tile); Fx.placeBlock.at(on.drawx(), on.drawy(), on.block().size); diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 004ae4a196..81a604e455 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -445,6 +445,15 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I remove(); } + /** @return name of direct or indirect player controller. */ + @Override + public @Nullable String getControllerName(){ + if(isPlayer()) return getPlayer().name; + if(controller instanceof LogicAI ai && ai.controller != null) return ai.controller.lastAccessed; + if(controller instanceof FormationAI ai && ai.leader != null && ai.leader.isPlayer()) return ai.leader.getPlayer().name; + return null; + } + @Override public void display(Table table){ type.display(self(), table); diff --git a/core/src/mindustry/logic/LogicDialog.java b/core/src/mindustry/logic/LogicDialog.java index 51b6468c77..dd12b9cca3 100644 --- a/core/src/mindustry/logic/LogicDialog.java +++ b/core/src/mindustry/logic/LogicDialog.java @@ -3,6 +3,7 @@ package mindustry.logic; import arc.*; import arc.func.*; import arc.scene.ui.TextButton.*; +import arc.util.*; import mindustry.gen.*; import mindustry.logic.LStatements.*; import mindustry.ui.*; @@ -90,16 +91,20 @@ public class LogicDialog extends BaseDialog{ onResize(() -> canvas.rebuild()); } - public void show(String code, Cons consumer){ + public void show(String code, Cons modified){ canvas.statements.clearChildren(); canvas.rebuild(); try{ canvas.load(code); }catch(Throwable t){ - t.printStackTrace(); + Log.err(t); canvas.load(""); } - this.consumer = consumer; + this.consumer = result -> { + if(!result.equals(code)){ + modified.get(result); + } + }; show(); } diff --git a/core/src/mindustry/net/CrashSender.java b/core/src/mindustry/net/CrashSender.java index 0d2204890c..4ca4f3714e 100644 --- a/core/src/mindustry/net/CrashSender.java +++ b/core/src/mindustry/net/CrashSender.java @@ -47,7 +47,12 @@ public class CrashSender{ public static void send(Throwable exception, Cons writeListener){ try{ - exception.printStackTrace(); + try{ + //log to file + Log.err(exception); + }catch(Throwable no){ + exception.printStackTrace(); + } //try saving game data try{ diff --git a/core/src/mindustry/world/Build.java b/core/src/mindustry/world/Build.java index ee868942a3..b450509c7b 100644 --- a/core/src/mindustry/world/Build.java +++ b/core/src/mindustry/world/Build.java @@ -45,7 +45,10 @@ public class Build{ build.setDeconstruct(previous); build.prevBuild = prevBuild; tile.build.health = tile.build.maxHealth * prevPercent; - if(unit != null && unit.isPlayer()) tile.build.lastAccessed = unit.getPlayer().name; + + if(unit != null && unit.getControllerName() != null){ + tile.build.lastAccessed = unit.getControllerName(); + } Core.app.post(() -> Events.fire(new BlockBuildBeginEvent(tile, team, unit, true))); } @@ -64,7 +67,7 @@ public class Build{ //auto-rotate the block to the correct orientation and bail out if(tile.team() == team && tile.block == result && tile.build != null && tile.block.quickRotate){ - if(unit != null && unit.isPlayer()) tile.build.lastAccessed = unit.getPlayer().name; + if(unit != null && unit.getControllerName() != null) tile.build.lastAccessed = unit.getControllerName(); tile.build.rotation = Mathf.mod(rotation, 4); tile.build.updateProximity(); tile.build.noSleep(); @@ -90,7 +93,7 @@ public class Build{ build.setConstruct(previous.size == sub.size ? previous : Blocks.air, result); build.prevBuild = prevBuild; - if(unit != null && unit.isPlayer()) build.lastAccessed = unit.getPlayer().name; + if(unit != null && unit.getControllerName() != null) build.lastAccessed = unit.getControllerName(); result.placeBegan(tile, previous); diff --git a/core/src/mindustry/world/blocks/ConstructBlock.java b/core/src/mindustry/world/blocks/ConstructBlock.java index 9e6696263c..f2ebd161dd 100644 --- a/core/src/mindustry/world/blocks/ConstructBlock.java +++ b/core/src/mindustry/world/blocks/ConstructBlock.java @@ -78,8 +78,8 @@ public class ConstructBlock extends Block{ tile.build.overwrote(prev); } - if(builder != null && builder.isPlayer()){ - tile.build.lastAccessed = builder.getPlayer().name; + if(builder != null && builder.getControllerName() != null){ + tile.build.lastAccessed = builder.getControllerName(); } } diff --git a/core/src/mindustry/world/blocks/logic/LogicBlock.java b/core/src/mindustry/world/blocks/logic/LogicBlock.java index b9fc38bf8b..21d3534273 100644 --- a/core/src/mindustry/world/blocks/logic/LogicBlock.java +++ b/core/src/mindustry/world/blocks/logic/LogicBlock.java @@ -477,9 +477,7 @@ public class LogicBlock extends Block{ @Override public void buildConfiguration(Table table){ table.button(Icon.pencil, Styles.clearTransi, () -> { - Vars.ui.logic.show(code, code -> { - configure(compress(code, relativeConnections())); - }); + Vars.ui.logic.show(code, code -> configure(compress(code, relativeConnections()))); }).size(40); } diff --git a/gradle.properties b/gradle.properties index a38b50f7d5..7201b1355f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=e77f5b14f5d621df62c7739854468ddae0c6c7ea +archash=638a163631aa138e4fc4a90efe1bd8113e27a489 diff --git a/ios/src/mindustry/ios/IOSLauncher.java b/ios/src/mindustry/ios/IOSLauncher.java index 818ea50a0f..edf279d912 100644 --- a/ios/src/mindustry/ios/IOSLauncher.java +++ b/ios/src/mindustry/ios/IOSLauncher.java @@ -255,6 +255,7 @@ public class IOSLauncher extends IOSApplication.Delegate{ }catch(Throwable t){ //attempt to log the exception CrashSender.log(t); + Log.err(t); //rethrow the exception so it actually crashes throw t; }