diff --git a/pom.xml b/pom.xml
index 373d0a5..54a66f8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,6 +95,11 @@
2.0.0
compile
-
+
+ com.github.GriefPrevention
+ GriefPrevention
+ 16.18.2
+ provided
+
diff --git a/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java b/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java
index f2d0991..533de57 100644
--- a/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java
+++ b/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java
@@ -1,6 +1,8 @@
package me.youhavetrouble.yardwatch;
+import me.youhavetrouble.yardwatch.hooks.GriefPreventionProtection;
import me.youhavetrouble.yardwatch.hooks.WorldGuardProtection;
+import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.ServicePriority;
import org.bukkit.plugin.java.JavaPlugin;
@@ -8,13 +10,19 @@ public final class YardWatch extends JavaPlugin {
@Override
public void onEnable() {
+ PluginManager pluginManager = getServer().getPluginManager();
- if (getServer().getPluginManager().isPluginEnabled("WorldGuard")) {
- getServer().getServicesManager().register(
- Protection.class, new WorldGuardProtection(this), this, ServicePriority.Normal
- );
- }
+ if (pluginManager.isPluginEnabled("WorldGuard")) {
+ getServer().getServicesManager().register(
+ Protection.class, new WorldGuardProtection(this), this, ServicePriority.Normal
+ );
+ }
+ if (pluginManager.isPluginEnabled("GriefPrevention")) {
+ getServer().getServicesManager().register(
+ Protection.class, new GriefPreventionProtection(this), this, ServicePriority.Normal
+ );
+ }
}
}
diff --git a/src/main/java/me/youhavetrouble/yardwatch/hooks/GriefPreventionProtection.java b/src/main/java/me/youhavetrouble/yardwatch/hooks/GriefPreventionProtection.java
new file mode 100644
index 0000000..c66ed36
--- /dev/null
+++ b/src/main/java/me/youhavetrouble/yardwatch/hooks/GriefPreventionProtection.java
@@ -0,0 +1,65 @@
+package me.youhavetrouble.yardwatch.hooks;
+
+import me.ryanhamshire.GriefPrevention.Claim;
+import me.ryanhamshire.GriefPrevention.ClaimPermission;
+import me.ryanhamshire.GriefPrevention.GriefPrevention;
+import me.youhavetrouble.yardwatch.Protection;
+import me.youhavetrouble.yardwatch.YardWatch;
+import org.bukkit.Location;
+import org.bukkit.block.BlockState;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Player;
+
+import java.util.UUID;
+
+public class GriefPreventionProtection implements Protection {
+
+ private final YardWatch plugin;
+
+ public GriefPreventionProtection(YardWatch plugin) {
+ this.plugin = plugin;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return plugin.getServer().getPluginManager().isPluginEnabled("GriefPrevention");
+ }
+
+ @Override
+ public boolean isProtected(Location location) {
+ Claim claim = GriefPrevention.instance.dataStore.getClaimAt(location, true, null);
+ if (claim == null) return false;
+ return claim.checkPermission(UUID.fromString("00000000-0000-0000-0000-000000000000"), ClaimPermission.Build, null) != null;
+ }
+
+ @Override
+ public boolean canBreakBlock(Player player, BlockState blockState) {
+ Claim claim = GriefPrevention.instance.dataStore.getClaimAt(blockState.getLocation(), true, null);
+ return claim == null || claim.hasExplicitPermission(player.getUniqueId(), ClaimPermission.Build) || claim.hasExplicitPermission(player.getUniqueId(), ClaimPermission.Edit);
+ }
+
+ @Override
+ public boolean canPlaceBlock(Player player, Location location) {
+ Claim claim = GriefPrevention.instance.dataStore.getClaimAt(location, true, null);
+ return claim == null || claim.hasExplicitPermission(player.getUniqueId(), ClaimPermission.Build) || claim.hasExplicitPermission(player.getUniqueId(), ClaimPermission.Edit);
+ }
+
+ @Override
+ public boolean canInteract(Player player, BlockState blockState) {
+ Claim claim = GriefPrevention.instance.dataStore.getClaimAt(blockState.getLocation(), true, null);
+ return claim == null || claim.hasExplicitPermission(player.getUniqueId(), ClaimPermission.Access);
+ }
+
+ @Override
+ public boolean canInteract(Player player, Entity target) {
+ Claim claim = GriefPrevention.instance.dataStore.getClaimAt(target.getLocation(), true, null);
+ return claim == null || claim.hasExplicitPermission(player.getUniqueId(), ClaimPermission.Access);
+ }
+
+ @Override
+ public boolean canDamage(Entity damager, Entity target) {
+ if (!(damager instanceof Player player)) return true;
+ Claim claim = GriefPrevention.instance.dataStore.getClaimAt(target.getLocation(), true, null);
+ return claim == null || claim.hasExplicitPermission(player.getUniqueId(), ClaimPermission.Access);
+ }
+}