diff --git a/Compatibility/pom.xml b/Compatibility/pom.xml index e615d731..ef35414e 100644 --- a/Compatibility/pom.xml +++ b/Compatibility/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../pom.xml diff --git a/Compatibility/src/main/java/com/songoda/core/compatibility/ClassMapping.java b/Compatibility/src/main/java/com/songoda/core/compatibility/ClassMapping.java index 16ff59aa..9687064a 100644 --- a/Compatibility/src/main/java/com/songoda/core/compatibility/ClassMapping.java +++ b/Compatibility/src/main/java/com/songoda/core/compatibility/ClassMapping.java @@ -44,7 +44,9 @@ public enum ClassMapping { CRAFT_ITEM_STACK("inventory", "CraftItemStack"), CRAFT_MAGIC_NUMBERS("util", "CraftMagicNumbers"), CRAFT_PLAYER("entity", "CraftPlayer"), - CRAFT_WORLD("CraftWorld"); + CRAFT_WORLD("CraftWorld"), + + MOJANGSON_PARSER("nbt", "MojangsonParser"); private final String packageName; private final String className; diff --git a/Compatibility/src/main/java/com/songoda/core/compatibility/MethodMapping.java b/Compatibility/src/main/java/com/songoda/core/compatibility/MethodMapping.java index a13af1b6..70be8270 100644 --- a/Compatibility/src/main/java/com/songoda/core/compatibility/MethodMapping.java +++ b/Compatibility/src/main/java/com/songoda/core/compatibility/MethodMapping.java @@ -1,11 +1,11 @@ package com.songoda.core.compatibility; +import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import java.lang.reflect.Method; public enum MethodMapping { - MC_ITEM_STACK__GET_TAG("getTag", "getTag", "s"), MC_ITEM_STACK__SET_TAG("setTag", "setTag", "c", ClassMapping.NBT_TAG_COMPOUND.getClazz()), @@ -14,17 +14,40 @@ public enum MethodMapping { MC_NBT_TAG_COMPOUND__SET_STRING("setString", "setString", "a", String.class, String.class), MC_NBT_TAG_COMPOUND__REMOVE("remove", "remove", "r", String.class), - CB_ITEM_STACK__AS_NMS_COPY("asNMSCopy", "asNMSCopy", ItemStack.class), - CB_ITEM_STACK__AS_CRAFT_MIRROR("asCraftMirror", "asCraftMirror", ClassMapping.ITEM_STACK.getClazz()), + CB_GENERIC__GET_HANDLE("getHandle"), - MC_NBT_TAG_LIST__ADD("add", "a", "add", "add", ClassMapping.NBT_BASE.getClazz()), + CB_BLOCK__GET_NMS("getNMS"), + CB_BLOCK__GET_POSITION("getPosition"), + + CB_ITEM_STACK__AS_NMS_COPY("asNMSCopy", ItemStack.class), + CB_ITEM_STACK__AS_CRAFT_MIRROR("asCraftMirror", ClassMapping.ITEM_STACK.getClazz()), + + CRAFT_MAGIC_NUMBERS__GET_BLOCK__MATERIAL("getBlock", Material.class), + + MC_CHUNK__GET_WORLD("getWorld", "D"), + + MC_NBT_TAG_LIST__ADD("add", "a", "add", "c", ClassMapping.NBT_BASE.getClazz()), + + I_BLOCK_DATA__GET_BLOCK("getBlock", "b"), + BLOCK__GET_BLOCK_DATA("getBlockData", "n"), + + CHUNK__SET_BLOCK_STATE("setType", "setBlockState", ClassMapping.BLOCK_POSITION.getClazz(), ClassMapping.I_BLOCK_DATA.getClazz(), boolean.class, boolean.class), + + ITEM_STACK__SAVE("save", "b", ClassMapping.NBT_TAG_COMPOUND.getClazz()), + ITEM_STACK__GET_ITEM("getItem", "c"), + ITEM_STACK__GET_MAX_STACK_SIZE("getMaxStackSize", "l"), + + WORLD__UPDATE_ADJACENT_COMPARATORS("updateAdjacentComparators", "c", ClassMapping.BLOCK_POSITION.getClazz(), ClassMapping.BLOCK.getClazz()), + WORLD__GET_CHUNK_AT("getChunkAt", "d", int.class, int.class), WORLD_BOARDER__SET_CENTER("setCenter", "setCenter", "setCenter", "c", double.class, double.class), WORLD_BOARDER__SET_SIZE("setSize", "setSize", "setSize", "a", double.class), WORLD_BOARDER__SET_WARNING_TIME("setWarningTime", "setWarningTime", "setWarningTime", "b", int.class), WORLD_BOARDER__SET_WARNING_DISTANCE("setWarningDistance", "setWarningDistance", "setWarningDistance", "c", int.class), - WORLD_BOARDER__TRANSITION_SIZE_BETWEEN("transitionSizeBetween", "transitionSizeBetween", "transitionSizeBetween", "a", double.class, double.class, long.class); + WORLD_BOARDER__TRANSITION_SIZE_BETWEEN("transitionSizeBetween", "transitionSizeBetween", "transitionSizeBetween", "a", double.class, double.class, long.class), + + MOJANGSON_PARSER__PARSE("parse", "a", String.class); private final String saneFallback; private final String _1_14; @@ -59,29 +82,42 @@ public enum MethodMapping { this.paramaters = paramaters; } + MethodMapping(String saneFallback, Class... paramaters) { + this.saneFallback = saneFallback; + + this._1_14 = null; + this._1_17 = null; + this._1_18 = null; + this.paramaters = paramaters; + } + public Method getMethod(Class clazz) { try { String methodName = _1_18; switch (ServerVersion.getServerVersion()) { case V1_14: - if (_1_14 != null) + if (_1_14 != null) { methodName = _1_14; + } + break; case V1_17: - if (_1_17 != null) + if (_1_17 != null) { methodName = _1_17; + } + break; } try { - Method method = clazz.getDeclaredMethod(methodName, paramaters); + Method method = clazz.getMethod(methodName, paramaters); method.setAccessible(true); return method; - } catch (NoSuchMethodException ex) { - if (saneFallback != null) { + } catch (NullPointerException | NoSuchMethodException ex) { + if (saneFallback != null && !saneFallback.equals(methodName)) { try { - Method method = clazz.getDeclaredMethod(saneFallback, paramaters); + Method method = clazz.getMethod(saneFallback, paramaters); method.setAccessible(true); return method; @@ -89,6 +125,8 @@ public enum MethodMapping { ex.printStackTrace(); innerEx.printStackTrace(); } + } else { + ex.printStackTrace(); } } } catch (Exception ex) { diff --git a/Core/pom.xml b/Core/pom.xml index 1a3b4290..24538cb5 100644 --- a/Core/pom.xml +++ b/Core/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../pom.xml diff --git a/Core/src/main/java/com/songoda/core/utils/BlockUtils.java b/Core/src/main/java/com/songoda/core/utils/BlockUtils.java index 3f02d7d4..3329cff4 100644 --- a/Core/src/main/java/com/songoda/core/utils/BlockUtils.java +++ b/Core/src/main/java/com/songoda/core/utils/BlockUtils.java @@ -2,6 +2,7 @@ package com.songoda.core.utils; import com.songoda.core.compatibility.ClassMapping; import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.MethodMapping; import com.songoda.core.compatibility.ServerVersion; import org.bukkit.Effect; import org.bukkit.Location; @@ -346,28 +347,20 @@ public class BlockUtils { try { if (chunkToNmsChunk == null) { - chunkToNmsChunk = loc.getChunk().getClass().getMethod("getHandle"); - nmsChunkGetWorld = chunkToNmsChunk.getReturnType().getMethod("getWorld"); + chunkToNmsChunk = MethodMapping.CB_GENERIC__GET_HANDLE.getMethod(ClassMapping.CRAFT_CHUNK.getClazz()); + nmsChunkGetWorld = MethodMapping.MC_CHUNK__GET_WORLD.getMethod(chunkToNmsChunk.getReturnType()); - Class blockPositionClass; - try { - craftBlockGetPosition = craftBlock.getClass().getMethod("getPosition"); - - blockPositionClass = craftBlockGetPosition.getReturnType(); - } catch (NoSuchMethodException ignore) { - blockPositionClass = ClassMapping.BLOCK_POSITION.getClazz(); - - blockPositionConstructor = blockPositionClass.getConstructor(double.class, double.class, double.class); + craftBlockGetPosition = MethodMapping.CB_BLOCK__GET_POSITION.getMethod(ClassMapping.CRAFT_BLOCK.getClazz()); + if (craftBlockGetPosition == null) { + blockPositionConstructor = ClassMapping.BLOCK_POSITION.getClazz().getConstructor(double.class, double.class, double.class); } - nmsWorldUpdateAdjacentComparators = nmsChunkGetWorld.getReturnType().getMethod("updateAdjacentComparators", blockPositionClass, ClassMapping.BLOCK.getClazz()); + nmsWorldUpdateAdjacentComparators = MethodMapping.WORLD__UPDATE_ADJACENT_COMPARATORS.getMethod(ClassMapping.WORLD.getClazz()); - try { - craftBlockBlockDataGetter = craftBlock.getClass().getMethod("getNMS"); - blockDataGetBlock = craftBlockBlockDataGetter.getReturnType().getMethod("getBlock"); - } catch (NoSuchMethodException ignore) { - craftMagicNumbersGetBlockByMaterial = ClassMapping.CRAFT_MAGIC_NUMBERS.getClazz() - .getMethod("getBlock", craftBlock.getType().getClass()); + craftBlockBlockDataGetter = MethodMapping.CB_BLOCK__GET_NMS.getMethod(ClassMapping.CRAFT_BLOCK.getClazz()); + blockDataGetBlock = MethodMapping.I_BLOCK_DATA__GET_BLOCK.getMethod(ClassMapping.I_BLOCK_DATA.getClazz()); + if (craftBlockBlockDataGetter == null || blockDataGetBlock == null) { + craftMagicNumbersGetBlockByMaterial = MethodMapping.CRAFT_MAGIC_NUMBERS__GET_BLOCK__MATERIAL.getMethod(ClassMapping.CRAFT_MAGIC_NUMBERS.getClazz()); } } @@ -389,7 +382,7 @@ public class BlockUtils { } nmsWorldUpdateAdjacentComparators.invoke(nmsWorld, blockPosition, nmsBlock); - } catch (ReflectiveOperationException ex) { + } catch (NullPointerException | ReflectiveOperationException ex) { ex.printStackTrace(); } } @@ -419,11 +412,11 @@ public class BlockUtils { Class clazzChunk = ClassMapping.CHUNK.getClazz(); getHandle = clazzCraftWorld.getMethod("getHandle"); - getChunkAt = clazzWorld.getMethod("getChunkAt", int.class, int.class); + getChunkAt = MethodMapping.WORLD__GET_CHUNK_AT.getMethod(clazzWorld); if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { - getBlockData = clazzBlock.getMethod("getBlockData"); - setType = clazzChunk.getMethod("setType", clazzBlockPosition, clazzIBlockData, boolean.class); + getBlockData = MethodMapping.BLOCK__GET_BLOCK_DATA.getMethod(ClassMapping.BLOCK.getClazz()); + setType = MethodMapping.CHUNK__SET_BLOCK_STATE.getMethod(ClassMapping.CHUNK.getClazz()); } else { getByCombinedId = clazzBlock.getMethod("getByCombinedId", int.class); setType = clazzChunk.getMethod("a", clazzBlockPosition, clazzIBlockData); diff --git a/Core/src/main/java/com/songoda/core/utils/ItemUtils.java b/Core/src/main/java/com/songoda/core/utils/ItemUtils.java index 235cb2e0..12afdbc7 100644 --- a/Core/src/main/java/com/songoda/core/utils/ItemUtils.java +++ b/Core/src/main/java/com/songoda/core/utils/ItemUtils.java @@ -318,34 +318,6 @@ public class ItemUtils { return item; } - private static Class mc_Item = ClassMapping.ITEM.getClazz(); - private static Method mc_Item_getItem; - private static Field mc_Item_maxStackSize; - - static { - if (mc_ItemStack != null) { - try { - mc_Item_getItem = mc_ItemStack.getDeclaredMethod("getItem"); - mc_Item_maxStackSize = mc_Item.getDeclaredField("maxStackSize"); - mc_Item_maxStackSize.setAccessible(true); - } catch (Exception ignore) { - } - } - } - - public static ItemStack setMaxStack(ItemStack item, int max) { - if (item != null && mc_Item_maxStackSize != null) { - try { - Object objItemStack = mc_Item_getItem.invoke(cb_CraftItemStack_asNMSCopy.invoke(null, item)); - mc_Item_maxStackSize.set(objItemStack, max); - } catch (ReflectiveOperationException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Failed to set max stack size on item " + item, ex); - } - } - - return item; - } - public static ItemStack getPlayerSkull(OfflinePlayer player) { ItemStack head = CompatibleMaterial.PLAYER_HEAD.getItem(); if (ServerVersion.isServerVersionBelow(ServerVersion.V1_8)) { diff --git a/Core/src/main/java/com/songoda/core/world/SWorldBorder.java b/Core/src/main/java/com/songoda/core/world/SWorldBorder.java index 8f3f5545..de9d981b 100644 --- a/Core/src/main/java/com/songoda/core/world/SWorldBorder.java +++ b/Core/src/main/java/com/songoda/core/world/SWorldBorder.java @@ -55,10 +55,8 @@ public class SWorldBorder { Object worldBorder = worldBorderClass.getConstructor().newInstance(); if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) { - Object craftWorld = craftWorldClass.cast(centerLocation.getWorld()); - Method getHandleMethod = craftWorld.getClass().getMethod("getHandle"); - Object worldServer = getHandleMethod.invoke(craftWorld); - NMSUtils.setField(worldBorder, "world", worldServer, false); + Object nmsWorld = MethodMapping.CB_GENERIC__GET_HANDLE.getMethod(ClassMapping.CRAFT_WORLD.getClazz()).invoke(centerLocation.getWorld()); + NMSUtils.setField(worldBorder, "world", nmsWorld, false); } Method setCenter = MethodMapping.WORLD_BOARDER__SET_CENTER.getMethod(ClassMapping.WORLD_BORDER.getClazz()); @@ -87,7 +85,7 @@ public class SWorldBorder { } else { @SuppressWarnings({"unchecked", "rawtypes"}) Object packet = packetPlayOutWorldBorderConstructor.newInstance(worldBorder, - Enum.valueOf((Class) packetPlayOutWorldBorderEnumClass, "INITIALIZE")); + Enum.valueOf((Class) packetPlayOutWorldBorderEnumClass, "INITIALIZE")); NmsManager.getPlayer().sendPacket(player, packet); } } catch (InstantiationException | InvocationTargetException | NoSuchMethodException | IllegalAccessException ex) { diff --git a/NMS/NMS-API/pom.xml b/NMS/NMS-API/pom.xml index cb8891ad..80798cbf 100644 --- a/NMS/NMS-API/pom.xml +++ b/NMS/NMS-API/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_10_R1/pom.xml b/NMS/NMS-v1_10_R1/pom.xml index 235dda10..33ea32cd 100644 --- a/NMS/NMS-v1_10_R1/pom.xml +++ b/NMS/NMS-v1_10_R1/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_11_R1/pom.xml b/NMS/NMS-v1_11_R1/pom.xml index 6c2141f1..61b2a75a 100644 --- a/NMS/NMS-v1_11_R1/pom.xml +++ b/NMS/NMS-v1_11_R1/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_12_R1/pom.xml b/NMS/NMS-v1_12_R1/pom.xml index ae655ef8..66e0d451 100644 --- a/NMS/NMS-v1_12_R1/pom.xml +++ b/NMS/NMS-v1_12_R1/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_13_R1/pom.xml b/NMS/NMS-v1_13_R1/pom.xml index b0d7d56d..da63ef42 100644 --- a/NMS/NMS-v1_13_R1/pom.xml +++ b/NMS/NMS-v1_13_R1/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_13_R2/pom.xml b/NMS/NMS-v1_13_R2/pom.xml index 4fa82576..cf3fb211 100644 --- a/NMS/NMS-v1_13_R2/pom.xml +++ b/NMS/NMS-v1_13_R2/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_14_R1/pom.xml b/NMS/NMS-v1_14_R1/pom.xml index 6f15f5d4..a724745f 100644 --- a/NMS/NMS-v1_14_R1/pom.xml +++ b/NMS/NMS-v1_14_R1/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_15_R1/pom.xml b/NMS/NMS-v1_15_R1/pom.xml index 6e0b539b..d9d3d22d 100644 --- a/NMS/NMS-v1_15_R1/pom.xml +++ b/NMS/NMS-v1_15_R1/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_16_R1/pom.xml b/NMS/NMS-v1_16_R1/pom.xml index 2ce5ad51..8cfaf63b 100644 --- a/NMS/NMS-v1_16_R1/pom.xml +++ b/NMS/NMS-v1_16_R1/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_16_R2/pom.xml b/NMS/NMS-v1_16_R2/pom.xml index f06bd11e..580dee90 100644 --- a/NMS/NMS-v1_16_R2/pom.xml +++ b/NMS/NMS-v1_16_R2/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_16_R3/pom.xml b/NMS/NMS-v1_16_R3/pom.xml index 0f7374cd..b7cdb1a0 100644 --- a/NMS/NMS-v1_16_R3/pom.xml +++ b/NMS/NMS-v1_16_R3/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_17_R1/pom.xml b/NMS/NMS-v1_17_R1/pom.xml index 96144095..3159cda5 100644 --- a/NMS/NMS-v1_17_R1/pom.xml +++ b/NMS/NMS-v1_17_R1/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_18_R1/pom.xml b/NMS/NMS-v1_18_R1/pom.xml index 560bb828..9808b2d5 100644 --- a/NMS/NMS-v1_18_R1/pom.xml +++ b/NMS/NMS-v1_18_R1/pom.xml @@ -19,7 +19,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_8_R1/pom.xml b/NMS/NMS-v1_8_R1/pom.xml index eb25d090..aa47d584 100644 --- a/NMS/NMS-v1_8_R1/pom.xml +++ b/NMS/NMS-v1_8_R1/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_8_R2/pom.xml b/NMS/NMS-v1_8_R2/pom.xml index 2afc29ec..25ea90ce 100644 --- a/NMS/NMS-v1_8_R2/pom.xml +++ b/NMS/NMS-v1_8_R2/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_8_R3/pom.xml b/NMS/NMS-v1_8_R3/pom.xml index 24316a7e..5942cfde 100644 --- a/NMS/NMS-v1_8_R3/pom.xml +++ b/NMS/NMS-v1_8_R3/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_9_R1/pom.xml b/NMS/NMS-v1_9_R1/pom.xml index 8cbd66f8..0d72adbd 100644 --- a/NMS/NMS-v1_9_R1/pom.xml +++ b/NMS/NMS-v1_9_R1/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/NMS/NMS-v1_9_R2/pom.xml b/NMS/NMS-v1_9_R2/pom.xml index 98f9bba4..fa48537a 100644 --- a/NMS/NMS-v1_9_R2/pom.xml +++ b/NMS/NMS-v1_9_R2/pom.xml @@ -7,7 +7,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 ../../pom.xml diff --git a/pom.xml b/pom.xml index f7ed764b..08f623e3 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.songoda SongodaCore-Modules - 2.6.6 + 2.6.7 pom