forked from SteamWar/SteamWar
Improve Loader
Improve ObserverTracer
This commit is contained in:
@@ -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<Player, Loader> 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) {
|
||||
|
||||
+2
-1
@@ -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<BlockFace> ALLOWED = EnumSet.of(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.EAST, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN);
|
||||
|
||||
|
||||
+5
-4
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+12
-20
@@ -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<Player> enabled = new HashSet<>();
|
||||
static Map<Player, ObserverTracer> 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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<SWPlayer> allWithComponent(Class<? extends Component> component, Class<? extends Component>... components) {
|
||||
Stream<SWPlayer> stream = players.values().stream()
|
||||
.filter(player -> player.components.containsKey(component));
|
||||
if (components != null) {
|
||||
for (Class<? extends Component> comp : components) {
|
||||
stream = stream.filter(player -> player.components.containsKey(comp));
|
||||
}
|
||||
}
|
||||
return stream;
|
||||
public static <T extends Component> @NonNull Stream<Pair<SWPlayer, T>> allWithSingleComponent(Class<T> component) {
|
||||
return players.values().stream()
|
||||
.filter(player -> player.components.containsKey(component))
|
||||
.map(player -> Pair.of(player, (T) player.components.get(component)));
|
||||
}
|
||||
|
||||
@Delegate
|
||||
|
||||
Reference in New Issue
Block a user