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 extends Enum>) 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