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
|
||||
|
||||
import com.willfp.eco.internal.fast.EcoFastItemStack
|
||||
import com.willfp.eco.proxy.v1_16_R3.FastItemStackUtils
|
||||
import com.willfp.eco.util.StringUtils
|
||||
import net.minecraft.server.v1_16_R3.*
|
||||
import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack
|
||||
@@ -11,7 +12,7 @@ import java.lang.reflect.Field
|
||||
import kotlin.experimental.and
|
||||
|
||||
class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemStack<ItemStack>(
|
||||
getNMSStack(itemStack)!!, itemStack
|
||||
FastItemStackUtils.getNMSStack(itemStack), itemStack
|
||||
) {
|
||||
private var loreCache: List<String>? = null
|
||||
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
|
||||
|
||||
import com.willfp.eco.internal.fast.EcoFastItemStack
|
||||
import com.willfp.eco.proxy.v1_17_R1.FastItemStackUtils
|
||||
import com.willfp.eco.util.StringUtils
|
||||
import net.minecraft.nbt.CompoundTag
|
||||
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.CraftNamespacedKey
|
||||
import org.bukkit.enchantments.Enchantment
|
||||
import java.lang.reflect.Field
|
||||
import kotlin.experimental.and
|
||||
|
||||
class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemStack<ItemStack>(
|
||||
getNMSStack(itemStack)!!, itemStack
|
||||
FastItemStackUtils.getNMSStack(itemStack), itemStack
|
||||
) {
|
||||
private var loreCache: List<String>? = null
|
||||
|
||||
@@ -120,28 +120,4 @@ class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemS
|
||||
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