From 442ef71a17d5cbd78f3c045697cbb712304ff1ff Mon Sep 17 00:00:00 2001 From: PhiRobot Date: Sun, 26 Oct 2025 14:22:20 +0000 Subject: [PATCH] Fix PR Comments --- .../BauSystem_Main/src/BauSystem.properties | 5 +- .../src/BauSystem_de.properties | 7 +- .../features/tntlistener/TLSCommand.java | 13 ++- .../features/tntlistener/TLSListener.java | 86 +++++++++++-------- .../tntlistener/TLSScoreboardElement.java | 21 +++-- .../de/steamwar/linkage/AbstractLinker.java | 2 +- 6 files changed, 84 insertions(+), 50 deletions(-) diff --git a/BauSystem/BauSystem_Main/src/BauSystem.properties b/BauSystem/BauSystem_Main/src/BauSystem.properties index e258d2e6..432ac00a 100644 --- a/BauSystem/BauSystem_Main/src/BauSystem.properties +++ b/BauSystem/BauSystem_Main/src/BauSystem.properties @@ -1031,5 +1031,6 @@ SCHEMATIC_GUI_ITEM=§eSchematics # TNTListener TLS_MESSAGE_79=§7TLS§8> §7Tick §e{0} §8- §7TNT §e{1} TLS_MESSAGE_80=§7TLS§8> §7Tick §e{0} §8- §7TNT §e{1} §8(§e{2} §7with Fuse 80§8) -TLS_START_HELP=§7Start the TNT Listener -TLS_STOP_HELP=§7Stop the TNT Listener \ No newline at end of file +TLS_START_HELP=§8/§etls start §8: §7Start the TNT Listener +TLS_STOP_HELP=§8/§etls stop §8: §7Stop the TNT Listener +TLS_SCOREBOARD_ELEMENT=§eTLS§8: §aon \ No newline at end of file diff --git a/BauSystem/BauSystem_Main/src/BauSystem_de.properties b/BauSystem/BauSystem_Main/src/BauSystem_de.properties index e96c9316..8e88f01f 100644 --- a/BauSystem/BauSystem_Main/src/BauSystem_de.properties +++ b/BauSystem/BauSystem_Main/src/BauSystem_de.properties @@ -959,4 +959,9 @@ XRAY_OFF=§cXray deaktiviert COLORREPLACE_HELP=§8//§ecolorreplace §8[§7color§8] §8[§7color§8] §8- §7Ersetzt eine Farbe mit einer anderen TYPEREPLACE_HELP=§8//§etyreplace §8[§7type§8] §8[§7type§8] §8- §7Ersetzt einen Blockgruppe mit einer anderen # Schematics -SCHEMATIC_GUI_ITEM=§eSchematics \ No newline at end of file +SCHEMATIC_GUI_ITEM=§eSchematics +TLS_MESSAGE_79=§7TLS§8> §7Tick §e{0} §8- §7TNT §e{1} +TLS_MESSAGE_80=§7TLS§8> §7Tick §e{0} §8- §7TNT §e{1} §8(§e{2} §7mit Fuse 80§8) +TLS_START_HELP=§8/§etls start §8: §7Starte den TNT Listener +TLS_STOP_HELP=§8/§etls stop §8: §7Stope den TNT Listener +TLS_SCOREBOARD_ELEMENT=§eTLS§8: §aan \ No newline at end of file diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tntlistener/TLSCommand.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tntlistener/TLSCommand.java index 9336ea39..355803dc 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tntlistener/TLSCommand.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tntlistener/TLSCommand.java @@ -21,19 +21,26 @@ package de.steamwar.bausystem.features.tntlistener; import de.steamwar.command.SWCommand; import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedInstance; import org.bukkit.entity.Player; @Linked public class TLSCommand extends SWCommand { - public TLSCommand() { super("tntlistener", "tls"); } + + @LinkedInstance + private TLSListener listener; + + public TLSCommand() { + super("tntlistener", "tls"); + } @Register(value = "start", description = "TLS_START_HELP") public void start(@Validator Player player) { - TLSListener.instance.startListening(player); + listener.startListening(player); } @Register(value = "stop", description = "TLS_STOP_HELP") public void stop(@Validator Player player) { - TLSListener.instance.stopListening(player); + listener.stopListening(player); } } diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tntlistener/TLSListener.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tntlistener/TLSListener.java index 806fec7f..17952e1d 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tntlistener/TLSListener.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tntlistener/TLSListener.java @@ -19,19 +19,18 @@ package de.steamwar.bausystem.features.tntlistener; -import de.steamwar.bausystem.features.tpslimit.TPSUtils; import de.steamwar.bausystem.BauSystem; +import de.steamwar.bausystem.features.tpslimit.TPSUtils; import de.steamwar.bausystem.region.Region; import de.steamwar.linkage.Linked; import de.steamwar.linkage.LinkedInstance; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import org.bukkit.entity.TNTPrimed; import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.entity.Player; import java.util.*; @@ -39,38 +38,30 @@ import java.util.*; public class TLSListener implements Listener { @LinkedInstance - BauSystem bauSystem; - - /** - * Expose an instance to the TLS Command so it can access it - */ - @LinkedInstance - public static TLSListener instance; + private BauSystem bauSystem; private final Map> primedTNT = new HashMap<>(); - private final Map regionSheduled = new HashMap<>(); + private final Set regionSheduled = new HashSet<>(); private final Map regionReferenceTick = new HashMap<>(); - private final List listeningPlayers = new ArrayList<>(); + private final Set listeningPlayers = new HashSet<>(); private boolean listening = false; + //TODO: Make adjustable per region private final long maxDelay = 120; - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + @EventHandler(ignoreCancelled = true) public void onTNTSpawn(EntitySpawnEvent event) { if (!(event.getEntity() instanceof TNTPrimed tnt)) return; - if (!(listening)) return; + if (!listening) return; Region eventRegion = Region.getRegion(event.getLocation()); // Add tnt to the list - if (!primedTNT.containsKey(eventRegion)) { - primedTNT.put(eventRegion, new ArrayList<>()); - } - primedTNT.get(eventRegion).add(tnt); + primedTNT.computeIfAbsent(eventRegion, rg -> new ArrayList<>()).add(tnt); // Update the realtiveTick long currentTick = TPSUtils.currentRealTick.get(); @@ -93,11 +84,13 @@ public class TLSListener implements Listener { * Fuse of 79, else 80. */ - if (regionSheduled.getOrDefault(region, false)) { + if (!regionSheduled.add(region)) { return; } - regionSheduled.put(region, true); + Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> messagePlayer(region, relativeTick), 1); + + /* new BukkitRunnable() { @Override public void run() { @@ -106,52 +99,71 @@ public class TLSListener implements Listener { int primed80 = 0; int primed79 = 0; - //tntFuse79.put(region, 0); - //tntFuse80.put(region, 0); - for (TNTPrimed tnt : primedTNT.get(region)) { + for (TNTPrimed tnt : primedTNT.getOrDefault(region, Collections.emptyList())) { if (tnt.getFuseTicks() == 80) { primed80++; - //tntFuse80.put(region, tntFuse80.getOrDefault(region, 0) + 1); } else if (tnt.getFuseTicks() == 79) { primed79++; - //tntFuse79.getOrDefault(region, tntFuse79.getOrDefault(region, 0) + 1); } } - //primedTNT.get(region).removeIf(t -> t.getFuseTicks() <= 78 || t.isDead()); - primedTNT.get(region).clear(); + primedTNT.remove(region); - /* * Message the player, if there are tnt with Fuse 80 use special message - */ for (Player p : listeningPlayers) { if (region.getArea().inRegion(p.getLocation(), false)) { if (primed80 > 0) { - // Foreach throws IDE errors: variables in lambda expressions should be final - //p.sendMessage(String.format("§7TLS§8> §7Tick §e%d§8: §e%d §7TNT §8(§e%d §7with Fuse 80§8)", relativeTick, primed79 + primed80, primed80)); BauSystem.MESSAGE.sendPrefixless("TLS_MESSAGE_80", p, relativeTick, primed79 + primed80, primed80); } else { BauSystem.MESSAGE.sendPrefixless("TLS_MESSAGE_79", p, relativeTick, primed79); - //p.sendMessage(String.format("§7TLS§8> §7Tick §e%d§8: §e%d §7TNT", relativeTick, primed79)); } } } } - }.runTaskLater(bauSystem.getInstance(), 1); + }.runTaskLater(bauSystem.getInstance(), 1);*/ + } + + private void messagePlayer(Region region, long relativeTick) { + + regionSheduled.remove(region); + + int primed80 = 0; + int primed79 = 0; + for (TNTPrimed tnt : primedTNT.getOrDefault(region, Collections.emptyList())) { + if (tnt.getFuseTicks() == 80) { + primed80++; + } else if (tnt.getFuseTicks() == 79) { + primed79++; + } + } + primedTNT.remove(region); + + /* + * Message the player, if there are tnt with Fuse 80 use special message + */ + for (Player p : listeningPlayers) { + if (region.getArea().inRegion(p.getLocation(), false)) { + if (primed80 > 0) { + BauSystem.MESSAGE.sendPrefixless("TLS_MESSAGE_80", p, relativeTick, primed79 + primed80, primed80); + } else { + BauSystem.MESSAGE.sendPrefixless("TLS_MESSAGE_79", p, relativeTick, primed79); + } + } + } } @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { - listeningPlayers.remove(event.getPlayer()); + stopListening(event.getPlayer()); } public void startListening(Player player) { - this.listening = true; listeningPlayers.add(player); + this.listening = true; } public void stopListening(Player player) { listeningPlayers.remove(player); - if (listeningPlayers.toArray().length == 0) { + if (listeningPlayers.isEmpty()) { this.listening = false; } } diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tntlistener/TLSScoreboardElement.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tntlistener/TLSScoreboardElement.java index 61f842e5..0dec6609 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tntlistener/TLSScoreboardElement.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tntlistener/TLSScoreboardElement.java @@ -19,26 +19,35 @@ package de.steamwar.bausystem.features.tntlistener; -import de.steamwar.linkage.Linked; +import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.utils.ScoreboardElement; +import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedInstance; import org.bukkit.entity.Player; @Linked public class TLSScoreboardElement implements ScoreboardElement { - @Override - public ScoreboardGroup getGroup() { return ScoreboardGroup.OTHER; } + @LinkedInstance + private TLSListener listener; @Override - public int order() { return 2; } + public ScoreboardGroup getGroup() { + return ScoreboardGroup.OTHER; + } + + @Override + public int order() { + return 2; + } @Override public String get(Region region, Player p) { if (!Permission.BUILD.hasPermission(p)) return null; - if (TLSListener.instance.isActiveFor(p)) { - return "§e" + "TLS" + "§8: " + "§aon"; + if (listener.isActiveFor(p)) { + return BauSystem.MESSAGE.parse("TLS_SCOREBOARD_ELEMENT", p); } else { return null; } diff --git a/CommonCore/Linkage/src/de/steamwar/linkage/AbstractLinker.java b/CommonCore/Linkage/src/de/steamwar/linkage/AbstractLinker.java index 4f86602d..cf88d488 100644 --- a/CommonCore/Linkage/src/de/steamwar/linkage/AbstractLinker.java +++ b/CommonCore/Linkage/src/de/steamwar/linkage/AbstractLinker.java @@ -99,7 +99,7 @@ public abstract class AbstractLinker { try { instances.forEach((clazz, o) -> { - for (Field field : clazz.getFields()) { + for (Field field : clazz.getDeclaredFields()) { if (field.getAnnotation(LinkedInstance.class) != null) { try { field.setAccessible(true);