Files
YardWatch/src/main/java/me/youhavetrouble/yardwatch/hooks/WorldGuardProtection.java
T
Hüseyin Serhat Han afdb3a0e3e Query command & Worldguard null parameter exception fix (#4)
* query command + fix wg exception

* remove empty statement and unused imports

* added feedback for case when there are no protections in queried location

---------

Co-authored-by: YouHaveTrouble <youhavetrouble@youhavetrouble.me>
2024-07-19 17:49:25 +02:00

94 lines
4.2 KiB
Java

package me.youhavetrouble.yardwatch.hooks;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.domains.Association;
import com.sk89q.worldguard.protection.association.Associables;
import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.regions.RegionContainer;
import com.sk89q.worldguard.protection.regions.RegionQuery;
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;
public class WorldGuardProtection implements Protection {
private final YardWatch plugin;
public WorldGuardProtection(YardWatch plugin) {
this.plugin = plugin;
}
@Override
public boolean isEnabled() {
return plugin.getServer().getPluginManager().isPluginEnabled("WorldGuard");
}
@Override
public boolean isProtected(Location location) {
if (!isEnabled()) return false;
if (location.getWorld() == null) return false;
com.sk89q.worldedit.util.Location wgLocation = BukkitAdapter.adapt(location);
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
return query.testBuild(wgLocation, Associables.constant(Association.NON_MEMBER));
}
@Override
public boolean canBreakBlock(Player player, BlockState blockState) {
if (!isEnabled()) return true;
Location location = blockState.getLocation();
com.sk89q.worldedit.util.Location wgLocation = BukkitAdapter.adapt(location);
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player, true);
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
return query.testState(wgLocation, localPlayer, Flags.BUILD);
}
@Override
public boolean canPlaceBlock(Player player, Location location) {
if (!isEnabled()) return true;
com.sk89q.worldedit.util.Location wgLocation = BukkitAdapter.adapt(location);
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player, true);
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
return query.testState(wgLocation, localPlayer, Flags.BUILD);
}
@Override
public boolean canInteract(Player player, BlockState blockState) {
if (!isEnabled()) return true;
com.sk89q.worldedit.util.Location wgLocation = BukkitAdapter.adapt(blockState.getLocation());
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player, true);
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
return query.testState(wgLocation, localPlayer, Flags.INTERACT);
}
@Override
public boolean canInteract(Player player, Entity entity) {
if (!isEnabled()) return true;
com.sk89q.worldedit.util.Location wgLocation = BukkitAdapter.adapt(entity.getLocation());
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player, true);
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
return query.testState(wgLocation, localPlayer, Flags.INTERACT);
}
@Override
public boolean canDamage(Entity attacker, Entity target) {
if (!isEnabled()) return true;
if (!(attacker instanceof Player player)) return true;
com.sk89q.worldedit.util.Location wgLocation = BukkitAdapter.adapt(target.getLocation());
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player, true);
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
return query.testState(wgLocation, localPlayer, Flags.INTERACT);
}
}