From cbe31c5e732f13a574226cea7979a63180801941 Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Wed, 19 Jul 2023 21:45:32 +0100 Subject: [PATCH] Removed SpawnPointContext and centralized everything into SpawnPoints directly. --- .../mmocore/api/player/PlayerData.java | 27 ++++--- .../data/sql/MMOCoreDataSynchronizer.java | 8 +-- .../manager/data/sql/SQLDataHandler.java | 4 +- .../data/yaml/YAMLPlayerDataHandler.java | 23 +++--- .../mmocore/spawnpoint/SpawnPoint.java | 23 ++++-- .../mmocore/spawnpoint/SpawnPointContext.java | 71 ------------------- .../spawnpoint/def/DefaultSpawnOption.java | 3 +- .../mmocore/spawnpoint/def/LastOption.java | 6 +- .../spawnpoint/def/LastUsedOption.java | 6 +- .../spawnpoint/def/SpawnPointOption.java | 14 ++-- .../mmocore/listener/SpawnPointsListener.java | 34 ++++----- 11 files changed, 74 insertions(+), 145 deletions(-) delete mode 100644 MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/SpawnPointContext.java diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java index 9af811fd..bf009061 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java @@ -49,7 +49,7 @@ import net.Indyuce.mmocore.skill.cast.SkillCastingMode; import net.Indyuce.mmocore.skilltree.SkillTreeNode; import net.Indyuce.mmocore.skilltree.SkillTreeStatus; import net.Indyuce.mmocore.skilltree.tree.SkillTree; -import net.Indyuce.mmocore.spawnpoint.SpawnPointContext; +import net.Indyuce.mmocore.spawnpoint.SpawnPoint; import net.Indyuce.mmocore.waypoint.Waypoint; import net.Indyuce.mmocore.waypoint.WaypointOption; import net.md_5.bungee.api.ChatMessageType; @@ -86,8 +86,8 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD private double health; private Guild guild; - private SpawnPointContext lastSpawnPointContext; - private SpawnPointContext lastUsedSpawnPointContext; + private SpawnPoint lastSpawnPoint; + private SpawnPoint lastUsedSpawnPoint; private SkillCastingInstance skillCasting; private final PlayerQuests questData; private final PlayerStats playerStats; @@ -203,10 +203,9 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD * If he is dead this will be done when he respawns. */ public void setupSpawnPoint() { - if (lastSpawnPointContext != null && isOnline() && shouldTeleportWhenJoin && (lastSpawnPointContext.getServer().isEmpty() || - lastSpawnPointContext.getServer().get().equalsIgnoreCase(MMOCore.plugin.pluginMessageManager.getServerName())) + if (lastSpawnPoint != null && isOnline() && shouldTeleportWhenJoin && !lastSpawnPoint.isOtherServer() && !getPlayer().isDead()) { - MMOCore.plugin.spawnPointManager.getSpawnPoint(lastSpawnPointContext.getId()).whenRespawn(this); + MMOCore.plugin.spawnPointManager.getSpawnPoint(lastSpawnPoint.getId()).whenRespawn(this); shouldTeleportWhenJoin = false; } } @@ -474,21 +473,21 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD this.lastActivity.put(activity, timestamp); } - public SpawnPointContext getLastSpawnPointContext() { - return lastSpawnPointContext; + public SpawnPoint getLastSpawnPoint() { + return lastSpawnPoint; } - public SpawnPointContext getLastUsedSpawnPointContext() { - return lastUsedSpawnPointContext; + public SpawnPoint getLastUsedSpawnPoint() { + return lastUsedSpawnPoint; } - public void setLastSpawnPointContext(SpawnPointContext lastSpawnPointContext) { - this.lastSpawnPointContext = lastSpawnPointContext; + public void setLastSpawnPoint(SpawnPoint lastSpawnPoint) { + this.lastSpawnPoint = lastSpawnPoint; } - public void setLastUsedSpawnPointContext(SpawnPointContext lastUsedSpawnPointContext) { - this.lastUsedSpawnPointContext = lastUsedSpawnPointContext; + public void setLastUsedSpawnPoint(SpawnPoint lastUsedSpawnPoint) { + this.lastUsedSpawnPoint = this.lastUsedSpawnPoint; } public void setShouldTeleportWhenJoin(boolean shouldTeleport) { diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/sql/MMOCoreDataSynchronizer.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/sql/MMOCoreDataSynchronizer.java index c9f5b651..80b88dbf 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/sql/MMOCoreDataSynchronizer.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/sql/MMOCoreDataSynchronizer.java @@ -6,8 +6,6 @@ import io.lumine.mythic.lib.data.sql.SQLDataSynchronizer; import io.lumine.mythic.lib.gson.JsonArray; import io.lumine.mythic.lib.gson.JsonElement; import io.lumine.mythic.lib.gson.JsonObject; -import io.lumine.mythic.lib.gson.JsonParser; - import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.profess.PlayerClass; @@ -17,7 +15,6 @@ import net.Indyuce.mmocore.guild.provided.Guild; import net.Indyuce.mmocore.skill.ClassSkill; import net.Indyuce.mmocore.skilltree.SkillTreeNode; import net.Indyuce.mmocore.skilltree.tree.SkillTree; -import net.Indyuce.mmocore.spawnpoint.SpawnPointContext; import org.apache.commons.lang.Validate; import org.bukkit.attribute.Attribute; import org.jetbrains.annotations.Nullable; @@ -93,9 +90,10 @@ public class MMOCoreDataSynchronizer extends SQLDataSynchronizer { if (!isEmpty(result.getString("friends"))) MMOCoreUtils.jsonArrayToList(result.getString("friends")).forEach(str -> getData().getFriends().add(UUID.fromString(str))); if (!isEmpty(result.getString("last_spawn_point"))) - getData().setLastSpawnPointContext(new SpawnPointContext(new JsonParser().parseString(result.getString("last_spawn_point")).getAsJsonObject())); + getData().setLastSpawnPoint(MMOCore.plugin.spawnPointManager.getSpawnPoint(result.getString("last_spawn_point"))); + if (!isEmpty(result.getString("last_used_spawn_point"))) - getData().setLastUsedSpawnPointContext(new SpawnPointContext(new JsonParser().parseString(result.getString("last_spawn_point")).getAsJsonObject())); + getData().setLastUsedSpawnPoint(MMOCore.plugin.spawnPointManager.getSpawnPoint(result.getString("last_spawn_point"))); getData().setShouldTeleportWhenJoin(result.getBoolean("should_teleport_when_join")); getData().setupSpawnPoint(); diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/sql/SQLDataHandler.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/sql/SQLDataHandler.java index 49b29ec2..6b5903d6 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/sql/SQLDataHandler.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/sql/SQLDataHandler.java @@ -126,8 +126,8 @@ public class SQLDataHandler extends SQLSynchronizedDataHandler server; private final Location location; private final Condition unlockCondition; private final double strength; @@ -37,6 +37,7 @@ public class SpawnPoint implements Unlockable { public SpawnPoint(ConfigurationSection section) { id = section.getName(); + server = Optional.ofNullable(section.getString("server")); location = UtilityMethods.readLocation(new ConfigSectionObject(section.getConfigurationSection("location"))); Validate.isTrue(section.isConfigurationSection("unlock-condition"), "You must specify an unlock condition."); unlockCondition = MythicLib.plugin.getSkills().loadCondition( @@ -101,6 +102,10 @@ public class SpawnPoint implements Unlockable { unlockScript.ifPresent(skill -> skill.cast(triggerMetadata)); } + public boolean isOtherServer() { + return !server.isEmpty() && server.get() != MMOCore.plugin.pluginMessageManager.getServerName(); + } + public boolean matchesCondition(PlayerData playerData) { SkillMetadata metadata = new SkillMetadata(null, playerData.getMMOPlayerData()); if (!overridesUnlockCondition && !MMOCore.plugin.spawnPointManager.getUnlockCondition() @@ -110,9 +115,15 @@ public class SpawnPoint implements Unlockable { } public void whenRespawn(PlayerData playerData) { - TriggerMetadata triggerMetadata = new TriggerMetadata(playerData.getMMOPlayerData().getStatMap().cache(EquipmentSlot.MAIN_HAND)); - if (!overridesRespawnScript) - MMOCore.plugin.spawnPointManager.getRespawnScript().ifPresent(skill -> skill.cast(triggerMetadata)); - respawnScript.ifPresent(skill -> skill.cast(triggerMetadata)); + if (isOtherServer()) { + MMOCore.plugin.pluginMessageManager.teleportToOtherServer(playerData, server.get()); + } else { + playerData.setLastUsedSpawnPoint(this); + TriggerMetadata triggerMetadata = new TriggerMetadata(playerData.getMMOPlayerData().getStatMap().cache(EquipmentSlot.MAIN_HAND)); + if (!overridesRespawnScript) + MMOCore.plugin.spawnPointManager.getRespawnScript().ifPresent(skill -> skill.cast(triggerMetadata)); + respawnScript.ifPresent(skill -> skill.cast(triggerMetadata)); + } + } } diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/SpawnPointContext.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/SpawnPointContext.java deleted file mode 100644 index 3f886c7f..00000000 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/SpawnPointContext.java +++ /dev/null @@ -1,71 +0,0 @@ -package net.Indyuce.mmocore.spawnpoint; - -import io.lumine.mythic.lib.gson.JsonObject; -import io.lumine.mythic.lib.util.Jsonable; -import net.Indyuce.mmocore.MMOCore; -import net.Indyuce.mmocore.api.player.PlayerData; -import org.bukkit.Location; -import org.bukkit.configuration.ConfigurationSection; -import org.jetbrains.annotations.NotNull; - -import java.util.Optional; - -public class SpawnPointContext implements Jsonable { - private final String id; - - private final Optional server; - - public SpawnPointContext(String id) { - this.id = id; - this.server = Optional.empty(); - } - - public SpawnPointContext(String id, Optional server) { - this.id = id; - this.server = server; - } - - public SpawnPointContext(JsonObject jsonObject) { - this.id = jsonObject.get("id").getAsString(); - this.server = Optional.ofNullable(jsonObject.get("server")).map((jsonElement) -> jsonElement.getAsString()); - } - - public String getId() { - return id; - } - - public Optional getServer() { - return server; - } - - - public Location getLocation() { - return MMOCore.plugin.spawnPointManager.getSpawnPoint(id).getLocation(); - } - - public boolean isOtherServer() { - return !server.isEmpty() && server.get() != MMOCore.plugin.pluginMessageManager.getServerName(); - } - - public void whenRespawn(PlayerData playerData) { - if (isOtherServer()) { - MMOCore.plugin.pluginMessageManager.teleportToOtherServer(playerData, server.get()); - } else { - playerData.setLastUsedSpawnPointContext(this); - MMOCore.plugin.spawnPointManager.getSpawnPoint(id).whenRespawn(playerData); - } - } - - public void save(ConfigurationSection section) { - section.set("id", id); - server.ifPresent((server) -> section.set("server", server)); - } - - @Override - public @NotNull JsonObject toJson() { - JsonObject jsonObject = new JsonObject(); - jsonObject.addProperty("id", id); - server.ifPresent((server) -> jsonObject.addProperty("server", server)); - return jsonObject; - } -} diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/DefaultSpawnOption.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/DefaultSpawnOption.java index b7237f13..4d30e4b7 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/DefaultSpawnOption.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/DefaultSpawnOption.java @@ -3,7 +3,6 @@ package net.Indyuce.mmocore.spawnpoint.def; import io.lumine.mythic.lib.api.MMOLineConfig; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.spawnpoint.SpawnPoint; -import net.Indyuce.mmocore.spawnpoint.SpawnPointContext; import org.bukkit.World; import java.util.regex.Matcher; @@ -28,6 +27,6 @@ public abstract class DefaultSpawnOption { return matcher.matches(); } - public abstract SpawnPointContext getSpawnPointContext(PlayerData playerData); + public abstract SpawnPoint getSpawnPoint(PlayerData playerData); } diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/LastOption.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/LastOption.java index f49426f7..b9306c60 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/LastOption.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/LastOption.java @@ -2,7 +2,7 @@ package net.Indyuce.mmocore.spawnpoint.def; import io.lumine.mythic.lib.api.MMOLineConfig; import net.Indyuce.mmocore.api.player.PlayerData; -import net.Indyuce.mmocore.spawnpoint.SpawnPointContext; +import net.Indyuce.mmocore.spawnpoint.SpawnPoint; public class LastOption extends DefaultSpawnOption { @@ -11,8 +11,8 @@ public class LastOption extends DefaultSpawnOption { } @Override - public SpawnPointContext getSpawnPointContext(PlayerData playerData) { - return playerData.getLastSpawnPointContext(); + public SpawnPoint getSpawnPoint(PlayerData playerData) { + return playerData.getLastSpawnPoint(); } } diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/LastUsedOption.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/LastUsedOption.java index 0b94ab0c..0c7eeba9 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/LastUsedOption.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/LastUsedOption.java @@ -2,7 +2,7 @@ package net.Indyuce.mmocore.spawnpoint.def; import io.lumine.mythic.lib.api.MMOLineConfig; import net.Indyuce.mmocore.api.player.PlayerData; -import net.Indyuce.mmocore.spawnpoint.SpawnPointContext; +import net.Indyuce.mmocore.spawnpoint.SpawnPoint; public class LastUsedOption extends DefaultSpawnOption { @@ -11,8 +11,8 @@ public class LastUsedOption extends DefaultSpawnOption { } @Override - public SpawnPointContext getSpawnPointContext(PlayerData playerData) { - return playerData.getLastSpawnPointContext(); + public SpawnPoint getSpawnPoint(PlayerData playerData) { + return playerData.getLastSpawnPoint(); } } diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/SpawnPointOption.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/SpawnPointOption.java index 18cd4389..b77f0eb3 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/SpawnPointOption.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/spawnpoint/def/SpawnPointOption.java @@ -1,22 +1,24 @@ package net.Indyuce.mmocore.spawnpoint.def; import io.lumine.mythic.lib.api.MMOLineConfig; +import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; -import net.Indyuce.mmocore.spawnpoint.SpawnPointContext; +import net.Indyuce.mmocore.spawnpoint.SpawnPoint; +import org.apache.commons.lang.Validate; import java.util.Optional; public class SpawnPointOption extends DefaultSpawnOption { - private final SpawnPointContext spawnPointContext; + private final SpawnPoint spawnPoint; public SpawnPointOption(MMOLineConfig config) { super(config); - spawnPointContext = new SpawnPointContext(config.getString("id"), config.contains("server") ? - Optional.of(config.getString("server")) : Optional.empty()); + Validate.isTrue(MMOCore.plugin.spawnPointManager.isSpawnPoint(config.getString("id"))); + spawnPoint = MMOCore.plugin.spawnPointManager.getSpawnPoint(config.getString("id")); } @Override - public SpawnPointContext getSpawnPointContext(PlayerData playerData) { - return spawnPointContext; + public SpawnPoint getSpawnPoint(PlayerData playerData) { + return spawnPoint; } } diff --git a/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/SpawnPointsListener.java b/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/SpawnPointsListener.java index c215601d..43ac9fb0 100644 --- a/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/SpawnPointsListener.java +++ b/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/SpawnPointsListener.java @@ -3,7 +3,6 @@ package net.Indyuce.mmocore.listener; import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.spawnpoint.SpawnPoint; -import net.Indyuce.mmocore.spawnpoint.SpawnPointContext; import net.Indyuce.mmocore.spawnpoint.def.DefaultSpawnOption; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -23,7 +22,7 @@ public class SpawnPointsListener implements Listener { public void onTeleport(PlayerTeleportEvent event) { if (!event.getFrom().getWorld().equals(event.getTo().getWorld())) { PlayerData playerData = PlayerData.get(event.getPlayer()); - getLastSpawnPointContext(event.getFrom(), playerData).ifPresent(playerData::setLastSpawnPointContext); + getLastSpawnPoint(event.getFrom(), playerData).ifPresent(playerData::setLastSpawnPoint); } } @@ -31,28 +30,23 @@ public class SpawnPointsListener implements Listener { public void onDeath(PlayerDeathEvent event) { PlayerData playerData = PlayerData.get(event.getEntity()); //TODO: Only when module enabled - Optional context = getLastSpawnPointContext(playerData); - if (context.isPresent()) { - SpawnPointContext spawnPointContext = context.get(); - playerData.setLastSpawnPointContext(spawnPointContext); - } + getLastSpawnPoint(playerData).ifPresent((spawnPoint) -> playerData.setLastSpawnPoint(spawnPoint)); + } @EventHandler public void onSpawn(PlayerRespawnEvent event) { PlayerData playerData = PlayerData.get(event.getPlayer()); - Optional context = getLastSpawnPointContext(playerData); - if (context.isPresent()) { - SpawnPointContext spawnPointContext = context.get(); - if (!spawnPointContext.isOtherServer()) { - event.setRespawnLocation(spawnPointContext.getLocation()); - } + getLastSpawnPoint(playerData).ifPresent((spawnPoint) -> + { + if (!spawnPoint.isOtherServer()) + event.setRespawnLocation(spawnPoint.getLocation()); - spawnPointContext.whenRespawn(playerData); - } + spawnPoint.whenRespawn(playerData); + }); } - public Optional getLastSpawnPointContext(Location location, PlayerData playerData) { + public Optional getLastSpawnPoint(Location location, PlayerData playerData) { World world = location.getWorld(); List reachableSpawnPoints = MMOCore.plugin.spawnPointManager. getAll() @@ -71,19 +65,19 @@ public class SpawnPointsListener implements Listener { closestSpawnPoint = spawnPoint; } } - return Optional.of(new SpawnPointContext(closestSpawnPoint.getId())); + return Optional.of(closestSpawnPoint); } else for (DefaultSpawnOption defaultSpawnOption : MMOCore.plugin.spawnPointManager.getDefaultSpawnOptions()) { Bukkit.broadcastMessage("world: " + world.getName() + " matches: " + defaultSpawnOption.matches(world)); if (defaultSpawnOption.matches(world)) { - return Optional.of(defaultSpawnOption.getSpawnPointContext(playerData)); + return Optional.of(defaultSpawnOption.getSpawnPoint(playerData)); } } return Optional.empty(); } - public Optional getLastSpawnPointContext(PlayerData playerData) { - return getLastSpawnPointContext(playerData.getPlayer().getLocation(), playerData); + public Optional getLastSpawnPoint(PlayerData playerData) { + return getLastSpawnPoint(playerData.getPlayer().getLocation(), playerData); } }