Skip to content

Commit 0b9b364

Browse files
committed
Added BlockLocker plugin support
1 parent 8758e0c commit 0b9b364

File tree

7 files changed

+177
-23
lines changed

7 files changed

+177
-23
lines changed

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,11 @@
251251
<version>2.12.0</version>
252252
<scope>provided</scope>
253253
</dependency>
254+
<dependency>
255+
<groupId>com.github.rutgerkok</groupId>
256+
<artifactId>BlockLocker</artifactId>
257+
<version>eb78e99e72</version>
258+
</dependency>
254259
<dependency>
255260
<groupId>org.bstats</groupId>
256261
<artifactId>bstats-bukkit</artifactId>

resources/plugin.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: Brewery
22
version: 2.1.2
33
main: com.dre.brewery.P
4-
softdepend: [LWC, LogBlock, WorldGuard, GriefPrevention, Vault, ChestShop, Shopkeepers, Towny]
4+
softdepend: [LWC, LogBlock, WorldGuard, GriefPrevention, Vault, ChestShop, Shopkeepers, Towny, BlockLocker]
55
authors: [Milan Albrecht, Frank Baumann, ProgrammerDan, Daniel Saukel]
66
api-version: 1.13
77
commands:

src/com/dre/brewery/P.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.dre.brewery.integration.ChestShopListener;
99
import com.dre.brewery.integration.IntegrationListener;
1010
import com.dre.brewery.integration.ShopKeepersListener;
11+
import com.dre.brewery.integration.barrel.BlocklockerBarrel;
1112
import com.dre.brewery.integration.barrel.LogBlockBarrel;
1213
import com.dre.brewery.listeners.*;
1314
import com.dre.brewery.recipe.*;
@@ -507,6 +508,7 @@ public void run() {
507508
Barrel.onUpdate();// runs every min to check and update ageing time
508509
long t3 = System.nanoTime();
509510
if (use1_14) MCBarrel.onUpdate();
511+
if (BConfig.useBlocklocker) BlocklockerBarrel.clearBarrelSign();
510512
long t4 = System.nanoTime();
511513
BPlayer.onUpdate();// updates players drunkeness
512514

src/com/dre/brewery/filedata/BConfig.java

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.dre.brewery.MCBarrel;
77
import com.dre.brewery.P;
88
import com.dre.brewery.api.events.ConfigLoadEvent;
9+
import com.dre.brewery.integration.barrel.BlocklockerBarrel;
910
import com.dre.brewery.integration.barrel.WGBarrel;
1011
import com.dre.brewery.integration.barrel.WGBarrel5;
1112
import com.dre.brewery.integration.barrel.WGBarrel6;
@@ -50,6 +51,7 @@ public class BConfig {
5051
public static boolean useLB; //LogBlock
5152
public static boolean useGP; //GriefPrevention
5253
public static boolean useTowny; //Towny
54+
public static boolean useBlocklocker; //LockBlocker
5355
public static boolean hasVault; // Vault
5456
public static boolean useCitadel; // CivCraft/DevotedMC Citadel
5557
public static boolean useGMInventories; // GamemodeInventories
@@ -199,31 +201,13 @@ public static void readConfig(FileConfiguration config) {
199201

200202
// Third-Party
201203
useWG = config.getBoolean("useWorldGuard", true) && plMan.isPluginEnabled("WorldGuard");
202-
203-
if (useWG) {
204-
Plugin plugin = Bukkit.getPluginManager().getPlugin("WorldEdit");
205-
if (plugin != null) {
206-
String wgv = plugin.getDescription().getVersion();
207-
if (wgv.startsWith("6.")) {
208-
wg = new WGBarrel6();
209-
} else if (wgv.startsWith("5.")) {
210-
wg = new WGBarrel5();
211-
} else {
212-
wg = new WGBarrel7();
213-
}
214-
}
215-
if (wg == null) {
216-
P.p.errorLog("Failed loading WorldGuard Integration! Opening Barrels will NOT work!");
217-
P.p.errorLog("Brewery was tested with version 5.8, 6.1 and 7.0 of WorldGuard!");
218-
P.p.errorLog("Disable the WorldGuard support in the config and do /brew reload");
219-
}
220-
}
221204
useLWC = config.getBoolean("useLWC", true) && plMan.isPluginEnabled("LWC");
222205
useTowny = config.getBoolean("useTowny", true) && plMan.isPluginEnabled("Towny");
223206
useGP = config.getBoolean("useGriefPrevention", true) && plMan.isPluginEnabled("GriefPrevention");
224207
useLB = config.getBoolean("useLogBlock", false) && plMan.isPluginEnabled("LogBlock");
225208
useGMInventories = config.getBoolean("useGMInventories", false);
226209
useCitadel = config.getBoolean("useCitadel", false) && plMan.isPluginEnabled("Citadel");
210+
useBlocklocker = config.getBoolean("useBlockLocker", false) && plMan.isPluginEnabled("BlockLocker");
227211
virtualChestPerms = config.getBoolean("useVirtualChestPerms", false);
228212
// The item util has been removed in Vault 1.7+
229213
hasVault = plMan.isPluginEnabled("Vault")
@@ -376,6 +360,33 @@ public static void readConfig(FileConfiguration config) {
376360
}
377361
}
378362

363+
if (useWG) {
364+
Plugin plugin = Bukkit.getPluginManager().getPlugin("WorldEdit");
365+
if (plugin != null) {
366+
String wgv = plugin.getDescription().getVersion();
367+
if (wgv.startsWith("6.")) {
368+
wg = new WGBarrel6();
369+
} else if (wgv.startsWith("5.")) {
370+
wg = new WGBarrel5();
371+
} else {
372+
wg = new WGBarrel7();
373+
}
374+
}
375+
if (wg == null) {
376+
P.p.errorLog("Failed loading WorldGuard Integration! Opening Barrels will NOT work!");
377+
P.p.errorLog("Brewery was tested with version 5.8, 6.1 and 7.0 of WorldGuard!");
378+
P.p.errorLog("Disable the WorldGuard support in the config and do /brew reload");
379+
}
380+
}
381+
if (useBlocklocker) {
382+
try {
383+
Class.forName("nl.rutgerkok.blocklocker.BlockLockerAPIv2");
384+
BlocklockerBarrel.registerBarrelAsProtectable();
385+
} catch (ClassNotFoundException e) {
386+
useBlocklocker = false;
387+
}
388+
}
389+
379390
// init SQL
380391
if (sqlSync != null) {
381392
try {

src/com/dre/brewery/integration/IntegrationListener.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.dre.brewery.api.events.barrel.BarrelDestroyEvent;
77
import com.dre.brewery.api.events.barrel.BarrelRemoveEvent;
88
import com.dre.brewery.filedata.BConfig;
9+
import com.dre.brewery.integration.barrel.BlocklockerBarrel;
910
import com.dre.brewery.integration.barrel.GriefPreventionBarrel;
1011
import com.dre.brewery.integration.barrel.LWCBarrel;
1112
import com.dre.brewery.integration.barrel.LogBlockBarrel;
@@ -175,6 +176,32 @@ public void onBarrelAccess(BarrelAccessEvent event) {
175176
}
176177
}
177178

179+
if (BConfig.useBlocklocker) {
180+
if (P.p.getServer().getPluginManager().isPluginEnabled("BlockLocker")) {
181+
try {
182+
if (!BlocklockerBarrel.checkAccess(event)) {
183+
P.p.msg(event.getPlayer(), P.p.languageReader.get("Error_NoBarrelAccess"));
184+
event.setCancelled(true);
185+
return;
186+
}
187+
} catch (Throwable e) {
188+
event.setCancelled(true);
189+
P.p.errorLog("Failed to Check BlockLocker for Barrel Open Permissions!");
190+
P.p.errorLog("Brewery was tested with BlockLocker v1.8.2");
191+
P.p.errorLog("Disable the BlockLocker support in the config and do /brew reload");
192+
e.printStackTrace();
193+
Player player = event.getPlayer();
194+
if (player.hasPermission("brewery.admin") || player.hasPermission("brewery.mod")) {
195+
P.p.msg(player, "&cBlockLocker check Error, Brewery was tested with v1.8.2 of BlockLocker");
196+
P.p.msg(player, "&cSet &7useBlockLocker: false &cin the config and /brew reload");
197+
} else {
198+
P.p.msg(player, "&cError opening Barrel, please report to an Admin!");
199+
}
200+
return;
201+
}
202+
}
203+
}
204+
178205
if (BConfig.virtualChestPerms) {
179206
Player player = event.getPlayer();
180207
BlockState originalBlockState = event.getClickedBlock().getState();
@@ -218,8 +245,10 @@ public void onBarrelDestroy(BarrelDestroyEvent event) {
218245
if (!BConfig.useLWC) return;
219246

220247
if (event.hasPlayer()) {
248+
Player player = event.getPlayerOptional();
249+
assert player != null;
221250
try {
222-
if (LWCBarrel.denyDestroy(event.getPlayerOptional(), event.getBarrel())) {
251+
if (LWCBarrel.denyDestroy(player, event.getBarrel())) {
223252
event.setCancelled(true);
224253
}
225254
} catch (Throwable e) {
@@ -228,7 +257,6 @@ public void onBarrelDestroy(BarrelDestroyEvent event) {
228257
P.p.errorLog("Brewery was tested with version 4.5.0 of LWC!");
229258
P.p.errorLog("Disable the LWC support in the config and do /brew reload");
230259
e.printStackTrace();
231-
Player player = event.getPlayerOptional();
232260
if (player.hasPermission("brewery.admin") || player.hasPermission("brewery.mod")) {
233261
P.p.msg(player, "&cLWC check Error, Brewery was tested with up to v4.5.0 of LWC");
234262
P.p.msg(player, "&cSet &7useLWC: false &cin the config and /brew reload");
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package com.dre.brewery.integration.barrel;
2+
3+
import com.dre.brewery.Barrel;
4+
import com.dre.brewery.BarrelBody;
5+
import com.dre.brewery.P;
6+
import com.dre.brewery.api.events.barrel.BarrelAccessEvent;
7+
import com.dre.brewery.filedata.BConfig;
8+
import com.dre.brewery.utility.LegacyUtil;
9+
import nl.rutgerkok.blocklocker.BlockLockerAPIv2;
10+
import nl.rutgerkok.blocklocker.ProtectableBlocksSettings;
11+
import nl.rutgerkok.blocklocker.ProtectionType;
12+
import org.bukkit.block.Block;
13+
import org.bukkit.block.BlockFace;
14+
15+
import java.util.List;
16+
17+
public class BlocklockerBarrel implements ProtectableBlocksSettings {
18+
private static Block lastBarrelSign;
19+
20+
@Override
21+
public boolean canProtect(Block block) {
22+
return isOrWillCreateBarrel(block);
23+
}
24+
25+
@Override
26+
public boolean canProtect(ProtectionType protectionType, Block block) {
27+
if (protectionType != ProtectionType.CONTAINER) return false;
28+
29+
return isOrWillCreateBarrel(block);
30+
}
31+
32+
public boolean isOrWillCreateBarrel(Block block) {
33+
if (!P.p.isEnabled() || !BConfig.useBlocklocker) {
34+
return false;
35+
}
36+
if (!LegacyUtil.isWoodPlanks(block.getType()) && !LegacyUtil.isWoodStairs(block.getType())) {
37+
// Can only be a barrel if it's a planks block
38+
return false;
39+
}
40+
if (Barrel.getByWood(block) != null) {
41+
// Barrel already exists
42+
return true;
43+
}
44+
if (lastBarrelSign == null) {
45+
// No player wants to create a Barrel
46+
return false;
47+
}
48+
for (BlockFace face : new BlockFace[] {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}) {
49+
Block sign = block.getRelative(face);
50+
if (lastBarrelSign.equals(sign)) {
51+
Block spigot = BarrelBody.getSpigotOfSign(sign);
52+
byte signoffset = 0;
53+
if (!spigot.equals(sign)) {
54+
signoffset = (byte) (sign.getY() - spigot.getY());
55+
}
56+
Barrel barrel = new Barrel(spigot, signoffset);
57+
58+
return barrel.getBody().getBrokenBlock(true) == null;
59+
}
60+
}
61+
return false;
62+
}
63+
64+
public static boolean checkAccess(BarrelAccessEvent event) {
65+
Block sign = event.getBarrel().getBody().getSignOfSpigot();
66+
if (!LegacyUtil.isSign(sign.getType())) {
67+
return true;
68+
}
69+
return BlockLockerAPIv2.isAllowed(event.getPlayer(), sign, true);
70+
}
71+
72+
public static void createdBarrelSign(Block sign) {
73+
// The Player created a sign with "Barrel" on it, he want's to create a barrel
74+
lastBarrelSign = sign;
75+
}
76+
77+
public static void clearBarrelSign() {
78+
lastBarrelSign = null;
79+
}
80+
81+
public static void registerBarrelAsProtectable() {
82+
try {
83+
List<ProtectableBlocksSettings> extraProtectables = BlockLockerAPIv2.getPlugin().getChestSettings().getExtraProtectables();
84+
if (extraProtectables.stream().noneMatch(blockSettings -> blockSettings instanceof BlocklockerBarrel)) {
85+
extraProtectables.add(new BlocklockerBarrel());
86+
}
87+
} catch (Exception e) {
88+
e.printStackTrace();
89+
}
90+
}
91+
}

src/com/dre/brewery/listeners/BlockListener.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import com.dre.brewery.DistortChat;
77
import com.dre.brewery.P;
88
import com.dre.brewery.api.events.barrel.BarrelDestroyEvent;
9+
import com.dre.brewery.filedata.BConfig;
910
import com.dre.brewery.filedata.BData;
11+
import com.dre.brewery.integration.barrel.BlocklockerBarrel;
1012
import com.dre.brewery.utility.BUtil;
1113
import org.bukkit.Material;
1214
import org.bukkit.block.Block;
@@ -22,7 +24,7 @@ public class BlockListener implements Listener {
2224
public void onSignChange(SignChangeEvent event) {
2325
String[] lines = event.getLines();
2426

25-
if (lines[0].equalsIgnoreCase("Barrel") || lines[0].equalsIgnoreCase(P.p.languageReader.get("Etc_Barrel"))) {
27+
if (hasBarrelLine(lines)) {
2628
Player player = event.getPlayer();
2729
if (!player.hasPermission("brewery.createbarrel.small") && !player.hasPermission("brewery.createbarrel.big")) {
2830
P.p.msg(player, P.p.languageReader.get("Perms_NoBarrelCreate"));
@@ -38,13 +40,28 @@ public void onSignChange(SignChangeEvent event) {
3840
}
3941
}
4042

43+
public static boolean hasBarrelLine(String[] lines) {
44+
for (String line : lines) {
45+
if (line.equalsIgnoreCase("Barrel") || line.equalsIgnoreCase(P.p.languageReader.get("Etc_Barrel"))) {
46+
return true;
47+
}
48+
}
49+
return false;
50+
}
51+
4152
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
4253
public void onSignChangeLow(SignChangeEvent event) {
4354
if (DistortChat.doSigns) {
4455
if (BPlayer.hasPlayer(event.getPlayer())) {
4556
DistortChat.signWrite(event);
4657
}
4758
}
59+
if (BConfig.useBlocklocker) {
60+
String[] lines = event.getLines();
61+
if (hasBarrelLine(lines)) {
62+
BlocklockerBarrel.createdBarrelSign(event.getBlock());
63+
}
64+
}
4865
}
4966

5067
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)

0 commit comments

Comments
 (0)