Improves cross-version compatibility by using the MethodMapping class

This commit is contained in:
Christian Koop 2022-03-18 21:49:01 +01:00
parent e5e136b7d3
commit 8778140175
No known key found for this signature in database
GPG Key ID: 89A8181384E010A3
2 changed files with 13 additions and 6 deletions

View File

@ -2,6 +2,7 @@ package com.songoda.skyblock.utils.item;
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 com.songoda.core.utils.NMSUtils;
import org.bukkit.Material;
@ -75,10 +76,15 @@ public class ItemStackUtil {
Class<?> NBTTagCompoundClass = ClassMapping.NBT_TAG_COMPOUND.getClazz();
Constructor<?> nbtTagCompoundConstructor = NBTTagCompoundClass.getConstructor();
Object NBTTagCompound = nbtTagCompoundConstructor.newInstance();
Object NMSItemStackClass = NMSUtils.getCraftClass("inventory.CraftItemStack")
.getMethod("asNMSCopy", ItemStack.class).invoke(null, item);
ClassMapping.ITEM_STACK.getClazz().getMethod("save", NBTTagCompoundClass).invoke(NMSItemStackClass,
NBTTagCompound);
Object nmsItemStack = MethodMapping.CB_ITEM_STACK__AS_NMS_COPY
.getMethod(ClassMapping.CRAFT_ITEM_STACK.getClazz())
.invoke(null, item);
MethodMapping.ITEM_STACK__SAVE
.getMethod(ClassMapping.ITEM_STACK.getClazz())
.invoke(nmsItemStack, NBTTagCompound);
ClassMapping.NBT_COMPRESSED_STREAM_TOOLS.getClazz().getMethod("a", NBTTagCompoundClass, DataOutput.class)
.invoke(null, NBTTagCompound, dataOutput);
} catch (Exception e) {

View File

@ -2,6 +2,7 @@ package com.songoda.skyblock.utils.world.block;
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 com.songoda.core.utils.BlockUtils;
import com.songoda.core.utils.NMSUtils;
@ -502,10 +503,10 @@ public final class BlockUtil extends BlockUtils {
Class<?> blockPositionClass = ClassMapping.BLOCK_POSITION.getClazz();
Object worldHandle = world.getClass().getMethod("getHandle").invoke(world);
Object worldHandle = MethodMapping.CB_GENERIC__GET_HANDLE.getMethod(world.getClass()).invoke(world);
Object blockPosition = blockPositionClass.getConstructor(int.class, int.class, int.class).newInstance(block.getX(), block.getY(), block.getZ());
Object tileEntity = worldHandle.getClass().getMethod("getTileEntity", blockPositionClass).invoke(worldHandle, blockPosition);
Object itemStack = NMSUtils.getCraftClass("inventory.CraftItemStack").getMethod("asNMSCopy", is.getClass()).invoke(null, is);
Object itemStack = MethodMapping.CB_ITEM_STACK__AS_NMS_COPY.getMethod(ClassMapping.CRAFT_ITEM_STACK.getClazz()).invoke(null, is);
Object item = itemStack.getClass().getMethod("getItem").invoke(itemStack);
Object data = itemStack.getClass().getMethod("getData").invoke(itemStack);