From e30c890c5d299f0c638bc6150f2a5e78b49d8234 Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 15 May 2020 14:44:32 +0100 Subject: [PATCH] Implements #14 --- modern/build.gradle | 1 + .../GriefPreventionIntegration.java | 70 +++++++++++++++++++ .../api/integrations/IntegrationType.java | 3 +- 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 modern/src/main/java/net/islandearth/rpgregions/api/integrations/griefprevention/GriefPreventionIntegration.java diff --git a/modern/build.gradle b/modern/build.gradle index 64ff1a3..94f69c1 100644 --- a/modern/build.gradle +++ b/modern/build.gradle @@ -41,6 +41,7 @@ dependencies { compileOnly 'org.spigotmc:spigot-api:1.13-R0.1-SNAPSHOT' // spigot compileOnly 'net.islandearth:languagy:2.0.0-SNAPSHOT' // languagy compileOnly 'net.zrips:residence:4.9.0.6' // residence + compileOnly 'me.ryanhamshire:griefprevention:16.13.0' // griefprevention compileOnly project(':api') compileOnly project(':rpgregions') } diff --git a/modern/src/main/java/net/islandearth/rpgregions/api/integrations/griefprevention/GriefPreventionIntegration.java b/modern/src/main/java/net/islandearth/rpgregions/api/integrations/griefprevention/GriefPreventionIntegration.java new file mode 100644 index 0000000..64a7fb2 --- /dev/null +++ b/modern/src/main/java/net/islandearth/rpgregions/api/integrations/griefprevention/GriefPreventionIntegration.java @@ -0,0 +1,70 @@ +package net.islandearth.rpgregions.api.integrations.griefprevention; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import me.ryanhamshire.GriefPrevention.Claim; +import me.ryanhamshire.GriefPrevention.GriefPrevention; +import net.islandearth.rpgregions.RPGRegions; +import net.islandearth.rpgregions.api.events.RegionsEnterEvent; +import net.islandearth.rpgregions.api.integrations.IntegrationManager; +import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion; +import net.islandearth.rpgregions.requirements.RegionRequirement; +import net.islandearth.rpgregions.translation.Translations; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerMoveEvent; + +import java.util.ArrayList; +import java.util.List; + +public class GriefPreventionIntegration implements IntegrationManager { + + private final RPGRegions plugin; + + public GriefPreventionIntegration(RPGRegions plugin) { + this.plugin = plugin; + } + + @Override + public boolean isInRegion(Location location) { + Claim claim = GriefPrevention.instance.dataStore.getClaimAt(location, false, null); + return claim != null; + } + + @Override + public void handleMove(PlayerMoveEvent pme) { + Player player = pme.getPlayer(); + Claim oldClaim = GriefPrevention.instance.dataStore.getClaimAt(pme.getFrom(), false, null); + Claim claim = GriefPrevention.instance.dataStore.getClaimAt(pme.getTo(), false, null); + if (oldClaim == null || claim == null) return; + + List stringClaim = new ArrayList<>(); + ConfiguredRegion configuredRegion = plugin.getManagers().getRegionsCache().getConfiguredRegion("" + claim.getID()); + if (configuredRegion != null && configuredRegion.getRequirements() != null) { + for (RegionRequirement requirement : configuredRegion.getRequirements()) { + if (!player.hasPermission("rpgregions.bypassentry") && !requirement.meetsRequirements(player)) { + requirement.getPreventType().prevent(pme); + Translations.CANNOT_ENTER.send(player, requirement.getText(player)); + return; + } + } + } + stringClaim.add("" + claim.getID()); + + Bukkit.getPluginManager().callEvent(new RegionsEnterEvent(player, stringClaim, !oldClaim.equals(claim))); + } + + @Override + public ConfiguredRegion getPrioritisedRegion(Location location) { + Claim claim = GriefPrevention.instance.dataStore.getClaimAt(location, false, null); + return plugin.getManagers().getRegionsCache().getConfiguredRegions().get("" + claim.getID()); + } + + @Override + public boolean exists(World location, String region) { + Claim claim = GriefPrevention.instance.dataStore.getClaim(Long.parseLong(region)); + return claim != null; + } +} diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/IntegrationType.java b/rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/IntegrationType.java index d4cb9dc..e2cfc25 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/IntegrationType.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/IntegrationType.java @@ -9,7 +9,8 @@ import java.util.Optional; public enum IntegrationType { WORLDGUARD_LEGACY("worldguard.WorldGuardLegacyIntegration"), WORLDGUARD("worldguard.WorldGuardIntegration"), - RESIDENCE("residence.ResidenceIntegration"); + RESIDENCE("residence.ResidenceIntegration"), + GRIEFPREVENTION("griefprevention.GriefPrevention"); private final String path;