From 54a05b83feea2c7b1e7ee226f38ea775702345f8 Mon Sep 17 00:00:00 2001 From: Sn0wStorm Date: Sat, 27 Oct 2018 12:09:53 +0200 Subject: [PATCH] More merge fixes and use "Levelled" for Cauldrons in 1.13 --- .gitignore | 3 +- pom.xml | 4 +- resources/plugin.yml | 4 +- src/com/dre/brewery/BCauldron.java | 46 +- src/com/dre/brewery/LegacyUtil.java | 393 +++++++++--------- src/com/dre/brewery/P.java | 8 +- .../dre/brewery/integration/WGBarrel7.java | 2 +- 7 files changed, 242 insertions(+), 218 deletions(-) diff --git a/.gitignore b/.gitignore index ad7b6b9..99fb244 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ # IntelliJ /.idea +/*.iml # various other potential build files /build @@ -23,4 +24,4 @@ .DS_Store # maven -/target +/target diff --git a/pom.xml b/pom.xml index 343514d..8c47001 100644 --- a/pom.xml +++ b/pom.xml @@ -35,8 +35,8 @@ maven-compiler-plugin 3.7.0 - 1.7 - 1.7 + 1.8 + 1.8 UTF-8 diff --git a/resources/plugin.yml b/resources/plugin.yml index 44a3e19..6ece640 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,5 +1,5 @@ -name: ${project.name} -version: ${project.version} +name: Brewery +version: 1.7 main: com.dre.brewery.P softdepend: [LWC, LogBlock, WorldGuard, GriefPrevention, Vault, Citadel] authors: [Milan Albrecht, Frank Baumann, ProgrammerDan, Daniel Saukel] diff --git a/src/com/dre/brewery/BCauldron.java b/src/com/dre/brewery/BCauldron.java index c453e79..0526efb 100644 --- a/src/com/dre/brewery/BCauldron.java +++ b/src/com/dre/brewery/BCauldron.java @@ -2,6 +2,7 @@ package com.dre.brewery; import java.util.concurrent.CopyOnWriteArrayList; +import org.bukkit.block.data.Levelled; import org.bukkit.entity.Player; import org.bukkit.Material; import org.bukkit.block.Block; @@ -9,6 +10,7 @@ import org.bukkit.block.BlockFace; import org.bukkit.inventory.ItemStack; import org.bukkit.Effect; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.material.Cauldron; public class BCauldron { public static CopyOnWriteArrayList bcauldrons = new CopyOnWriteArrayList<>(); @@ -94,21 +96,37 @@ public class BCauldron { } ItemStack potion = bcauldron.ingredients.cook(bcauldron.state); if (potion != null) { - byte data = block.getData(); - if (data > 3) { - data = 3; - LegacyUtil.setData(block, data); - } else if (data <= 0) { - bcauldrons.remove(bcauldron); - return false; - } - data -= 1; - LegacyUtil.setData(block, data); - if (data == 0) { - bcauldrons.remove(bcauldron); + if (P.use1_13) { + Levelled cauldron = ((Levelled) block.getBlockData()); + if (cauldron.getLevel() <= 0) { + bcauldrons.remove(bcauldron); + return false; + } + cauldron.setLevel(cauldron.getLevel() - 1); + + if (cauldron.getLevel() <= 0) { + bcauldrons.remove(bcauldron); + } else { + bcauldron.someRemoved = true; + } + } else { - bcauldron.someRemoved = true; + byte data = block.getData(); + if (data > 3) { + data = 3; + } else if (data <= 0) { + bcauldrons.remove(bcauldron); + return false; + } + data -= 1; + LegacyUtil.setData(block, data); + + if (data == 0) { + bcauldrons.remove(bcauldron); + } else { + bcauldron.someRemoved = true; + } } // Bukkit Bug, inventory not updating while in event so this // will delay the give @@ -201,4 +219,4 @@ public class BCauldron { }, 1L); } -} \ No newline at end of file +} diff --git a/src/com/dre/brewery/LegacyUtil.java b/src/com/dre/brewery/LegacyUtil.java index 4dac741..498344f 100644 --- a/src/com/dre/brewery/LegacyUtil.java +++ b/src/com/dre/brewery/LegacyUtil.java @@ -1,196 +1,197 @@ -package com.dre.brewery; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.TreeSpecies; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.block.data.BlockData; -import org.bukkit.block.data.Levelled; -import org.bukkit.material.Cauldron; -import org.bukkit.material.MaterialData; -import org.bukkit.material.Tree; -import org.bukkit.material.Wood; - -public class LegacyUtil { - - private static Method GET_MATERIAL; - private static Method GET_BLOCK_TYPE_ID_AT; - private static Method SET_DATA; - - static { - // -1.12.2 methods - try { - GET_MATERIAL = Material.class.getDeclaredMethod("getMaterial", int.class); - GET_BLOCK_TYPE_ID_AT = World.class.getDeclaredMethod("getBlockTypeIdAt", Location.class); - } catch (NoSuchMethodException | SecurityException e) { - } - // 1.13+ methods - try { - SET_DATA = Class.forName(Bukkit.getServer().getClass().getPackage().getName() + ".block.CraftBlock").getDeclaredMethod("setData", byte.class); - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException e) { - } - } - - public static final Material CLOCK = get("CLOCK", "WATCH"); - public static final Material OAK_STAIRS = get("OAK_STAIRS", "WOOD_STAIRS"); - public static final Material SPRUCE_STAIRS = get("SPRUCE_STAIRS", "SPRUCE_WOOD_STAIRS"); - public static final Material BIRCH_STAIRS = get("BIRCH_STAIRS", "BIRCH_WOOD_STAIRS"); - public static final Material JUNGLE_STAIRS = get("JUNGLE_STAIRS", "JUNGLE_WOOD_STAIRS"); - public static final Material ACACIA_STAIRS = get("ACACIA_STAIRS"); - public static final Material DARK_OAK_STAIRS = get("DARK_OAK_STAIRS"); - - private static Material get(String name) { - try { - return Material.valueOf(name); - } catch (IllegalArgumentException e) { - return null; - } - } - - private static Material get(String newName, String oldName) { - try { - return Material.valueOf(P.use1_13 ? newName : oldName); - } catch (IllegalArgumentException e) { - return null; - } - } - - public static boolean isWoodPlanks(Material type) { - return type.name().contains("PLANKS") || type.name().equals("WOOD"); - } - - public static boolean isWoodStairs(Material type) { - return type == OAK_STAIRS || type == SPRUCE_STAIRS || type == BIRCH_STAIRS || type == JUNGLE_STAIRS - || (type == ACACIA_STAIRS && ACACIA_STAIRS != null) || (type == DARK_OAK_STAIRS && DARK_OAK_STAIRS != null); - } - - public static boolean isFence(Material type) { - return type.name().endsWith("FENCE"); - } - - public static boolean isSign(Material type) { - return type.name().equals("SIGN_POST") || type == Material.SIGN || type == Material.WALL_SIGN; - } - - // LAVA and STATIONARY_LAVA are merged as of 1.13 - public static boolean isLava(Material type) { - return type.name().equals("STATIONARY_LAVA") || type == Material.LAVA; - } - - public static boolean areStairsInverted(Block block) { - if (!P.use1_13) { - MaterialData data = block.getState().getData(); - return data instanceof org.bukkit.material.Stairs && (((org.bukkit.material.Stairs) data).isInverted()); - } else { - BlockData data = block.getBlockData(); - return data instanceof org.bukkit.block.data.type.Stairs && ((org.bukkit.block.data.type.Stairs) data).getHalf() == org.bukkit.block.data.type.Stairs.Half.TOP; - } - } - - public static byte getWoodType(Block wood) { - TreeSpecies woodType = null; - - if (P.use1_13 || isWoodStairs(wood.getType())) { - String material = wood.getType().name(); - if (material.startsWith("OAK")) { - woodType = TreeSpecies.GENERIC; - } else if (material.startsWith("SPRUCE")) { - woodType = TreeSpecies.REDWOOD; - } else if (material.startsWith("BIRCH")) { - woodType = TreeSpecies.BIRCH; - } else if (material.startsWith("JUNGLE")) { - woodType = TreeSpecies.JUNGLE; - } else if (material.startsWith("ACACIA")) { - woodType = TreeSpecies.ACACIA; - } else if (material.startsWith("DARK_OAK")) { - woodType = TreeSpecies.DARK_OAK; - } else { - return 0; - } - - } else { - MaterialData data = wood.getState().getData(); - if (data instanceof Tree) { - woodType = ((Tree) data).getSpecies(); - } else if (data instanceof Wood) { - woodType = ((Wood) data).getSpecies(); - } else { - return 0; - } - } - - switch (woodType) { - case GENERIC: - return 2; - case REDWOOD: - return 4; - case BIRCH: - return 1; - case JUNGLE: - return 3; - case ACACIA: - return 5; - case DARK_OAK: - return 6; - default: - return 0; - } - } - - // 0 = empty, 1 = something in, 2 = full - public static byte getFillLevel(Block block) { - if (block.getType() != Material.CAULDRON) { - return 0; - } - - if (P.use1_13) { - Levelled cauldron = ((Levelled) block.getBlockData()); - if (cauldron.getLevel() == 0) { - return 0; - } else if (cauldron.getLevel() == cauldron.getMaximumLevel()) { - return 2; - } else { - return 1; - } - - } else { - Cauldron cauldron = (Cauldron) block.getState().getData(); - if (cauldron.isEmpty()) { - return 0; - } else if (cauldron.isFull()) { - return 2; - } else { - return 1; - } - } - } - - public static Material getMaterial(int id) { - try { - return GET_MATERIAL != null ? (Material) GET_MATERIAL.invoke(null, id) : null; - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - return null; - } - } - - public static int getBlockTypeIdAt(Location location) { - try { - return GET_BLOCK_TYPE_ID_AT != null ? (int) GET_BLOCK_TYPE_ID_AT.invoke(location.getWorld(), location) : 0; - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - return 0; - } - } - - // Setting byte data to blocks works in 1.13, but isn't part of the API anymore - public static void setData(Block block, byte data) { - try { - SET_DATA.invoke(block, data); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - } - } - -} +package com.dre.brewery; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.TreeSpecies; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.Levelled; +import org.bukkit.material.Cauldron; +import org.bukkit.material.MaterialData; +import org.bukkit.material.Stairs; +import org.bukkit.material.Tree; +import org.bukkit.material.Wood; + +public class LegacyUtil { + + private static Method GET_MATERIAL; + private static Method GET_BLOCK_TYPE_ID_AT; + private static Method SET_DATA; + + static { + // <= 1.12.2 methods + try { + GET_MATERIAL = Material.class.getDeclaredMethod("getMaterial", int.class); + GET_BLOCK_TYPE_ID_AT = World.class.getDeclaredMethod("getBlockTypeIdAt", Location.class); + } catch (NoSuchMethodException | SecurityException e) { + } + try { + SET_DATA = Class.forName(Bukkit.getServer().getClass().getPackage().getName() + ".block.CraftBlock").getDeclaredMethod("setData", byte.class); + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException e) { + } + } + + public static final Material CLOCK = get("CLOCK", "WATCH"); + public static final Material OAK_STAIRS = get("OAK_STAIRS", "WOOD_STAIRS"); + public static final Material SPRUCE_STAIRS = get("SPRUCE_STAIRS", "SPRUCE_WOOD_STAIRS"); + public static final Material BIRCH_STAIRS = get("BIRCH_STAIRS", "BIRCH_WOOD_STAIRS"); + public static final Material JUNGLE_STAIRS = get("JUNGLE_STAIRS", "JUNGLE_WOOD_STAIRS"); + public static final Material ACACIA_STAIRS = get("ACACIA_STAIRS"); + public static final Material DARK_OAK_STAIRS = get("DARK_OAK_STAIRS"); + + private static Material get(String name) { + try { + return Material.valueOf(name); + } catch (IllegalArgumentException e) { + return null; + } + } + + private static Material get(String newName, String oldName) { + try { + return Material.valueOf(P.use1_13 ? newName : oldName); + } catch (IllegalArgumentException e) { + return null; + } + } + + public static boolean isWoodPlanks(Material type) { + return type.name().endsWith("PLANKS") || type.name().equals("WOOD"); + } + + public static boolean isWoodStairs(Material type) { + return type == OAK_STAIRS || type == SPRUCE_STAIRS || type == BIRCH_STAIRS || type == JUNGLE_STAIRS + || (type == ACACIA_STAIRS && ACACIA_STAIRS != null) || (type == DARK_OAK_STAIRS && DARK_OAK_STAIRS != null); + } + + public static boolean isFence(Material type) { + return type.name().endsWith("FENCE"); + } + + public static boolean isSign(Material type) { + return type == Material.SIGN || type == Material.WALL_SIGN || (!P.use1_13 && type.name().equals("SIGN_POST")); + } + + // LAVA and STATIONARY_LAVA are merged as of 1.13 + public static boolean isLava(Material type) { + return type == Material.LAVA || (!P.use1_13 && type.name().equals("STATIONARY_LAVA")); + } + + public static boolean areStairsInverted(Block block) { + if (!P.use1_13) { + MaterialData data = block.getState().getData(); + return data instanceof org.bukkit.material.Stairs && (((org.bukkit.material.Stairs) data).isInverted()); + } else { + BlockData data = block.getBlockData(); + return data instanceof org.bukkit.block.data.type.Stairs && ((org.bukkit.block.data.type.Stairs) data).getHalf() == org.bukkit.block.data.type.Stairs.Half.TOP; + } + } + + public static byte getWoodType(Block wood) { + TreeSpecies woodType = null; + + if (P.use1_13 || isWoodStairs(wood.getType())) { + String material = wood.getType().name(); + if (material.startsWith("OAK")) { + woodType = TreeSpecies.GENERIC; + } else if (material.startsWith("SPRUCE")) { + woodType = TreeSpecies.REDWOOD; + } else if (material.startsWith("BIRCH")) { + woodType = TreeSpecies.BIRCH; + } else if (material.startsWith("JUNGLE")) { + woodType = TreeSpecies.JUNGLE; + } else if (material.startsWith("ACACIA")) { + woodType = TreeSpecies.ACACIA; + } else if (material.startsWith("DARK_OAK")) { + woodType = TreeSpecies.DARK_OAK; + } else { + return 0; + } + + } else { + MaterialData data = wood.getState().getData(); + if (data instanceof Tree) { + woodType = ((Tree) data).getSpecies(); + } else if (data instanceof Wood) { + woodType = ((Wood) data).getSpecies(); + } else { + return 0; + } + } + + switch (woodType) { + case GENERIC: + return 2; + case REDWOOD: + return 4; + case BIRCH: + return 1; + case JUNGLE: + return 3; + case ACACIA: + return 5; + case DARK_OAK: + return 6; + default: + return 0; + } + } + + // 0 = empty, 1 = something in, 2 = full + public static byte getFillLevel(Block block) { + if (block.getType() != Material.CAULDRON) { + return 0; + } + + if (P.use1_13) { + Levelled cauldron = ((Levelled) block.getBlockData()); + if (cauldron.getLevel() == 0) { + return 0; + } else if (cauldron.getLevel() == cauldron.getMaximumLevel()) { + return 2; + } else { + return 1; + } + + } else { + Cauldron cauldron = (Cauldron) block.getState().getData(); + if (cauldron.isEmpty()) { + return 0; + } else if (cauldron.isFull()) { + return 2; + } else { + return 1; + } + } + } + + public static Material getMaterial(int id) { + try { + return GET_MATERIAL != null ? (Material) GET_MATERIAL.invoke(null, id) : null; + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + return null; + } + } + + // Only used for very old versions of LogBlock + public static int getBlockTypeIdAt(Location location) { + try { + return GET_BLOCK_TYPE_ID_AT != null ? (int) GET_BLOCK_TYPE_ID_AT.invoke(location.getWorld(), location) : 0; + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + return 0; + } + } + + // Setting byte data to blocks for older versions + public static void setData(Block block, byte data) { + try { + SET_DATA.invoke(block, data); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + } + } + +} diff --git a/src/com/dre/brewery/P.java b/src/com/dre/brewery/P.java index da9dff4..5bc83ce 100644 --- a/src/com/dre/brewery/P.java +++ b/src/com/dre/brewery/P.java @@ -76,7 +76,7 @@ public class P extends JavaPlugin { String v = Bukkit.getBukkitVersion(); useUUID = !v.matches("(^|.*[^\\.\\d])1\\.[0-6]([^\\d].*|$)") && !v.matches("(^|.*[^\\.\\d])1\\.7\\.[0-5]([^\\d].*|$)"); use1_9 = !v.matches("(^|.*[^\\.\\d])1\\.[0-8]([^\\d].*|$)"); - use1_12 = !v.matches("(^|.*[^\\.\\d])1\\.[0-11]([^\\d].*|$)"); + use1_12 = !v.matches("(^|.*[^\\.\\d])1\\.1[0-1]([^\\d].*|$)") && !v.matches("(^|.*[^\\.\\d])1\\.[0-9]([^\\d].*|$)"); use1_13 = !v.matches("(^|.*[^\\.\\d])1\\.1[0-2]([^\\d].*|$)") && !v.matches("(^|.*[^\\.\\d])1\\.[0-9]([^\\d].*|$)"); // load the Config @@ -95,7 +95,11 @@ public class P extends JavaPlugin { readData(); // Setup Metrics - new Metrics(this); + try { + new Metrics(this); + } catch (Exception e) { + e.printStackTrace(); + } // Listeners blockListener = new BlockListener(); diff --git a/src/com/dre/brewery/integration/WGBarrel7.java b/src/com/dre/brewery/integration/WGBarrel7.java index 20cc6d0..9102e72 100644 --- a/src/com/dre/brewery/integration/WGBarrel7.java +++ b/src/com/dre/brewery/integration/WGBarrel7.java @@ -24,7 +24,7 @@ public class WGBarrel7 implements WGBarrel { WorldGuardPlugin wg = (WorldGuardPlugin) plugin; WorldGuardPlatform platform = WorldGuard.getInstance().getPlatform(); - World world = platform.getWorldByName(spigot.getWorld().getName()); + World world = platform.getWorldByName(spigot.getWorld().getName()); if (!platform.getGlobalStateManager().get(world).useRegions) return true; // Region support disabled WorldEditPlugin we = JavaPlugin.getPlugin(WorldEditPlugin.class); if (new RegionPermissionModel((Actor) we.wrapPlayer(player)).mayIgnoreRegionProtection(world)) return true; // Whitelisted cause