diff --git a/pom.xml b/pom.xml index d1bc5b8..a387f1f 100644 --- a/pom.xml +++ b/pom.xml @@ -96,6 +96,18 @@ + + + + com.intellectualsites.bom + bom-newest + 1.48 + import + pom + + + + com.destroystokyo.paper @@ -151,5 +163,11 @@ 0.100.1.0 provided + + com.intellectualsites.plotsquared + plotsquared-core + 7.3.8 + provided + diff --git a/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java b/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java index 4e56624..75f8342 100644 --- a/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java +++ b/src/main/java/me/youhavetrouble/yardwatch/YardWatch.java @@ -5,6 +5,7 @@ import me.youhavetrouble.yardwatch.commands.YardWatchCommand; import me.youhavetrouble.yardwatch.hooks.FactionsUUIDProtection; import me.youhavetrouble.yardwatch.hooks.GriefPreventionProtection; import me.youhavetrouble.yardwatch.hooks.LWCXProtection; +import me.youhavetrouble.yardwatch.hooks.PlotSquaredProtection; import me.youhavetrouble.yardwatch.hooks.SuperiorSkyBlockProtection; import me.youhavetrouble.yardwatch.hooks.TownyProtection; import me.youhavetrouble.yardwatch.hooks.WorldGuardProtection; @@ -83,6 +84,13 @@ public final class YardWatch extends JavaPlugin { ); } + if (shouldRegisterService("PlotSquared")) { + getLogger().info("Registering PlotSquared service."); + getServer().getServicesManager().register( + Protection.class, new PlotSquaredProtection(this), this, ServicePriority.Normal + ); + } + List> registrations = getServer().getServicesManager().getRegistrations(this); if (registrations.isEmpty()) { getLogger().info("Registered 0 services. This plugin can be safely removed."); diff --git a/src/main/java/me/youhavetrouble/yardwatch/hooks/PlotSquaredProtection.java b/src/main/java/me/youhavetrouble/yardwatch/hooks/PlotSquaredProtection.java new file mode 100644 index 0000000..dc9a4ea --- /dev/null +++ b/src/main/java/me/youhavetrouble/yardwatch/hooks/PlotSquaredProtection.java @@ -0,0 +1,97 @@ +package me.youhavetrouble.yardwatch.hooks; + +import com.plotsquared.core.plot.Plot; +import com.plotsquared.core.plot.flag.implementations.PvpFlag; +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 org.checkerframework.checker.nullness.qual.NonNull; + +public class PlotSquaredProtection implements Protection { + + private final YardWatch plugin; + + public PlotSquaredProtection(YardWatch plugin) { + this.plugin = plugin; + } + + @Override + public boolean isEnabled() { + return this.plugin.getServer().getPluginManager().isPluginEnabled("PlotSquared"); + } + + @Override + public boolean isProtected(final Location location) { + if (!isEnabled()) return false; + + final com.plotsquared.core.location.Location arg1 = getLocation(location); + + return arg1.isPlotArea() || arg1.isPlotRoad() || arg1.isUnownedPlotArea() || arg1.getOwnedPlot() != null; + } + + @Override + public boolean canBreakBlock(final Player player, final BlockState blockState) { + if (!isEnabled()) return true; + + final Location blockLocation = blockState.getLocation(); + final com.plotsquared.core.location.@NonNull Location location = getLocation(blockLocation); + + final Plot plot = location.getOwnedPlot(); + + if (plot == null) return isProtected(blockLocation); + + return plot.isAdded(player.getUniqueId()); + } + + @Override + public boolean canPlaceBlock(final Player player, final Location location) { + return canBreakBlock(player, location.getBlock().getState()); + } + + @Override + public boolean canInteract(final Player player, final BlockState blockState) { + if (!isEnabled()) return true; + + final Location location = blockState.getLocation(); + + com.plotsquared.core.location.@NonNull Location plotLocation = getLocation(location); + + final Plot plot = plotLocation.getOwnedPlot(); + + if (plot == null) return isProtected(location); + + return plot.isAdded(player.getUniqueId()); + } + + @Override + public boolean canInteract(final Player player, final Entity target) { + return canInteract(player, target.getLocation().getBlock().getState()); + } + + @Override + public boolean canDamage(final Entity damager, final Entity target) { + if (!isEnabled() || !(damager instanceof Player)) return true; + + final Location location = target.getLocation(); + + com.plotsquared.core.location.@NonNull Location plotLocation = getLocation(location); + + final Plot plot = plotLocation.getOwnedPlot(); + + if (plot == null) return isProtected(location); + + return plot.getFlag(PvpFlag.class); + } + + private com.plotsquared.core.location.@NonNull Location getLocation(final Location location) { + final String world = location.getWorld().getName(); + final int x = (int) location.getX(); + final int y = (int) location.getY(); + final int z = (int) location.getZ(); + + return com.plotsquared.core.location.Location.at(world, x, y, z); + } +} \ No newline at end of file diff --git a/src/main/java/me/youhavetrouble/yardwatch/hooks/TownyProtection.java b/src/main/java/me/youhavetrouble/yardwatch/hooks/TownyProtection.java index a8d2cf0..48b76e6 100644 --- a/src/main/java/me/youhavetrouble/yardwatch/hooks/TownyProtection.java +++ b/src/main/java/me/youhavetrouble/yardwatch/hooks/TownyProtection.java @@ -3,7 +3,6 @@ package me.youhavetrouble.yardwatch.hooks; import com.palmergames.bukkit.towny.TownyAPI; import com.palmergames.bukkit.towny.object.Resident; import com.palmergames.bukkit.towny.object.TownBlock; -import com.palmergames.bukkit.towny.object.TownyPermission; import com.palmergames.bukkit.towny.utils.CombatUtil; import me.youhavetrouble.yardwatch.Protection; import me.youhavetrouble.yardwatch.YardWatch; @@ -45,7 +44,7 @@ public class TownyProtection implements Protection { @Override public boolean canPlaceBlock(Player player, Location location) { - return canInteract(player, location.getBlock().getState(true)); + return canInteract(player, location.getBlock().getState()); } @Override @@ -63,7 +62,7 @@ public class TownyProtection implements Protection { @Override public boolean canInteract(Player player, Entity target) { - return canInteract(player, target.getLocation().getBlock().getState(true)); + return canInteract(player, target.getLocation().getBlock().getState()); } @Override