From f9bd7f136dea52540b2d5184d1750667ed03e5ab Mon Sep 17 00:00:00 2001 From: Ben Woo <30431861+benwoo1110@users.noreply.github.com> Date: Tue, 12 Sep 2023 13:13:54 +0800 Subject: [PATCH] Split PlayerWorldAction to PlayerWorldTeleporter and EnforcementHandler --- .../core/listeners/MVPlayerListener.java | 16 ++-- .../core/worldnew/WorldManager.java | 6 +- .../core/worldnew/config/WorldConfig.java | 11 +-- .../worldnew/config/WorldConfigNodes.java | 12 +-- .../worldnew/config/WorldsConfigManager.java | 14 +-- ...ldActions.java => EnforcementHandler.java} | 79 +--------------- .../helpers/PlayerWorldTeleporter.java | 89 +++++++++++++++++++ 7 files changed, 118 insertions(+), 109 deletions(-) rename src/main/java/org/mvplugins/multiverse/core/worldnew/helpers/{PlayerWorldActions.java => EnforcementHandler.java} (52%) create mode 100644 src/main/java/org/mvplugins/multiverse/core/worldnew/helpers/PlayerWorldTeleporter.java diff --git a/src/main/java/org/mvplugins/multiverse/core/listeners/MVPlayerListener.java b/src/main/java/org/mvplugins/multiverse/core/listeners/MVPlayerListener.java index 1aecfe93..6d0ac3e1 100644 --- a/src/main/java/org/mvplugins/multiverse/core/listeners/MVPlayerListener.java +++ b/src/main/java/org/mvplugins/multiverse/core/listeners/MVPlayerListener.java @@ -47,7 +47,8 @@ import org.mvplugins.multiverse.core.worldnew.LoadedMultiverseWorld; import org.mvplugins.multiverse.core.worldnew.WorldManager; import org.mvplugins.multiverse.core.worldnew.entrycheck.EntryFeeResult; import org.mvplugins.multiverse.core.worldnew.entrycheck.WorldEntryCheckerProvider; -import org.mvplugins.multiverse.core.worldnew.helpers.PlayerWorldActions; +import org.mvplugins.multiverse.core.worldnew.helpers.EnforcementHandler; +import org.mvplugins.multiverse.core.worldnew.helpers.PlayerWorldTeleporter; /** * Multiverse's Listener for players. @@ -63,9 +64,8 @@ public class MVPlayerListener implements InjectableListener { private final MVEconomist economist; private final WorldEntryCheckerProvider worldEntryCheckerProvider; private final Provider commandManagerProvider; - private final CorePermissionsChecker permissionsChecker; private final DestinationsProvider destinationsProvider; - private final PlayerWorldActions playerWorldActions; + private final EnforcementHandler enforcementHandler; private final Map playerWorld = new ConcurrentHashMap(); @@ -80,9 +80,8 @@ public class MVPlayerListener implements InjectableListener { MVEconomist economist, WorldEntryCheckerProvider worldEntryCheckerProvider, Provider commandManagerProvider, - CorePermissionsChecker permissionsChecker, DestinationsProvider destinationsProvider, - PlayerWorldActions playerWorldActions) { + EnforcementHandler enforcementHandler) { this.plugin = plugin; this.config = config; this.worldManagerProvider = worldManagerProvider; @@ -92,9 +91,8 @@ public class MVPlayerListener implements InjectableListener { this.economist = economist; this.worldEntryCheckerProvider = worldEntryCheckerProvider; this.commandManagerProvider = commandManagerProvider; - this.permissionsChecker = permissionsChecker; this.destinationsProvider = destinationsProvider; - this.playerWorldActions = playerWorldActions; + this.enforcementHandler = enforcementHandler; } private WorldManager getWorldManager() { @@ -374,8 +372,8 @@ public class MVPlayerListener implements InjectableListener { if (!player.isOnline() || !player.getWorld().equals(world)) { return; } - playerWorldActions.handleFlightEnforcement(player); - playerWorldActions.handleGameModeEnforcement(player); + enforcementHandler.handleFlightEnforcement(player); + enforcementHandler.handleGameModeEnforcement(player); }, 1L); } } diff --git a/src/main/java/org/mvplugins/multiverse/core/worldnew/WorldManager.java b/src/main/java/org/mvplugins/multiverse/core/worldnew/WorldManager.java index 8766d4b5..3855f0b7 100644 --- a/src/main/java/org/mvplugins/multiverse/core/worldnew/WorldManager.java +++ b/src/main/java/org/mvplugins/multiverse/core/worldnew/WorldManager.java @@ -37,7 +37,7 @@ import org.mvplugins.multiverse.core.worldnew.generators.GeneratorProvider; import org.mvplugins.multiverse.core.worldnew.helpers.DataStore.GameRulesStore; import org.mvplugins.multiverse.core.worldnew.helpers.DataTransfer; import org.mvplugins.multiverse.core.worldnew.helpers.FilesManipulator; -import org.mvplugins.multiverse.core.worldnew.helpers.PlayerWorldActions; +import org.mvplugins.multiverse.core.worldnew.helpers.PlayerWorldTeleporter; import org.mvplugins.multiverse.core.worldnew.options.CloneWorldOptions; import org.mvplugins.multiverse.core.worldnew.options.CreateWorldOptions; import org.mvplugins.multiverse.core.worldnew.options.ImportWorldOptions; @@ -72,7 +72,7 @@ public class WorldManager { private final WorldsConfigManager worldsConfigManager; private final WorldNameChecker worldNameChecker; private final GeneratorProvider generatorProvider; - private final PlayerWorldActions playerWorldActions; + private final PlayerWorldTeleporter playerWorldActions; private final FilesManipulator filesManipulator; private final BlockSafety blockSafety; private final SafeTTeleporter safetyTeleporter; @@ -83,7 +83,7 @@ public class WorldManager { @NotNull WorldsConfigManager worldsConfigManager, @NotNull WorldNameChecker worldNameChecker, @NotNull GeneratorProvider generatorProvider, - @NotNull PlayerWorldActions playerWorldActions, + @NotNull PlayerWorldTeleporter playerWorldActions, @NotNull FilesManipulator filesManipulator, @NotNull BlockSafety blockSafety, @NotNull SafeTTeleporter safetyTeleporter, diff --git a/src/main/java/org/mvplugins/multiverse/core/worldnew/config/WorldConfig.java b/src/main/java/org/mvplugins/multiverse/core/worldnew/config/WorldConfig.java index c51360f9..f5a2f417 100644 --- a/src/main/java/org/mvplugins/multiverse/core/worldnew/config/WorldConfig.java +++ b/src/main/java/org/mvplugins/multiverse/core/worldnew/config/WorldConfig.java @@ -24,26 +24,23 @@ import org.mvplugins.multiverse.core.configuration.migration.NullStringMigratorA import org.mvplugins.multiverse.core.configuration.migration.VersionMigrator; import org.mvplugins.multiverse.core.world.configuration.AllowedPortalType; import org.mvplugins.multiverse.core.worldnew.LoadedMultiverseWorld; -import org.mvplugins.multiverse.core.worldnew.helpers.PlayerWorldActions; +import org.mvplugins.multiverse.core.worldnew.helpers.EnforcementHandler; /** * Represents a world configuration. */ public final class WorldConfig { - private final PlayerWorldActions playerWorldActions; private final String worldName; private final WorldConfigNodes configNodes; private final ConfigurationSectionHandle configHandle; WorldConfig( - @NotNull PlayerWorldActions playerWorldActions, @NotNull String worldName, - @NotNull ConfigurationSection configSection) { - this.playerWorldActions = playerWorldActions; - + @NotNull ConfigurationSection configSection, + @NotNull EnforcementHandler enforcementHandler) { this.worldName = worldName; - this.configNodes = new WorldConfigNodes(playerWorldActions); + this.configNodes = new WorldConfigNodes(enforcementHandler); this.configHandle = ConfigurationSectionHandle.builder(configSection) .logger(Logging.getLogger()) .nodes(configNodes.getNodes()) diff --git a/src/main/java/org/mvplugins/multiverse/core/worldnew/config/WorldConfigNodes.java b/src/main/java/org/mvplugins/multiverse/core/worldnew/config/WorldConfigNodes.java index 72ee1853..cdb0bd2f 100644 --- a/src/main/java/org/mvplugins/multiverse/core/worldnew/config/WorldConfigNodes.java +++ b/src/main/java/org/mvplugins/multiverse/core/worldnew/config/WorldConfigNodes.java @@ -15,7 +15,7 @@ import org.mvplugins.multiverse.core.configuration.node.Node; import org.mvplugins.multiverse.core.configuration.node.NodeGroup; import org.mvplugins.multiverse.core.world.configuration.AllowedPortalType; import org.mvplugins.multiverse.core.worldnew.LoadedMultiverseWorld; -import org.mvplugins.multiverse.core.worldnew.helpers.PlayerWorldActions; +import org.mvplugins.multiverse.core.worldnew.helpers.EnforcementHandler; /** * Represents nodes in a world configuration. @@ -24,11 +24,11 @@ public class WorldConfigNodes { private static final double CONFIG_VERSION = 1.0; private final NodeGroup nodes = new NodeGroup(); - private PlayerWorldActions playerWorldActions; + private EnforcementHandler enforcementHandler; private LoadedMultiverseWorld world = null; - WorldConfigNodes(@NotNull PlayerWorldActions playerWorldActions) { - this.playerWorldActions = playerWorldActions; + WorldConfigNodes(@NotNull EnforcementHandler enforcementHandler) { + this.enforcementHandler = enforcementHandler; } LoadedMultiverseWorld getWorld() { @@ -65,7 +65,7 @@ public class WorldConfigNodes { .defaultValue(false) .onSetValue((oldValue, newValue) -> { if (world == null) return; - playerWorldActions.handleAllFlightEnforcement(world); + enforcementHandler.handleAllFlightEnforcement(world); }) .build()); @@ -123,7 +123,7 @@ public class WorldConfigNodes { .defaultValue(GameMode.SURVIVAL) .onSetValue((oldValue, newValue) -> { if (world == null) return; - playerWorldActions.handleAllGameModeEnforcement(world); + enforcementHandler.handleAllGameModeEnforcement(world); }) .build()); diff --git a/src/main/java/org/mvplugins/multiverse/core/worldnew/config/WorldsConfigManager.java b/src/main/java/org/mvplugins/multiverse/core/worldnew/config/WorldsConfigManager.java index dabcda90..b51d38a2 100644 --- a/src/main/java/org/mvplugins/multiverse/core/worldnew/config/WorldsConfigManager.java +++ b/src/main/java/org/mvplugins/multiverse/core/worldnew/config/WorldsConfigManager.java @@ -21,7 +21,7 @@ import org.jetbrains.annotations.NotNull; import org.jvnet.hk2.annotations.Service; import org.mvplugins.multiverse.core.MultiverseCore; -import org.mvplugins.multiverse.core.worldnew.helpers.PlayerWorldActions; +import org.mvplugins.multiverse.core.worldnew.helpers.EnforcementHandler; /** * Manages the worlds.yml file. @@ -35,14 +35,14 @@ public final class WorldsConfigManager { private final File worldConfigFile; private YamlConfiguration worldsConfig; - private final PlayerWorldActions playerWorldActions; + private final EnforcementHandler enforcementHandler; @Inject - WorldsConfigManager(@NotNull MultiverseCore core, @NotNull PlayerWorldActions playerWorldActions) { + WorldsConfigManager(@NotNull MultiverseCore core, @NotNull EnforcementHandler enforcementHandler) { worldConfigMap = new HashMap<>(); worldConfigFile = core.getDataFolder().toPath().resolve(CONFIG_FILENAME).toFile(); - this.playerWorldActions = playerWorldActions; + this.enforcementHandler = enforcementHandler; } /** @@ -126,9 +126,9 @@ public final class WorldsConfigManager { .peek(config -> config.load(getWorldConfigSection(worldName))) .onEmpty(() -> { WorldConfig newWorldConfig = new WorldConfig( - playerWorldActions, worldName, - getWorldConfigSection(worldName)); + getWorldConfigSection(worldName), + enforcementHandler); worldConfigMap.put(worldName, newWorldConfig); newWorldsAdded.add(newWorldConfig); }); @@ -183,7 +183,7 @@ public final class WorldsConfigManager { if (worldConfigMap.containsKey(worldName)) { throw new IllegalArgumentException("WorldConfig for world " + worldName + " already exists."); } - WorldConfig worldConfig = new WorldConfig(playerWorldActions, worldName, getWorldConfigSection(worldName)); + WorldConfig worldConfig = new WorldConfig(worldName, getWorldConfigSection(worldName), enforcementHandler); worldConfigMap.put(worldName, worldConfig); return worldConfig; } diff --git a/src/main/java/org/mvplugins/multiverse/core/worldnew/helpers/PlayerWorldActions.java b/src/main/java/org/mvplugins/multiverse/core/worldnew/helpers/EnforcementHandler.java similarity index 52% rename from src/main/java/org/mvplugins/multiverse/core/worldnew/helpers/PlayerWorldActions.java rename to src/main/java/org/mvplugins/multiverse/core/worldnew/helpers/EnforcementHandler.java index 920394ad..246b7a23 100644 --- a/src/main/java/org/mvplugins/multiverse/core/worldnew/helpers/PlayerWorldActions.java +++ b/src/main/java/org/mvplugins/multiverse/core/worldnew/helpers/EnforcementHandler.java @@ -1,104 +1,29 @@ package org.mvplugins.multiverse.core.worldnew.helpers; -import java.util.List; - import com.dumptruckman.minecraft.util.Logging; import jakarta.inject.Inject; import jakarta.inject.Provider; -import org.bukkit.Bukkit; import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.World; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jvnet.hk2.annotations.Service; -import org.mvplugins.multiverse.core.api.SafeTTeleporter; import org.mvplugins.multiverse.core.permissions.CorePermissionsChecker; import org.mvplugins.multiverse.core.worldnew.LoadedMultiverseWorld; import org.mvplugins.multiverse.core.worldnew.WorldManager; -/** - * Handles all player actions that need to be done when a change in world related activity occurs. - */ @Service -public class PlayerWorldActions { +public class EnforcementHandler { private final CorePermissionsChecker permissionsChecker; - private final SafeTTeleporter safetyTeleporter; private final Provider worldManagerProvider; @Inject - PlayerWorldActions( - @NotNull CorePermissionsChecker permissionsChecker, - @NotNull SafeTTeleporter safetyTeleporter, - @NotNull Provider worldManagerProvider) { + EnforcementHandler(CorePermissionsChecker permissionsChecker, Provider worldManagerProvider) { this.permissionsChecker = permissionsChecker; - this.safetyTeleporter = safetyTeleporter; this.worldManagerProvider = worldManagerProvider; } - /** - * Removes all players from the given world. - * - * @param world The world to remove all players from. - */ - public void removeFromWorld(@NotNull LoadedMultiverseWorld world) { - // TODO: Better handling of fallback world - World toWorld = Bukkit.getWorlds().get(0); - transferFromWorldTo(world, toWorld); - } - - /** - * Transfers all players from the given world to another world's spawn location. - * - * @param from The world to transfer players from. - * @param to The location to transfer players to. - */ - public void transferFromWorldTo(@NotNull LoadedMultiverseWorld from, @NotNull LoadedMultiverseWorld to) { - transferAllFromWorldToLocation(from, to.getSpawnLocation()); - } - - /** - * Transfers all players from the given world to another world's spawn location. - * - * @param from The world to transfer players from. - * @param to The world to transfer players to. - */ - public void transferFromWorldTo(@NotNull LoadedMultiverseWorld from, @NotNull World to) { - transferAllFromWorldToLocation(from, to.getSpawnLocation()); - } - - /** - * Transfers all players from the given world to the given location. - * - * @param world The world to transfer players from. - * @param location The location to transfer players to. - */ - public void transferAllFromWorldToLocation(@NotNull LoadedMultiverseWorld world, @NotNull Location location) { - world.getPlayers().peek(players -> players.forEach(player -> { - if (player.isOnline()) { - Logging.fine("Teleporting player '%s' to world spawn: %s", player.getName(), location); - safetyTeleporter.safelyTeleport(null, player, location, true); - } - })); - } - - /** - * Teleports all players to the given world's spawn location. - * - * @param players The players to teleport. - * @param world The world to teleport players to. - */ - public void teleportPlayersToWorld(@NotNull List players, @NotNull LoadedMultiverseWorld world) { - players.forEach(player -> { - Location spawnLocation = world.getSpawnLocation(); - if (player.isOnline()) { - safetyTeleporter.safelyTeleport(null, player, spawnLocation, true); - } - }); - } - /** * Teleports all players to the given location. * diff --git a/src/main/java/org/mvplugins/multiverse/core/worldnew/helpers/PlayerWorldTeleporter.java b/src/main/java/org/mvplugins/multiverse/core/worldnew/helpers/PlayerWorldTeleporter.java new file mode 100644 index 00000000..facecadd --- /dev/null +++ b/src/main/java/org/mvplugins/multiverse/core/worldnew/helpers/PlayerWorldTeleporter.java @@ -0,0 +1,89 @@ +package org.mvplugins.multiverse.core.worldnew.helpers; + +import java.util.List; + +import com.dumptruckman.minecraft.util.Logging; +import jakarta.inject.Inject; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jvnet.hk2.annotations.Service; + +import org.mvplugins.multiverse.core.api.SafeTTeleporter; +import org.mvplugins.multiverse.core.worldnew.LoadedMultiverseWorld; + +/** + * Handles all player actions that need to be done when a change in world related activity occurs. + */ +@Service +public class PlayerWorldTeleporter { + private final SafeTTeleporter safetyTeleporter; + + @Inject + PlayerWorldTeleporter(@NotNull SafeTTeleporter safetyTeleporter) { + this.safetyTeleporter = safetyTeleporter; + } + + /** + * Removes all players from the given world. + * + * @param world The world to remove all players from. + */ + public void removeFromWorld(@NotNull LoadedMultiverseWorld world) { + // TODO: Better handling of fallback world + World toWorld = Bukkit.getWorlds().get(0); + transferFromWorldTo(world, toWorld); + } + + /** + * Transfers all players from the given world to another world's spawn location. + * + * @param from The world to transfer players from. + * @param to The location to transfer players to. + */ + public void transferFromWorldTo(@NotNull LoadedMultiverseWorld from, @NotNull LoadedMultiverseWorld to) { + transferAllFromWorldToLocation(from, to.getSpawnLocation()); + } + + /** + * Transfers all players from the given world to another world's spawn location. + * + * @param from The world to transfer players from. + * @param to The world to transfer players to. + */ + public void transferFromWorldTo(@NotNull LoadedMultiverseWorld from, @NotNull World to) { + transferAllFromWorldToLocation(from, to.getSpawnLocation()); + } + + /** + * Transfers all players from the given world to the given location. + * + * @param world The world to transfer players from. + * @param location The location to transfer players to. + */ + public void transferAllFromWorldToLocation(@NotNull LoadedMultiverseWorld world, @NotNull Location location) { + world.getPlayers().peek(players -> players.forEach(player -> { + if (player.isOnline()) { + Logging.fine("Teleporting player '%s' to world spawn: %s", player.getName(), location); + safetyTeleporter.safelyTeleport(null, player, location, true); + } + })); + } + + /** + * Teleports all players to the given world's spawn location. + * + * @param players The players to teleport. + * @param world The world to teleport players to. + */ + public void teleportPlayersToWorld(@NotNull List players, @NotNull LoadedMultiverseWorld world) { + players.forEach(player -> { + Location spawnLocation = world.getSpawnLocation(); + if (player.isOnline()) { + safetyTeleporter.safelyTeleport(null, player, spawnLocation, true); + } + }); + } +}