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(); }