Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f274b9045e | ||
|
|
2241a5c90f | ||
|
|
bbc38ae801 | ||
|
|
e77346ed62 | ||
|
|
6117abca56 |
@@ -0,0 +1,43 @@
|
|||||||
|
package com.willfp.eco.proxy.v1_16_R3;
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.libs.org.apache.commons.lang3.Validate;
|
||||||
|
import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
public class FastItemStackUtils {
|
||||||
|
private static final Field FIELD;
|
||||||
|
|
||||||
|
public static net.minecraft.server.v1_16_R3.ItemStack getNMSStack(@NotNull final ItemStack itemStack) {
|
||||||
|
if (!(itemStack instanceof CraftItemStack)) {
|
||||||
|
return CraftItemStack.asNMSCopy(itemStack);
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
net.minecraft.server.v1_16_R3.ItemStack nms = (net.minecraft.server.v1_16_R3.ItemStack) FIELD.get(itemStack);
|
||||||
|
return nms == null ? CraftItemStack.asNMSCopy(itemStack) : nms;
|
||||||
|
} catch (ReflectiveOperationException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return net.minecraft.server.v1_16_R3.ItemStack.b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
Field temp = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Field handleField = CraftItemStack.class.getDeclaredField("handle");
|
||||||
|
handleField.setAccessible(true);
|
||||||
|
temp = handleField;
|
||||||
|
} catch (ReflectiveOperationException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
assert temp != null;
|
||||||
|
Validate.notNull(temp, "Error occurred in initialization!");
|
||||||
|
|
||||||
|
FIELD = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.willfp.eco.proxy.v1_16_R3.fast
|
package com.willfp.eco.proxy.v1_16_R3.fast
|
||||||
|
|
||||||
import com.willfp.eco.internal.fast.EcoFastItemStack
|
import com.willfp.eco.internal.fast.EcoFastItemStack
|
||||||
|
import com.willfp.eco.proxy.v1_16_R3.FastItemStackUtils
|
||||||
import com.willfp.eco.util.StringUtils
|
import com.willfp.eco.util.StringUtils
|
||||||
import net.minecraft.server.v1_16_R3.*
|
import net.minecraft.server.v1_16_R3.*
|
||||||
import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack
|
import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack
|
||||||
@@ -11,7 +12,7 @@ import java.lang.reflect.Field
|
|||||||
import kotlin.experimental.and
|
import kotlin.experimental.and
|
||||||
|
|
||||||
class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemStack<ItemStack>(
|
class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemStack<ItemStack>(
|
||||||
getNMSStack(itemStack)!!, itemStack
|
FastItemStackUtils.getNMSStack(itemStack), itemStack
|
||||||
) {
|
) {
|
||||||
private var loreCache: List<String>? = null
|
private var loreCache: List<String>? = null
|
||||||
override fun getEnchantmentsOnItem(checkStored: Boolean): Map<Enchantment, Int> {
|
override fun getEnchantmentsOnItem(checkStored: Boolean): Map<Enchantment, Int> {
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package com.willfp.eco.proxy.v1_17_R1;
|
||||||
|
|
||||||
|
import lombok.experimental.UtilityClass;
|
||||||
|
import org.bukkit.craftbukkit.libs.org.apache.commons.lang3.Validate;
|
||||||
|
import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
@UtilityClass
|
||||||
|
public class FastItemStackUtils {
|
||||||
|
private static final Field FIELD;
|
||||||
|
|
||||||
|
public static net.minecraft.world.item.ItemStack getNMSStack(@NotNull final ItemStack itemStack) {
|
||||||
|
if (!(itemStack instanceof CraftItemStack)) {
|
||||||
|
return CraftItemStack.asNMSCopy(itemStack);
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
net.minecraft.world.item.ItemStack nms = (net.minecraft.world.item.ItemStack) FIELD.get(itemStack);
|
||||||
|
return nms == null ? CraftItemStack.asNMSCopy(itemStack) : nms;
|
||||||
|
} catch (ReflectiveOperationException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return net.minecraft.world.item.ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
Field temp = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Field handleField = CraftItemStack.class.getDeclaredField("handle");
|
||||||
|
handleField.setAccessible(true);
|
||||||
|
temp = handleField;
|
||||||
|
} catch (ReflectiveOperationException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
assert temp != null;
|
||||||
|
Validate.notNull(temp, "Error occurred in initialization!");
|
||||||
|
|
||||||
|
FIELD = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.willfp.eco.proxy.v1_17_R1.fast
|
package com.willfp.eco.proxy.v1_17_R1.fast
|
||||||
|
|
||||||
import com.willfp.eco.internal.fast.EcoFastItemStack
|
import com.willfp.eco.internal.fast.EcoFastItemStack
|
||||||
|
import com.willfp.eco.proxy.v1_17_R1.FastItemStackUtils
|
||||||
import com.willfp.eco.util.StringUtils
|
import com.willfp.eco.util.StringUtils
|
||||||
import net.minecraft.nbt.CompoundTag
|
import net.minecraft.nbt.CompoundTag
|
||||||
import net.minecraft.nbt.ListTag
|
import net.minecraft.nbt.ListTag
|
||||||
@@ -12,11 +13,10 @@ import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack
|
|||||||
import org.bukkit.craftbukkit.v1_17_R1.util.CraftMagicNumbers
|
import org.bukkit.craftbukkit.v1_17_R1.util.CraftMagicNumbers
|
||||||
import org.bukkit.craftbukkit.v1_17_R1.util.CraftNamespacedKey
|
import org.bukkit.craftbukkit.v1_17_R1.util.CraftNamespacedKey
|
||||||
import org.bukkit.enchantments.Enchantment
|
import org.bukkit.enchantments.Enchantment
|
||||||
import java.lang.reflect.Field
|
|
||||||
import kotlin.experimental.and
|
import kotlin.experimental.and
|
||||||
|
|
||||||
class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemStack<ItemStack>(
|
class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemStack<ItemStack>(
|
||||||
getNMSStack(itemStack)!!, itemStack
|
FastItemStackUtils.getNMSStack(itemStack), itemStack
|
||||||
) {
|
) {
|
||||||
private var loreCache: List<String>? = null
|
private var loreCache: List<String>? = null
|
||||||
|
|
||||||
@@ -120,28 +120,4 @@ class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemS
|
|||||||
bukkit.itemMeta = CraftItemStack.asCraftMirror(handle).itemMeta
|
bukkit.itemMeta = CraftItemStack.asCraftMirror(handle).itemMeta
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
|
||||||
private var field: Field
|
|
||||||
|
|
||||||
init {
|
|
||||||
lateinit var temp: Field
|
|
||||||
try {
|
|
||||||
val handleField = CraftItemStack::class.java.getDeclaredField("handle")
|
|
||||||
handleField.isAccessible = true
|
|
||||||
temp = handleField
|
|
||||||
} catch (e: ReflectiveOperationException) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
field = temp
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getNMSStack(itemStack: org.bukkit.inventory.ItemStack): ItemStack? {
|
|
||||||
return if (itemStack !is CraftItemStack) {
|
|
||||||
CraftItemStack.asNMSCopy(itemStack)
|
|
||||||
} else {
|
|
||||||
field.get(itemStack) as ItemStack
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user