From 1ccc2c4b5546609d05c080fd1c743d39ddd10ef3 Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Fri, 7 Nov 2025 09:25:40 +0100 Subject: [PATCH] Improve Loader Improve ObserverTracer --- .../bausystem/features/loader/Loader.java | 13 +++----- .../features/observer/ObserverTracer.java | 3 +- .../observer/ObserverTracerCommand.java | 9 +++--- .../observer/ObserverTracerListener.java | 32 +++++++------------ .../src/de/steamwar/core/SWPlayer.java | 15 +++------ 5 files changed, 29 insertions(+), 43 deletions(-) diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/loader/Loader.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/loader/Loader.java index 491f45aa..4f990052 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/loader/Loader.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/loader/Loader.java @@ -26,6 +26,7 @@ import de.steamwar.bausystem.features.loader.elements.LoaderInteractionElement; import de.steamwar.bausystem.features.loader.elements.impl.LoaderTNT; import de.steamwar.bausystem.features.loader.elements.impl.LoaderWait; import de.steamwar.bausystem.shared.EnumDisplay; +import de.steamwar.core.SWPlayer; import de.steamwar.inventory.SWAnvilInv; import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWListInv; @@ -40,21 +41,17 @@ import org.bukkit.event.inventory.ClickType; import org.bukkit.event.player.PlayerQuitEvent; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; -public class Loader implements Listener { - - private static final Map LOADER_MAP = new HashMap<>(); +public class Loader implements Listener, SWPlayer.Component { public static Loader getLoader(Player player) { - return LOADER_MAP.get(player); + return SWPlayer.of(player).getComponent(Loader.class).orElse(null); } public static void newLoader(Player player) { - LOADER_MAP.put(player, new Loader(player)); + SWPlayer.of(player).setComponent(new Loader(player)); } private final Player p; @@ -145,7 +142,7 @@ public class Loader implements Listener { recorder = null; } elements.clear(); - LOADER_MAP.remove(p); + SWPlayer.of(p).removeComponent(Loader.class); } public boolean setTicksBetweenShots(int delay) { diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracer.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracer.java index ad0bca1b..6dad9e00 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracer.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracer.java @@ -21,6 +21,7 @@ package de.steamwar.bausystem.features.observer; import de.steamwar.Reflection; import de.steamwar.bausystem.region.Point; +import de.steamwar.core.SWPlayer; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Particle; @@ -34,7 +35,7 @@ import org.bukkit.entity.Player; import java.util.*; -public class ObserverTracer { +public class ObserverTracer implements SWPlayer.Component { private static final Set ALLOWED = EnumSet.of(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.EAST, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN); diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracerCommand.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracerCommand.java index 7cfadf2c..e88e4ca0 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracerCommand.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracerCommand.java @@ -21,6 +21,7 @@ package de.steamwar.bausystem.features.observer; import de.steamwar.bausystem.BauSystem; import de.steamwar.command.SWCommand; +import de.steamwar.core.SWPlayer; import de.steamwar.linkage.Linked; import org.bukkit.entity.Player; @@ -41,23 +42,23 @@ public class ObserverTracerCommand extends SWCommand { @Register(value = "disable", description = "OBSERVER_HELP_DISABLE") public void disable(Player p) { ObserverTracerListener.enabled.remove(p); - ObserverTracerListener.observerTracerMap.remove(p); + SWPlayer.of(p).removeComponent(ObserverTracer.class); BauSystem.MESSAGE.send("OBSERVER_DISABLE", p); } @Register(value = "delete", description = "OBSERVER_HELP_DELETE") public void delete(@Validator Player p) { - ObserverTracerListener.observerTracerMap.remove(p); + SWPlayer.of(p).removeComponent(ObserverTracer.class); BauSystem.MESSAGE.send("OBSERVER_DELETE", p); } @Register(value = "retrace", description = "OBSERVER_HELP_RETRACE") public void retrace(@Validator Player p) { - if (ObserverTracerListener.observerTracerMap.containsKey(p)) { + if (SWPlayer.of(p).hasComponent(ObserverTracer.class)) { BauSystem.MESSAGE.send("OBSERVER_RETRACE_NO_TRACE", p); return; } - ObserverTracerListener.observerTracerMap.get(p).trace(); + SWPlayer.of(p).getComponent(ObserverTracer.class).ifPresent(ObserverTracer::trace); BauSystem.MESSAGE.send("OBSERVER_RETRACE_DONE", p); } } diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracerListener.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracerListener.java index 9ef56909..0528527e 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracerListener.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracerListener.java @@ -22,6 +22,7 @@ package de.steamwar.bausystem.features.observer; import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.utils.BauMemberUpdateEvent; +import de.steamwar.core.SWPlayer; import de.steamwar.linkage.Linked; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -34,23 +35,19 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; -import java.util.HashMap; import java.util.HashSet; -import java.util.Map; import java.util.Set; @Linked public class ObserverTracerListener implements Listener { static Set enabled = new HashSet<>(); - static Map observerTracerMap = new HashMap<>(); public ObserverTracerListener() { Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), () -> { - observerTracerMap.forEach((player, observerTracer) -> { - if (player.getGameMode() == GameMode.SPECTATOR) { - observerTracer.show(); - } + SWPlayer.allWithSingleComponent(ObserverTracer.class).forEach(pair -> { + if (pair.getKey().getGameMode() != GameMode.SPECTATOR) return; + pair.getValue().show(); }); }, 15L, 15L); } @@ -58,20 +55,16 @@ public class ObserverTracerListener implements Listener { @EventHandler public void onPlayerInteract(PlayerInteractEvent event) { if(!Permission.BUILD.hasPermission(event.getPlayer())) return; - if (!enabled.contains(event.getPlayer())) { - return; - } - if (event.getClickedBlock() == null) { - return; - } - if (observerTracerMap.containsKey(event.getPlayer())) { - ObserverTracer observerTracer = observerTracerMap.get(event.getPlayer()); + if (!enabled.contains(event.getPlayer())) return; + if (event.getClickedBlock() == null) return; + ObserverTracer observerTracer = SWPlayer.of(event.getPlayer()).getComponent(ObserverTracer.class).orElse(null); + if (observerTracer != null) { Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> { if (!observerTracer.trace()) { createNew(event); } - observerTracerMap.forEach((player, o) -> { - o.trace(); + SWPlayer.allWithSingleComponent(ObserverTracer.class).forEach(pair -> { + pair.getValue().trace(); }); }, 1L); } else { @@ -86,13 +79,13 @@ public class ObserverTracerListener implements Listener { if (event.getClickedBlock().getType() == Material.OBSERVER) { ObserverTracer observerTracer = new ObserverTracer(event.getPlayer(), event.getClickedBlock()); observerTracer.trace(); - observerTracerMap.put(event.getPlayer(), observerTracer); + SWPlayer.of(event.getPlayer()).setComponent(observerTracer); } } @EventHandler public void onBauMemberUpdate(BauMemberUpdateEvent event) { - event.getNewSpectator().forEach(observerTracerMap::remove); + event.getNewBuilder().forEach(player -> SWPlayer.of(player).removeComponent(ObserverTracer.class)); } @EventHandler @@ -103,6 +96,5 @@ public class ObserverTracerListener implements Listener { @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { enabled.remove(event.getPlayer()); - observerTracerMap.remove(event.getPlayer()); } } diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/SWPlayer.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/SWPlayer.java index a911fbfd..ffe98933 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/SWPlayer.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/SWPlayer.java @@ -24,6 +24,7 @@ import lombok.NonNull; import lombok.experimental.Delegate; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.ClickEvent; +import org.apache.commons.lang3.tuple.Pair; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -90,16 +91,10 @@ public class SWPlayer { return players.values().stream(); } - @SafeVarargs - public static @NonNull Stream allWithComponent(Class component, Class... components) { - Stream stream = players.values().stream() - .filter(player -> player.components.containsKey(component)); - if (components != null) { - for (Class comp : components) { - stream = stream.filter(player -> player.components.containsKey(comp)); - } - } - return stream; + public static @NonNull Stream> allWithSingleComponent(Class component) { + return players.values().stream() + .filter(player -> player.components.containsKey(component)) + .map(player -> Pair.of(player, (T) player.components.get(component))); } @Delegate