Files
Brewery/src/com/dre/brewery/integration/barrel/WGBarrel7.java
T
2022-07-03 15:53:18 +02:00

63 lines
2.2 KiB
Java

package com.dre.brewery.integration.barrel;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
import com.dre.brewery.P;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.internal.permission.RegionPermissionModel;
import com.sk89q.worldguard.internal.platform.WorldGuardPlatform;
import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.regions.RegionQuery;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class WGBarrel7 implements WGBarrel {
private Method getWorldByName;
public WGBarrel7() {
try {
getWorldByName = WorldGuardPlatform.class.getDeclaredMethod("getWorldByName", String.class);
} catch (NoSuchMethodException e) {
getWorldByName = null;
}
}
@SuppressWarnings("deprecation")
public boolean checkAccess(Player player, Block spigot, Plugin plugin) {
WorldGuardPlugin wg = (WorldGuardPlugin) plugin;
WorldGuardPlatform platform = WorldGuard.getInstance().getPlatform();
World world;
if (getWorldByName == null) {
world = platform.getMatcher().getWorldByName(spigot.getWorld().getName());
} else {
// Workaround for an older Beta Version of WorldGuard 7.0
try {
world = ((World) getWorldByName.invoke(platform, spigot.getWorld().getName()));
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
P.p.msg(player, "Error in WorldGuard");
return false;
}
}
if (!platform.getGlobalStateManager().get(world).useRegions) return true; // Region support disabled
WorldEditPlugin we = JavaPlugin.getPlugin(WorldEditPlugin.class);
if (new RegionPermissionModel(we.wrapPlayer(player)).mayIgnoreRegionProtection(world)) return true; // Whitelisted cause
RegionQuery query = platform.getRegionContainer().createQuery();
return query.testBuild(new Location(world, spigot.getX(), spigot.getY(), spigot.getZ()), wg.wrapPlayer(player), Flags.USE, Flags.CHEST_ACCESS);
}
}