From 9a3eae157467350d5e602f70c1915a3eed0b790d Mon Sep 17 00:00:00 2001 From: SamB440 Date: Thu, 19 Dec 2019 19:11:17 +0000 Subject: [PATCH] Add events and listeners --- .../islandearth/rpgregions/RPGRegions.java | 4 +- .../api/event/RegionDiscoverEvent.java | 40 +++++++++++++++++++ .../api/event/RegionEnterEvent.java | 39 ++++++++++++++++++ .../rpgregions/listener/MoveListener.java | 34 ++++++++++++++++ .../rpgregions/listener/RegionListener.java | 12 ++++-- 5 files changed, 124 insertions(+), 5 deletions(-) create mode 100644 src/main/java/net/islandearth/rpgregions/api/event/RegionDiscoverEvent.java create mode 100644 src/main/java/net/islandearth/rpgregions/api/event/RegionEnterEvent.java create mode 100644 src/main/java/net/islandearth/rpgregions/listener/MoveListener.java diff --git a/src/main/java/net/islandearth/rpgregions/RPGRegions.java b/src/main/java/net/islandearth/rpgregions/RPGRegions.java index 561ca33..d2222a2 100644 --- a/src/main/java/net/islandearth/rpgregions/RPGRegions.java +++ b/src/main/java/net/islandearth/rpgregions/RPGRegions.java @@ -6,7 +6,7 @@ import net.islandearth.languagy.language.LanguagyPluginHook; import net.islandearth.languagy.language.Translator; import net.islandearth.rpgregions.api.RPGRegionsAPI; import net.islandearth.rpgregions.listener.ConnectionListener; -import net.islandearth.rpgregions.listener.RegionListener; +import net.islandearth.rpgregions.listener.MoveListener; import net.islandearth.rpgregions.managers.RPGRegionsManagers; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -97,7 +97,7 @@ public final class RPGRegions extends JavaPlugin implements RPGRegionsAPI, Langu private void registerListeners() { PluginManager pm = Bukkit.getPluginManager(); pm.registerEvents(new ConnectionListener(this), this); - pm.registerEvents(new RegionListener(), this); + pm.registerEvents(new MoveListener(), this); } public static RPGRegionsAPI getAPI() { diff --git a/src/main/java/net/islandearth/rpgregions/api/event/RegionDiscoverEvent.java b/src/main/java/net/islandearth/rpgregions/api/event/RegionDiscoverEvent.java new file mode 100644 index 0000000..22a7ad8 --- /dev/null +++ b/src/main/java/net/islandearth/rpgregions/api/event/RegionDiscoverEvent.java @@ -0,0 +1,40 @@ +package net.islandearth.rpgregions.api.event; + +import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +import java.util.Set; + +public class RegionDiscoverEvent extends Event { + + private static final HandlerList HANDLER_LIST = new HandlerList(); + private final Player player; + private final Set regions; + + public RegionDiscoverEvent(Player player, Set regions) { + this.player = player; + this.regions = regions; + } + + public Player getPlayer() { + return player; + } + + public Set getRegion() { + return regions; + } + + @NotNull + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + +} \ No newline at end of file diff --git a/src/main/java/net/islandearth/rpgregions/api/event/RegionEnterEvent.java b/src/main/java/net/islandearth/rpgregions/api/event/RegionEnterEvent.java new file mode 100644 index 0000000..c1a5e46 --- /dev/null +++ b/src/main/java/net/islandearth/rpgregions/api/event/RegionEnterEvent.java @@ -0,0 +1,39 @@ +package net.islandearth.rpgregions.api.event; + +import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +import java.util.Set; + +public class RegionEnterEvent extends Event { + + private static final HandlerList HANDLER_LIST = new HandlerList(); + private final Player player; + private final Set regions; + + public RegionEnterEvent(Player player, Set regions) { + this.player = player; + this.regions = regions; + } + + public Player getPlayer() { + return player; + } + + public Set getRegions() { + return regions; + } + + @NotNull + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/src/main/java/net/islandearth/rpgregions/listener/MoveListener.java b/src/main/java/net/islandearth/rpgregions/listener/MoveListener.java new file mode 100644 index 0000000..6c07681 --- /dev/null +++ b/src/main/java/net/islandearth/rpgregions/listener/MoveListener.java @@ -0,0 +1,34 @@ +package net.islandearth.rpgregions.listener; + +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import net.islandearth.rpgregions.api.event.RegionEnterEvent; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; + +import java.util.Set; + +public class MoveListener implements Listener { + + @EventHandler + public void onMove(PlayerMoveEvent pme) { + Player player = pme.getPlayer(); + int x = pme.getTo().getBlockX(); + int y = pme.getTo().getBlockY(); + int z = pme.getTo().getBlockZ(); + int oldX = pme.getFrom().getBlockX(); + int oldY = pme.getFrom().getBlockY(); + int oldZ = pme.getFrom().getBlockZ(); + Set prevRegions = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(player.getWorld())).getApplicableRegions(BlockVector3.at(oldX, oldY, oldZ)).getRegions(); + Set regions = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(player.getWorld())).getApplicableRegions(BlockVector3.at(x, y, z)).getRegions(); + if (prevRegions.equals(regions)) return; + + Bukkit.getPluginManager().callEvent(new RegionEnterEvent(player, regions)); + + } +} \ No newline at end of file diff --git a/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java b/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java index c6a4c20..308826f 100644 --- a/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java +++ b/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java @@ -1,13 +1,19 @@ package net.islandearth.rpgregions.listener; +import net.islandearth.rpgregions.api.event.RegionDiscoverEvent; +import net.islandearth.rpgregions.api.event.RegionEnterEvent; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerMoveEvent; public class RegionListener implements Listener { @EventHandler - public void onMove(PlayerMoveEvent pme) { - + public void onEnter(RegionEnterEvent ree) { + + } + + @EventHandler + public void onDiscover(RegionDiscoverEvent rde) { + } }