diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceCommand.java index 01e833db..9ae8b7f1 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceCommand.java @@ -57,17 +57,21 @@ public class TraceCommand extends SWCommand { public void stop(@Validator Player player) { Region region = Region.getRegion(player.getLocation()); TraceRecorder.instance.stopRecording(region); - BauSystem.MESSAGE.send("TRACE_MESSAGE_STOP", player); + + + if (TraceRecorder.instance.isAutoTraceEnabledInRegion(region)) { + TraceRecorder.instance.removeAutoTraceRegion(region); + BauSystem.MESSAGE.send("TRACE_MESSAGE_AUTO_STOP", player); + } else { + BauSystem.MESSAGE.send("TRACE_MESSAGE_STOP", player); + } } @Register(value = "auto", description = "TRACE_COMMAND_HELP_AUTO") public void auto(@Validator Player player) { Region region = Region.getRegion(player.getLocation()); - if (TraceRecorder.instance.toggleAutoTrace(region)) { - BauSystem.MESSAGE.send("TRACE_MESSAGE_AUTO_START", player); - } else { - BauSystem.MESSAGE.send("TRACE_MESSAGE_AUTO_STOP", player); - } + TraceRecorder.instance.addAutoTraceRegion(region); + BauSystem.MESSAGE.send("TRACE_MESSAGE_AUTO_START", player); } @Register(value = "show", description = "TRACE_COMMAND_HELP_SHOW") @@ -248,7 +252,7 @@ public class TraceCommand extends SWCommand { @Override public ViewFlag map(CommandSender commandSender, String[] previousArguments, String s) { for (ViewFlag flag : ViewFlag.flags) { - if (s.equals("--" + flag.name)) { + if (s.equals("-" + flag.name)) { return flag; } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceRecorder.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceRecorder.java index 15ee7671..2dcb0cdd 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceRecorder.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceRecorder.java @@ -74,18 +74,12 @@ public class TraceRecorder implements Listener { }, 0, 1); } - /** - * Toggles auto trace for the given region - * - * @param region - */ - public boolean toggleAutoTrace(Region region) { - if (!autoTraceRegions.remove(region)) { - autoTraceRegions.add(region); - return true; - } else { - return false; - } + public void addAutoTraceRegion(Region region) { + autoTraceRegions.add(region); + } + + public void removeAutoTraceRegion(Region region) { + autoTraceRegions.remove(region); } /** @@ -137,6 +131,7 @@ public class TraceRecorder implements Listener { TraceRecordingWrapper wrappedTrace = activeTraces.get(region); for (TNTPrimed tnt : trackedTNT.getOrDefault(region, Collections.emptyList())) { TNTPoint record = record(tnt, wrappedTrace, Collections.emptyList()); + if (record == null) continue; wrappedTrace.addRecord(record); } wrappedTrace.commitRecorded(); @@ -153,6 +148,17 @@ public class TraceRecorder implements Listener { */ private TNTPoint record(TNTPrimed tntPrimed, TraceRecordingWrapper wrappedTrace, List destroyedBlocks) { List history = historyMap.getOrDefault(tntPrimed, new ArrayList<>()); + // Failsave for tnt entering unloaded chunks + if (tntPrimed.isDead() || history.size() > 0 && history.get(history.size() - 1).getFuse() == tntPrimed.getFuseTicks()) { + Region region = tntSpawnRegion.get(tntPrimed); + if (region == null) return null; + trackedTNT.get(region).remove(tntPrimed); + tntSpawnRegion.remove(tntPrimed); + historyMap.remove(tntPrimed); + tntSpawnRegion.remove(tntPrimed); + return null; + } + int tntID; if (history.size() == 0) { @@ -168,7 +174,7 @@ public class TraceRecorder implements Listener { } boolean afterFirstExplosion = wrappedTrace.isExplosionRecorded(); - TNTPoint record = new TNTPoint(tntID, tntPrimed, isExplosion, afterFirstExplosion, TPSUtils.currentTick.get() - wrappedTrace.getStartTick(), history, destroyedBlocks); + TNTPoint record = new TNTPoint(tntID, tntPrimed, isExplosion, afterFirstExplosion, TPSUtils.currentRealTick.get() - wrappedTrace.getStartTick(), history, destroyedBlocks); history.add(record); return record; @@ -248,6 +254,7 @@ public class TraceRecorder implements Listener { tntSpawnRegion.remove((TNTPrimed) event.getEntity()); activeTraces.get(region).addRecord(record((TNTPrimed) event.getEntity(), activeTraces.get(region), event.blockList())); + tntSpawnRegion.remove((TNTPrimed) event.getEntity()); historyMap.remove((TNTPrimed) event.getEntity()); } }