diff --git a/core/src/main/java/de/erethon/dungeonsxl/sign/rocker/BlockSign.java b/core/src/main/java/de/erethon/dungeonsxl/sign/rocker/BlockSign.java index abbad236..5db22b97 100644 --- a/core/src/main/java/de/erethon/dungeonsxl/sign/rocker/BlockSign.java +++ b/core/src/main/java/de/erethon/dungeonsxl/sign/rocker/BlockSign.java @@ -22,8 +22,11 @@ import de.erethon.dungeonsxl.api.DungeonsAPI; import de.erethon.dungeonsxl.api.sign.Rocker; import de.erethon.dungeonsxl.api.world.InstanceWorld; import de.erethon.dungeonsxl.player.DPermission; -import de.erethon.dungeonsxl.util.MagicValueUtil; +import de.erethon.dungeonsxl.util.commons.compatibility.CompatibilityHandler; import de.erethon.dungeonsxl.util.commons.misc.NumberUtil; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import org.bukkit.block.Block; import org.bukkit.block.Sign; /** @@ -104,7 +107,7 @@ public class BlockSign extends Rocker { getSign().getBlock().setType(offBlock.getMaterial()); try { - MagicValueUtil.setBlockData(getSign().getBlock(), offBlockData); + setBlockData(getSign().getBlock(), offBlockData); } catch (IllegalArgumentException exception) { markAsErroneous("offBlock data value " + offBlockData + " cannot be applied to given type " + offBlock.getId()); } @@ -114,7 +117,7 @@ public class BlockSign extends Rocker { public void activate() { getSign().getBlock().setType(onBlock.getMaterial()); try { - MagicValueUtil.setBlockData(getSign().getBlock(), onBlockData); + setBlockData(getSign().getBlock(), onBlockData); } catch (IllegalArgumentException exception) { markAsErroneous("onBlock data value " + onBlockData + " cannot be applied to given type " + onBlock.getId()); return; @@ -126,7 +129,7 @@ public class BlockSign extends Rocker { public void deactivate() { getSign().getBlock().setType(offBlock.getMaterial()); try { - MagicValueUtil.setBlockData(getSign().getBlock(), offBlockData); + setBlockData(getSign().getBlock(), offBlockData); } catch (IllegalArgumentException exception) { markAsErroneous("onBlock data value " + offBlockData + " cannot be applied to given type " + onBlock.getId()); return; @@ -134,4 +137,23 @@ public class BlockSign extends Rocker { active = false; } + private static Method craftBlockSetData; + + private static void setBlockData(Block block, byte data) { + if (craftBlockSetData == null) { + try { + craftBlockSetData = Class.forName( + "org.bukkit.craftbukkit." + CompatibilityHandler.getInstance().getInternals() + ".block.CraftBlock") + .getDeclaredMethod("setData", byte.class); + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalArgumentException exception) { + exception.printStackTrace(); + } + } + try { + craftBlockSetData.invoke(block, data); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException exception) { + exception.printStackTrace(); + } + } + } diff --git a/core/src/main/java/de/erethon/dungeonsxl/util/MagicValueUtil.java b/core/src/main/java/de/erethon/dungeonsxl/util/MagicValueUtil.java deleted file mode 100644 index 41bb0284..00000000 --- a/core/src/main/java/de/erethon/dungeonsxl/util/MagicValueUtil.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2012-2021 Frank Baumann - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.erethon.dungeonsxl.util; - -import org.bukkit.block.Block; - -/** - * @author Daniel Saukel - */ -@Deprecated -public class MagicValueUtil { - - public static void setBlockData(Block block, byte data) { - ReflectionUtil.invoke(ReflectionUtil.CRAFT_BLOCK_SET_DATA, block, data); - } - -} diff --git a/core/src/main/java/de/erethon/dungeonsxl/util/ReflectionUtil.java b/core/src/main/java/de/erethon/dungeonsxl/util/ReflectionUtil.java deleted file mode 100644 index 8d42d3a7..00000000 --- a/core/src/main/java/de/erethon/dungeonsxl/util/ReflectionUtil.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2012-2021 Frank Baumann - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.erethon.dungeonsxl.util; - -import de.erethon.dungeonsxl.util.commons.compatibility.CompatibilityHandler; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import org.bukkit.inventory.ItemStack; - -/** - * @author Daniel Saukel - */ -public class ReflectionUtil { - - static String INTERNALS_VERSION = CompatibilityHandler.getInstance().getInternals().toString(); - static String ORG_BUKKIT_CRAFTBUKKIT = "org.bukkit.craftbukkit." + INTERNALS_VERSION; - static String NET_MINECRAFT_SERVER = "net.minecraft.server." + INTERNALS_VERSION; - static Class NBT_TAG_COMPOUND; - static Method NBT_TAG_COMPOUND_HAS_KEY; - static Method NBT_TAG_COMPOUND_REMOVE; - static Method NBT_TAG_COMPOUND_SET_BOOLEAN; - static Class ITEM_STACK; - static Method ITEM_STACK_GET_TAG; - static Method ITEM_STACK_SET_TAG; - static Class CRAFT_ITEM_STACK; - static Method CRAFT_ITEM_STACK_AS_BUKKIT_COPY; - static Method CRAFT_ITEM_STACK_AS_NMS_COPY; - static Method CRAFT_BLOCK_SET_DATA; - - static { - try { - NBT_TAG_COMPOUND = Class.forName(NET_MINECRAFT_SERVER + ".NBTTagCompound"); - NBT_TAG_COMPOUND_HAS_KEY = NBT_TAG_COMPOUND.getDeclaredMethod("hasKey", String.class); - NBT_TAG_COMPOUND_REMOVE = NBT_TAG_COMPOUND.getDeclaredMethod("remove", String.class); - NBT_TAG_COMPOUND_SET_BOOLEAN = NBT_TAG_COMPOUND.getDeclaredMethod("setBoolean", String.class, boolean.class); - ITEM_STACK = Class.forName(NET_MINECRAFT_SERVER + ".ItemStack"); - ITEM_STACK_GET_TAG = ITEM_STACK.getDeclaredMethod("getTag"); - ITEM_STACK_SET_TAG = ITEM_STACK.getDeclaredMethod("setTag", NBT_TAG_COMPOUND); - CRAFT_ITEM_STACK = Class.forName(ORG_BUKKIT_CRAFTBUKKIT + ".inventory.CraftItemStack"); - CRAFT_ITEM_STACK_AS_BUKKIT_COPY = CRAFT_ITEM_STACK.getDeclaredMethod("asBukkitCopy", ITEM_STACK); - CRAFT_ITEM_STACK_AS_NMS_COPY = CRAFT_ITEM_STACK.getDeclaredMethod("asNMSCopy", ItemStack.class); - CRAFT_BLOCK_SET_DATA = Class.forName(ReflectionUtil.ORG_BUKKIT_CRAFTBUKKIT + ".block.CraftBlock").getDeclaredMethod("setData", byte.class); - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalArgumentException exception) { - exception.printStackTrace(); - } - } - - static Object newInstance(Class clazz) { - try { - return clazz.newInstance(); - } catch (IllegalAccessException | InstantiationException exception) { - exception.printStackTrace(); - return null; - } - } - - static Object invoke(Method method, Object instance, Object... args) { - try { - return method.invoke(instance, args); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException exception) { - exception.printStackTrace(); - return null; - } - } - -}