diff --git a/src/main/java/net/knarcraft/stargate/Stargate.java b/src/main/java/net/knarcraft/stargate/Stargate.java index 3a3dec8..3a9f16f 100644 --- a/src/main/java/net/knarcraft/stargate/Stargate.java +++ b/src/main/java/net/knarcraft/stargate/Stargate.java @@ -7,23 +7,19 @@ import net.knarcraft.knarlib.util.ConfigHelper; import net.knarcraft.knarlib.util.UpdateChecker; import net.knarcraft.stargate.command.CommandStarGate; import net.knarcraft.stargate.command.StarGateTabCompleter; -import net.knarcraft.stargate.config.EconomyConfig; -import net.knarcraft.stargate.config.Message; -import net.knarcraft.stargate.config.SGFormatBuilder; import net.knarcraft.stargate.config.StargateConfig; import net.knarcraft.stargate.config.StargateGateConfig; +import net.knarcraft.stargate.config.addons.EconomyConfig; +import net.knarcraft.stargate.config.formatting.Message; +import net.knarcraft.stargate.config.formatting.SGFormatBuilder; import net.knarcraft.stargate.container.BlockChangeRequest; import net.knarcraft.stargate.container.ChunkUnloadRequest; import net.knarcraft.stargate.container.ControlBlockUpdateRequest; -import net.knarcraft.stargate.listener.BlockEventListener; -import net.knarcraft.stargate.listener.EntityEventListener; -import net.knarcraft.stargate.listener.EntitySpawnListener; +import net.knarcraft.stargate.listener.EnvironmentChangeListener; import net.knarcraft.stargate.listener.PlayerEventListener; -import net.knarcraft.stargate.listener.PluginEventListener; -import net.knarcraft.stargate.listener.PortalEventListener; -import net.knarcraft.stargate.listener.TeleportEventListener; -import net.knarcraft.stargate.listener.VehicleEventListener; -import net.knarcraft.stargate.listener.WorldEventListener; +import net.knarcraft.stargate.listener.StargateBreakListener; +import net.knarcraft.stargate.listener.StargateCreateDestroyListener; +import net.knarcraft.stargate.listener.StargateTeleportListener; import net.knarcraft.stargate.portal.PortalHandler; import net.knarcraft.stargate.portal.PortalRegistry; import net.knarcraft.stargate.thread.BlockChangeThread; @@ -407,15 +403,10 @@ public class Stargate extends ConfigCommentPlugin { */ private void registerEventListeners() { pluginManager.registerEvents(new PlayerEventListener(), this); - pluginManager.registerEvents(new BlockEventListener(), this); - - pluginManager.registerEvents(new VehicleEventListener(), this); - pluginManager.registerEvents(new EntityEventListener(), this); - pluginManager.registerEvents(new PortalEventListener(), this); - pluginManager.registerEvents(new WorldEventListener(), this); - pluginManager.registerEvents(new PluginEventListener(this), this); - pluginManager.registerEvents(new TeleportEventListener(), this); - pluginManager.registerEvents(new EntitySpawnListener(), this); + pluginManager.registerEvents(new StargateCreateDestroyListener(), this); + pluginManager.registerEvents(new StargateTeleportListener(), this); + pluginManager.registerEvents(new EnvironmentChangeListener(this), this); + pluginManager.registerEvents(new StargateBreakListener(), this); } /** diff --git a/src/main/java/net/knarcraft/stargate/command/CommandAbout.java b/src/main/java/net/knarcraft/stargate/command/CommandAbout.java index 715e656..caa68d8 100644 --- a/src/main/java/net/knarcraft/stargate/command/CommandAbout.java +++ b/src/main/java/net/knarcraft/stargate/command/CommandAbout.java @@ -3,7 +3,7 @@ package net.knarcraft.stargate.command; import de.themoep.minedown.MineDown; import net.knarcraft.knarlib.util.FileHelper; import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.config.Message; +import net.knarcraft.stargate.config.formatting.Message; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.BaseComponent; import org.bukkit.command.Command; diff --git a/src/main/java/net/knarcraft/stargate/command/CommandConfig.java b/src/main/java/net/knarcraft/stargate/command/CommandConfig.java index dd5d5d2..58f4e63 100644 --- a/src/main/java/net/knarcraft/stargate/command/CommandConfig.java +++ b/src/main/java/net/knarcraft/stargate/command/CommandConfig.java @@ -3,10 +3,10 @@ package net.knarcraft.stargate.command; import net.knarcraft.stargate.Stargate; import net.knarcraft.stargate.config.ConfigOption; import net.knarcraft.stargate.config.ConfigTag; -import net.knarcraft.stargate.config.DynmapManager; -import net.knarcraft.stargate.config.Message; import net.knarcraft.stargate.config.OptionDataType; -import net.knarcraft.stargate.config.SGFormatBuilder; +import net.knarcraft.stargate.config.addons.DynmapManager; +import net.knarcraft.stargate.config.formatting.Message; +import net.knarcraft.stargate.config.formatting.SGFormatBuilder; import net.knarcraft.stargate.portal.Portal; import net.knarcraft.stargate.portal.PortalRegistry; import net.knarcraft.stargate.portal.PortalSignDrawer; diff --git a/src/main/java/net/knarcraft/stargate/command/CommandReload.java b/src/main/java/net/knarcraft/stargate/command/CommandReload.java index 1bf6326..296ed6a 100644 --- a/src/main/java/net/knarcraft/stargate/command/CommandReload.java +++ b/src/main/java/net/knarcraft/stargate/command/CommandReload.java @@ -1,7 +1,7 @@ package net.knarcraft.stargate.command; import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.config.SGFormatBuilder; +import net.knarcraft.stargate.config.formatting.SGFormatBuilder; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; diff --git a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java index afb81ff..5a8ad9f 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java @@ -5,13 +5,18 @@ import net.knarcraft.knarlib.formatting.Translator; import net.knarcraft.knarlib.property.ColorConversion; import net.knarcraft.knarlib.util.ConfigHelper; import net.knarcraft.stargate.Stargate; +import net.knarcraft.stargate.config.addons.DynmapManager; +import net.knarcraft.stargate.config.addons.EconomyConfig; +import net.knarcraft.stargate.config.formatting.LanguageLoader; +import net.knarcraft.stargate.config.formatting.Message; +import net.knarcraft.stargate.config.formatting.SGFormatBuilder; import net.knarcraft.stargate.container.BlockChangeRequest; -import net.knarcraft.stargate.listener.BungeeCordListener; import net.knarcraft.stargate.portal.Portal; import net.knarcraft.stargate.portal.PortalHandler; import net.knarcraft.stargate.portal.PortalRegistry; import net.knarcraft.stargate.portal.property.gate.GateHandler; import net.knarcraft.stargate.thread.BlockChangeThread; +import net.knarcraft.stargate.utility.BungeeHelper; import net.knarcraft.stargate.utility.PortalFileHelper; import org.bukkit.Bukkit; import org.bukkit.World; @@ -358,7 +363,21 @@ public final class StargateConfig { if (start) { messenger.registerOutgoingPluginChannel(Stargate.getInstance(), bungeeChannel); - messenger.registerIncomingPluginChannel(Stargate.getInstance(), bungeeChannel, new BungeeCordListener()); + messenger.registerIncomingPluginChannel(Stargate.getInstance(), bungeeChannel, (channel, unused, message) -> { + //Ignore plugin messages if some other plugin message is received + if (!channel.equals(BungeeHelper.getBungeeChannel())) { + return; + } + + //Try to read the plugin message + String receivedMessage = BungeeHelper.readPluginMessage(message); + if (receivedMessage == null) { + return; + } + + //Use the message to initiate teleportation + BungeeHelper.handleTeleportMessage(receivedMessage); + }); } else { messenger.unregisterIncomingPluginChannel(Stargate.getInstance(), bungeeChannel); messenger.unregisterOutgoingPluginChannel(Stargate.getInstance(), bungeeChannel); diff --git a/src/main/java/net/knarcraft/stargate/config/DynmapManager.java b/src/main/java/net/knarcraft/stargate/config/addons/DynmapManager.java similarity index 99% rename from src/main/java/net/knarcraft/stargate/config/DynmapManager.java rename to src/main/java/net/knarcraft/stargate/config/addons/DynmapManager.java index 8283e5a..8a85872 100644 --- a/src/main/java/net/knarcraft/stargate/config/DynmapManager.java +++ b/src/main/java/net/knarcraft/stargate/config/addons/DynmapManager.java @@ -1,4 +1,4 @@ -package net.knarcraft.stargate.config; +package net.knarcraft.stargate.config.addons; import net.knarcraft.stargate.Stargate; import net.knarcraft.stargate.container.RelativeBlockVector; diff --git a/src/main/java/net/knarcraft/stargate/config/EconomyConfig.java b/src/main/java/net/knarcraft/stargate/config/addons/EconomyConfig.java similarity index 97% rename from src/main/java/net/knarcraft/stargate/config/EconomyConfig.java rename to src/main/java/net/knarcraft/stargate/config/addons/EconomyConfig.java index 165cf51..9bbc356 100644 --- a/src/main/java/net/knarcraft/stargate/config/EconomyConfig.java +++ b/src/main/java/net/knarcraft/stargate/config/addons/EconomyConfig.java @@ -1,6 +1,9 @@ -package net.knarcraft.stargate.config; +package net.knarcraft.stargate.config.addons; import net.knarcraft.stargate.Stargate; +import net.knarcraft.stargate.config.ConfigOption; +import net.knarcraft.stargate.config.formatting.Message; +import net.knarcraft.stargate.config.formatting.SGFormatBuilder; import net.knarcraft.stargate.portal.PortalSignDrawer; import net.knarcraft.stargate.portal.property.gate.Gate; import net.knarcraft.stargate.utility.PermissionHelper; diff --git a/src/main/java/net/knarcraft/stargate/config/LanguageLoader.java b/src/main/java/net/knarcraft/stargate/config/formatting/LanguageLoader.java similarity index 99% rename from src/main/java/net/knarcraft/stargate/config/LanguageLoader.java rename to src/main/java/net/knarcraft/stargate/config/formatting/LanguageLoader.java index f36b5c6..83168f6 100644 --- a/src/main/java/net/knarcraft/stargate/config/LanguageLoader.java +++ b/src/main/java/net/knarcraft/stargate/config/formatting/LanguageLoader.java @@ -1,4 +1,4 @@ -package net.knarcraft.stargate.config; +package net.knarcraft.stargate.config.formatting; import net.knarcraft.knarlib.property.ColorConversion; import net.knarcraft.knarlib.util.FileHelper; diff --git a/src/main/java/net/knarcraft/stargate/config/Message.java b/src/main/java/net/knarcraft/stargate/config/formatting/Message.java similarity index 99% rename from src/main/java/net/knarcraft/stargate/config/Message.java rename to src/main/java/net/knarcraft/stargate/config/formatting/Message.java index 312f5ad..aed78c4 100644 --- a/src/main/java/net/knarcraft/stargate/config/Message.java +++ b/src/main/java/net/knarcraft/stargate/config/formatting/Message.java @@ -1,4 +1,4 @@ -package net.knarcraft.stargate.config; +package net.knarcraft.stargate.config.formatting; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/net/knarcraft/stargate/config/SGFormatBuilder.java b/src/main/java/net/knarcraft/stargate/config/formatting/SGFormatBuilder.java similarity index 95% rename from src/main/java/net/knarcraft/stargate/config/SGFormatBuilder.java rename to src/main/java/net/knarcraft/stargate/config/formatting/SGFormatBuilder.java index 23b83fb..feca690 100644 --- a/src/main/java/net/knarcraft/stargate/config/SGFormatBuilder.java +++ b/src/main/java/net/knarcraft/stargate/config/formatting/SGFormatBuilder.java @@ -1,4 +1,4 @@ -package net.knarcraft.stargate.config; +package net.knarcraft.stargate.config.formatting; import net.knarcraft.knarlib.formatting.FormatBuilder; import net.knarcraft.stargate.Stargate; diff --git a/src/main/java/net/knarcraft/stargate/listener/BungeeCordListener.java b/src/main/java/net/knarcraft/stargate/listener/BungeeCordListener.java deleted file mode 100644 index fba579d..0000000 --- a/src/main/java/net/knarcraft/stargate/listener/BungeeCordListener.java +++ /dev/null @@ -1,42 +0,0 @@ -package net.knarcraft.stargate.listener; - -import net.knarcraft.stargate.utility.BungeeHelper; -import org.bukkit.entity.Player; -import org.bukkit.plugin.messaging.PluginMessageListener; -import org.jetbrains.annotations.NotNull; - -/** - * This listener teleports a user if a valid message is received from BungeeCord - * - *
Specifically, if a string starts with SGBungee encoded to be readable by readUTF followed by - * [PlayerUUID]delimiter[DestinationPortal] is received on the BungeeCord channel, this listener will teleport the - * player to the destination portal.
- */ -public class BungeeCordListener implements PluginMessageListener { - - /** - * Receives plugin messages - * - * @param channelThe channel the message was received on
- * @param unusedUnused.
- * @param messageThe message received from the plugin
- */ - @Override - public void onPluginMessageReceived(@NotNull String channel, @NotNull Player unused, byte[] message) { - //Ignore plugin messages if some other plugin message is received - if (!channel.equals(BungeeHelper.getBungeeChannel())) { - return; - } - - //Try to read the plugin message - String receivedMessage = BungeeHelper.readPluginMessage(message); - if (receivedMessage == null) { - return; - } - - //Use the message to initiate teleportation - BungeeHelper.handleTeleportMessage(receivedMessage); - } - - -} diff --git a/src/main/java/net/knarcraft/stargate/listener/EntityEventListener.java b/src/main/java/net/knarcraft/stargate/listener/EntityEventListener.java deleted file mode 100644 index adb6d06..0000000 --- a/src/main/java/net/knarcraft/stargate/listener/EntityEventListener.java +++ /dev/null @@ -1,68 +0,0 @@ -package net.knarcraft.stargate.listener; - -import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.portal.Portal; -import net.knarcraft.stargate.portal.PortalHandler; -import net.knarcraft.stargate.portal.PortalRegistry; -import net.knarcraft.stargate.utility.EntityHelper; -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityExplodeEvent; -import org.bukkit.event.entity.EntityPortalEvent; -import org.jetbrains.annotations.NotNull; - -/** - * This listener listens for any relevant events on portal entities - */ -@SuppressWarnings("unused") -public class EntityEventListener implements Listener { - - /** - * This event handler prevents sending entities to the normal nether instead of the stargate target - * - * @param eventThe event to check and possibly cancel
- */ - @EventHandler(priority = EventPriority.LOWEST) - public void onPortalEvent(@NotNull EntityPortalEvent event) { - if (event.isCancelled()) { - return; - } - - Entity entity = event.getEntity(); - //Cancel normal portal event is near a stargate - if (PortalHandler.getByAdjacentEntrance(event.getFrom(), EntityHelper.getEntityMaxSizeInt(entity)) != null) { - event.setCancelled(true); - } - } - - /** - * This method catches any explosion events - * - *If destroyed by explosions is enabled, any portals destroyed by the explosion will be unregistered. If not, - * the explosion will be cancelled.
- * - * @param eventThe triggered explosion event
- */ - @EventHandler - public void onEntityExplode(@NotNull EntityExplodeEvent event) { - if (event.isCancelled()) { - return; - } - for (Block block : event.blockList()) { - Portal portal = PortalHandler.getByBlock(block); - if (portal == null) { - continue; - } - if (Stargate.getGateConfig().destroyedByExplosion()) { - PortalRegistry.unregisterPortal(portal, true); - } else { - event.setCancelled(true); - break; - } - } - } - -} diff --git a/src/main/java/net/knarcraft/stargate/listener/EntitySpawnListener.java b/src/main/java/net/knarcraft/stargate/listener/EntitySpawnListener.java deleted file mode 100644 index f806e6c..0000000 --- a/src/main/java/net/knarcraft/stargate/listener/EntitySpawnListener.java +++ /dev/null @@ -1,25 +0,0 @@ -package net.knarcraft.stargate.listener; - -import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.portal.PortalHandler; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.jetbrains.annotations.NotNull; - -/** - * A listener that listens for any relevant events causing entities to spawn - */ -public class EntitySpawnListener implements Listener { - - @EventHandler - public void onCreatureSpawn(@NotNull CreatureSpawnEvent event) { - //Prevent Zombified Piglins and other creatures form spawning at stargates - if (event.getSpawnReason() == CreatureSpawnEvent.SpawnReason.NETHER_PORTAL && - PortalHandler.getByEntrance(event.getLocation()) != null) { - event.setCancelled(true); - Stargate.debug("EntitySpawnListener", "Prevented creature from spawning at Stargate"); - } - } - -} diff --git a/src/main/java/net/knarcraft/stargate/listener/EnvironmentChangeListener.java b/src/main/java/net/knarcraft/stargate/listener/EnvironmentChangeListener.java new file mode 100644 index 0000000..4875d7a --- /dev/null +++ b/src/main/java/net/knarcraft/stargate/listener/EnvironmentChangeListener.java @@ -0,0 +1,96 @@ +package net.knarcraft.stargate.listener; + +import net.knarcraft.stargate.Stargate; +import net.knarcraft.stargate.config.StargateConfig; +import net.knarcraft.stargate.config.formatting.Message; +import net.knarcraft.stargate.config.formatting.SGFormatBuilder; +import net.knarcraft.stargate.portal.PortalRegistry; +import net.knarcraft.stargate.utility.PortalFileHelper; +import org.bukkit.World; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.server.PluginDisableEvent; +import org.bukkit.event.server.PluginEnableEvent; +import org.bukkit.event.world.WorldLoadEvent; +import org.bukkit.event.world.WorldUnloadEvent; +import org.bukkit.plugin.Plugin; +import org.jetbrains.annotations.NotNull; + +/** + * This listener listens for any plugins/worlds being enabled or disabled + */ +public class EnvironmentChangeListener implements Listener { + + private final Stargate stargate; + + /** + * Instantiates a new plugin event listener + * + * @param stargateA reference to the stargate plugin to
+ */ + public EnvironmentChangeListener(@NotNull Stargate stargate) { + this.stargate = stargate; + } + + /** + * This event listens for and announces that the vault plugin was detected and enabled + * + *Each time this event is called, the economy handler will try to enable vault
+ * + * @param ignoredThe actual event called. This is currently not used
+ */ + @EventHandler + public void onPluginEnable(@NotNull PluginEnableEvent ignored) { + if (Stargate.getEconomyConfig().setupEconomy(stargate.getServer().getPluginManager())) { + Plugin vault = Stargate.getEconomyConfig().getVault(); + if (vault != null) { + String vaultVersion = vault.getDescription().getVersion(); + Stargate.logInfo(new SGFormatBuilder(Message.VAULT_LOADED).replace("%version%", vaultVersion).toString()); + } + } + } + + /** + * This event listens for the vault plugin being disabled and notifies the console + * + * @param eventThe event caused by disabling a plugin
+ */ + @EventHandler + public void onPluginDisable(@NotNull PluginDisableEvent event) { + if (event.getPlugin().equals(Stargate.getEconomyConfig().getVault())) { + Stargate.logInfo("Vault plugin lost."); + } + } + + /** + * This listener listens for the loading of a world and loads all gates from the world if not already loaded + * + * @param eventThe triggered world load event
+ */ + @EventHandler + public void onWorldLoad(@NotNull WorldLoadEvent event) { + StargateConfig config = Stargate.getStargateConfig(); + if (!config.getManagedWorlds().contains(event.getWorld().getName()) && + PortalFileHelper.loadAllPortals(event.getWorld())) { + config.addManagedWorld(event.getWorld().getName()); + } + } + + /** + * This listener listens for the unloading of a world + * + * @param eventThe triggered world unload event
+ */ + @EventHandler + public void onWorldUnload(@NotNull WorldUnloadEvent event) { + Stargate.debug("onWorldUnload", "Reloading all Stargates"); + World world = event.getWorld(); + String worldName = world.getName(); + StargateConfig config = Stargate.getStargateConfig(); + if (config.getManagedWorlds().contains(worldName)) { + config.removeManagedWorld(worldName); + PortalRegistry.clearPortals(world); + } + } + +} diff --git a/src/main/java/net/knarcraft/stargate/listener/PlayerEventListener.java b/src/main/java/net/knarcraft/stargate/listener/PlayerEventListener.java index cac793e..2a1dbb8 100644 --- a/src/main/java/net/knarcraft/stargate/listener/PlayerEventListener.java +++ b/src/main/java/net/knarcraft/stargate/listener/PlayerEventListener.java @@ -3,59 +3,41 @@ package net.knarcraft.stargate.listener; import net.knarcraft.knarlib.formatting.FormatBuilder; import net.knarcraft.knarlib.util.UpdateChecker; import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.config.Message; -import net.knarcraft.stargate.config.SGFormatBuilder; -import net.knarcraft.stargate.container.BlockLocation; +import net.knarcraft.stargate.config.formatting.Message; +import net.knarcraft.stargate.config.formatting.SGFormatBuilder; import net.knarcraft.stargate.portal.Portal; import net.knarcraft.stargate.portal.PortalActivator; import net.knarcraft.stargate.portal.PortalHandler; import net.knarcraft.stargate.portal.teleporter.PlayerTeleporter; -import net.knarcraft.stargate.portal.teleporter.VehicleTeleporter; import net.knarcraft.stargate.utility.BungeeHelper; import net.knarcraft.stargate.utility.MaterialHelper; import net.knarcraft.stargate.utility.PermissionHelper; -import net.knarcraft.stargate.utility.TeleportHelper; import net.knarcraft.stargate.utility.UUIDMigrationHelper; import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; import org.bukkit.GameMode; -import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.data.type.WallSign; -import org.bukkit.entity.AbstractHorse; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; -import org.bukkit.entity.Vehicle; import org.bukkit.event.Event; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import org.bukkit.util.Vector; -import org.geysermc.floodgate.api.FloodgateApi; -import org.geysermc.geyser.api.GeyserApi; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; -import java.util.Set; /** * This listener listens to any player-related events related to stargates */ -@SuppressWarnings("unused") public class PlayerEventListener implements Listener { private static final MapThe player move event which was triggered
- */ - @EventHandler - public void onPlayerMove(@NotNull PlayerMoveEvent event) { - if (event.isCancelled() || event.getTo() == null) { - return; - } - - BlockLocation fromLocation = new BlockLocation(event.getFrom().getBlock()); - BlockLocation toLocation = new BlockLocation(event.getTo().getBlock()); - Player player = event.getPlayer(); - - //Check whether the event needs to be considered - if (!isRelevantMoveEvent(event, player, fromLocation, toLocation)) { - return; - } - Portal entrancePortal = PortalHandler.getByEntrance(toLocation); - //Check an additional block away in case the portal is a bungee portal using END_PORTAL - if (entrancePortal == null) { - entrancePortal = PortalHandler.getByAdjacentEntrance(toLocation); - // This should never realistically be null - if (entrancePortal == null) { - return; - } - } - - Portal destination = entrancePortal.getPortalActivator().getDestination(player); - if (destination == null) { - return; - } - - Entity playerVehicle = player.getVehicle(); - //If the player is in a vehicle, but vehicle handling is disabled, just ignore the player - if (playerVehicle == null || (playerVehicle instanceof LivingEntity && - Stargate.getGateConfig().handleVehicles())) { - teleportPlayer(playerVehicle, player, entrancePortal, destination, event); - } - } - - /** - * Teleports a player, also teleports the player's vehicle if it's a living entity - * - * @param playerVehicleThe vehicle the player is currently sitting in
- * @param playerThe player which moved
- * @param entrancePortalThe entrance the player entered
- * @param destinationThe destination of the entrance portal
- * @param eventThe move event causing the teleportation to trigger
- */ - private void teleportPlayer(@Nullable Entity playerVehicle, @NotNull Player player, @NotNull Portal entrancePortal, - @NotNull Portal destination, @NotNull PlayerMoveEvent event) { - if (playerVehicle instanceof LivingEntity) { - //Make sure any horses are properly tamed - if (playerVehicle instanceof AbstractHorse horse && !horse.isTamed()) { - horse.setTamed(true); - horse.setOwner(player); - } - //Teleport the player's vehicle - player.setVelocity(new Vector()); - new VehicleTeleporter(destination, (Vehicle) playerVehicle).teleportEntity(entrancePortal); - } else { - //Just teleport the player like normal - new PlayerTeleporter(destination, player).teleportPlayer(entrancePortal, event); - } - if (!entrancePortal.getOptions().isQuiet()) { - new SGFormatBuilder(Message.TELEPORTED).success(player); - } - entrancePortal.getPortalOpener().closePortal(false); - } - - /** - * Checks whether a player move event is relevant for this plugin - * - * @param eventThe player move event to check
- * @param playerThe player which moved
- * @param fromLocationThe location the player is moving from
- * @param toLocationThe location the player is moving to
- * @returnTrue if the event is relevant
- */ - private boolean isRelevantMoveEvent(@NotNull PlayerMoveEvent event, Player player, - @NotNull BlockLocation fromLocation, @NotNull BlockLocation toLocation) { - //Check to see if the player moved to another block - if (fromLocation.equals(toLocation)) { - return false; - } - - //Get the portal the player entered, if any - Portal entrancePortal = getEnteredPortal(toLocation, player); - if (entrancePortal == null) { - return false; - } - - Portal destination = entrancePortal.getPortalActivator().getDestination(player); - - //Catch always open portals without a valid destination to prevent the user for being teleported and denied - if (!entrancePortal.getOptions().isBungee() && destination == null) { - return false; - } - - //Decide if the anything stops the player from teleport - if (PermissionHelper.playerCannotTeleport(entrancePortal, destination, player, event)) { - return false; - } - - //Decide if the user should be teleported to another bungee server - if (entrancePortal.getOptions().isBungee()) { - if (BungeeHelper.bungeeTeleport(player, entrancePortal, event) && !entrancePortal.getOptions().isQuiet()) { - new SGFormatBuilder(Message.TELEPORTED).success(player); - } - return false; - } - - //Make sure to check if the player has any leashed creatures, even though leashed teleportation is disabled - return TeleportHelper.noLeashedCreaturesPreventTeleportation(player); - } - - /** - * Gets the portal a player entered - * - * @param toLocationThe location the player moved to
- * @param playerThe player that moved
- * @returnThe portal the player entered, or null if no portal was entered
- */ - private Portal getEnteredPortal(@NotNull BlockLocation toLocation, @NotNull Player player) { - Portal entrancePortal = PortalHandler.getByEntrance(toLocation); - // Return if in an entrance - if (entrancePortal != null) { - return entrancePortal; - } - - //Check an additional block away for special cases like BungeeCord portals using END_PORTAL as its material - entrancePortal = PortalHandler.getByAdjacentEntrance(toLocation); - if (entrancePortal == null) { - return null; - } - - // If END_GATEWAY and END_PORTAL cannot appear, skip further checks - SetThe player to check
- * @returnTrue if the player is connected through Geyser
- */ - private boolean isGeyserPlayer(@NotNull Player player) { - // Prevent unnecessary checking for non-geyser and floodgate servers - if (!hasGeyser && !hasFloodgate) { - return false; - } - - // Use Geyser API to get connection status - if (hasGeyser) { - try { - return GeyserApi.api().connectionByUuid(player.getUniqueId()) != null; - } catch (NoClassDefFoundError error1) { - hasGeyser = false; - } - } - - // Use Floodgate API to get connection status - if (hasFloodgate) { - try { - return FloodgateApi.getInstance().isFloodgatePlayer(player.getUniqueId()); - } catch (NoClassDefFoundError error2) { - hasFloodgate = false; - } - } - - return false; - } - /** * This event handler detects if a player clicks a button or a sign * diff --git a/src/main/java/net/knarcraft/stargate/listener/PluginEventListener.java b/src/main/java/net/knarcraft/stargate/listener/PluginEventListener.java deleted file mode 100644 index 1981ce5..0000000 --- a/src/main/java/net/knarcraft/stargate/listener/PluginEventListener.java +++ /dev/null @@ -1,60 +0,0 @@ -package net.knarcraft.stargate.listener; - -import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.config.Message; -import net.knarcraft.stargate.config.SGFormatBuilder; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.server.PluginDisableEvent; -import org.bukkit.event.server.PluginEnableEvent; -import org.bukkit.plugin.Plugin; -import org.jetbrains.annotations.NotNull; - -/** - * This listener listens for any plugins being enabled or disabled to catch the loading of vault - */ -@SuppressWarnings("unused") -public class PluginEventListener implements Listener { - - private final Stargate stargate; - - /** - * Instantiates a new plugin event listener - * - * @param stargateA reference to the stargate plugin to
- */ - public PluginEventListener(@NotNull Stargate stargate) { - this.stargate = stargate; - } - - /** - * This event listens for and announces that the vault plugin was detected and enabled - * - *Each time this event is called, the economy handler will try to enable vault
- * - * @param ignoredThe actual event called. This is currently not used
- */ - @EventHandler - public void onPluginEnable(@NotNull PluginEnableEvent ignored) { - if (Stargate.getEconomyConfig().setupEconomy(stargate.getServer().getPluginManager())) { - Plugin vault = Stargate.getEconomyConfig().getVault(); - if (vault != null) { - String vaultVersion = vault.getDescription().getVersion(); - Stargate.logInfo(new SGFormatBuilder(Message.VAULT_LOADED).replace("%version%", vaultVersion).toString()); - } - } - } - - /** - * This event listens for the vault plugin being disabled and notifies the console - * - * @param eventThe event caused by disabling a plugin
- */ - @EventHandler - public void onPluginDisable(@NotNull PluginDisableEvent event) { - if (event.getPlugin().equals(Stargate.getEconomyConfig().getVault())) { - Stargate.logInfo("Vault plugin lost."); - } - } - -} diff --git a/src/main/java/net/knarcraft/stargate/listener/PortalEventListener.java b/src/main/java/net/knarcraft/stargate/listener/PortalEventListener.java deleted file mode 100644 index 8cf3086..0000000 --- a/src/main/java/net/knarcraft/stargate/listener/PortalEventListener.java +++ /dev/null @@ -1,126 +0,0 @@ -package net.knarcraft.stargate.listener; - -import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.container.FromTheEndTeleportation; -import net.knarcraft.stargate.portal.Portal; -import net.knarcraft.stargate.portal.PortalHandler; -import net.knarcraft.stargate.portal.teleporter.PlayerTeleporter; -import net.knarcraft.stargate.utility.PermissionHelper; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityPortalEnterEvent; -import org.bukkit.event.player.PlayerRespawnEvent; -import org.bukkit.event.world.PortalCreateEvent; -import org.jetbrains.annotations.NotNull; - -import java.util.HashMap; -import java.util.Map; - -/** - * Listens for and cancels relevant portal events - */ -public class PortalEventListener implements Listener { - - private static final MapThe triggered event
- */ - @EventHandler - public void onPortalCreation(@NotNull PortalCreateEvent event) { - if (event.isCancelled()) { - return; - } - //Unnecessary nether portal creation is only triggered by nether pairing - if (event.getReason() == PortalCreateEvent.CreateReason.NETHER_PAIR) { - //If an entity is standing in a Stargate entrance, it can be assumed that the creation is a mistake - Entity entity = event.getEntity(); - if (entity != null && PortalHandler.getByAdjacentEntrance(entity.getLocation()) != null) { - Stargate.debug("PortalEventListener::onPortalCreation", - "Cancelled nether portal create event"); - event.setCancelled(true); - } - } - } - - /** - * Listen for entities entering an artificial end portal - * - * @param eventThe triggered event
- */ - @EventHandler - public void onEntityPortalEnter(@NotNull EntityPortalEnterEvent event) { - Location location = event.getLocation(); - World world = location.getWorld(); - Entity entity = event.getEntity(); - - //Hijack normal portal teleportation if teleporting from a stargate, and teleporting from an end portal in the - // end - if (!(entity instanceof Player player) || location.getBlock().getType() != Material.END_PORTAL || - world == null || world.getEnvironment() != World.Environment.THE_END) { - return; - } - - Portal portal = PortalHandler.getByAdjacentEntrance(location); - if (portal == null) { - return; - } - - Stargate.debug("PortalEventListener::onEntityPortalEnter", - "Found player " + player + " entering END_PORTAL " + portal); - - //Decide if the anything stops the player from teleporting - if (PermissionHelper.playerCannotTeleport(portal, portal.getPortalActivator().getDestination(), - player, null) || portal.getOptions().isBungee()) { - //Teleport the player back to the portal they came in, just in case - playersFromTheEnd.put(player, new FromTheEndTeleportation(portal)); - Stargate.debug("PortalEventListener::onEntityPortalEnter", - "Sending player back to the entrance"); - } else { - Portal destination = portal.getPortalActivator().getDestination(); - if (destination != null) { - playersFromTheEnd.put(player, new FromTheEndTeleportation(destination)); - Stargate.debug("PortalEventListener::onEntityPortalEnter", - "Sending player to destination"); - } - } - } - - /** - * Listen for the respawn event to catch players teleporting from the end in an artificial end portal - * - * @param eventThe triggered event
- */ - @EventHandler - public void onRespawn(@NotNull PlayerRespawnEvent event) { - Player respawningPlayer = event.getPlayer(); - FromTheEndTeleportation teleportation = playersFromTheEnd.remove(respawningPlayer); - if (teleportation == null) { - return; - } - Portal exitPortal = teleportation.exitPortal(); - - //Overwrite respawn location to respawn in front of the portal - PlayerTeleporter teleporter = new PlayerTeleporter(exitPortal, respawningPlayer); - Location respawnLocation = teleporter.getExit(); - event.setRespawnLocation(respawnLocation); - //Try and force the player if for some reason the changing of respawn location isn't properly handled - Bukkit.getScheduler().scheduleSyncDelayedTask(Stargate.getInstance(), () -> - respawningPlayer.teleport(respawnLocation), 1); - - //Properly close the portal to prevent it from staying in a locked state until it times out - exitPortal.getPortalOpener().closePortal(false); - - Stargate.debug("PortalEventListener::onRespawn", "Overwriting respawn for " + respawningPlayer + - " to " + respawnLocation.getWorld() + ":" + respawnLocation); - } - -} diff --git a/src/main/java/net/knarcraft/stargate/listener/StargateBreakListener.java b/src/main/java/net/knarcraft/stargate/listener/StargateBreakListener.java new file mode 100644 index 0000000..2002474 --- /dev/null +++ b/src/main/java/net/knarcraft/stargate/listener/StargateBreakListener.java @@ -0,0 +1,267 @@ +package net.knarcraft.stargate.listener; + +import net.knarcraft.stargate.Stargate; +import net.knarcraft.stargate.portal.Portal; +import net.knarcraft.stargate.portal.PortalHandler; +import net.knarcraft.stargate.portal.PortalRegistry; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; +import org.bukkit.block.data.Directional; +import org.bukkit.event.Cancellable; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockDispenseEvent; +import org.bukkit.event.block.BlockExplodeEvent; +import org.bukkit.event.block.BlockFadeEvent; +import org.bukkit.event.block.BlockFertilizeEvent; +import org.bukkit.event.block.BlockFormEvent; +import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.event.block.BlockMultiPlaceEvent; +import org.bukkit.event.block.BlockPhysicsEvent; +import org.bukkit.event.block.BlockPistonExtendEvent; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.block.EntityBlockFormEvent; +import org.bukkit.event.block.LeavesDecayEvent; +import org.bukkit.event.block.SpongeAbsorbEvent; +import org.bukkit.event.block.TNTPrimeEvent; +import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.EntityBreakDoorEvent; +import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.EntityPlaceEvent; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.world.PortalCreateEvent; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +/** + * A listener for any events that might cause a Stargate to be altered or break + */ +public class StargateBreakListener implements Listener { + + /** + * Cancels blocks from being placed in the Stargate's entrance + * + * @param eventThe event to check and possibly cancel
+ */ + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) + public void onBlockPlace(@NotNull BlockPlaceEvent event) { + if (!Stargate.getGateConfig().protectEntrance()) { + return; + } + Block block = event.getBlock(); + Portal portal = PortalHandler.getByEntrance(block); + if (portal != null) { + //Prevent blocks from being placed in the entrance, if protectEntrance is enabled, as breaking the block + // would destroy the portal + event.setCancelled(true); + } + } + + /** + * This method catches any explosion events + * + *If destroyed by explosions is enabled, any portals destroyed by the explosion will be unregistered. If not, + * the explosion will be cancelled.
+ * + * @param eventThe triggered explosion event
+ */ + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) + public void onEntityExplode(@NotNull EntityExplodeEvent event) { + for (Block block : event.blockList()) { + Portal portal = PortalHandler.getByBlock(block); + if (portal == null) { + continue; + } + if (Stargate.getGateConfig().destroyedByExplosion()) { + PortalRegistry.unregisterPortal(portal, true); + } else { + event.setCancelled(true); + break; + } + } + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) + public void onCreatureSpawn(@NotNull CreatureSpawnEvent event) { + //Prevent Zombified Piglins and other creatures form spawning at stargates + if (event.getSpawnReason() == CreatureSpawnEvent.SpawnReason.NETHER_PORTAL && + PortalHandler.getByEntrance(event.getLocation()) != null) { + event.setCancelled(true); + Stargate.debug("EntitySpawnListener", "Prevented creature from spawning at Stargate"); + } + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPistonExtend(BlockPistonExtendEvent event) { + cancelPistonIfNeeded(event.getBlocks(), event.getDirection(), event); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPistonRetract(@NotNull BlockPistonRetractEvent event) { + cancelPistonIfNeeded(event.getBlocks(), event.getDirection(), event); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockExplode(@NotNull BlockExplodeEvent event) { + cancelIfAtEntrance(event, event.blockList()); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockFromTo(@NotNull BlockFromToEvent event) { + cancelIfAtEntrance(event, event.getToBlock()); + cancelIfAtEntrance(event, event.getBlock()); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockFormEvent(@NotNull BlockFormEvent event) { + cancelIfAtEntrance(event, event.getBlock()); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockPhysics(@NotNull BlockPhysicsEvent event) { + cancelIfAtEntrance(event, event.getBlock()); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockBurn(@NotNull BlockBurnEvent event) { + cancelIfAtEntrance(event, event.getBlock()); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockIgnite(@NotNull BlockIgniteEvent event) { + cancelIfAtEntrance(event, event.getBlock()); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockFade(@NotNull BlockFadeEvent event) { + cancelIfAtEntrance(event, event.getBlock()); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockFertilize(@NotNull BlockFertilizeEvent event) { + cancelIfAtEntrance(event, event.getBlock()); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockMultiPlace(@NotNull BlockMultiPlaceEvent event) { + cancelIfAtEntrance(event, getBlocksFromBlockStates(event.getReplacedBlockStates())); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onEntityBlockForm(@NotNull EntityBlockFormEvent event) { + cancelIfAtEntrance(event, event.getBlock()); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onLeavesDecay(@NotNull LeavesDecayEvent event) { + cancelIfAtEntrance(event, event.getBlock()); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onSpongeAbsorb(@NotNull SpongeAbsorbEvent event) { + cancelIfAtEntrance(event, getBlocksFromBlockStates(event.getBlocks())); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onEntityChangeBlock(@NotNull EntityChangeBlockEvent event) { + cancelIfAtEntrance(event, event.getBlock()); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onEntityBreakDoor(@NotNull EntityBreakDoorEvent event) { + cancelIfAtEntrance(event, event.getBlock()); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPortalCreate(@NotNull PortalCreateEvent event) { + cancelIfAtEntrance(event, getBlocksFromBlockStates(event.getBlocks())); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onEntityPlace(@NotNull EntityPlaceEvent event) { + cancelIfAtEntrance(event, event.getBlock()); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPlayerBucketEmpty(@NotNull PlayerBucketEmptyEvent event) { + cancelIfAtEntrance(event, event.getBlock()); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockDispense(@NotNull BlockDispenseEvent event) { + if (event.getBlock().getBlockData() instanceof Directional dispenser) { + cancelIfAtEntrance(event, event.getBlock().getRelative(dispenser.getFacing())); + } + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onTNTPrime(@NotNull TNTPrimeEvent tntPrimeEvent) { + cancelIfAtEntrance(tntPrimeEvent, tntPrimeEvent.getBlock()); + } + + /** + * Cancels the given event if it involves a Stargate's entrance + * + * @param eventThe event to cancel
+ * @param blockThe block in question
+ */ + private boolean cancelIfAtEntrance(@NotNull Cancellable event, @NotNull Block block) { + if (PortalHandler.getByEntrance(block) != null || PortalHandler.getByControl(block) != null || + PortalHandler.getByBlock(block) != null) { + event.setCancelled(true); + return true; + } else { + return false; + } + } + + /** + * Cancels the given event if it involves a Stargate's entrance + * + * @param eventThe event to cancel
+ * @param blocksThe blocks in question
+ */ + private void cancelIfAtEntrance(@NotNull Cancellable event, @NotNull ListThe block states to convert into blocks
+ * @returnThe corresponding blocks
+ */ + @NotNull + private ListThe blocks involved in the move
+ * @param blockFaceThe block face of the piston
+ * @param eventThe event to possibly cancel
+ */ + private void cancelPistonIfNeeded(@NotNull ListIf entrance protection or portal verification is enabled, the snowman will be prevented from placing snow in - * the portal entrance.
- * - * @param eventThe triggered event
- */ - @EventHandler(ignoreCancelled = true) - public void onBlockFormedByEntity(@NotNull EntityBlockFormEvent event) { - if ((!Stargate.getGateConfig().protectEntrance() && - !Stargate.getGateConfig().verifyPortals())) { - return; - } - //We are only interested in snowman events - if (!(event.getEntity() instanceof Snowman)) { - return; - } - //Cancel the event if a snowman is trying to place snow in the portal's entrance - if (PortalHandler.getByEntrance(event.getBlock()) != null) { - event.setCancelled(true); - } - } +public class StargateCreateDestroyListener implements Listener { /** * Detects sign changes to detect if the user is creating a new gate @@ -97,20 +62,6 @@ public class BlockEventListener implements Listener { portal::drawSign, 1); } - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) - public void onBlockPlace(@NotNull BlockPlaceEvent event) { - if (!Stargate.getGateConfig().protectEntrance()) { - return; - } - Block block = event.getBlock(); - Portal portal = PortalHandler.getByEntrance(block); - if (portal != null) { - //Prevent blocks from being placed in the entrance, if protectEntrance is enabled, as breaking the block - // would destroy the portal - event.setCancelled(true); - } - } - /** * Detects block breaking to detect if the user is destroying a gate * @@ -206,77 +157,4 @@ public class BlockEventListener implements Listener { return true; } - /** - * Prevents any block physics events which may damage parts of the portal - * - * @param eventThe event to check and possibly cancel
- */ - @EventHandler(ignoreCancelled = true) - public void onBlockPhysics(@NotNull BlockPhysicsEvent event) { - Block block = event.getBlock(); - Portal portal = null; - - if (block.getType() == Material.NETHER_PORTAL) { - portal = PortalHandler.getByEntrance(block); - } else if (MaterialHelper.isButtonCompatible(block.getType())) { - portal = PortalHandler.getByControl(block); - } - if (portal != null) { - event.setCancelled(true); - } - } - - /** - * Cancels any block move events which may cause a block to enter the opening of a portal - * - * @param eventThe event to check and possibly cancel
- */ - @EventHandler(ignoreCancelled = true) - public void onBlockFromTo(@NotNull BlockFromToEvent event) { - Portal portal = PortalHandler.getByEntrance(event.getBlock()); - - if (portal != null && event.getBlock().getY() == event.getToBlock().getY()) { - event.setCancelled(true); - } - } - - /** - * Cancels any piston extend events if the target block is part of a portal - * - * @param eventThe event to check and possibly cancel
- */ - @EventHandler(ignoreCancelled = true) - public void onPistonExtend(@NotNull BlockPistonExtendEvent event) { - cancelPistonEvent(event, event.getBlocks()); - } - - /** - * Cancels any piston retract events if the target block is part of a portal - * - * @param eventThe event to check and possibly cancel
- */ - @EventHandler(ignoreCancelled = true) - public void onPistonRetract(@NotNull BlockPistonRetractEvent event) { - if (!event.isSticky()) { - return; - } - cancelPistonEvent(event, event.getBlocks()); - } - - /** - * Cancels a piston event if it would destroy a portal - * - * @param eventThe event to cancel
- * @param blocksThe blocks included in the event
- */ - private void cancelPistonEvent(@NotNull BlockPistonEvent event, @NotNull ListThis event cancels nether portal, end gateway and end portal teleportation if the user teleported from a + * stargate entrance. This prevents the user from just teleporting to the nether or the end with portals using + * the special teleportation blocks.
+ * + * @param eventThe event to check and possibly cancel
+ */ + @EventHandler + public void onPlayerTeleport(@NotNull PlayerTeleportEvent event) { + PlayerTeleportEvent.TeleportCause cause = event.getCause(); + + //Block normal portal teleportation if teleporting from a stargate + if (!event.isCancelled() && (cause == PlayerTeleportEvent.TeleportCause.NETHER_PORTAL || + cause == PlayerTeleportEvent.TeleportCause.END_GATEWAY || + cause == PlayerTeleportEvent.TeleportCause.END_PORTAL) + && PortalHandler.getByAdjacentEntrance(event.getFrom()) != null) { + event.setCancelled(true); + } + } + + /** + * This event handler prevents sending entities to the normal nether instead of the stargate target + * + * @param eventThe event to check and possibly cancel
+ */ + @EventHandler(priority = EventPriority.LOWEST) + public void onPortalEvent(@NotNull EntityPortalEvent event) { + if (event.isCancelled()) { + return; + } + + Entity entity = event.getEntity(); + //Cancel normal portal event is near a stargate + if (PortalHandler.getByAdjacentEntrance(event.getFrom(), EntityHelper.getEntityMaxSizeInt(entity)) != null) { + event.setCancelled(true); + } + } + + /** + * Check for a vehicle moving through a portal + * + * @param eventThe triggered move event
+ */ + @EventHandler + public void onVehicleMove(@NotNull VehicleMoveEvent event) { + if (!Stargate.getGateConfig().handleVehicles()) { + return; + } + ListThe player move event which was triggered
+ */ + @EventHandler + public void onPlayerMove(@NotNull PlayerMoveEvent event) { + if (event.isCancelled() || event.getTo() == null) { + return; + } + + BlockLocation fromLocation = new BlockLocation(event.getFrom().getBlock()); + BlockLocation toLocation = new BlockLocation(event.getTo().getBlock()); + Player player = event.getPlayer(); + + //Check whether the event needs to be considered + if (!isRelevantMoveEvent(event, player, fromLocation, toLocation)) { + return; + } + Portal entrancePortal = PortalHandler.getByEntrance(toLocation); + //Check an additional block away in case the portal is a bungee portal using END_PORTAL + if (entrancePortal == null) { + entrancePortal = PortalHandler.getByAdjacentEntrance(toLocation); + // This should never realistically be null + if (entrancePortal == null) { + return; + } + } + + Portal destination = entrancePortal.getPortalActivator().getDestination(player); + if (destination == null) { + return; + } + + Entity playerVehicle = player.getVehicle(); + //If the player is in a vehicle, but vehicle handling is disabled, just ignore the player + if (playerVehicle == null || (playerVehicle instanceof LivingEntity && + Stargate.getGateConfig().handleVehicles())) { + teleportPlayer(playerVehicle, player, entrancePortal, destination, event); + } + } + + /** + * Listen for entities entering an artificial end portal + * + * @param eventThe triggered event
+ */ + @EventHandler + public void onEntityPortalEnter(@NotNull EntityPortalEnterEvent event) { + Location location = event.getLocation(); + World world = location.getWorld(); + Entity entity = event.getEntity(); + + //Hijack normal portal teleportation if teleporting from a stargate, and teleporting from an end portal in the + // end + if (!(entity instanceof Player player) || location.getBlock().getType() != Material.END_PORTAL || + world == null || world.getEnvironment() != World.Environment.THE_END) { + return; + } + + Portal portal = PortalHandler.getByAdjacentEntrance(location); + if (portal == null) { + return; + } + + Stargate.debug("PortalEventListener::onEntityPortalEnter", + "Found player " + player + " entering END_PORTAL " + portal); + + //Decide if the anything stops the player from teleporting + if (PermissionHelper.playerCannotTeleport(portal, portal.getPortalActivator().getDestination(), + player, null) || portal.getOptions().isBungee()) { + //Teleport the player back to the portal they came in, just in case + playersFromTheEnd.put(player, new FromTheEndTeleportation(portal)); + Stargate.debug("PortalEventListener::onEntityPortalEnter", + "Sending player back to the entrance"); + } else { + Portal destination = portal.getPortalActivator().getDestination(); + if (destination != null) { + playersFromTheEnd.put(player, new FromTheEndTeleportation(destination)); + Stargate.debug("PortalEventListener::onEntityPortalEnter", + "Sending player to destination"); + } + } + } + + /** + * Listen for the respawn event to catch players teleporting from the end in an artificial end portal + * + * @param eventThe triggered event
+ */ + @EventHandler + public void onRespawn(@NotNull PlayerRespawnEvent event) { + Player respawningPlayer = event.getPlayer(); + FromTheEndTeleportation teleportation = playersFromTheEnd.remove(respawningPlayer); + if (teleportation == null) { + return; + } + Portal exitPortal = teleportation.exitPortal(); + + //Overwrite respawn location to respawn in front of the portal + PlayerTeleporter teleporter = new PlayerTeleporter(exitPortal, respawningPlayer); + Location respawnLocation = teleporter.getExit(); + event.setRespawnLocation(respawnLocation); + //Try and force the player if for some reason the changing of respawn location isn't properly handled + Bukkit.getScheduler().scheduleSyncDelayedTask(Stargate.getInstance(), () -> + respawningPlayer.teleport(respawnLocation), 1); + + //Properly close the portal to prevent it from staying in a locked state until it times out + exitPortal.getPortalOpener().closePortal(false); + + Stargate.debug("PortalEventListener::onRespawn", "Overwriting respawn for " + respawningPlayer + + " to " + respawnLocation.getWorld() + ":" + respawnLocation); + } + + /** + * Teleports a vehicle through a stargate + * + * @param passengersThe passengers inside the vehicle
+ * @param entrancePortalThe portal the vehicle is entering
+ * @param vehicleThe vehicle passing through
+ */ + private static void teleportVehicle(@NotNull ListThe portal the minecart entered
+ * @param vehicleThe vehicle to teleport
+ */ + private static void teleportPlayerAndVehicle(@NotNull Portal entrancePortal, @NotNull Vehicle vehicle) { + Entity rootEntity = vehicle; + while (rootEntity.getVehicle() != null) { + rootEntity = rootEntity.getVehicle(); + } + ListThe players to be teleported
+ * @param vehicleThe vehicle that triggered the teleportation
+ * @param entrancePortalThe portal the player(s) and vehicle entered from
+ * @param destinationPortalThe portal the player(s) and vehicle are teleporting to
+ */ + private static void teleportPlayerAndVehicle(@NotNull ListThe players to be teleported
+ * @param entrancePortalThe portal the players are entering
+ * @returnThe destination portal, or null if not found
+ */ + @Nullable + private static Portal getDestinationPortal(@NotNull ListThe players to take payment from
+ * @param entrancePortalThe portal the players are travelling from
+ * @param destinationPortalThe portal the players are travelling to
+ * @returnTrue if payment was successfully taken, false otherwise
+ */ + private static boolean takePayment(@NotNull ListThe vehicle the player is currently sitting in
+ * @param playerThe player which moved
+ * @param entrancePortalThe entrance the player entered
+ * @param destinationThe destination of the entrance portal
+ * @param eventThe move event causing the teleportation to trigger
+ */ + private void teleportPlayer(@Nullable Entity playerVehicle, @NotNull Player player, @NotNull Portal entrancePortal, + @NotNull Portal destination, @NotNull PlayerMoveEvent event) { + if (playerVehicle instanceof LivingEntity) { + //Make sure any horses are properly tamed + if (playerVehicle instanceof AbstractHorse horse && !horse.isTamed()) { + horse.setTamed(true); + horse.setOwner(player); + } + //Teleport the player's vehicle + player.setVelocity(new Vector()); + new VehicleTeleporter(destination, (Vehicle) playerVehicle).teleportEntity(entrancePortal); + } else { + //Just teleport the player like normal + new PlayerTeleporter(destination, player).teleportPlayer(entrancePortal, event); + } + if (!entrancePortal.getOptions().isQuiet()) { + new SGFormatBuilder(Message.TELEPORTED).success(player); + } + entrancePortal.getPortalOpener().closePortal(false); + } + + /** + * Checks whether a player move event is relevant for this plugin + * + * @param eventThe player move event to check
+ * @param playerThe player which moved
+ * @param fromLocationThe location the player is moving from
+ * @param toLocationThe location the player is moving to
+ * @returnTrue if the event is relevant
+ */ + private boolean isRelevantMoveEvent(@NotNull PlayerMoveEvent event, Player player, + @NotNull BlockLocation fromLocation, @NotNull BlockLocation toLocation) { + //Check to see if the player moved to another block + if (fromLocation.equals(toLocation)) { + return false; + } + + //Get the portal the player entered, if any + Portal entrancePortal = getEnteredPortal(toLocation, player); + if (entrancePortal == null) { + return false; + } + + Portal destination = entrancePortal.getPortalActivator().getDestination(player); + + //Catch always open portals without a valid destination to prevent the user for being teleported and denied + if (!entrancePortal.getOptions().isBungee() && destination == null) { + return false; + } + + //Decide if the anything stops the player from teleport + if (PermissionHelper.playerCannotTeleport(entrancePortal, destination, player, event)) { + return false; + } + + //Decide if the user should be teleported to another bungee server + if (entrancePortal.getOptions().isBungee()) { + if (BungeeHelper.bungeeTeleport(player, entrancePortal, event) && !entrancePortal.getOptions().isQuiet()) { + new SGFormatBuilder(Message.TELEPORTED).success(player); + } + return false; + } + + //Make sure to check if the player has any leashed creatures, even though leashed teleportation is disabled + return TeleportHelper.noLeashedCreaturesPreventTeleportation(player); + } + + /** + * Gets the portal a player entered + * + * @param toLocationThe location the player moved to
+ * @param playerThe player that moved
+ * @returnThe portal the player entered, or null if no portal was entered
+ */ + private Portal getEnteredPortal(@NotNull BlockLocation toLocation, @NotNull Player player) { + Portal entrancePortal = PortalHandler.getByEntrance(toLocation); + // Return if in an entrance + if (entrancePortal != null) { + return entrancePortal; + } + + //Check an additional block away for special cases like BungeeCord portals using END_PORTAL as its material + entrancePortal = PortalHandler.getByAdjacentEntrance(toLocation); + if (entrancePortal == null) { + return null; + } + + // If END_GATEWAY and END_PORTAL cannot appear, skip further checks + SetThe player to check
+ * @returnTrue if the player is connected through Geyser
+ */ + private boolean isGeyserPlayer(@NotNull Player player) { + // Prevent unnecessary checking for non-geyser and floodgate servers + if (!hasGeyser && !hasFloodgate) { + return false; + } + + // Use Geyser API to get connection status + if (hasGeyser) { + try { + return GeyserApi.api().connectionByUuid(player.getUniqueId()) != null; + } catch (NoClassDefFoundError error1) { + hasGeyser = false; + } + } + + // Use Floodgate API to get connection status + if (hasFloodgate) { + try { + return FloodgateApi.getInstance().isFloodgatePlayer(player.getUniqueId()); + } catch (NoClassDefFoundError error2) { + hasFloodgate = false; + } + } + + return false; + } + +} diff --git a/src/main/java/net/knarcraft/stargate/listener/TeleportEventListener.java b/src/main/java/net/knarcraft/stargate/listener/TeleportEventListener.java deleted file mode 100644 index 34ab7a6..0000000 --- a/src/main/java/net/knarcraft/stargate/listener/TeleportEventListener.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.knarcraft.stargate.listener; - -import net.knarcraft.stargate.portal.PortalHandler; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerTeleportEvent; -import org.jetbrains.annotations.NotNull; - -/** - * This listener listens to teleportation-related events - */ -@SuppressWarnings("unused") -public class TeleportEventListener implements Listener { - - /** - * This event handler handles some special teleportation events - * - *This event cancels nether portal, end gateway and end portal teleportation if the user teleported from a - * stargate entrance. This prevents the user from just teleporting to the nether or the end with portals using - * the special teleportation blocks.
- * - * @param eventThe event to check and possibly cancel
- */ - @EventHandler - public void onPlayerTeleport(@NotNull PlayerTeleportEvent event) { - PlayerTeleportEvent.TeleportCause cause = event.getCause(); - - //Block normal portal teleportation if teleporting from a stargate - if (!event.isCancelled() && (cause == PlayerTeleportEvent.TeleportCause.NETHER_PORTAL || - cause == PlayerTeleportEvent.TeleportCause.END_GATEWAY || - cause == PlayerTeleportEvent.TeleportCause.END_PORTAL) - && PortalHandler.getByAdjacentEntrance(event.getFrom()) != null) { - event.setCancelled(true); - } - } - -} diff --git a/src/main/java/net/knarcraft/stargate/listener/VehicleEventListener.java b/src/main/java/net/knarcraft/stargate/listener/VehicleEventListener.java deleted file mode 100644 index 442e1e2..0000000 --- a/src/main/java/net/knarcraft/stargate/listener/VehicleEventListener.java +++ /dev/null @@ -1,198 +0,0 @@ -package net.knarcraft.stargate.listener; - -import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.config.Message; -import net.knarcraft.stargate.config.SGFormatBuilder; -import net.knarcraft.stargate.portal.Portal; -import net.knarcraft.stargate.portal.PortalHandler; -import net.knarcraft.stargate.portal.teleporter.VehicleTeleporter; -import net.knarcraft.stargate.utility.EconomyHelper; -import net.knarcraft.stargate.utility.EntityHelper; -import net.knarcraft.stargate.utility.TeleportHelper; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Vehicle; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.vehicle.VehicleMoveEvent; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; - -/** - * This listener listens for the vehicle move event to teleport vehicles through portals - */ -@SuppressWarnings("unused") -public class VehicleEventListener implements Listener { - - /** - * Check for a vehicle moving through a portal - * - * @param eventThe triggered move event
- */ - @EventHandler - public void onVehicleMove(@NotNull VehicleMoveEvent event) { - if (!Stargate.getGateConfig().handleVehicles()) { - return; - } - ListThe passengers inside the vehicle
- * @param entrancePortalThe portal the vehicle is entering
- * @param vehicleThe vehicle passing through
- */ - private static void teleportVehicle(@NotNull ListThe portal the minecart entered
- * @param vehicleThe vehicle to teleport
- */ - private static void teleportPlayerAndVehicle(@NotNull Portal entrancePortal, @NotNull Vehicle vehicle) { - Entity rootEntity = vehicle; - while (rootEntity.getVehicle() != null) { - rootEntity = rootEntity.getVehicle(); - } - ListThe players to be teleported
- * @param vehicleThe vehicle that triggered the teleportation
- * @param entrancePortalThe portal the player(s) and vehicle entered from
- * @param destinationPortalThe portal the player(s) and vehicle are teleporting to
- */ - private static void teleportPlayerAndVehicle(@NotNull ListThe players to be teleported
- * @param entrancePortalThe portal the players are entering
- * @returnThe destination portal, or null if not found
- */ - @Nullable - private static Portal getDestinationPortal(@NotNull ListThe players to take payment from
- * @param entrancePortalThe portal the players are travelling from
- * @param destinationPortalThe portal the players are travelling to
- * @returnTrue if payment was successfully taken, false otherwise
- */ - private static boolean takePayment(@NotNull ListThe triggered world load event
- */ - @EventHandler - public void onWorldLoad(@NotNull WorldLoadEvent event) { - StargateConfig config = Stargate.getStargateConfig(); - if (!config.getManagedWorlds().contains(event.getWorld().getName()) && - PortalFileHelper.loadAllPortals(event.getWorld())) { - config.addManagedWorld(event.getWorld().getName()); - } - } - - /** - * This listener listens for the unloading of a world - * - * @param eventThe triggered world unload event
- */ - @EventHandler - public void onWorldUnload(@NotNull WorldUnloadEvent event) { - Stargate.debug("onWorldUnload", "Reloading all Stargates"); - World world = event.getWorld(); - String worldName = world.getName(); - StargateConfig config = Stargate.getStargateConfig(); - if (config.getManagedWorlds().contains(worldName)) { - config.removeManagedWorld(worldName); - PortalRegistry.clearPortals(world); - } - } - -} diff --git a/src/main/java/net/knarcraft/stargate/portal/Portal.java b/src/main/java/net/knarcraft/stargate/portal/Portal.java index 28cf3ac..3a8e2ba 100644 --- a/src/main/java/net/knarcraft/stargate/portal/Portal.java +++ b/src/main/java/net/knarcraft/stargate/portal/Portal.java @@ -1,6 +1,5 @@ package net.knarcraft.stargate.portal; -import net.knarcraft.stargate.transformation.SimpleVectorOperation; import net.knarcraft.stargate.container.BlockLocation; import net.knarcraft.stargate.container.RelativeBlockVector; import net.knarcraft.stargate.portal.property.PortalLocation; @@ -10,6 +9,7 @@ import net.knarcraft.stargate.portal.property.PortalOwner; import net.knarcraft.stargate.portal.property.PortalStrings; import net.knarcraft.stargate.portal.property.PortalStructure; import net.knarcraft.stargate.portal.property.gate.Gate; +import net.knarcraft.stargate.transformation.SimpleVectorOperation; import net.knarcraft.stargate.utility.DirectionHelper; import net.md_5.bungee.api.ChatColor; import org.bukkit.World; diff --git a/src/main/java/net/knarcraft/stargate/portal/PortalActivator.java b/src/main/java/net/knarcraft/stargate/portal/PortalActivator.java index ed3fd74..97fcb96 100644 --- a/src/main/java/net/knarcraft/stargate/portal/PortalActivator.java +++ b/src/main/java/net/knarcraft/stargate/portal/PortalActivator.java @@ -1,8 +1,8 @@ package net.knarcraft.stargate.portal; import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.config.Message; -import net.knarcraft.stargate.config.SGFormatBuilder; +import net.knarcraft.stargate.config.formatting.Message; +import net.knarcraft.stargate.config.formatting.SGFormatBuilder; import net.knarcraft.stargate.event.StargateActivateEvent; import net.knarcraft.stargate.event.StargateDeactivateEvent; import net.knarcraft.stargate.utility.ListHelper; diff --git a/src/main/java/net/knarcraft/stargate/portal/PortalCreator.java b/src/main/java/net/knarcraft/stargate/portal/PortalCreator.java index e8ab252..15a974c 100644 --- a/src/main/java/net/knarcraft/stargate/portal/PortalCreator.java +++ b/src/main/java/net/knarcraft/stargate/portal/PortalCreator.java @@ -1,8 +1,8 @@ package net.knarcraft.stargate.portal; import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.config.Message; -import net.knarcraft.stargate.config.SGFormatBuilder; +import net.knarcraft.stargate.config.formatting.Message; +import net.knarcraft.stargate.config.formatting.SGFormatBuilder; import net.knarcraft.stargate.container.BlockLocation; import net.knarcraft.stargate.container.RelativeBlockVector; import net.knarcraft.stargate.event.StargateCreateEvent; diff --git a/src/main/java/net/knarcraft/stargate/portal/PortalHandler.java b/src/main/java/net/knarcraft/stargate/portal/PortalHandler.java index 836af78..4bd6102 100644 --- a/src/main/java/net/knarcraft/stargate/portal/PortalHandler.java +++ b/src/main/java/net/knarcraft/stargate/portal/PortalHandler.java @@ -1,8 +1,8 @@ package net.knarcraft.stargate.portal; import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.config.Message; -import net.knarcraft.stargate.config.SGFormatBuilder; +import net.knarcraft.stargate.config.formatting.Message; +import net.knarcraft.stargate.config.formatting.SGFormatBuilder; import net.knarcraft.stargate.config.material.BukkitTagSpecifier; import net.knarcraft.stargate.container.BlockLocation; import net.knarcraft.stargate.container.RelativeBlockVector; diff --git a/src/main/java/net/knarcraft/stargate/portal/PortalRegistry.java b/src/main/java/net/knarcraft/stargate/portal/PortalRegistry.java index aed92cf..e800829 100644 --- a/src/main/java/net/knarcraft/stargate/portal/PortalRegistry.java +++ b/src/main/java/net/knarcraft/stargate/portal/PortalRegistry.java @@ -1,7 +1,7 @@ package net.knarcraft.stargate.portal; import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.config.DynmapManager; +import net.knarcraft.stargate.config.addons.DynmapManager; import net.knarcraft.stargate.config.material.BukkitTagSpecifier; import net.knarcraft.stargate.container.BlockLocation; import net.knarcraft.stargate.utility.PortalFileHelper; diff --git a/src/main/java/net/knarcraft/stargate/portal/PortalSignDrawer.java b/src/main/java/net/knarcraft/stargate/portal/PortalSignDrawer.java index 1df2211..c520a80 100644 --- a/src/main/java/net/knarcraft/stargate/portal/PortalSignDrawer.java +++ b/src/main/java/net/knarcraft/stargate/portal/PortalSignDrawer.java @@ -3,8 +3,8 @@ package net.knarcraft.stargate.portal; import net.knarcraft.knarlib.property.ColorConversion; import net.knarcraft.knarlib.util.ColorHelper; import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.config.Message; -import net.knarcraft.stargate.config.SGFormatBuilder; +import net.knarcraft.stargate.config.formatting.Message; +import net.knarcraft.stargate.config.formatting.SGFormatBuilder; import net.knarcraft.stargate.container.SignData; import net.knarcraft.stargate.portal.property.PortalLocation; import net.knarcraft.stargate.utility.PermissionHelper; diff --git a/src/main/java/net/knarcraft/stargate/utility/BungeeHelper.java b/src/main/java/net/knarcraft/stargate/utility/BungeeHelper.java index 8430c95..584729a 100644 --- a/src/main/java/net/knarcraft/stargate/utility/BungeeHelper.java +++ b/src/main/java/net/knarcraft/stargate/utility/BungeeHelper.java @@ -1,8 +1,8 @@ package net.knarcraft.stargate.utility; import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.config.Message; -import net.knarcraft.stargate.config.SGFormatBuilder; +import net.knarcraft.stargate.config.formatting.Message; +import net.knarcraft.stargate.config.formatting.SGFormatBuilder; import net.knarcraft.stargate.portal.Portal; import net.knarcraft.stargate.portal.PortalHandler; import net.knarcraft.stargate.portal.teleporter.PlayerTeleporter; diff --git a/src/main/java/net/knarcraft/stargate/utility/EconomyHelper.java b/src/main/java/net/knarcraft/stargate/utility/EconomyHelper.java index db45457..42dfa8a 100644 --- a/src/main/java/net/knarcraft/stargate/utility/EconomyHelper.java +++ b/src/main/java/net/knarcraft/stargate/utility/EconomyHelper.java @@ -2,9 +2,9 @@ package net.knarcraft.stargate.utility; import net.knarcraft.knarlib.formatting.FormatBuilder; import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.config.EconomyConfig; -import net.knarcraft.stargate.config.Message; -import net.knarcraft.stargate.config.SGFormatBuilder; +import net.knarcraft.stargate.config.addons.EconomyConfig; +import net.knarcraft.stargate.config.formatting.Message; +import net.knarcraft.stargate.config.formatting.SGFormatBuilder; import net.knarcraft.stargate.portal.Portal; import net.knarcraft.stargate.portal.property.PortalOwner; import net.milkbowl.vault.economy.Economy; diff --git a/src/main/java/net/knarcraft/stargate/utility/PermissionHelper.java b/src/main/java/net/knarcraft/stargate/utility/PermissionHelper.java index 38e7a51..2afac41 100644 --- a/src/main/java/net/knarcraft/stargate/utility/PermissionHelper.java +++ b/src/main/java/net/knarcraft/stargate/utility/PermissionHelper.java @@ -1,8 +1,8 @@ package net.knarcraft.stargate.utility; import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.config.Message; -import net.knarcraft.stargate.config.SGFormatBuilder; +import net.knarcraft.stargate.config.formatting.Message; +import net.knarcraft.stargate.config.formatting.SGFormatBuilder; import net.knarcraft.stargate.event.StargateAccessEvent; import net.knarcraft.stargate.portal.Portal; import net.knarcraft.stargate.portal.property.PortalOption; diff --git a/src/main/java/net/knarcraft/stargate/utility/TeleportHelper.java b/src/main/java/net/knarcraft/stargate/utility/TeleportHelper.java index 0ebf770..c245a37 100644 --- a/src/main/java/net/knarcraft/stargate/utility/TeleportHelper.java +++ b/src/main/java/net/knarcraft/stargate/utility/TeleportHelper.java @@ -1,8 +1,8 @@ package net.knarcraft.stargate.utility; import net.knarcraft.stargate.Stargate; -import net.knarcraft.stargate.config.Message; -import net.knarcraft.stargate.config.SGFormatBuilder; +import net.knarcraft.stargate.config.formatting.Message; +import net.knarcraft.stargate.config.formatting.SGFormatBuilder; import net.knarcraft.stargate.portal.Portal; import net.knarcraft.stargate.portal.teleporter.EntityTeleporter; import org.bukkit.Bukkit;