From e0cda42350ca89397e75eea7c1877b61835502cf Mon Sep 17 00:00:00 2001 From: SamB440 Date: Tue, 16 Mar 2021 21:13:08 +0000 Subject: [PATCH] Fixes #24 --- .../rpgregions/api/events/RegionsEnterEvent.java | 11 +++++++++++ .../worldguard/WorldGuardLegacyIntegration.java | 7 ++----- .../integrations/residence/ResidenceIntegration.java | 7 +------ .../worldguard/WorldGuardIntegration.java | 6 +++++- .../rpgregions/listener/RegionListener.java | 5 +++-- 5 files changed, 22 insertions(+), 14 deletions(-) diff --git a/api/src/main/java/net/islandearth/rpgregions/api/events/RegionsEnterEvent.java b/api/src/main/java/net/islandearth/rpgregions/api/events/RegionsEnterEvent.java index 27102d4..bc31d1e 100644 --- a/api/src/main/java/net/islandearth/rpgregions/api/events/RegionsEnterEvent.java +++ b/api/src/main/java/net/islandearth/rpgregions/api/events/RegionsEnterEvent.java @@ -4,6 +4,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import java.util.Collections; import java.util.List; public class RegionsEnterEvent extends Event { @@ -19,6 +20,12 @@ public class RegionsEnterEvent extends Event { this.hasChanged = hasChanged; } + public RegionsEnterEvent(Player player, String region, boolean hasChanged) { + this.player = player; + this.regions = Collections.singletonList(region); + this.hasChanged = hasChanged; + } + public Player getPlayer() { return player; } @@ -27,6 +34,10 @@ public class RegionsEnterEvent extends Event { return regions; } + public String getPriority() { + return regions.get(0); + } + public boolean hasChanged() { return hasChanged; } diff --git a/legacy/src/main/java/net/islandearth/rpgregions/api/integrations/worldguard/WorldGuardLegacyIntegration.java b/legacy/src/main/java/net/islandearth/rpgregions/api/integrations/worldguard/WorldGuardLegacyIntegration.java index cca913f..2134dfd 100644 --- a/legacy/src/main/java/net/islandearth/rpgregions/api/integrations/worldguard/WorldGuardLegacyIntegration.java +++ b/legacy/src/main/java/net/islandearth/rpgregions/api/integrations/worldguard/WorldGuardLegacyIntegration.java @@ -14,8 +14,6 @@ import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerMoveEvent; -import java.util.ArrayList; -import java.util.List; import java.util.Set; public class WorldGuardLegacyIntegration implements IntegrationManager { @@ -43,7 +41,6 @@ public class WorldGuardLegacyIntegration implements IntegrationManager { Set oldRegions = this.getProtectedRegions(new Location(player.getWorld(), oldX, oldY, oldZ)); Set regions = this.getProtectedRegions(new Location(player.getWorld(), x, y, z)); - List stringRegions = new ArrayList<>(); regions.forEach(region -> { ConfiguredRegion configuredRegion = plugin.getManagers().getRegionsCache().getConfiguredRegion(region.getId()); if (configuredRegion != null && configuredRegion.getRequirements() != null) { @@ -55,9 +52,9 @@ public class WorldGuardLegacyIntegration implements IntegrationManager { } } } - stringRegions.add(region.getId()); }); - Bukkit.getPluginManager().callEvent(new RegionsEnterEvent(player, stringRegions, !oldRegions.equals(regions))); + ConfiguredRegion prioritisedRegion = getPrioritisedRegion(pme.getTo()); + Bukkit.getPluginManager().callEvent(new RegionsEnterEvent(player, prioritisedRegion.getId(), !oldRegions.equals(regions))); } @Override diff --git a/modern/src/main/java/net/islandearth/rpgregions/api/integrations/residence/ResidenceIntegration.java b/modern/src/main/java/net/islandearth/rpgregions/api/integrations/residence/ResidenceIntegration.java index 066de4b..463aeff 100644 --- a/modern/src/main/java/net/islandearth/rpgregions/api/integrations/residence/ResidenceIntegration.java +++ b/modern/src/main/java/net/islandearth/rpgregions/api/integrations/residence/ResidenceIntegration.java @@ -12,8 +12,6 @@ import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerMoveEvent; -import java.util.ArrayList; -import java.util.List; import java.util.Set; public class ResidenceIntegration implements IntegrationManager { @@ -36,12 +34,9 @@ public class ResidenceIntegration implements IntegrationManager { ClaimedResidence oldResidence = Residence.getInstance().getResidenceManager().getByLoc(pme.getFrom()); ClaimedResidence residence = Residence.getInstance().getResidenceManager().getByLoc(pme.getTo()); if (oldResidence == null || residence == null) return; - - List stringResidence = new ArrayList<>(); if (!checkRequirements(pme, residence.getName())) return; - stringResidence.add(residence.getName()); - Bukkit.getPluginManager().callEvent(new RegionsEnterEvent(player, stringResidence, !oldResidence.equals(residence))); + Bukkit.getPluginManager().callEvent(new RegionsEnterEvent(player, residence.getName(), !oldResidence.equals(residence))); } @Override diff --git a/modern/src/main/java/net/islandearth/rpgregions/api/integrations/worldguard/WorldGuardIntegration.java b/modern/src/main/java/net/islandearth/rpgregions/api/integrations/worldguard/WorldGuardIntegration.java index ade383d..ecdf375 100644 --- a/modern/src/main/java/net/islandearth/rpgregions/api/integrations/worldguard/WorldGuardIntegration.java +++ b/modern/src/main/java/net/islandearth/rpgregions/api/integrations/worldguard/WorldGuardIntegration.java @@ -33,6 +33,7 @@ public class WorldGuardIntegration implements IntegrationManager { @Override public void handleMove(PlayerMoveEvent pme) { + if (pme.getTo() == null) return; Player player = pme.getPlayer(); int oldX = pme.getFrom().getBlockX(); int oldY = pme.getFrom().getBlockY(); @@ -43,11 +44,14 @@ public class WorldGuardIntegration implements IntegrationManager { Set oldRegions = this.getProtectedRegions(new Location(player.getWorld(), oldX, oldY, oldZ)); Set regions = this.getProtectedRegions(new Location(player.getWorld(), x, y, z)); + String prioritisedRegion = getPrioritisedRegion(pme.getTo()).getId(); List stringRegions = new ArrayList<>(); regions.forEach(region -> { - if (checkRequirements(pme, region.getId())) stringRegions.add(region.getId()); + if (!prioritisedRegion.equals(region.getId()) + && checkRequirements(pme, region.getId())) stringRegions.add(region.getId()); }); + stringRegions.add(0, getPrioritisedRegion(pme.getTo()).getId()); Bukkit.getPluginManager().callEvent(new RegionsEnterEvent(player, stringRegions, !oldRegions.equals(regions))); } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java b/rpgregions/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java index 81d632a..51d5db6 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java @@ -43,6 +43,7 @@ public class RegionListener implements Listener { for (String region : event.getRegions()) { if (plugin.getManagers().getRegionsCache().getConfiguredRegions().containsKey(region)) { boolean has = false; + boolean prioritised = event.getPriority().equals(region); for (Discovery discoveredRegion : account.getDiscoveredRegions().values()) { if (discoveredRegion.getRegion().equals(region)) { has = true; @@ -53,11 +54,11 @@ public class RegionListener implements Listener { ConfiguredRegion configuredRegion = plugin.getManagers().getRegionsCache().getConfiguredRegions().get(region); this.checkEffects(configuredRegion, player); - if (configuredRegion.alwaysShowTitles() && event.hasChanged() && has) { + if (configuredRegion.alwaysShowTitles() && event.hasChanged() && has && prioritised) { this.sendTitles(player, configuredRegion, false); } - if (!has && configuredRegion.isDiscoverable()) { + if (!has && configuredRegion.isDiscoverable() && prioritised) { LocalDateTime date = LocalDateTime.now(); String formattedDate = date.format(format); account.addDiscovery(new WorldDiscovery(formattedDate, region));