From 44325eeb6adb6b1bc9f9fa48ff8afca97717bf6e Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Wed, 13 Oct 2021 16:46:30 +0200 Subject: [PATCH] Improves and fixes comments for listeners Removes the enableBungee check in the BungeeCordListener as it should only be listening if the option is enabled anyway Improves the checking for players teleporting from the end --- .../container/FromTheEndTeleportation.java | 13 ++++++++++ .../stargate/listener/BlockEventListener.java | 5 +++- .../stargate/listener/BungeeCordListener.java | 9 ++++--- .../listener/EntityEventListener.java | 1 + .../listener/PlayerEventListener.java | 16 ++++++------ .../listener/PortalEventListener.java | 26 ++++++++++--------- .../listener/TeleportEventListener.java | 6 ++--- .../listener/VehicleEventListener.java | 3 ++- .../stargate/listener/WorldEventListener.java | 5 ++-- 9 files changed, 53 insertions(+), 31 deletions(-) diff --git a/src/main/java/net/knarcraft/stargate/container/FromTheEndTeleportation.java b/src/main/java/net/knarcraft/stargate/container/FromTheEndTeleportation.java index 0da7d6e..54c7171 100644 --- a/src/main/java/net/knarcraft/stargate/container/FromTheEndTeleportation.java +++ b/src/main/java/net/knarcraft/stargate/container/FromTheEndTeleportation.java @@ -44,4 +44,17 @@ public class FromTheEndTeleportation { return this.exitPortal; } + @Override + public int hashCode() { + return teleportingPlayer.hashCode(); + } + + @Override + public boolean equals(Object other) { + if (!(other instanceof FromTheEndTeleportation otherTeleportation)) { + return false; + } + return teleportingPlayer.equals(otherTeleportation.teleportingPlayer); + } + } diff --git a/src/main/java/net/knarcraft/stargate/listener/BlockEventListener.java b/src/main/java/net/knarcraft/stargate/listener/BlockEventListener.java index 5c19132..26da8b1 100644 --- a/src/main/java/net/knarcraft/stargate/listener/BlockEventListener.java +++ b/src/main/java/net/knarcraft/stargate/listener/BlockEventListener.java @@ -36,6 +36,9 @@ public class BlockEventListener implements Listener { /** * Detects snowmen ruining portals * + *

If entrance protection or portal verification is enabled, the snowman will be prevented from placing snow in + * the portal entrance.

+ * * @param event

The triggered event

*/ @EventHandler @@ -71,7 +74,7 @@ public class BlockEventListener implements Listener { } final Portal portal = PortalHandler.createPortal(event, player); - // Not creating a gate, just placing a sign + //Not creating a gate, just placing a sign if (portal == null) { return; } diff --git a/src/main/java/net/knarcraft/stargate/listener/BungeeCordListener.java b/src/main/java/net/knarcraft/stargate/listener/BungeeCordListener.java index 0d58dda..2a7d2e1 100644 --- a/src/main/java/net/knarcraft/stargate/listener/BungeeCordListener.java +++ b/src/main/java/net/knarcraft/stargate/listener/BungeeCordListener.java @@ -1,6 +1,5 @@ package net.knarcraft.stargate.listener; -import net.knarcraft.stargate.Stargate; import net.knarcraft.stargate.utility.BungeeHelper; import org.bukkit.entity.Player; import org.bukkit.plugin.messaging.PluginMessageListener; @@ -16,7 +15,7 @@ import org.jetbrains.annotations.NotNull; public class BungeeCordListener implements PluginMessageListener { /** - * Receive a plugin message + * Receives plugin messages * * @param channel

The channel the message was received on

* @param unused

Unused.

@@ -24,16 +23,18 @@ public class BungeeCordListener implements PluginMessageListener { */ @Override public void onPluginMessageReceived(@NotNull String channel, @NotNull Player unused, byte[] message) { - //Ignore plugin messages if bungee support is not enabled or some other plugin message is received - if (!Stargate.enableBungee || !channel.equals("BungeeCord")) { + //Ignore plugin messages if some other plugin message is received + if (!channel.equals("BungeeCord")) { 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 index 3c32226..f50c7e6 100644 --- a/src/main/java/net/knarcraft/stargate/listener/EntityEventListener.java +++ b/src/main/java/net/knarcraft/stargate/listener/EntityEventListener.java @@ -30,6 +30,7 @@ public class EntityEventListener implements Listener { } Entity entity = event.getEntity(); + //Cancel normal portal event is near a stargate if (PortalHandler.getByAdjacentEntrance(event.getFrom(), EntityHelper.getEntityMaxSizeInt(entity)) != null) { event.setCancelled(true); } diff --git a/src/main/java/net/knarcraft/stargate/listener/PlayerEventListener.java b/src/main/java/net/knarcraft/stargate/listener/PlayerEventListener.java index e765e7f..eabed16 100644 --- a/src/main/java/net/knarcraft/stargate/listener/PlayerEventListener.java +++ b/src/main/java/net/knarcraft/stargate/listener/PlayerEventListener.java @@ -44,6 +44,7 @@ public class PlayerEventListener implements Listener { } Player player = event.getPlayer(); + //Check if the player is waiting to be teleported to a stargate String destination = Stargate.bungeeQueue.remove(player.getName().toLowerCase()); if (destination == null) { return; @@ -54,6 +55,7 @@ public class PlayerEventListener implements Listener { Stargate.debug("PlayerJoin", "Error fetching destination portal: " + destination); return; } + //Teleport the player to the stargate portal.teleport(player, portal, null); } @@ -85,13 +87,10 @@ public class PlayerEventListener implements Listener { return; } if (playerVehicle instanceof LivingEntity) { - //Make sure the horse can be sat on - if (playerVehicle instanceof AbstractHorse horse) { - //Make sure the horse is properly tamed - if (!horse.isTamed()) { - horse.setTamed(true); - horse.setOwner(player); - } + //Make sure any horses are properly tamed + if (playerVehicle instanceof AbstractHorse horse && !horse.isTamed()) { + horse.setTamed(true); + horse.setOwner(player); } destination.teleport((Vehicle) playerVehicle, entrancePortal); } else { @@ -110,7 +109,8 @@ public class PlayerEventListener implements Listener { * @param toLocation

The location the player is moving to

* @return

True if the event is relevant

*/ - private boolean isRelevantMoveEvent(PlayerMoveEvent event, Player player, BlockLocation fromLocation, BlockLocation toLocation) { + private boolean isRelevantMoveEvent(PlayerMoveEvent event, Player player, BlockLocation fromLocation, + BlockLocation toLocation) { //Check to see if the player moved to another block if (fromLocation.equals(toLocation)) { return false; diff --git a/src/main/java/net/knarcraft/stargate/listener/PortalEventListener.java b/src/main/java/net/knarcraft/stargate/listener/PortalEventListener.java index 2932fe1..6a63dcd 100644 --- a/src/main/java/net/knarcraft/stargate/listener/PortalEventListener.java +++ b/src/main/java/net/knarcraft/stargate/listener/PortalEventListener.java @@ -27,7 +27,7 @@ public class PortalEventListener implements Listener { private static final List playersFromTheEnd = new ArrayList<>(); /** - * Listen for and abort vanilla portal creation caused by stargate creation + * Listens for and aborts vanilla portal creation caused by stargate creation * * @param event

The triggered event

*/ @@ -55,7 +55,7 @@ public class PortalEventListener implements Listener { Location location = event.getLocation(); World world = location.getWorld(); Entity entity = event.getEntity(); - //Block normal portal teleportation if teleporting from a stargate + //Hijack normal portal teleportation if teleporting from a stargate if (entity instanceof Player player && location.getBlock().getType() == Material.END_PORTAL && world != null && world.getEnvironment() == World.Environment.THE_END) { Portal portal = PortalHandler.getByAdjacentEntrance(location); @@ -79,16 +79,18 @@ public class PortalEventListener implements Listener { @EventHandler public void onRespawn(PlayerRespawnEvent event) { Player respawningPlayer = event.getPlayer(); - playersFromTheEnd.forEach((teleportation) -> { - //Check if player is actually teleporting from the end - if (teleportation.getPlayer() == respawningPlayer) { - Portal exitPortal = teleportation.getExit(); - //Overwrite respawn location to respawn in front of the portal - event.setRespawnLocation(exitPortal.getExit(respawningPlayer, respawningPlayer.getLocation())); - //Properly close the portal to prevent it from staying in a locked state until it times out - exitPortal.close(false); - } - }); + int playerIndex = playersFromTheEnd.indexOf(new FromTheEndTeleportation(respawningPlayer, null)); + if (playerIndex == -1) { + return; + } + FromTheEndTeleportation teleportation = playersFromTheEnd.get(playerIndex); + playersFromTheEnd.remove(playerIndex); + + Portal exitPortal = teleportation.getExit(); + //Overwrite respawn location to respawn in front of the portal + event.setRespawnLocation(exitPortal.getExit(respawningPlayer, respawningPlayer.getLocation())); + //Properly close the portal to prevent it from staying in a locked state until it times out + exitPortal.close(false); } } diff --git a/src/main/java/net/knarcraft/stargate/listener/TeleportEventListener.java b/src/main/java/net/knarcraft/stargate/listener/TeleportEventListener.java index f796c51..21a0118 100644 --- a/src/main/java/net/knarcraft/stargate/listener/TeleportEventListener.java +++ b/src/main/java/net/knarcraft/stargate/listener/TeleportEventListener.java @@ -14,9 +14,9 @@ public class TeleportEventListener implements Listener { /** * This event handler handles some special teleportation events * - *

This event cancels nether portal and end gateway teleportation if the user teleported from a stargate - * entrance. This prevents the user from just teleporting to the nether with the default portal design. - * Additionally, this event teleports any vehicles not detected by the VehicleMove event together with the player.

+ *

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 event

The event to check and possibly cancel

*/ diff --git a/src/main/java/net/knarcraft/stargate/listener/VehicleEventListener.java b/src/main/java/net/knarcraft/stargate/listener/VehicleEventListener.java index 75211c3..bbc6aa6 100644 --- a/src/main/java/net/knarcraft/stargate/listener/VehicleEventListener.java +++ b/src/main/java/net/knarcraft/stargate/listener/VehicleEventListener.java @@ -69,7 +69,8 @@ public class VehicleEventListener implements Listener { Stargate.logger.warning(Stargate.getString("prefix") + "Unable to find portal destination"); return; } - Stargate.debug("vehicleTeleport", destinationPortal.getWorld() + " " + destinationPortal.getSignLocation()); + Stargate.debug("vehicleTeleport", destinationPortal.getWorld() + " " + + destinationPortal.getSignLocation()); destinationPortal.teleport(vehicle, entrancePortal); } } diff --git a/src/main/java/net/knarcraft/stargate/listener/WorldEventListener.java b/src/main/java/net/knarcraft/stargate/listener/WorldEventListener.java index 5f53cc6..f934418 100644 --- a/src/main/java/net/knarcraft/stargate/listener/WorldEventListener.java +++ b/src/main/java/net/knarcraft/stargate/listener/WorldEventListener.java @@ -36,8 +36,9 @@ public class WorldEventListener implements Listener { public void onWorldUnload(WorldUnloadEvent event) { Stargate.debug("onWorldUnload", "Reloading all Stargates"); World world = event.getWorld(); - if (Stargate.managedWorlds.contains(world.getName())) { - Stargate.managedWorlds.remove(world.getName()); + String worldName = world.getName(); + if (Stargate.managedWorlds.contains(worldName)) { + Stargate.managedWorlds.remove(worldName); PortalHandler.clearPortals(world); } }