From 987a00ae51c9a841abcb8749d26a2c0f71f287df Mon Sep 17 00:00:00 2001 From: D4rkr34lm Date: Tue, 26 Mar 2024 22:11:08 +0100 Subject: [PATCH] Added proper info print to chat Refactored Isolate --- .../bausystem/features/tracer/TNTRecord.java | 11 +++++ .../bausystem/features/tracer/Trace.java | 49 ++++++++++++++++--- .../features/tracer/TraceCommand.java | 24 +-------- .../tracer/rendering/TraceEntity.java | 36 ++++++++------ .../features/tracer/rendering/ViewFlag.java | 2 - 5 files changed, 74 insertions(+), 48 deletions(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TNTRecord.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TNTRecord.java index a6065aaf..27aec28e 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TNTRecord.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TNTRecord.java @@ -136,4 +136,15 @@ public class TNTRecord { ", velocity=" + velocity + '}'; } + + @Override + public boolean equals(Object obj) { + if(!(obj instanceof TNTRecord)) return false; + TNTRecord record = (TNTRecord) obj; + + if(record.isExplosion() != explosion) return false; + if(!record.getLocation().equals(location)) return false; + if(!record.getVelocity().equals(velocity)) return false; + return true; + } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/Trace.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/Trace.java index 062e5a8f..e679dcd0 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/Trace.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/Trace.java @@ -23,12 +23,14 @@ import de.steamwar.bausystem.features.tpslimit.TPSUtils; import de.steamwar.bausystem.features.tracer.rendering.BundleFilter; import de.steamwar.bausystem.features.tracer.rendering.TraceEntity; import de.steamwar.bausystem.features.tracer.rendering.ViewFlag; +import de.steamwar.bausystem.features.tracer.rendering.dynamicFlags.IsolateFlag; import de.steamwar.bausystem.region.Region; import de.steamwar.entity.REntityServer; import lombok.Getter; import org.bukkit.entity.Player; import java.util.*; +import java.util.stream.Stream; public class Trace { /** @@ -199,6 +201,15 @@ public class Trace { for(ViewFlag flag : flags) { flag.modify(server, entities); } + + server.setCallback(((player, rEntity, entityAction) -> { + for(TraceEntity entity: entities){ + if(((TraceEntity) rEntity).equals(entity)){ + entity.printIntoChat(player); + return; + } + } + })); } /** Bundles the passed TNTRecords based on whether they are at the same location @@ -236,6 +247,37 @@ public class Trace { return bundles; } + /** 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 + */ + public void isolate(Player player, TNTRecord... records){ + IsolateFlag isolationFlag = null; + + ViewFlag[] viewFlags = viewFlagMap.get(player); + if(viewFlags != null) { + isolationFlag = Stream.of(viewFlags) + .filter(IsolateFlag.class::isInstance) + .map(IsolateFlag.class::cast) + .findFirst() + .orElse(null); + } + + if (viewFlags == null || isolationFlag == null) { + viewFlags = new ViewFlag[1]; + } + if (isolationFlag == null) { + isolationFlag = new IsolateFlag(); + } + viewFlags[0] = isolationFlag; + + for(TNTRecord record: records) + isolationFlag.toggleId(record.getTntId()); + + render(player, viewFlags, BundleFilter.STRICT); + } + /** Hides this trail for the given player * * @param player @@ -249,13 +291,6 @@ public class Trace { server.close(); } - /** Returns the flags used by the given player to render the trace or null if not present - * - * @param player - * @return - */ - protected ViewFlag[] getViewFlags(Player player){return viewFlagMap.get(player);} - @Override public String toString() { return "Trace{" + 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 c40f45dc..c294f473 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceCommand.java @@ -92,29 +92,7 @@ public class TraceCommand extends SWCommand { @Register(value = "isolate", description = "TRACE_COMMAND_HELP_SHOW") public void isolate(Player player, Trace trace, @ErrorMessage("test") TNTRecord... records){ - IsolateFlag isolationFlag = null; - - ViewFlag[] viewFlags = trace.getViewFlags(player); - if(viewFlags != null) { - isolationFlag = Stream.of(viewFlags) - .filter(IsolateFlag.class::isInstance) - .map(IsolateFlag.class::cast) - .findFirst() - .orElse(null); - } - - if (viewFlags == null || isolationFlag == null) { - viewFlags = new ViewFlag[1]; - } - if (isolationFlag == null) { - isolationFlag = new IsolateFlag(); - } - viewFlags[0] = isolationFlag; - - for(TNTRecord record: records) - isolationFlag.toggleId(record.getTntId()); - - trace.render(player, viewFlags, BundleFilter.STRICT); + trace.isolate(player, records); } //TODO warning if nothing is shown diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/TraceEntity.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/TraceEntity.java index 9f6439b3..ebfb6e43 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/TraceEntity.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/TraceEntity.java @@ -26,6 +26,7 @@ import de.steamwar.entity.RFallingBlockEntity; import lombok.Getter; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityInteractEvent; @@ -44,23 +45,26 @@ public class TraceEntity extends RFallingBlockEntity { super(server, location, isExplosion ? Material.RED_STAINED_GLASS : Material.TNT); setNoGravity(true); this.records = records; - - server.setCallback(((player, rEntity, entityAction) -> { - if (entityAction != REntityServer.EntityAction.INTERACT) return; - - TNTRecord representative = records.get(0); - - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_HEADER", player); - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_FUSE_TIME", player, representative.getFuse()); - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_POSITION_X", player, representative.getLocation().getX() + ""); - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_POSITION_Y", player, representative.getLocation().getY() + ""); - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_POSITION_Z", player, representative.getLocation().getZ() + ""); - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_VELOCITY_X", player, representative.getVelocity().getX() + ""); - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_VELOCITY_Y", player, representative.getVelocity().getY() + ""); - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_VELOCITY_Z", player, representative.getVelocity().getZ() + ""); - - })); } + public void printIntoChat(Player player){ + TNTRecord representative = records.get(0); + BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_HEADER", player); + BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_FUSE_TIME", player, representative.getFuse()); + BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_POSITION_X", player, representative.getLocation().getX() + ""); + BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_POSITION_Y", player, representative.getLocation().getY() + ""); + BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_POSITION_Z", player, representative.getLocation().getZ() + ""); + BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_VELOCITY_X", player, representative.getVelocity().getX() + ""); + BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_VELOCITY_Y", player, representative.getVelocity().getY() + ""); + BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_VELOCITY_Z", player, representative.getVelocity().getZ() + ""); + } + + @Override + public boolean equals(Object object) { + if(!(object instanceof TraceEntity)) return false; + TraceEntity entity = (TraceEntity) object; + + return records.get(0).equals(entity.getRecords().get(0)); + } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/ViewFlag.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/ViewFlag.java index 6f0bd02f..c38c02a7 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/ViewFlag.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/ViewFlag.java @@ -103,7 +103,6 @@ public abstract class ViewFlag { public void modify(REntityServer server, List entities) {} }; - //TODO fix? public static ViewFlag MICROMOTION = new ViewFlag(true, false, "micromotion", "m") { @Override public List filter(List records) { @@ -139,7 +138,6 @@ public abstract class ViewFlag { public void modify(REntityServer server, List entities) {} }; - //TODO fix? public static ViewFlag ADVANCED = new ViewFlag(true, false, "advanced", "a") { @Override public List filter(List records) {return records;}