From 36bb2e2dd3382b43efd2eaee0d83ef45113dc21e Mon Sep 17 00:00:00 2001 From: ahdg <36436808+ahdg6@users.noreply.github.com> Date: Mon, 30 Jan 2023 13:02:21 +0800 Subject: [PATCH] Add GriefDefender integration --- .../api/integrations/IntegrationType.java | 1 + build.gradle.kts | 3 + modern/build.gradle.kts | 1 + .../GriefDefenderIntegration.java | 90 +++++++++++++++++++ rpgregions/src/main/resources/config.yml | 2 +- rpgregions/src/main/resources/plugin.yml | 2 +- 6 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 modern/src/main/java/net/islandearth/rpgregions/api/integrations/griefdefender/GriefDefenderIntegration.java diff --git a/api/src/main/java/net/islandearth/rpgregions/api/integrations/IntegrationType.java b/api/src/main/java/net/islandearth/rpgregions/api/integrations/IntegrationType.java index 5435e69..72c77d3 100644 --- a/api/src/main/java/net/islandearth/rpgregions/api/integrations/IntegrationType.java +++ b/api/src/main/java/net/islandearth/rpgregions/api/integrations/IntegrationType.java @@ -11,6 +11,7 @@ public enum IntegrationType { WORLDGUARD("WorldGuard", "worldguard.WorldGuardIntegration"), RESIDENCE("Residence", "residence.ResidenceIntegration"), GRIEFPREVENTION("GriefPrevention", "griefprevention.GriefPreventionIntegration"), + GRIEFDEFENDER("GriefDefender", "griefdefender.GriefDefenderIntegration"), LANDS("Lands", "lands.LandsIntegration"), ULTRAREGIONS("UltraRegions", "ultraregions.UltraRegionsIntegration"), RPGREGIONS("RPGRegions", "rpgregions.RPGRegionsIntegration"); diff --git a/build.gradle.kts b/build.gradle.kts index 21932dc..2a2f6ed 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -55,6 +55,9 @@ allprojects { // Dynmap maven("https://repo.mikeprimm.com") + // GriefDefender + maven("https://repo.glaremasters.me/repository/bloodshot") + flatDir { dir("../libraries") } } diff --git a/modern/build.gradle.kts b/modern/build.gradle.kts index 63592fe..5611490 100644 --- a/modern/build.gradle.kts +++ b/modern/build.gradle.kts @@ -19,5 +19,6 @@ dependencies { compileOnly(":Residence4.9.2.2") // residence compileOnly(":GriefPrevention") // griefprevention compileOnly("com.github.angeschossen:LandsAPI:6.0.2") // lands + compileOnly("com.griefdefender:api:2.1.0-SNAPSHOT") // GriefDefender if (ultraRegionsSupport) compileOnly(":UltraRegions") // ultraregions } \ No newline at end of file diff --git a/modern/src/main/java/net/islandearth/rpgregions/api/integrations/griefdefender/GriefDefenderIntegration.java b/modern/src/main/java/net/islandearth/rpgregions/api/integrations/griefdefender/GriefDefenderIntegration.java new file mode 100644 index 0000000..49599ef --- /dev/null +++ b/modern/src/main/java/net/islandearth/rpgregions/api/integrations/griefdefender/GriefDefenderIntegration.java @@ -0,0 +1,90 @@ +package net.islandearth.rpgregions.api.integrations.griefdefender; + +import com.griefdefender.api.GriefDefender; +import com.griefdefender.api.claim.Claim; +import com.griefdefender.lib.flowpowered.math.vector.Vector3i; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; +import net.islandearth.rpgregions.api.events.RegionsEnterEvent; +import net.islandearth.rpgregions.api.integrations.IntegrationManager; +import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerMoveEvent; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; + +import java.util.*; + +public class GriefDefenderIntegration implements IntegrationManager { + + private final IRPGRegionsAPI plugin; + + public GriefDefenderIntegration(IRPGRegionsAPI plugin) { + this.plugin = plugin; + } + + @Override + public boolean isInRegion(Location location) { + Claim claim = GriefDefender.getCore().getClaimAt(location); + return claim != null && !claim.isWilderness(); + } + + @Override + public void handleMove(PlayerMoveEvent pme) { + Player player = pme.getPlayer(); + if (pme.getTo() == null) return; + Optional getPrioritisedRegion = getPrioritisedRegion(pme.getTo()); + if (!getPrioritisedRegion.isPresent()) return; + Claim oldClaim = GriefDefender.getCore().getClaimAt(pme.getFrom()); + if (oldClaim == null || oldClaim.isWilderness()) return; + Claim claim = GriefDefender.getCore().getClaimAt(pme.getTo()); + + List stringClaim = new ArrayList<>(); + if (!checkRequirements(pme, getPrioritisedRegion.get(), "" + claim.getUniqueId())) return; + + stringClaim.add("" + claim.getUniqueId()); + Bukkit.getPluginManager().callEvent(new RegionsEnterEvent(player, stringClaim, !oldClaim.equals(claim))); + } + + @Override + public Optional getPrioritisedRegion(Location location) { + Claim claim = GriefDefender.getCore().getClaimAt(location); + if (claim == null || claim.isWilderness()) return Optional.empty(); + return plugin.getManagers().getRegionsCache().getConfiguredRegion("" + claim.getUniqueId()); + } + + @Override + public boolean exists(World world, String region) { + final Claim claim = GriefDefender.getCore().getClaim(UUID.fromString(region)); + return claim != null && !claim.isWilderness(); + } + + @Override + public Set getAllRegionNames(World world) { + Set claimsString = new HashSet<>(); + if (!GriefDefender.getCore().isEnabled(world.getUID())) return claimsString; + for (Claim claim : GriefDefender.getCore().getClaimManager( world.getUID() ).getWorldClaims()) { + claimsString.add("" + claim.getUniqueId()); + } + return claimsString; + } + + @Override + public @NonNull List getBoundingBoxPoints(Location regionLocation, @Nullable String regionId) { + List points = new ArrayList<>(); + Claim claim = GriefDefender.getCore().getClaimAt(regionLocation); + if (claim == null) return points; + if (regionId != null && !String.valueOf(claim.getUniqueId()).equals(regionId)) { + return points; + } + + final Vector3i max = claim.getGreaterBoundaryCorner(); + final Vector3i min = claim.getLesserBoundaryCorner(); + World world = Bukkit.getWorld(claim.getWorldUniqueId()); + points.add(new Location(world, max.getX(), max.getY(), max.getZ())); + points.add(new Location(world, min.getX(), min.getY(), min.getZ())); + return points; + } +} diff --git a/rpgregions/src/main/resources/config.yml b/rpgregions/src/main/resources/config.yml index fa75b46..2d39d49 100644 --- a/rpgregions/src/main/resources/config.yml +++ b/rpgregions/src/main/resources/config.yml @@ -22,7 +22,7 @@ settings: debug: false # Enables debug output. Will spam console! disable-slow-storage-warn: false # Should we send a warning if storage response times are slow? integration: - name: RPGRegions # Name of the integration: WorldGuard, Residence, GriefPrevention, UltraRegions, Lands, RPGRegions + name: RPGRegions # Name of the integration: WorldGuard, Residence, GriefPrevention, GriefDefender, UltraRegions, Lands, RPGRegions external: dynmap: true # Enable dynmap support storage: diff --git a/rpgregions/src/main/resources/plugin.yml b/rpgregions/src/main/resources/plugin.yml index b548462..83d5e17 100644 --- a/rpgregions/src/main/resources/plugin.yml +++ b/rpgregions/src/main/resources/plugin.yml @@ -4,7 +4,7 @@ main: net.islandearth.rpgregions.RPGRegions api-version: '1.16' libraries: - "com.zaxxer:HikariCP:4.0.3" # database -softdepend: [Hyperverse, Multiverse, UltraRegions, WorldGuard, PlaceholderAPI, HeadDatabase, Residence, Plan, GriefPrevention, Vault, MythicMobs, AlonsoLevels, Dynmap, ProtocolLib, Quests, BetonQuest, Lands, MMOCore] +softdepend: [Hyperverse, Multiverse, UltraRegions, WorldGuard, PlaceholderAPI, HeadDatabase, Residence, Plan, GriefPrevention, GriefDefender, Vault, MythicMobs, AlonsoLevels, Dynmap, ProtocolLib, Quests, BetonQuest, Lands, MMOCore] authors: [SamB440] description: Discoverable regions website: https://fortitude.islandearth.net \ No newline at end of file