package com.bergerkiller.bukkit.common.reflection.classes; import net.minecraft.server.Blocks; import org.bukkit.Material; import com.bergerkiller.bukkit.common.conversion.ConversionPairs; import com.bergerkiller.bukkit.common.internal.CommonNMS; import com.bergerkiller.bukkit.common.nbt.CommonTagCompound; import com.bergerkiller.bukkit.common.reflection.ClassTemplate; import com.bergerkiller.bukkit.common.reflection.FieldAccessor; import com.bergerkiller.bukkit.common.reflection.NMSClassTemplate; import com.bergerkiller.bukkit.common.reflection.SafeConstructor; import com.bergerkiller.bukkit.common.utils.CommonUtil; public class ItemStackRef { public static final ClassTemplate<?> TEMPLATE = NMSClassTemplate.create("ItemStack"); public static final FieldAccessor<Integer> data = TEMPLATE.getField("damage"); public static final FieldAccessor<Object> type = TEMPLATE.getField("item"); public static final FieldAccessor<Integer> amount = TEMPLATE.getField("count"); public static final FieldAccessor<CommonTagCompound> tag = CommonUtil.unsafeCast(TEMPLATE.getField("tag").translate(ConversionPairs.commonTag)); private static final SafeConstructor<?> constructor1 = TEMPLATE.getConstructor(BlockRef.TEMPLATE.getType(), int.class, int.class); @Deprecated public static Object newInstance(int typeId, int data, int amount) { return newInstance(Material.getMaterial(typeId), data, amount); } public static Object newInstance(Material type, int data, int amount) { // Why is Bukkit unable to create proper constructors? Really? -,- Object instance = constructor1.newInstance(Blocks.STONE, 1, 1); ItemStackRef.type.set(instance, CommonNMS.getItem(type)); ItemStackRef.data.set(instance, data); ItemStackRef.amount.set(instance, amount); return instance; } }