Skip to content
This repository was archived by the owner on May 18, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,19 @@

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;

import de.essem.bukkit.flags.ItemFlag;
import dev.wolveringer.bungeeutil.BungeeUtil;
import dev.wolveringer.bungeeutil.UtilReflection;
import dev.wolveringer.bungeeutil.inventory.Inventory;
import dev.wolveringer.bungeeutil.item.Item;
import dev.wolveringer.bungeeutil.item.ItemStack;
import dev.wolveringer.bungeeutil.item.ItemStack.Click;
import dev.wolveringer.bungeeutil.item.SyncHandle;
import dev.wolveringer.nbt.NBTTagByte;
import dev.wolveringer.nbt.NBTTagCompound;
import dev.wolveringer.nbt.NBTTagInt;
import dev.wolveringer.nbt.NBTTagList;
Expand Down Expand Up @@ -172,12 +176,16 @@ public void setGlow(boolean flag) {
NBTTagList list;
this.getTag().set("ench", list = new NBTTagList());
list.add(new NBTTagCompound());

this.getTag().set("HideFlags", new NBTTagInt(1));
if(!hasItemFlag(ItemFlag.HIDE_ENCHANTS)) {
addItemFlags(ItemFlag.HIDE_ENCHANTS);
}
}
} else if (!flag) {
if (this.getTag().hasKey("ench")) {
this.getTag().remove("ench");
if(hasItemFlag(ItemFlag.HIDE_ENCHANTS)) {
removeItemFlags(ItemFlag.HIDE_ENCHANTS);
}
}
}
this.fireUpdate();
Expand All @@ -195,6 +203,50 @@ public void setLore(List<String> lore) {
this.getTag().getCompound("display").set("Lore", l);
this.fireUpdate();
}

private byte getFlagsRaw() {
return this.getTag().getByte("HideFlags");
}

private void setFlagsRaw(byte flags) {
this.getTag().set("HideFlags", new NBTTagByte(flags));
this.fireUpdate();
}

private byte getBitModifier(ItemFlag hideFlag) {
return (byte) (1 << hideFlag.ordinal());
}

@Override
public boolean hasItemFlag(ItemFlag flag) {
int bitModifier = getBitModifier(flag);
return (getFlagsRaw() & bitModifier) == bitModifier;
}

@Override
public Set<ItemFlag> getItemFlags() {
Set<ItemFlag> currentFlags = EnumSet.noneOf(ItemFlag.class);
for(ItemFlag f : ItemFlag.values()) {
if(hasItemFlag(f)) {
currentFlags.add(f);
}
}
return currentFlags;
}

@Override
public void removeItemFlags(ItemFlag ... hideFlags) {
for(ItemFlag f : hideFlags) {
this.setFlagsRaw((byte) (this.getFlagsRaw() & (getBitModifier(f) ^ 0xFFFFFFFF)));
}
}

@Override
public void addItemFlags(ItemFlag ... hideFlags) {
for (ItemFlag f : hideFlags) {
this.setFlagsRaw((byte)(this.getFlagsRaw() | getBitModifier(f)));
}
}

@Override
public String toString() {
Expand Down
12 changes: 12 additions & 0 deletions src/main/java/dev/wolveringer/bungeeutil/item/meta/ItemFlag.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package dev.wolveringer.bungeeutil.item.meta;


public enum ItemFlag {

HIDE_ENCHANTS,
HIDE_ATTRIBUTES,
HIDE_UNBREAKABLE,
HIDE_DESTROYS,
HIDE_PLACED_ON,
HIDE_POTION_EFFECTS;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.wolveringer.bungeeutil.item.meta;

import java.util.List;
import java.util.Set;

import dev.wolveringer.nbt.NBTTagCompound;

Expand Down Expand Up @@ -70,5 +71,10 @@ public interface ItemMeta extends Cloneable {
* the lore that will be set
*/
void setLore(List<String> lore);

public Set<ItemFlag> getItemFlags();
public void removeItemFlags(ItemFlag ... hideFlags);
public void addItemFlags(ItemFlag ... hideFlags);
public boolean hasItemFlag(ItemFlag flag);

}
Loading