Added BlockLocker plugin support

This commit is contained in:
Sn0wStorm
2020-11-26 23:42:19 +01:00
parent 8758e0c603
commit 0b9b364f28
7 changed files with 177 additions and 23 deletions
@@ -6,6 +6,7 @@ import com.dre.brewery.api.events.barrel.BarrelAccessEvent;
import com.dre.brewery.api.events.barrel.BarrelDestroyEvent;
import com.dre.brewery.api.events.barrel.BarrelRemoveEvent;
import com.dre.brewery.filedata.BConfig;
import com.dre.brewery.integration.barrel.BlocklockerBarrel;
import com.dre.brewery.integration.barrel.GriefPreventionBarrel;
import com.dre.brewery.integration.barrel.LWCBarrel;
import com.dre.brewery.integration.barrel.LogBlockBarrel;
@@ -175,6 +176,32 @@ public class IntegrationListener implements Listener {
}
}
if (BConfig.useBlocklocker) {
if (P.p.getServer().getPluginManager().isPluginEnabled("BlockLocker")) {
try {
if (!BlocklockerBarrel.checkAccess(event)) {
P.p.msg(event.getPlayer(), P.p.languageReader.get("Error_NoBarrelAccess"));
event.setCancelled(true);
return;
}
} catch (Throwable e) {
event.setCancelled(true);
P.p.errorLog("Failed to Check BlockLocker for Barrel Open Permissions!");
P.p.errorLog("Brewery was tested with BlockLocker v1.8.2");
P.p.errorLog("Disable the BlockLocker support in the config and do /brew reload");
e.printStackTrace();
Player player = event.getPlayer();
if (player.hasPermission("brewery.admin") || player.hasPermission("brewery.mod")) {
P.p.msg(player, "&cBlockLocker check Error, Brewery was tested with v1.8.2 of BlockLocker");
P.p.msg(player, "&cSet &7useBlockLocker: false &cin the config and /brew reload");
} else {
P.p.msg(player, "&cError opening Barrel, please report to an Admin!");
}
return;
}
}
}
if (BConfig.virtualChestPerms) {
Player player = event.getPlayer();
BlockState originalBlockState = event.getClickedBlock().getState();
@@ -218,8 +245,10 @@ public class IntegrationListener implements Listener {
if (!BConfig.useLWC) return;
if (event.hasPlayer()) {
Player player = event.getPlayerOptional();
assert player != null;
try {
if (LWCBarrel.denyDestroy(event.getPlayerOptional(), event.getBarrel())) {
if (LWCBarrel.denyDestroy(player, event.getBarrel())) {
event.setCancelled(true);
}
} catch (Throwable e) {
@@ -228,7 +257,6 @@ public class IntegrationListener implements Listener {
P.p.errorLog("Brewery was tested with version 4.5.0 of LWC!");
P.p.errorLog("Disable the LWC support in the config and do /brew reload");
e.printStackTrace();
Player player = event.getPlayerOptional();
if (player.hasPermission("brewery.admin") || player.hasPermission("brewery.mod")) {
P.p.msg(player, "&cLWC check Error, Brewery was tested with up to v4.5.0 of LWC");
P.p.msg(player, "&cSet &7useLWC: false &cin the config and /brew reload");
@@ -0,0 +1,91 @@
package com.dre.brewery.integration.barrel;
import com.dre.brewery.Barrel;
import com.dre.brewery.BarrelBody;
import com.dre.brewery.P;
import com.dre.brewery.api.events.barrel.BarrelAccessEvent;
import com.dre.brewery.filedata.BConfig;
import com.dre.brewery.utility.LegacyUtil;
import nl.rutgerkok.blocklocker.BlockLockerAPIv2;
import nl.rutgerkok.blocklocker.ProtectableBlocksSettings;
import nl.rutgerkok.blocklocker.ProtectionType;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import java.util.List;
public class BlocklockerBarrel implements ProtectableBlocksSettings {
private static Block lastBarrelSign;
@Override
public boolean canProtect(Block block) {
return isOrWillCreateBarrel(block);
}
@Override
public boolean canProtect(ProtectionType protectionType, Block block) {
if (protectionType != ProtectionType.CONTAINER) return false;
return isOrWillCreateBarrel(block);
}
public boolean isOrWillCreateBarrel(Block block) {
if (!P.p.isEnabled() || !BConfig.useBlocklocker) {
return false;
}
if (!LegacyUtil.isWoodPlanks(block.getType()) && !LegacyUtil.isWoodStairs(block.getType())) {
// Can only be a barrel if it's a planks block
return false;
}
if (Barrel.getByWood(block) != null) {
// Barrel already exists
return true;
}
if (lastBarrelSign == null) {
// No player wants to create a Barrel
return false;
}
for (BlockFace face : new BlockFace[] {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}) {
Block sign = block.getRelative(face);
if (lastBarrelSign.equals(sign)) {
Block spigot = BarrelBody.getSpigotOfSign(sign);
byte signoffset = 0;
if (!spigot.equals(sign)) {
signoffset = (byte) (sign.getY() - spigot.getY());
}
Barrel barrel = new Barrel(spigot, signoffset);
return barrel.getBody().getBrokenBlock(true) == null;
}
}
return false;
}
public static boolean checkAccess(BarrelAccessEvent event) {
Block sign = event.getBarrel().getBody().getSignOfSpigot();
if (!LegacyUtil.isSign(sign.getType())) {
return true;
}
return BlockLockerAPIv2.isAllowed(event.getPlayer(), sign, true);
}
public static void createdBarrelSign(Block sign) {
// The Player created a sign with "Barrel" on it, he want's to create a barrel
lastBarrelSign = sign;
}
public static void clearBarrelSign() {
lastBarrelSign = null;
}
public static void registerBarrelAsProtectable() {
try {
List<ProtectableBlocksSettings> extraProtectables = BlockLockerAPIv2.getPlugin().getChestSettings().getExtraProtectables();
if (extraProtectables.stream().noneMatch(blockSettings -> blockSettings instanceof BlocklockerBarrel)) {
extraProtectables.add(new BlocklockerBarrel());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}