From b2eab51b7246c74f18b0dd4a2362c116bd6fbaf9 Mon Sep 17 00:00:00 2001 From: Len <40720638+destro174@users.noreply.github.com> Date: Tue, 23 Apr 2024 10:54:56 +0200 Subject: [PATCH] Rework listeners and add EntityListener. --- .../cometskyblock/CometSkyBlockPlugin.java | 18 ++++-- .../alttd/cometskyblock/gui/GUIListener.java | 4 +- .../cometskyblock/listeners/BedListener.java | 22 ++----- .../listeners/EntityListener.java | 24 ++++++++ .../listeners/EventListener.java | 58 +++++++++++++++++++ .../listeners/PlayerJoinListener.java | 43 -------------- .../listeners/PlayerLeaveListener.java | 34 ----------- .../listeners/PlayerListener.java | 58 ++++++++++--------- ...java => cobblestoneGeneratorListener.java} | 7 +-- 9 files changed, 135 insertions(+), 133 deletions(-) create mode 100644 plugin/src/main/java/com/alttd/cometskyblock/listeners/EntityListener.java create mode 100644 plugin/src/main/java/com/alttd/cometskyblock/listeners/EventListener.java delete mode 100644 plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerJoinListener.java delete mode 100644 plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerLeaveListener.java rename plugin/src/main/java/com/alttd/cometskyblock/listeners/{CobbestoneGeneratorListener.java => cobblestoneGeneratorListener.java} (94%) diff --git a/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java b/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java index 4315890..021bfe6 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java @@ -11,7 +11,8 @@ import com.alttd.cometskyblock.island.IslandData; import com.alttd.cometskyblock.island.oregenerator.GeneratorHandler; import com.alttd.cometskyblock.island.oregenerator.GeneratorLoader; import com.alttd.cometskyblock.listeners.BedListener; -import com.alttd.cometskyblock.listeners.CobbestoneGeneratorListener;; +import com.alttd.cometskyblock.listeners.EntityListener; +import com.alttd.cometskyblock.listeners.cobblestoneGeneratorListener;; import com.alttd.cometskyblock.listeners.PlayerListener; import com.alttd.cometskyblock.managers.IslandManager; import com.alttd.cometskyblock.worldgenerator.MasterWorldGenerator; @@ -104,11 +105,16 @@ public class CometSkyBlockPlugin extends JavaPlugin implements CometSkyBlockAPI } public void loadEventListeners() { - final PluginManager pm = getServer().getPluginManager(); - pm.registerEvents(new BedListener(this), this); - pm.registerEvents(new CobbestoneGeneratorListener(this), this); - pm.registerEvents(new GUIListener(this), this); - pm.registerEvents(new PlayerListener(this), this); +// final PluginManager pm = getServer().getPluginManager(); +// pm.registerEvents(new BedListener(this), this); +// pm.registerEvents(new cobblestoneGeneratorListener(this), this); +// pm.registerEvents(new GUIListener(this), this); +// pm.registerEvents(new PlayerListener(this), this); + new BedListener(this); + new cobblestoneGeneratorListener(this); + new GUIListener(this); + new PlayerListener(this); + new EntityListener(this); } } diff --git a/plugin/src/main/java/com/alttd/cometskyblock/gui/GUIListener.java b/plugin/src/main/java/com/alttd/cometskyblock/gui/GUIListener.java index 2270c78..18a9931 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/gui/GUIListener.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/gui/GUIListener.java @@ -1,6 +1,7 @@ package com.alttd.cometskyblock.gui; import com.alttd.cometskyblock.CometSkyBlockPlugin; +import com.alttd.cometskyblock.listeners.EventListener; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -12,12 +13,13 @@ import org.bukkit.event.inventory.InventoryOpenEvent; /** * Basically a handler to redirect events to our GUI implementations */ -public class GUIListener implements Listener { +public class GUIListener extends EventListener { protected final CometSkyBlockPlugin plugin; public GUIListener(CometSkyBlockPlugin plugin) { this.plugin = plugin; + this.register(this.plugin); } @EventHandler diff --git a/plugin/src/main/java/com/alttd/cometskyblock/listeners/BedListener.java b/plugin/src/main/java/com/alttd/cometskyblock/listeners/BedListener.java index cd3747a..9d03917 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/listeners/BedListener.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/listeners/BedListener.java @@ -15,11 +15,12 @@ import org.bukkit.event.block.BlockPlaceEvent; * By default Gamerule DO_INSOMNIA is disabled, the moment an island member sleeps this gamerule will be enabled. * Still debating if this should only be enabled for those that have slept */ -public class BedListener implements Listener { +public class BedListener extends EventListener { private final CometSkyBlockPlugin plugin; public BedListener(CometSkyBlockPlugin plugin) { this.plugin = plugin; + this.register(this.plugin); } @EventHandler(ignoreCancelled = true) @@ -28,23 +29,10 @@ public class BedListener implements Listener { return; } Player player = event.getPlayer(); + if(!canInteract(event, player)) + return; + World world = player.getWorld(); - IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId()); - if (!world.getUID().equals(islandPlayer.islandUUID())) { - event.setCancelled(true); - return; - } - - Island island = Island.getIsland(world.getUID()); - if (island == null) { - return; - } - - if (!island.canBuild(player.getUniqueId())) { - event.setCancelled(true); - return; - } - world.setGameRule(GameRule.DO_INSOMNIA, true); } diff --git a/plugin/src/main/java/com/alttd/cometskyblock/listeners/EntityListener.java b/plugin/src/main/java/com/alttd/cometskyblock/listeners/EntityListener.java new file mode 100644 index 0000000..b8c444d --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/listeners/EntityListener.java @@ -0,0 +1,24 @@ +package com.alttd.cometskyblock.listeners; + +import com.alttd.cometskyblock.CometSkyBlockPlugin; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityTargetLivingEntityEvent; + +public class EntityListener extends EventListener { + + private final CometSkyBlockPlugin plugin; + public EntityListener(CometSkyBlockPlugin plugin) { + this.plugin = plugin; + this.register(this.plugin); + } + + @EventHandler(ignoreCancelled = true) + public void onEntityTargetPlayer(EntityTargetLivingEntityEvent event) { + if (!(event.getTarget() instanceof Player player)) + return; + + if(!canInteract(event, player)) + return; + } +} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/listeners/EventListener.java b/plugin/src/main/java/com/alttd/cometskyblock/listeners/EventListener.java new file mode 100644 index 0000000..5aea8c5 --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/listeners/EventListener.java @@ -0,0 +1,58 @@ +package com.alttd.cometskyblock.listeners; + +import com.alttd.cometskyblock.island.Island; +import com.alttd.cometskyblock.island.IslandPlayer; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; +import org.bukkit.plugin.java.JavaPlugin; + +public class EventListener implements Listener { + protected boolean isRegistered = false; + + public void register(JavaPlugin instance) { + Bukkit.getServer().getPluginManager().registerEvents(this, instance); + isRegistered = true; + } + + public void unregister() { + HandlerList.unregisterAll(this); + isRegistered = false; + } + + boolean canInteract(Cancellable event, Player player) { + World world = player.getWorld(); + IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId()); + if (world.getUID().equals(Bukkit.getWorlds().get(0).getUID())) + return false; + +// if (!world.getUID().equals(islandPlayer.islandUUID())) { +// return cancelEvent(event); +// } + + Island island = Island.getIsland(world.getUID()); + if (island == null) { + return cancelEvent(event); + } + + // Worlds not generated by CometSkyblock will have this as null or empty + // We do not care about these worlds - yet + if (island.worldName() == null || island.worldName().isEmpty()) { + return true; + } + + if (!island.canInteract(player.getUniqueId())) { + return cancelEvent(event); + } + return true; + } + + boolean cancelEvent(Cancellable event) { + event.setCancelled(true); + return false; + } + +} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerJoinListener.java b/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerJoinListener.java deleted file mode 100644 index d56fc17..0000000 --- a/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerJoinListener.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.alttd.cometskyblock.listeners; - -import com.alttd.cometskyblock.CometSkyBlockPlugin; -import com.alttd.cometskyblock.events.IslandPlayerJoinEvent; -import com.alttd.cometskyblock.island.Island; -import com.alttd.cometskyblock.island.IslandPlayer; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; - -public class PlayerJoinListener implements Listener { - - private final CometSkyBlockPlugin plugin; - public PlayerJoinListener(CometSkyBlockPlugin plugin) { - this.plugin = plugin; - } - - @EventHandler(ignoreCancelled = true) - public void onPlayerJoinEvent(PlayerJoinEvent event) { - Player player = event.getPlayer(); - - if (!player.hasPlayedBefore()) - return; - - IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId()); - if (islandPlayer.islandId() == 0) { - return; - } - Bukkit.getServer().getPluginManager().callEvent(new IslandPlayerJoinEvent(islandPlayer.toRecord())); - if (!player.getWorld().getUID().equals(islandPlayer.islandUUID())) - return; - - Island island = Island.getIsland(islandPlayer.islandUUID()); - if (island == null) { - return; - } - - island.teleport(player, player.getLocation()); - } - -} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerLeaveListener.java b/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerLeaveListener.java deleted file mode 100644 index 8ebd736..0000000 --- a/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerLeaveListener.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.alttd.cometskyblock.listeners; - -import com.alttd.cometskyblock.CometSkyBlockPlugin; -import com.alttd.cometskyblock.events.IslandPlayerJoinEvent; -import com.alttd.cometskyblock.events.IslandPlayerLeaveEvent; -import com.alttd.cometskyblock.island.IslandPlayer; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; - -public class PlayerLeaveListener implements Listener { - - private final CometSkyBlockPlugin plugin; - public PlayerLeaveListener(CometSkyBlockPlugin plugin) { - this.plugin = plugin; - } - - @EventHandler(ignoreCancelled = true) - public void onPlayerJoinEvent(PlayerJoinEvent event) { - Player player = event.getPlayer(); - - if (!player.hasPlayedBefore()) - return; - - IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId()); - if (islandPlayer.islandId() == 0) { - return; - } - Bukkit.getServer().getPluginManager().callEvent(new IslandPlayerLeaveEvent(islandPlayer.toRecord())); - } - -} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerListener.java b/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerListener.java index 25dba21..c19e8fe 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerListener.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerListener.java @@ -1,13 +1,14 @@ package com.alttd.cometskyblock.listeners; import com.alttd.cometskyblock.CometSkyBlockPlugin; +import com.alttd.cometskyblock.events.IslandPlayerJoinEvent; +import com.alttd.cometskyblock.events.IslandPlayerLeaveEvent; import com.alttd.cometskyblock.island.Island; import com.alttd.cometskyblock.island.IslandPlayer; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; -import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.EventHandler; @@ -16,17 +17,15 @@ import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.EntityBlockFormEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.player.PlayerBucketEmptyEvent; -import org.bukkit.event.player.PlayerBucketFillEvent; -import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.*; import org.bukkit.inventory.ItemStack; -public class PlayerListener implements Listener { +public class PlayerListener extends EventListener { private final CometSkyBlockPlugin plugin; public PlayerListener(CometSkyBlockPlugin plugin) { this.plugin = plugin; + this.register(this.plugin); } @EventHandler(ignoreCancelled = true) @@ -95,36 +94,39 @@ public class PlayerListener implements Listener { // } // } - boolean canInteract(Cancellable event, Player player) { - World world = player.getWorld(); + @EventHandler(ignoreCancelled = true) + public void onPlayerJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + + if (!player.hasPlayedBefore()) + return; + IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId()); - if (world.getUID().equals(Bukkit.getWorlds().get(0).getUID())) - return false; - - if (!world.getUID().equals(islandPlayer.islandUUID())) { - return cancelEvent(event); + if (islandPlayer.islandId() == 0) { + return; } + Bukkit.getServer().getPluginManager().callEvent(new IslandPlayerJoinEvent(islandPlayer.toRecord())); + if (!player.getWorld().getUID().equals(islandPlayer.islandUUID())) + return; - Island island = Island.getIsland(world.getUID()); + Island island = Island.getIsland(islandPlayer.islandUUID()); if (island == null) { - return cancelEvent(event); + return; } - // Worlds not generated by CometSkyblock will have this as null or empty - // We do not care about these worlds - yet - if (island.worldName() == null || island.worldName().isEmpty()) { - return true; - } - - if (!island.canBuild(player.getUniqueId())) { - return cancelEvent(event); - } - return true; + island.teleport(player, player.getLocation()); } - boolean cancelEvent(Cancellable event) { - event.setCancelled(true); - return false; + @EventHandler(ignoreCancelled = true) + public void onPlayerLeave(PlayerQuitEvent event) { + Player player = event.getPlayer(); + + IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId()); + if (islandPlayer.islandId() == 0) { + return; + } + + Bukkit.getServer().getPluginManager().callEvent(new IslandPlayerLeaveEvent(islandPlayer.toRecord())); } } diff --git a/plugin/src/main/java/com/alttd/cometskyblock/listeners/CobbestoneGeneratorListener.java b/plugin/src/main/java/com/alttd/cometskyblock/listeners/cobblestoneGeneratorListener.java similarity index 94% rename from plugin/src/main/java/com/alttd/cometskyblock/listeners/CobbestoneGeneratorListener.java rename to plugin/src/main/java/com/alttd/cometskyblock/listeners/cobblestoneGeneratorListener.java index 7fad25d..1144924 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/listeners/CobbestoneGeneratorListener.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/listeners/cobblestoneGeneratorListener.java @@ -6,23 +6,22 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.entity.Item; -import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; import org.bukkit.event.block.*; import org.bukkit.metadata.FixedMetadataValue; import org.jetbrains.annotations.NotNull; import java.util.List; -public class CobbestoneGeneratorListener implements Listener { +public class cobblestoneGeneratorListener extends EventListener { public static final @NotNull String GENERATOR_METADATA_KEY = "comet:oregenerator"; private final CometSkyBlockPlugin plugin; - public CobbestoneGeneratorListener(CometSkyBlockPlugin plugin) { + public cobblestoneGeneratorListener(CometSkyBlockPlugin plugin) { this.plugin = plugin; + this.register(this.plugin); } @EventHandler(ignoreCancelled = true)