Add plotsquared protection (#6)

* getState() is already true

* add plotsquared protection

* check if isProtected first

* check if owned plot is not null

* move isProtected up one

* remove comments
This commit is contained in:
Ryder Belserion
2024-08-14 14:36:37 -04:00
committed by GitHub
parent d9ea1265bf
commit 6ba3acf5f6
4 changed files with 125 additions and 3 deletions
@@ -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<RegisteredServiceProvider<?>> registrations = getServer().getServicesManager().getRegistrations(this);
if (registrations.isEmpty()) {
getLogger().info("Registered 0 services. This plugin can be safely removed.");
@@ -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);
}
}
@@ -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