SteamWar/BauSystem2.0
Archiviert
12
0

Update WarpListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful

Signed-off-by: yoyosource <yoyosource@nidido.de>
Dieser Commit ist enthalten in:
yoyosource 2022-01-20 20:19:04 +01:00
Ursprung a9f560ba5e
Commit f0a23e0d5f

Datei anzeigen

@ -22,7 +22,7 @@ package de.steamwar.bausystem.features.warp;
import de.steamwar.bausystem.linkage.LinkageType; import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked; import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.core.VersionedCallable; import de.steamwar.core.VersionedCallable;
import org.bukkit.Material; import org.bukkit.*;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
@ -42,7 +42,7 @@ import java.util.Map;
public class WarpListener implements Listener { public class WarpListener implements Listener {
private Map<Player, List<AbstractWarpEntity>> warpsShown = new HashMap<>(); private Map<Player, List<AbstractWarpEntity>> warpsShown = new HashMap<>();
private Map<Player, List<Warp>> selectedWarps = new HashMap<>(); private Map<Player, List<Location>> selected = new HashMap<>();
@EventHandler @EventHandler
public void onPlayerMove(PlayerMoveEvent event) { public void onPlayerMove(PlayerMoveEvent event) {
@ -56,12 +56,24 @@ public class WarpListener implements Listener {
return; return;
} }
selectedWarps.remove(event.getPlayer()); selected.remove(event.getPlayer());
List<AbstractWarpEntity> warps = warpsShown.getOrDefault(event.getPlayer(), new ArrayList<>()); List<AbstractWarpEntity> warps = warpsShown.getOrDefault(event.getPlayer(), new ArrayList<>());
Vector current = event.getPlayer().getLocation().clone().add(event.getPlayer().getLocation().getDirection().multiply(5)).toVector(); Vector current = event.getPlayer().getLocation().clone().add(event.getPlayer().getLocation().getDirection().multiply(5)).toVector();
current.setY(event.getPlayer().getLocation().getY() - 1); current.setY(event.getPlayer().getLocation().getY() - 1);
Map<String, Location> locations = new HashMap<>();
if (event.getPlayer().isSneaking()) {
Bukkit.getOnlinePlayers().forEach(player -> {
locations.put(player.getName(), player.getLocation());
});
} else {
Warp.getWarps().forEach(warp -> { Warp.getWarps().forEach(warp -> {
Vector vector = warp.getLocation().toVector().subtract(event.getPlayer().getLocation().toVector()); locations.put(warp.getName(), warp.getLocation());
});
}
locations.forEach((name, location) -> {
Vector vector = location.toVector().subtract(event.getPlayer().getLocation().toVector());
if (vector.getX() * vector.getX() + vector.getZ() * vector.getZ() < 25) { if (vector.getX() * vector.getX() + vector.getZ() * vector.getZ() < 25) {
return; return;
} }
@ -70,10 +82,9 @@ public class WarpListener implements Listener {
Vector position = event.getPlayer().getLocation().toVector().clone().add(vector.normalize().multiply(5)); Vector position = event.getPlayer().getLocation().toVector().clone().add(vector.normalize().multiply(5));
position.setY(event.getPlayer().getLocation().getY() - 1); position.setY(event.getPlayer().getLocation().getY() - 1);
String name = warp.getName();
if (position.distanceSquared(current) < 0.2) { if (position.distanceSquared(current) < 0.2) {
name = "§a§l" + name; name = "§a§l" + name;
selectedWarps.computeIfAbsent(event.getPlayer(), player -> new ArrayList<>()).add(warp); selected.computeIfAbsent(event.getPlayer(), player -> new ArrayList<>()).add(location);
} }
warps.add(createEntity(event.getPlayer(), position, name)); warps.add(createEntity(event.getPlayer(), position, name));
}); });
@ -92,11 +103,13 @@ public class WarpListener implements Listener {
if (event.getAction() != Action.RIGHT_CLICK_AIR) { if (event.getAction() != Action.RIGHT_CLICK_AIR) {
return; return;
} }
List<Warp> selected = selectedWarps.getOrDefault(event.getPlayer(), new ArrayList<>()); List<Location> locations = selected.getOrDefault(event.getPlayer(), new ArrayList<>());
if (selected.size() != 1) { if (locations.size() != 1) {
return; return;
} }
selected.get(0).teleport(event.getPlayer()); Location location = locations.get(0);
event.getPlayer().teleport(location);
event.getPlayer().playSound(location, Sound.ENTITY_ENDERMAN_TELEPORT, SoundCategory.PLAYERS, 1, 1);
event.setCancelled(true); event.setCancelled(true);
} }
@ -107,6 +120,6 @@ public class WarpListener implements Listener {
@EventHandler @EventHandler
public void onPlayerQuit(PlayerQuitEvent event) { public void onPlayerQuit(PlayerQuitEvent event) {
warpsShown.remove(event.getPlayer()); warpsShown.remove(event.getPlayer());
selectedWarps.remove(event.getPlayer()); selected.remove(event.getPlayer());
} }
} }