diff --git a/src/com/dre/brewery/BCauldron.java b/src/com/dre/brewery/BCauldron.java index 359295f..c453e79 100644 --- a/src/com/dre/brewery/BCauldron.java +++ b/src/com/dre/brewery/BCauldron.java @@ -97,13 +97,13 @@ public class BCauldron { byte data = block.getData(); if (data > 3) { data = 3; - block.setData(data); + LegacyUtil.setData(block, data); } else if (data <= 0) { bcauldrons.remove(bcauldron); return false; } data -= 1; - block.setData(data); + LegacyUtil.setData(block, data); if (data == 0) { bcauldrons.remove(bcauldron); diff --git a/src/com/dre/brewery/LegacyUtil.java b/src/com/dre/brewery/LegacyUtil.java index 3857e2e..fb95adf 100644 --- a/src/com/dre/brewery/LegacyUtil.java +++ b/src/com/dre/brewery/LegacyUtil.java @@ -2,6 +2,7 @@ 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; @@ -18,12 +19,14 @@ public class LegacyUtil { private static Method GET_MATERIAL; private static Method GET_BLOCK_TYPE_ID_AT; + private static Method SET_DATA; static { try { GET_MATERIAL = Material.class.getDeclaredMethod("getMaterial", int.class); GET_BLOCK_TYPE_ID_AT = World.class.getDeclaredMethod("getBlockTypeIdAt", Location.class); - } catch (NoSuchMethodException | SecurityException ex) { + SET_DATA = Class.forName(Bukkit.getServer().getClass().getPackage().getName() + ".block.CraftBlock").getDeclaredMethod("setData", byte.class); + } catch (NoSuchMethodException | SecurityException | ClassNotFoundException ex) { } } @@ -175,4 +178,12 @@ public class LegacyUtil { } } + // 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 ex) { + } + } + }