diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceCommand.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceCommand.java index cfe50f55..a40a4a62 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceCommand.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceCommand.java @@ -153,7 +153,11 @@ public class TraceCommand extends SWCommand { @Register(value = "isolate", description = "TRACE_COMMAND_HELP_ISOLATE") public void isolate(@Validator Player player, Trace trace, @ErrorMessage("TRACE_RECORD_ID_INVALID") TNTPoint... records) { - TraceManager.instance.isolate(player, records); + if (records.length == 0) { + TraceManager.instance.isolate(player, trace, trace.getRecords().toArray(TNTPoint[]::new)); + } else { + TraceManager.instance.isolate(player, trace, records); + } BauSystem.MESSAGE.send("TRACE_MESSAGE_ISOLATE", player); } diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceManager.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceManager.java index 38409347..af2e0d37 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceManager.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceManager.java @@ -347,9 +347,10 @@ public class TraceManager implements Listener { * Toggles the isolated render for the given records and player * * @param player the player the trace is shown to - * @param records the record for which isolation is toggled + * @param ptrace the trace for whitch isolation is toggled + * @param records the records of the trace for which isolation is toggled */ - public void isolate(Player player, TNTPoint... records) { + public void isolate(Player player, Trace ptrace, TNTPoint... records) { unfollow(player); Region region = Region.getRegion(player.getLocation()); @@ -374,12 +375,20 @@ public class TraceManager implements Listener { isolateFlag.toggleId(record.getTntId()); } + if (isolateFlag.isEmpty() && playerTraceShowData.hasViewFlagOnly(IsolateFlag.class) && records.length != 0) { + playerTraceShowData.removeViewFlag(IsolateFlag.class); + } + PlayerTraceShowData finalPlayerTraceShowData = playerTraceShowData; tracesByRegion.getOrDefault(region, Collections.emptyMap()).forEach((integer, trace) -> { - trace.render(player, finalPlayerTraceShowData); - followerMap.getOrDefault(player, Collections.emptySet()).forEach(follower -> { - trace.render(follower, finalPlayerTraceShowData); - }); + if (trace.getUuid() == ptrace.getUuid() || finalPlayerTraceShowData.hasNoViewFlags()) { + trace.render(player, finalPlayerTraceShowData); + followerMap.getOrDefault(player, Collections.emptySet()).forEach(follower -> { + trace.render(follower, finalPlayerTraceShowData); + }); + } else { + trace.hide(player); + } }); } diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/PlayerTraceShowData.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/PlayerTraceShowData.java index 40bbb238..ca34da43 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/PlayerTraceShowData.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/PlayerTraceShowData.java @@ -95,4 +95,8 @@ public class PlayerTraceShowData { public void addViewFlag(ViewFlag viewFlag) { viewFlags.put(viewFlag.getClass(), viewFlag); } + + public void removeViewFlag(Class clazz) { + viewFlags.remove(clazz); + } } diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/dynamicflags/IsolateFlag.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/dynamicflags/IsolateFlag.java index 8c86fcaf..303e4a32 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/dynamicflags/IsolateFlag.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/dynamicflags/IsolateFlag.java @@ -51,6 +51,10 @@ public class IsolateFlag extends ViewFlag { } } + public boolean isEmpty() { + return tntToIsolate.isEmpty(); + } + @Override public Stream filter(Stream records) { if (tntToIsolate.isEmpty()) return records;