From ce532fbb6ddbc6b623846ebc1c86033213387b92 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 12 Nov 2021 17:36:00 +0100 Subject: [PATCH] Update Warp and WarpCommand Signed-off-by: yoyosource --- BauSystem_Main/src/BauSystem.properties | 1 - .../bausystem/features/warp/Warp.java | 107 +++++------------- .../bausystem/features/warp/WarpCommand.java | 34 ++++-- .../bausystem/linkage/LinkageType.java | 4 +- .../bausystem/worlddata/WorldData.java | 4 +- 5 files changed, 62 insertions(+), 88 deletions(-) diff --git a/BauSystem_Main/src/BauSystem.properties b/BauSystem_Main/src/BauSystem.properties index d889d762..3fa20bd1 100644 --- a/BauSystem_Main/src/BauSystem.properties +++ b/BauSystem_Main/src/BauSystem.properties @@ -565,7 +565,6 @@ WARP_LIST_PREVIOUS_PAGE=§eVorherige Seite WARP_LIST_PAGE=§e Seite ({0}/{1}) »» WARP_LIST_NEXT_PAGE=§eNächste Seite WARP_INFO_NAME=§7Name: §e{0} -WARP_INFO_CREATOR=§7Ersteller: §e{0} WARP_HELP_1=§8/§ewarp add §8[§7Name§8] - §7Erstelle einen neuen Warp Punkt WARP_HELP_2=§8/§ewarp §8[§7Name§8] - §7Teleportiere dich zu einen Warp-Punkt WARP_HELP_3=§8/§ewarp info §8[§7Name§8] - §7Infos zu einem Punkt diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/warp/Warp.java b/BauSystem_Main/src/de/steamwar/bausystem/features/warp/Warp.java index 3cbc8737..c163c03a 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/warp/Warp.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/warp/Warp.java @@ -24,28 +24,29 @@ import lombok.Getter; import org.bukkit.*; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerTeleportEvent; -import yapion.hierarchy.types.YAPIONArray; import yapion.hierarchy.types.YAPIONObject; -import java.time.Instant; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.UUID; +import java.util.*; // TODO: Rewrite! @Getter public class Warp { - private final YAPIONObject object; + private static Map warpMap = new HashMap<>(); + private String name; private Location location; private Material mat; - private String creator; - private Warp(YAPIONObject object) { - this.object = object; - name = object.getPlainValue("name"); + public Warp(String name, Player player) { + this.name = name; + this.location = player.getLocation(); + this.mat = Material.COMPASS; + warpMap.put(name, this); + } + + public Warp(String name, YAPIONObject object) { + this.name = name; double x = object.getPlainValue("x"); double y = object.getPlainValue("y"); double z = object.getPlainValue("z"); @@ -53,55 +54,34 @@ public class Warp { float pitch = object.getPlainValue("pitch"); location = new Location(Bukkit.getWorlds().get(0), x, y, z, yaw, pitch); mat = Material.getMaterial(object.getPlainValue("material")); - creator = object.getPlainValue("owner"); + warpMap.put(name, this); } - private Warp() { - object = new YAPIONObject(); + public YAPIONObject output() { + YAPIONObject yapionObject = new YAPIONObject(); + yapionObject.add("x", location.getX()); + yapionObject.add("y", location.getY()); + yapionObject.add("z", location.getZ()); + yapionObject.add("yaw", location.getYaw()); + yapionObject.add("pitch", location.getPitch()); + yapionObject.add("material", mat.toString()); + return yapionObject; + } + + public static Set getWarpNames() { + return warpMap.keySet(); } public static List getWarps() { - List warpList = new ArrayList<>(); - YAPIONArray warpsObject = WorldData.getWarpData(); - warpsObject.forEach(yapionAnyType -> warpList.add(new Warp((YAPIONObject) yapionAnyType))); - return warpList; + return new ArrayList<>(warpMap.values()); } - public static Optional getWarp(String name) { - YAPIONArray warpsObject = WorldData.getWarpData(); - return warpsObject.stream().filter(yapionAnyType -> name.equals(((YAPIONObject) yapionAnyType).getPlainValueOrDefault("name", null))).map(yapionAnyType -> new Warp((YAPIONObject) yapionAnyType)).findAny(); - } - - public static Warp createWarp(String name, double x, double y, double z, float yaw, float pitch, Material mat, String creator) { - Warp warp = new Warp(); - warp.setName(name); - warp.setLocation(new Location(Bukkit.getWorlds().get(0), x, y, z, yaw, pitch)); - warp.setMat(mat); - warp.setCreator(creator); - YAPIONArray warpsObject = WorldData.getWarpData(); - warpsObject.add(warp.object); - - return warp; - } - - public static Warp createWarp(String name, Player player, Material mat) { - Location loc = player.getLocation(); - return createWarp(name, loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch(), mat, player.getName()); - } - - public void setName(String name) { - this.name = name; - object.add("name", name); + public static Warp getWarp(String name) { + return warpMap.get(name); } public void setMat(Material mat) { this.mat = mat; - object.add("material", mat.name()); - } - - public void setCreator(String creator) { - this.creator = creator; - object.add("owner", creator); } public void setLocation(Location location) { @@ -109,37 +89,12 @@ public class Warp { } public void delete() { - YAPIONArray warpsObject = WorldData.getWarpData(); - warpsObject.removeIf(yapionAnyType -> ((YAPIONObject) yapionAnyType).getPlainValue("name").equals(name)); + warpMap.remove(name); + WorldData.getWarpData().remove(name); } public void teleport(Player player) { player.teleport(location, PlayerTeleportEvent.TeleportCause.PLUGIN); player.playSound(location, Sound.ENTITY_ENDERMAN_TELEPORT, SoundCategory.PLAYERS, 1, 1); } - - public void normalize(String str) { - /* - x > x - y > y - z > z - w > yaw - p > pitch - */ - if(str.contains("x")) { - location.setX(0.5 + location.getBlockX()); - } - if(str.contains("y")) { - location.setY(location.getBlockY()); - } - if(str.contains("z")) { - location.setZ(0.5 + location.getBlockZ()); - } - if(str.contains("w")) { - location.setYaw(Location.normalizeYaw(location.getYaw())); - } - if(str.contains("p")) { - location.setPitch(Location.normalizePitch(location.getPitch())); - } - } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/warp/WarpCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/warp/WarpCommand.java index 467add09..3629d620 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/warp/WarpCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/warp/WarpCommand.java @@ -21,8 +21,11 @@ package de.steamwar.bausystem.features.warp; import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.Permission; +import de.steamwar.bausystem.linkage.Disable; +import de.steamwar.bausystem.linkage.Enable; import de.steamwar.bausystem.linkage.LinkageType; import de.steamwar.bausystem.linkage.Linked; +import de.steamwar.bausystem.worlddata.WorldData; import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommandUtils; import de.steamwar.command.TypeMapper; @@ -33,12 +36,17 @@ import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Material; import org.bukkit.entity.Player; +import yapion.hierarchy.types.YAPIONArray; +import yapion.hierarchy.types.YAPIONObject; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @Linked(LinkageType.COMMAND) -public class WarpCommand extends SWCommand { +@Linked(LinkageType.DISABLE_LINK) +@Linked(LinkageType.ENABLE_LINK) +public class WarpCommand extends SWCommand implements Disable, Enable { private static final String[] FORBIDDEN_NAMES = new String[]{ "add", "create", "delete", "list", "info", "gui" @@ -50,9 +58,7 @@ public class WarpCommand extends SWCommand { @ClassMapper(Warp.class) public static TypeMapper getWarpMapper() { - return SWCommandUtils.createMapper(s -> Warp.getWarp(s).orElse(null), (commandSender, s) -> { - return Warp.getWarps().stream().map(Warp::getName).collect(Collectors.toList()); - }); + return SWCommandUtils.createMapper(Warp::getWarp, (commandSender, s) -> new ArrayList<>(Warp.getWarpNames())); } @Register(help = true) @@ -80,11 +86,11 @@ public class WarpCommand extends SWCommand { return; } } - if (Warp.getWarp(name).isPresent()) { + if (Warp.getWarp(name) != null) { BauSystem.MESSAGE.send("WARP_EXISTS", player, name); return; } - Warp.createWarp(name, player, Material.BEACON); + new Warp(name, player); BauSystem.MESSAGE.send("WARP_CREATED", player, name); } @@ -150,7 +156,6 @@ public class WarpCommand extends SWCommand { public void warpInfo(Player player, Warp warp) { BauSystem.MESSAGE.send("COMMAND_HELP_HEAD", player, warp.getName()); BauSystem.MESSAGE.sendPrefixless("WARP_INFO_NAME", player, warp.getName()); - BauSystem.MESSAGE.sendPrefixless("WARP_INFO_CREATOR", player, warp.getCreator()); BauSystem.MESSAGE.sendPrefixless("WARP_LOC_X", player, warp.getLocation().getX()); BauSystem.MESSAGE.sendPrefixless("WARP_LOC_Y", player, warp.getLocation().getY()); BauSystem.MESSAGE.sendPrefixless("WARP_LOC_Z", player, warp.getLocation().getZ()); @@ -178,4 +183,19 @@ public class WarpCommand extends SWCommand { player.performCommand("warp list " + String.join(" ", args)); } } + + @Override + public void enable() { + WorldData.getWarpData().forEach((name, yapionAnyType) -> { + new Warp(name, (YAPIONObject) yapionAnyType); + }); + } + + @Override + public void disable() { + YAPIONObject yapionObject = WorldData.getWarpData(); + for (Warp warp : Warp.getWarps()) { + yapionObject.add(warp.getName(), warp.output()); + } + } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/linkage/LinkageType.java b/BauSystem_Main/src/de/steamwar/bausystem/linkage/LinkageType.java index 30c1d5b5..7d033602 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/linkage/LinkageType.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/linkage/LinkageType.java @@ -47,8 +47,8 @@ public enum LinkageType { // NORMAL COMMAND(-1, false, SWCommand.class::isAssignableFrom), - ENABLE_LINK(0, false, Enable.class::isInstance, o -> ((Enable) o).enable()), - DISABLE_LINK(0, true, Disable.class::isInstance, o -> ((Disable) o).disable()), + ENABLE_LINK(0, false, Enable.class::isAssignableFrom, o -> ((Enable) o).enable()), + DISABLE_LINK(0, true, Disable.class::isAssignableFrom, o -> ((Disable) o).disable()), PLAIN(1, false, clazz -> true), LISTENER(2, false, Listener.class::isAssignableFrom, o -> Bukkit.getPluginManager().registerEvents((Listener) o, BauSystem.getInstance())), UNLINK_LISTENER(2, true, Listener.class::isAssignableFrom, o -> HandlerList.unregisterAll((Listener) o)), diff --git a/BauSystem_Main/src/de/steamwar/bausystem/worlddata/WorldData.java b/BauSystem_Main/src/de/steamwar/bausystem/worlddata/WorldData.java index def31d3a..a07729e0 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/worlddata/WorldData.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/worlddata/WorldData.java @@ -48,8 +48,8 @@ public class WorldData { return getWorldData().getYAPIONObjectOrSetDefault("regions", new YAPIONObject()); } - public YAPIONArray getWarpData() { - return getWorldData().getYAPIONArrayOrSetDefault("warps", new YAPIONArray()); + public YAPIONObject getWarpData() { + return getWorldData().getYAPIONObjectOrSetDefault("warps", new YAPIONObject()); } public YAPIONObject getSimulatorData() {