Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/java/com/griefcraft/lwc/LWCPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,7 @@ private void registerEvents() {
pluginManager.registerEvents(new LWCEntityListener(this), this);
pluginManager.registerEvents(new LWCBlockListener(this), this);
pluginManager.registerEvents(new LWCServerListener(this), this);
if (VersionUtil.getMinorVersion() > 13) {
if (VersionUtil.isAtLeast(1, 14)) {
pluginManager.registerEvents(new LWC114Listener(), this);
}
if (Bukkit.getPluginManager().getPlugin("Towny") != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ public void onCommand(LWCCommandEvent event) {
action.setData(newOwner);
}

player.removeAllActions();
player.addAction(action);

lwc.sendLocale(sender, "protection.admin.forceowner.finalize", "player", newOwner);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/griefcraft/modules/limits/LimitsV2.java
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ public class LimitsV2 extends JavaModule {
Material.PURPLE_SHULKER_BOX, Material.MAGENTA_SHULKER_BOX, Material.PINK_SHULKER_BOX);

static {
if (VersionUtil.getMinorVersion() > 13) {
if (VersionUtil.isAtLeast(1, 14)) {
SIGNS = EnumSet.of(Material.OAK_WALL_SIGN, Material.BIRCH_WALL_SIGN,
Material.SPRUCE_WALL_SIGN, Material.JUNGLE_WALL_SIGN, Material.ACACIA_WALL_SIGN,
Material.DARK_OAK_WALL_SIGN, Material.OAK_SIGN, Material.BIRCH_SIGN, Material.SPRUCE_SIGN,
Expand Down
41 changes: 39 additions & 2 deletions src/main/java/com/griefcraft/util/VersionUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,48 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@SuppressWarnings("unused")
public class VersionUtil {
private static final Pattern VERSION_PATTERN = Pattern.compile("(\\d+)\\.(\\d+)(\\.\\d+)?");

public static boolean isAtLeast(final int major, final int minor, final int patch) {
final String[] versionParts = getVersionParts(Bukkit.getVersion());
final int majorPart = Integer.parseInt(versionParts[0]);
if (majorPart > major) {
return true;
}
final int minorPart = Integer.parseInt(versionParts[1]);
if (majorPart == major && minorPart > minor) {
return true;
}
final int patchPart = Integer.parseInt(versionParts[2]);
return majorPart == major && minorPart == minor && patchPart >= patch;
}

public static boolean isAtLeast(final int major, final int minor) {
return isAtLeast(major, minor, -1);
}

public static int getMajorVersion() {
return Integer.parseInt(getVersionParts(Bukkit.getVersion())[0]);
}

public static int getMinorVersion() {
Matcher versionCheck = Pattern.compile("\\d[.]\\d+").matcher(Bukkit.getVersion());
return versionCheck.find() ? Integer.parseInt(versionCheck.group().substring(2)) : -1;
return Integer.parseInt(getVersionParts(Bukkit.getVersion())[1]);
}

public static int getPatchVersion() {
return Integer.parseInt(getVersionParts(Bukkit.getVersion())[2]);
}

private static String[] getVersionParts(final String input) {
final Matcher versionMatcher = VERSION_PATTERN.matcher(input);
final String[] version = new String[]{"-1", "-1", "-1"};
if (!versionMatcher.find()) {
return version;
}
final String[] versionParts = versionMatcher.group().split("\\.");
System.arraycopy(versionParts, 0, version, 0, versionParts.length);
return version;
}
}
25 changes: 13 additions & 12 deletions src/main/java/com/griefcraft/util/matchers/DoorMatcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public class DoorMatcher implements ProtectionFinder.Matcher {
Material.SPRUCE_PRESSURE_PLATE, Material.BIRCH_PRESSURE_PLATE, Material.JUNGLE_PRESSURE_PLATE,
Material.ACACIA_PRESSURE_PLATE, Material.DARK_OAK_PRESSURE_PLATE, Material.STONE_PRESSURE_PLATE,
Material.LIGHT_WEIGHTED_PRESSURE_PLATE, Material.HEAVY_WEIGHTED_PRESSURE_PLATE);
if (VersionUtil.getMinorVersion() > 15) {
if (VersionUtil.isAtLeast(1, 16)) {
PROTECTABLES_DOORS.addAll(EnumSet.of(Material.CRIMSON_DOOR, Material.WARPED_DOOR));
WOODEN_DOORS.addAll(EnumSet.of(Material.CRIMSON_DOOR, Material.WARPED_DOOR));
FENCE_GATES.addAll(EnumSet.of(Material.CRIMSON_FENCE_GATE, Material.WARPED_FENCE_GATE));
Expand All @@ -96,7 +96,7 @@ public class DoorMatcher implements ProtectionFinder.Matcher {
PRESSURE_PLATES.addAll(EnumSet.of(Material.CRIMSON_PRESSURE_PLATE, Material.WARPED_PRESSURE_PLATE,
Material.POLISHED_BLACKSTONE_PRESSURE_PLATE));
}
if (VersionUtil.getMinorVersion() > 18) {
if (VersionUtil.isAtLeast(1, 19)) {
PROTECTABLES_DOORS.add(Material.MANGROVE_DOOR);
WOODEN_DOORS.add(Material.MANGROVE_DOOR);
FENCE_GATES.add(Material.MANGROVE_FENCE_GATE);
Expand All @@ -105,7 +105,7 @@ public class DoorMatcher implements ProtectionFinder.Matcher {
WOODEN_TRAP_DOORS.add(Material.MANGROVE_TRAPDOOR);
PRESSURE_PLATES.add(Material.MANGROVE_PRESSURE_PLATE);
}
if (VersionUtil.getMinorVersion() > 19) {
if (VersionUtil.isAtLeast(1, 20)) {
PROTECTABLES_DOORS.addAll(EnumSet.of(Material.BAMBOO_DOOR, Material.CHERRY_DOOR));
WOODEN_DOORS.addAll(EnumSet.of(Material.BAMBOO_DOOR, Material.CHERRY_DOOR));
FENCE_GATES.addAll(EnumSet.of(Material.BAMBOO_FENCE_GATE, Material.CHERRY_FENCE_GATE));
Expand All @@ -114,7 +114,7 @@ public class DoorMatcher implements ProtectionFinder.Matcher {
WOODEN_TRAP_DOORS.addAll(EnumSet.of(Material.BAMBOO_TRAPDOOR, Material.CHERRY_TRAPDOOR));
PRESSURE_PLATES.addAll(EnumSet.of(Material.BAMBOO_PRESSURE_PLATE, Material.CHERRY_PRESSURE_PLATE));
}
if (VersionUtil.getMinorVersion() > 20) {
if (VersionUtil.isAtLeast(1, 21)) {
PROTECTABLES_DOORS.addAll(EnumSet.of(Material.COPPER_DOOR, Material.EXPOSED_COPPER_DOOR,
Material.OXIDIZED_COPPER_DOOR, Material.WAXED_COPPER_DOOR, Material.WEATHERED_COPPER_DOOR,
Material.WAXED_EXPOSED_COPPER_DOOR, Material.WAXED_OXIDIZED_COPPER_DOOR,
Expand All @@ -131,14 +131,15 @@ public class DoorMatcher implements ProtectionFinder.Matcher {
Material.OXIDIZED_COPPER_TRAPDOOR, Material.WAXED_COPPER_TRAPDOOR,
Material.WEATHERED_COPPER_TRAPDOOR, Material.WAXED_EXPOSED_COPPER_TRAPDOOR,
Material.WAXED_OXIDIZED_COPPER_TRAPDOOR, Material.WAXED_WEATHERED_COPPER_TRAPDOOR));
// Added in 1.21.4
Optional.ofNullable(Material.getMaterial("PALE_OAK_DOOR")).ifPresent(PROTECTABLES_DOORS::add);
Optional.ofNullable(Material.getMaterial("PALE_OAK_DOOR")).ifPresent(WOODEN_DOORS::add);
Optional.ofNullable(Material.getMaterial("PALE_OAK_FENCE_GATE")).ifPresent(FENCE_GATES::add);
Optional.ofNullable(Material.getMaterial("PALE_OAK_FENCE_GATE")).ifPresent(WOODEN_FENCE_GATES::add);
Optional.ofNullable(Material.getMaterial("PALE_OAK_TRAPDOOR")).ifPresent(TRAP_DOORS::add);
Optional.ofNullable(Material.getMaterial("PALE_OAK_TRAPDOOR")).ifPresent(WOODEN_TRAP_DOORS::add);
Optional.ofNullable(Material.getMaterial("PALE_OAK_PRESSURE_PLATE")).ifPresent(PRESSURE_PLATES::add);
if (VersionUtil.isAtLeast(1, 21, 4)) {
Optional.ofNullable(Material.getMaterial("PALE_OAK_DOOR")).ifPresent(PROTECTABLES_DOORS::add);
Optional.ofNullable(Material.getMaterial("PALE_OAK_DOOR")).ifPresent(WOODEN_DOORS::add);
Optional.ofNullable(Material.getMaterial("PALE_OAK_FENCE_GATE")).ifPresent(FENCE_GATES::add);
Optional.ofNullable(Material.getMaterial("PALE_OAK_FENCE_GATE")).ifPresent(WOODEN_FENCE_GATES::add);
Optional.ofNullable(Material.getMaterial("PALE_OAK_TRAPDOOR")).ifPresent(TRAP_DOORS::add);
Optional.ofNullable(Material.getMaterial("PALE_OAK_TRAPDOOR")).ifPresent(WOODEN_TRAP_DOORS::add);
Optional.ofNullable(Material.getMaterial("PALE_OAK_PRESSURE_PLATE")).ifPresent(PRESSURE_PLATES::add);
}
}
}

Expand Down
15 changes: 15 additions & 0 deletions src/main/java/com/griefcraft/util/matchers/DoubleChestMatcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,15 @@
package com.griefcraft.util.matchers;

import com.griefcraft.util.ProtectionFinder;
import com.griefcraft.util.VersionUtil;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState;
import org.bukkit.block.data.type.Chest;

import java.util.EnumSet;
import java.util.Optional;
import java.util.Set;

/**
Expand All @@ -48,6 +50,19 @@ public class DoubleChestMatcher implements ProtectionFinder.Matcher {
*/
public static final Set<Material> PROTECTABLES_CHESTS = EnumSet.of(Material.CHEST, Material.TRAPPED_CHEST);

static {
if (VersionUtil.isAtLeast(1, 21, 9)) {
Optional.ofNullable(Material.getMaterial("COPPER_CHEST")).ifPresent(PROTECTABLES_CHESTS::add);
Optional.ofNullable(Material.getMaterial("EXPOSED_COPPER_CHEST")).ifPresent(PROTECTABLES_CHESTS::add);
Optional.ofNullable(Material.getMaterial("OXIDIZED_COPPER_CHEST")).ifPresent(PROTECTABLES_CHESTS::add);
Optional.ofNullable(Material.getMaterial("WAXED_COPPER_CHEST")).ifPresent(PROTECTABLES_CHESTS::add);
Optional.ofNullable(Material.getMaterial("WAXED_EXPOSED_COPPER_CHEST")).ifPresent(PROTECTABLES_CHESTS::add);
Optional.ofNullable(Material.getMaterial("WAXED_OXIDIZED_COPPER_CHEST")).ifPresent(PROTECTABLES_CHESTS::add);
Optional.ofNullable(Material.getMaterial("WAXED_WEATHERED_COPPER_CHEST")).ifPresent(PROTECTABLES_CHESTS::add);
Optional.ofNullable(Material.getMaterial("WEATHERED_COPPER_CHEST")).ifPresent(PROTECTABLES_CHESTS::add);
}
}

/**
* Possible faces around the base block that protections could be at
*/
Expand Down
11 changes: 5 additions & 6 deletions src/main/java/com/griefcraft/util/matchers/GravityMatcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,28 +57,27 @@ public class GravityMatcher implements ProtectionFinder.Matcher {
Material.LIME_BANNER, Material.PINK_BANNER, Material.GRAY_BANNER, Material.LIGHT_GRAY_BANNER,
Material.CYAN_BANNER, Material.PURPLE_BANNER, Material.BLUE_BANNER, Material.BROWN_BANNER,
Material.GREEN_BANNER, Material.RED_BANNER, Material.BLACK_BANNER, Material.ARMOR_STAND);
if (VersionUtil.getMinorVersion() > 13) {
if (VersionUtil.isAtLeast(1, 14)) {
PROTECTABLES_POSTS.addAll(EnumSet.of(Material.OAK_SIGN, Material.BIRCH_SIGN,
Material.SPRUCE_SIGN, Material.JUNGLE_SIGN, Material.ACACIA_SIGN, Material.DARK_OAK_SIGN));
} else {
PROTECTABLES_POSTS.add(Material.getMaterial("SIGN"));
}
if (VersionUtil.getMinorVersion() > 15) {
if (VersionUtil.isAtLeast(1, 16)) {
PROTECTABLES_POSTS.addAll(EnumSet.of(Material.CRIMSON_BUTTON, Material.WARPED_BUTTON,
Material.POLISHED_BLACKSTONE_BUTTON, Material.CRIMSON_PRESSURE_PLATE, Material.WARPED_PRESSURE_PLATE,
Material.POLISHED_BLACKSTONE_PRESSURE_PLATE, Material.CRIMSON_SIGN, Material.WARPED_SIGN));
}
if (VersionUtil.getMinorVersion() > 18) {
if (VersionUtil.isAtLeast(1, 19)) {
PROTECTABLES_POSTS.addAll(EnumSet.of(Material.MANGROVE_BUTTON, Material.MANGROVE_PRESSURE_PLATE,
Material.MANGROVE_SIGN));
}
if (VersionUtil.getMinorVersion() > 19) {
if (VersionUtil.isAtLeast(1, 20)) {
PROTECTABLES_POSTS.addAll(EnumSet.of(Material.BAMBOO_BUTTON, Material.BAMBOO_PRESSURE_PLATE,
Material.BAMBOO_SIGN, Material.CHERRY_BUTTON, Material.CHERRY_PRESSURE_PLATE,
Material.CHERRY_SIGN));
}
if (VersionUtil.getMinorVersion() > 20) {
// Added in 1.21.4
if (VersionUtil.isAtLeast(1, 21, 4)) {
Optional.ofNullable(Material.getMaterial("PALE_OAK_BUTTON")).ifPresent(PROTECTABLES_POSTS::add);
Optional.ofNullable(Material.getMaterial("PALE_OAK_PRESSURE_PLATE")).ifPresent(PROTECTABLES_POSTS::add);
Optional.ofNullable(Material.getMaterial("PALE_OAK_SIGN")).ifPresent(PROTECTABLES_POSTS::add);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,13 @@ public class HangingMatcher implements ProtectionFinder.Matcher {
public static final Set<Material> PROTECTABLES_HANGING = EnumSet.noneOf(Material.class);

static {
if (VersionUtil.getMinorVersion() > 19) {
if (VersionUtil.isAtLeast(1, 20)) {
PROTECTABLES_HANGING.addAll(EnumSet.of(Material.OAK_HANGING_SIGN, Material.BIRCH_HANGING_SIGN,
Material.SPRUCE_HANGING_SIGN, Material.JUNGLE_HANGING_SIGN, Material.ACACIA_HANGING_SIGN,
Material.DARK_OAK_HANGING_SIGN, Material.CRIMSON_HANGING_SIGN, Material.WARPED_HANGING_SIGN,
Material.MANGROVE_HANGING_SIGN, Material.BAMBOO_HANGING_SIGN, Material.CHERRY_HANGING_SIGN));
}
if (VersionUtil.getMinorVersion() > 20) {
// Added in 1.21.4
if (VersionUtil.isAtLeast(1, 21, 4)) {
Optional.ofNullable(Material.getMaterial("PALE_OAK_HANGING_SIGN")).ifPresent(PROTECTABLES_HANGING::add);
}
}
Expand Down
11 changes: 5 additions & 6 deletions src/main/java/com/griefcraft/util/matchers/WallMatcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,24 +58,23 @@ public class WallMatcher implements ProtectionFinder.Matcher {
Material.LIGHT_GRAY_WALL_BANNER, Material.CYAN_WALL_BANNER, Material.PURPLE_WALL_BANNER,
Material.BLUE_WALL_BANNER, Material.BROWN_WALL_BANNER, Material.GREEN_WALL_BANNER,
Material.RED_WALL_BANNER, Material.BLACK_WALL_BANNER);
if (VersionUtil.getMinorVersion() > 13) {
if (VersionUtil.isAtLeast(1, 14)) {
PROTECTABLES_WALL.addAll(EnumSet.of(Material.OAK_WALL_SIGN, Material.BIRCH_WALL_SIGN,
Material.SPRUCE_WALL_SIGN, Material.JUNGLE_WALL_SIGN, Material.ACACIA_WALL_SIGN,
Material.DARK_OAK_WALL_SIGN));
} else {
PROTECTABLES_WALL.add(Material.getMaterial("WALL_SIGN"));
}
if (VersionUtil.getMinorVersion() > 15) {
if (VersionUtil.isAtLeast(1, 16)) {
PROTECTABLES_WALL.addAll(EnumSet.of(Material.CRIMSON_WALL_SIGN, Material.WARPED_WALL_SIGN));
}
if (VersionUtil.getMinorVersion() > 18) {
if (VersionUtil.isAtLeast(1, 19)) {
PROTECTABLES_WALL.add(Material.MANGROVE_WALL_SIGN);
}
if (VersionUtil.getMinorVersion() > 19) {
if (VersionUtil.isAtLeast(1, 20)) {
PROTECTABLES_WALL.addAll(EnumSet.of(Material.BAMBOO_WALL_SIGN, Material.CHERRY_WALL_SIGN));
}
if (VersionUtil.getMinorVersion() > 20) {
// Added in 1.21.4
if (VersionUtil.isAtLeast(1, 21, 4)) {
Optional.ofNullable(Material.getMaterial("PALE_OAK_SIGN")).ifPresent(PROTECTABLES_WALL::add);
}
}
Expand Down
66 changes: 66 additions & 0 deletions src/main/resources/config/core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,30 @@ protections:
trapped_chest:
enabled: true
autoRegister: private
copper_chest:
enabled: true
autoRegister: private
exposed_copper_chest:
enabled: true
autoRegister: private
oxidized_copper_chest:
enabled: true
autoRegister: private
waxed_copper_chest:
enabled: true
autoRegister: private
waxed_exposed_copper_chest:
enabled: true
autoRegister: private
waxed_oxidized_copper_chest:
enabled: true
autoRegister: private
waxed_weathered_copper_chest:
enabled: true
autoRegister: private
weathered_copper_chest:
enabled: true
autoRegister: private
furnace:
enabled: true
autoRegister: private
Expand All @@ -211,6 +235,48 @@ protections:
lectern:
enabled: true
autoRegister: private
decorated_pot:
enabled: true
autoRegister: private
crafter:
enabled: true
autoRegister: private
acacia_shelf:
enabled: true
autoRegister: private
bamboo_shelf:
enabled: true
autoRegister: private
birch_shelf:
enabled: true
autoRegister: private
cherry_shelf:
enabled: true
autoRegister: private
crimson_shelf:
enabled: true
autoRegister: private
dark_oak_shelf:
enabled: true
autoRegister: private
jungle_shelf:
enabled: true
autoRegister: private
mangrove_shelf:
enabled: true
autoRegister: private
oak_shelf:
enabled: true
autoRegister: private
pale_oak_shelf:
enabled: true
autoRegister: private
spruce_shelf:
enabled: true
autoRegister: private
warped_shelf:
enabled: true
autoRegister: private
shulker_box:
enabled: true
autoRegister: private
Expand Down