From f054710a958c4bd20e0c0cc07e151ce1d9d4d558 Mon Sep 17 00:00:00 2001 From: D4rkr34lm Date: Fri, 10 May 2024 18:34:50 +0200 Subject: [PATCH] Improved Advanced-Flag to backtrack instead of going forward --- .../features/tracer/rendering/ViewFlag.java | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) 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 83ad005d..8702a607 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 @@ -26,10 +26,7 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.util.Vector; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -120,26 +117,30 @@ public abstract class ViewFlag { @Override public void modify(REntityServer server, List entities) { for (TraceEntity entity : entities) { - TNTPoint current = entity.getRecords().get(0); - if (current.isExplosion()) continue; - TNTPoint next = current.getNext().orElse(null); - if (next == null) continue; + TNTPoint representative = entity.getRecords().get(0); + Optional prev = representative.getPrevious(); - Location pos = current.getLocation().clone(); - pos.setY(next.getLocation().getY()); + if (prev.isEmpty()) continue; - if (pos.distanceSquared(current.getLocation()) >= 1.0 / 256.0) { - RFallingBlockEntity y = new RFallingBlockEntity(server, pos, Material.WHITE_STAINED_GLASS); + TNTPoint previous = prev.get(); + + Location delta = representative.getLocation().clone().subtract(previous.getLocation()); + + Location yLocation = previous.getLocation().clone().add(0, delta.getY(), 0); + if (yLocation.distanceSquared(representative.getLocation()) >= 1.0 / 256.0 && yLocation.distanceSquared(previous.getLocation()) >= 1.0 / 256.0) { + RFallingBlockEntity y = new RFallingBlockEntity(server, yLocation, Material.WHITE_STAINED_GLASS); y.setNoGravity(true); } - if (current.getVelocity().getX() >= current.getVelocity().getZ()) { - pos.setX(next.getLocation().getX()); + Location secoundLocation; + if (delta.getX() >= delta.getZ()) { + secoundLocation = previous.getLocation().clone().add(delta.getX(), delta.getY(), 0); } else { - pos.setZ(next.getLocation().getZ()); + secoundLocation = previous.getLocation().clone().add(0, delta.getY(), delta.getZ()); } - if (pos.distanceSquared(next.getLocation()) >= 1.0 / 256.0) { - RFallingBlockEntity second = new RFallingBlockEntity(server, pos, Material.WHITE_STAINED_GLASS); + + if (secoundLocation.distanceSquared(representative.getLocation()) >= 1.0 / 256.0 && secoundLocation.distanceSquared(previous.getLocation()) >= 1.0 / 256.0) { + RFallingBlockEntity second = new RFallingBlockEntity(server, secoundLocation, Material.WHITE_STAINED_GLASS); second.setNoGravity(true); } } -- 2.39.2