Added ItemFlags to FastItemStack
This commit is contained in:
@@ -3,6 +3,7 @@ package com.willfp.eco.core.fast;
|
||||
import com.willfp.eco.core.Eco;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -10,6 +11,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* FastItemStack contains methods to modify and read items faster than in default bukkit.
|
||||
@@ -51,17 +53,47 @@ public interface FastItemStack {
|
||||
/**
|
||||
* Set the rework penalty.
|
||||
*
|
||||
* @param cost The rework penalty to set.
|
||||
* @param cost The rework penalty to set.
|
||||
*/
|
||||
void setRepairCost(int cost);
|
||||
|
||||
/**
|
||||
* Get the rework penalty.
|
||||
*.
|
||||
* .
|
||||
*
|
||||
* @return The rework penalty found on the item.
|
||||
*/
|
||||
int getRepairCost();
|
||||
|
||||
/**
|
||||
* Add ItemFlags.
|
||||
*
|
||||
* @param hideFlags The flags.
|
||||
*/
|
||||
void addItemFlags(ItemFlag... hideFlags);
|
||||
|
||||
/**
|
||||
* Remove ItemFlags.
|
||||
*
|
||||
* @param hideFlags The flags.
|
||||
*/
|
||||
void removeItemFlags(ItemFlag... hideFlags);
|
||||
|
||||
/**
|
||||
* Get the ItemFlags.
|
||||
*
|
||||
* @return The flags.
|
||||
*/
|
||||
Set<ItemFlag> getItemFlags();
|
||||
|
||||
/**
|
||||
* Test the item for a flag.
|
||||
*
|
||||
* @param flag The flag.
|
||||
* @return If the flag is present.
|
||||
*/
|
||||
boolean hasItemFlag(ItemFlag flag);
|
||||
|
||||
/**
|
||||
* Get the Bukkit ItemStack again.
|
||||
*
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.willfp.eco.internal.fast
|
||||
|
||||
import com.willfp.eco.core.fast.FastItemStack
|
||||
import org.bukkit.inventory.ItemFlag
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
abstract class EcoFastItemStack<T: Any>(
|
||||
@@ -10,4 +11,8 @@ abstract class EcoFastItemStack<T: Any>(
|
||||
override fun unwrap(): ItemStack {
|
||||
return bukkit
|
||||
}
|
||||
|
||||
fun getBitModifier(hideFlag: ItemFlag): Int {
|
||||
return 1 shl hideFlag.ordinal
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack
|
||||
import org.bukkit.craftbukkit.v1_16_R3.util.CraftMagicNumbers
|
||||
import org.bukkit.craftbukkit.v1_16_R3.util.CraftNamespacedKey
|
||||
import org.bukkit.enchantments.Enchantment
|
||||
import org.bukkit.inventory.ItemFlag
|
||||
import java.lang.reflect.Field
|
||||
import kotlin.experimental.and
|
||||
|
||||
@@ -96,6 +97,49 @@ class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemS
|
||||
}
|
||||
}
|
||||
|
||||
override fun addItemFlags(vararg hideFlags: ItemFlag) {
|
||||
for (flag in hideFlags) {
|
||||
this.flagBits = this.flagBits or getBitModifier(flag)
|
||||
}
|
||||
}
|
||||
|
||||
override fun removeItemFlags(vararg hideFlags: ItemFlag) {
|
||||
for (flag in hideFlags) {
|
||||
this.flagBits = this.flagBits and getBitModifier(flag)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getItemFlags(): MutableSet<ItemFlag> {
|
||||
val flags = mutableSetOf<ItemFlag>()
|
||||
|
||||
var flagArr: Array<ItemFlag>
|
||||
val size = ItemFlag.values().also { flagArr = it }.size
|
||||
|
||||
for (i in 0 until size) {
|
||||
val flag = flagArr[i]
|
||||
if (this.hasItemFlag(flag)) {
|
||||
flags.add(flag)
|
||||
}
|
||||
}
|
||||
|
||||
return flags
|
||||
}
|
||||
|
||||
override fun hasItemFlag(flag: ItemFlag): Boolean {
|
||||
val bitModifier = getBitModifier(flag)
|
||||
return this.flagBits and bitModifier == bitModifier
|
||||
}
|
||||
|
||||
private var flagBits: Int
|
||||
get() =
|
||||
if (handle.hasTag() && handle.tag!!.hasKeyOfType(
|
||||
"HideFlags",
|
||||
99
|
||||
)
|
||||
) handle.tag!!.getInt("HideFlags") else 0
|
||||
set(value) =
|
||||
handle.orCreateTag.setInt("HideFlags", value)
|
||||
|
||||
override fun getRepairCost(): Int {
|
||||
return handle.repairCost;
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ 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 org.bukkit.inventory.ItemFlag
|
||||
import kotlin.experimental.and
|
||||
|
||||
class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemStack<ItemStack>(
|
||||
@@ -115,6 +116,49 @@ class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemS
|
||||
}
|
||||
}
|
||||
|
||||
override fun addItemFlags(vararg hideFlags: ItemFlag) {
|
||||
for (flag in hideFlags) {
|
||||
this.flagBits = this.flagBits or getBitModifier(flag)
|
||||
}
|
||||
}
|
||||
|
||||
override fun removeItemFlags(vararg hideFlags: ItemFlag) {
|
||||
for (flag in hideFlags) {
|
||||
this.flagBits = this.flagBits and getBitModifier(flag)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getItemFlags(): MutableSet<ItemFlag> {
|
||||
val flags = mutableSetOf<ItemFlag>()
|
||||
|
||||
var flagArr: Array<ItemFlag>
|
||||
val size = ItemFlag.values().also { flagArr = it }.size
|
||||
|
||||
for (i in 0 until size) {
|
||||
val flag = flagArr[i]
|
||||
if (this.hasItemFlag(flag)) {
|
||||
flags.add(flag)
|
||||
}
|
||||
}
|
||||
|
||||
return flags
|
||||
}
|
||||
|
||||
override fun hasItemFlag(flag: ItemFlag): Boolean {
|
||||
val bitModifier = getBitModifier(flag)
|
||||
return this.flagBits and bitModifier == bitModifier
|
||||
}
|
||||
|
||||
private var flagBits: Int
|
||||
get() =
|
||||
if (handle.hasTag() && handle.tag!!.contains(
|
||||
"HideFlags",
|
||||
99
|
||||
)
|
||||
) handle.tag!!.getInt("HideFlags") else 0
|
||||
set(value) =
|
||||
handle.orCreateTag.putInt("HideFlags", value)
|
||||
|
||||
override fun getRepairCost(): Int {
|
||||
return handle.baseRepairCost;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user