From 4b2cadb419ebcf00f6a3be4ea8ef9bcf4046320c Mon Sep 17 00:00:00 2001 From: Stijn <38841986+Teriuihi@users.noreply.github.com> Date: Mon, 19 Feb 2024 03:52:17 +0100 Subject: [PATCH] Events (#4) * Refactor island and island player classes to interfaces Refactored the existing Island and IslandPlayer classes to interfaces and created the implementation classes, IslandImpl and IslandPlayerImpl. * Add event handling for player island actions Implemented new event classes for handling player activities related to islands. These include IslandPlayerJoinEvent, IslandPlayerLeaveEvent, IslandPlayerJoinIslandEvent, and IslandPlayerLeaveIslandEvent, facilitating better tracking and handling of player actions on islands for other plugins. * Implement Island interfaces in IslandImpl and IslandPlayerImpl Updated the IslandImpl and IslandPlayerImpl classes to implement the Island and IslandPlayer interfaces respectively. * Refactor IslandPlayer Interface Removed player() method and added islandOwner() method in the IslandPlayer interface. This change reflects way the IslandPlayerImpl currently works. * Implement event triggers for island join/leave and server join/leave events Added triggers for IslandPlayer events in the relevant island management methods. Also, modified IslandPlayerJoinEvent and IslandPlayerLeaveEvent to remove unnecessary references to Island-object. * Reverting in events * Replace interfaces with records in event parameters The commit replaces the usage of interfaces Island and IslandPlayer with record classes in event parameters. It also adds methods to convert instances to respective records in Island and IslandPlayer classes. The interfaces are then removed as they are no longer needed. * Replace interfaces with records in event parameters The commit replaces the usage of interfaces Island and IslandPlayer with record classes in event parameters. It also adds methods to convert instances to respective records in Island and IslandPlayer classes. The interfaces are then removed as they are no longer needed. --- .../events/IslandPlayerJoinEvent.java | 27 +++++++++++++++ .../events/IslandPlayerJoinIslandEvent.java | 34 +++++++++++++++++++ .../events/IslandPlayerLeaveEvent.java | 27 +++++++++++++++ .../events/IslandPlayerLeaveIslandEvent.java | 33 ++++++++++++++++++ .../records/IslandPlayerRecord.java | 6 ++++ .../cometskyblock/records/IslandRecord.java | 5 +++ .../commands/island/IslandGo.java | 2 ++ .../alttd/cometskyblock/island/Island.java | 5 +++ .../cometskyblock/island/IslandPlayer.java | 6 ++++ .../listeners/PlayerJoinListener.java | 4 ++- .../listeners/PlayerLeaveListener.java | 34 +++++++++++++++++++ .../cometskyblock/request/InviteRequest.java | 3 ++ .../cometskyblock/request/LeaveRequest.java | 2 ++ 13 files changed, 187 insertions(+), 1 deletion(-) create mode 100644 api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerJoinEvent.java create mode 100644 api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerJoinIslandEvent.java create mode 100644 api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerLeaveEvent.java create mode 100644 api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerLeaveIslandEvent.java create mode 100644 api/src/main/java/com/alttd/cometskyblock/records/IslandPlayerRecord.java create mode 100644 api/src/main/java/com/alttd/cometskyblock/records/IslandRecord.java create mode 100644 plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerLeaveListener.java diff --git a/api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerJoinEvent.java b/api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerJoinEvent.java new file mode 100644 index 0000000..5e85614 --- /dev/null +++ b/api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerJoinEvent.java @@ -0,0 +1,27 @@ +package com.alttd.cometskyblock.events; + +import com.alttd.cometskyblock.records.IslandPlayerRecord; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +public class IslandPlayerJoinEvent extends Event { + + private final IslandPlayerRecord islandPlayer; + private final HandlerList handlerList; + + public IslandPlayerJoinEvent(IslandPlayerRecord islandPlayer) { + this.islandPlayer = islandPlayer; + handlerList = new HandlerList(); + } + + public IslandPlayerRecord getIslandPlayer() { + return islandPlayer; + } + + @Override + public @NotNull HandlerList getHandlers() { + return handlerList; + } + +} diff --git a/api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerJoinIslandEvent.java b/api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerJoinIslandEvent.java new file mode 100644 index 0000000..632990e --- /dev/null +++ b/api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerJoinIslandEvent.java @@ -0,0 +1,34 @@ +package com.alttd.cometskyblock.events; + +import com.alttd.cometskyblock.records.IslandRecord; +import com.alttd.cometskyblock.records.IslandPlayerRecord; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +public class IslandPlayerJoinIslandEvent extends Event { + + private final IslandPlayerRecord islandPlayer; + private final IslandRecord island; + private final HandlerList handlerList; + + public IslandPlayerJoinIslandEvent(IslandPlayerRecord islandPlayer, IslandRecord island) { + this.islandPlayer = islandPlayer; + this.island = island; + handlerList = new HandlerList(); + } + + public IslandPlayerRecord getIslandPlayer() { + return islandPlayer; + } + + public IslandRecord getIsland() { + return island; + } + + @Override + public @NotNull HandlerList getHandlers() { + return handlerList; + } + +} diff --git a/api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerLeaveEvent.java b/api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerLeaveEvent.java new file mode 100644 index 0000000..228fde7 --- /dev/null +++ b/api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerLeaveEvent.java @@ -0,0 +1,27 @@ +package com.alttd.cometskyblock.events; + +import com.alttd.cometskyblock.records.IslandPlayerRecord; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +public class IslandPlayerLeaveEvent extends Event { + + private final IslandPlayerRecord islandPlayer; + private final HandlerList handlerList; + + public IslandPlayerLeaveEvent(IslandPlayerRecord islandPlayer) { + this.islandPlayer = islandPlayer; + handlerList = new HandlerList(); + } + + public IslandPlayerRecord getIslandPlayer() { + return islandPlayer; + } + + @Override + public @NotNull HandlerList getHandlers() { + return handlerList; + } + +} diff --git a/api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerLeaveIslandEvent.java b/api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerLeaveIslandEvent.java new file mode 100644 index 0000000..2bfbac1 --- /dev/null +++ b/api/src/main/java/com/alttd/cometskyblock/events/IslandPlayerLeaveIslandEvent.java @@ -0,0 +1,33 @@ +package com.alttd.cometskyblock.events; + +import com.alttd.cometskyblock.records.IslandRecord; +import com.alttd.cometskyblock.records.IslandPlayerRecord; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +public class IslandPlayerLeaveIslandEvent extends Event { + + private final IslandPlayerRecord islandPlayer; + private final IslandRecord island; + private final HandlerList handlerList; + + public IslandPlayerLeaveIslandEvent(IslandPlayerRecord islandPlayer, IslandRecord island) { + this.islandPlayer = islandPlayer; + this.island = island; + handlerList = new HandlerList(); + } + + public IslandPlayerRecord getIslandPlayer() { + return islandPlayer; + } + + public IslandRecord getIsland() { + return island; + } + + @Override + public @NotNull HandlerList getHandlers() { + return handlerList; + } +} diff --git a/api/src/main/java/com/alttd/cometskyblock/records/IslandPlayerRecord.java b/api/src/main/java/com/alttd/cometskyblock/records/IslandPlayerRecord.java new file mode 100644 index 0000000..d23d79f --- /dev/null +++ b/api/src/main/java/com/alttd/cometskyblock/records/IslandPlayerRecord.java @@ -0,0 +1,6 @@ +package com.alttd.cometskyblock.records; + +import java.util.UUID; + +public record IslandPlayerRecord(boolean islandOwner, int islandId, UUID uuid) { +} diff --git a/api/src/main/java/com/alttd/cometskyblock/records/IslandRecord.java b/api/src/main/java/com/alttd/cometskyblock/records/IslandRecord.java new file mode 100644 index 0000000..0b2d2d4 --- /dev/null +++ b/api/src/main/java/com/alttd/cometskyblock/records/IslandRecord.java @@ -0,0 +1,5 @@ +package com.alttd.cometskyblock.records; + +public record IslandRecord(int islandId, String islandName, int islandLevel) { + +} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandGo.java b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandGo.java index e948627..f5f786d 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandGo.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandGo.java @@ -2,6 +2,7 @@ package com.alttd.cometskyblock.commands.island; import com.alttd.cometskyblock.CometSkyBlockPlugin; import com.alttd.cometskyblock.commands.PlayerSubCommand; +import com.alttd.cometskyblock.events.IslandPlayerJoinIslandEvent; import com.alttd.cometskyblock.island.Island; import com.alttd.cometskyblock.island.IslandPlayer; import org.bukkit.Bukkit; @@ -65,6 +66,7 @@ public class IslandGo extends PlayerSubCommand { new ItemStack(Material.LAVA_BUCKET), new ItemStack(Material.WATER_BUCKET) ); + Bukkit.getServer().getPluginManager().callEvent(new IslandPlayerJoinIslandEvent(islandPlayer.toRecord(), island.toRecord())); player.teleportAsync(world.getSpawnLocation()); }); return true; diff --git a/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java b/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java index deeb4f9..3a939dd 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java @@ -1,6 +1,7 @@ package com.alttd.cometskyblock.island; import com.alttd.cometskyblock.CometSkyBlockPlugin; +import com.alttd.cometskyblock.records.IslandRecord; import com.alttd.cometskyblock.request.Request; import lombok.Getter; import lombok.Setter; @@ -241,4 +242,8 @@ public class Island extends YamlConfiguration { islandMember.sendMiniMessage(message, placeholder); } } + + public IslandRecord toRecord() { + return new IslandRecord(islandId(), islandName(), level()); + } } diff --git a/plugin/src/main/java/com/alttd/cometskyblock/island/IslandPlayer.java b/plugin/src/main/java/com/alttd/cometskyblock/island/IslandPlayer.java index 9069fb9..8e7e24b 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/island/IslandPlayer.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/island/IslandPlayer.java @@ -1,6 +1,7 @@ package com.alttd.cometskyblock.island; import com.alttd.cometskyblock.CometSkyBlockPlugin; +import com.alttd.cometskyblock.records.IslandPlayerRecord; import com.alttd.cometskyblock.request.Request; import lombok.Getter; import lombok.Setter; @@ -14,6 +15,7 @@ import java.util.UUID; public class IslandPlayer extends YamlConfiguration { private static final Map configs = new HashMap<>(); + private final UUID playerUUID; public static IslandPlayer getIslandPlayer(UUID uuid) { synchronized (configs) { @@ -39,6 +41,7 @@ public class IslandPlayer extends YamlConfiguration { private IslandPlayer(UUID uuid) { super(); + this.playerUUID = uuid; this.file = new File(CometSkyBlockPlugin.instance().getDataFolder(), "PlayerData" + File.separator + uuid + ".yml"); reload(); } @@ -96,4 +99,7 @@ public class IslandPlayer extends YamlConfiguration { save(); } + public IslandPlayerRecord toRecord() { + return new IslandPlayerRecord(islandOwner(), islandId(), playerUUID); + } } diff --git a/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerJoinListener.java b/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerJoinListener.java index bbccfed..d56fc17 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerJoinListener.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerJoinListener.java @@ -1,9 +1,10 @@ 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.Location; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -27,6 +28,7 @@ public class PlayerJoinListener implements Listener { if (islandPlayer.islandId() == 0) { return; } + Bukkit.getServer().getPluginManager().callEvent(new IslandPlayerJoinEvent(islandPlayer.toRecord())); if (!player.getWorld().getUID().equals(islandPlayer.islandUUID())) return; diff --git a/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerLeaveListener.java b/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerLeaveListener.java new file mode 100644 index 0000000..8ebd736 --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/listeners/PlayerLeaveListener.java @@ -0,0 +1,34 @@ +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/request/InviteRequest.java b/plugin/src/main/java/com/alttd/cometskyblock/request/InviteRequest.java index 6680f99..5df3b20 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/request/InviteRequest.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/request/InviteRequest.java @@ -1,8 +1,10 @@ package com.alttd.cometskyblock.request; import com.alttd.cometskyblock.CometSkyBlockPlugin; +import com.alttd.cometskyblock.events.IslandPlayerJoinIslandEvent; import com.alttd.cometskyblock.island.Island; import com.alttd.cometskyblock.island.IslandPlayer; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; public class InviteRequest extends Request { @@ -31,6 +33,7 @@ public class InviteRequest extends Request { IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(requester().getUniqueId()); Island island = Island.getIsland(islandPlayer.islandUUID()); island.addMember(target().getUniqueId()); + Bukkit.getServer().getPluginManager().callEvent(new IslandPlayerJoinIslandEvent(islandPlayer.toRecord(), island.toRecord())); super.accept(); } diff --git a/plugin/src/main/java/com/alttd/cometskyblock/request/LeaveRequest.java b/plugin/src/main/java/com/alttd/cometskyblock/request/LeaveRequest.java index 8788329..2ed25b2 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/request/LeaveRequest.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/request/LeaveRequest.java @@ -1,6 +1,7 @@ package com.alttd.cometskyblock.request; import com.alttd.cometskyblock.CometSkyBlockPlugin; +import com.alttd.cometskyblock.events.IslandPlayerLeaveIslandEvent; import com.alttd.cometskyblock.island.Island; import com.alttd.cometskyblock.island.IslandData; import com.alttd.cometskyblock.island.IslandPlayer; @@ -35,6 +36,7 @@ public class LeaveRequest extends Request { World world = Bukkit.getWorlds().get(0); Location spawnLocation = world.getSpawnLocation(); requester().teleport(spawnLocation); + Bukkit.getServer().getPluginManager().callEvent(new IslandPlayerLeaveIslandEvent(islandPlayer.toRecord(), island.toRecord())); super.accept(); }