Skip to content

Commit

Permalink
add itemtag property invisible
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Dec 27, 2020
1 parent 0e5137a commit 43388bc
Show file tree
Hide file tree
Showing 3 changed files with 139 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ public static void registermainProperties() {
PropertyParser.registerProperty(ItemEnchantments.class, ItemTag.class);
PropertyParser.registerProperty(ItemFirework.class, ItemTag.class);
PropertyParser.registerProperty(ItemFlags.class, ItemTag.class);
PropertyParser.registerProperty(ItemFrameInvisible.class, ItemTag.class);
PropertyParser.registerProperty(ItemHidden.class, ItemTag.class);
PropertyParser.registerProperty(ItemInventory.class, ItemTag.class);
PropertyParser.registerProperty(ItemKnowledgeBookRecipes.class, ItemTag.class);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
package com.denizenscript.denizen.objects.properties.item;

import com.denizenscript.denizen.nms.NMSHandler;
import com.denizenscript.denizen.nms.util.jnbt.ByteTag;
import com.denizenscript.denizen.nms.util.jnbt.CompoundTag;
import com.denizenscript.denizen.nms.util.jnbt.Tag;
import com.denizenscript.denizen.objects.ItemTag;
import com.denizenscript.denizencore.objects.Mechanism;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.properties.Property;
import com.denizenscript.denizencore.tags.Attribute;
import org.bukkit.Material;

import java.util.LinkedHashMap;
import java.util.Map;

public class ItemFrameInvisible implements Property {

public static boolean describes(ObjectTag object) {
return object instanceof ItemTag && ((ItemTag) object).getBukkitMaterial() == Material.ITEM_FRAME;
}

public static ItemFrameInvisible getFrom(ObjectTag object) {
if (!describes(object)) {
return null;
}
return new ItemFrameInvisible((ItemTag) object);
}

public static final String[] handledTags = new String[] {
"invisible"
};

public static final String[] handledMechs = new String[] {
"invisible"
};

private ItemFrameInvisible(ItemTag item) {
this.item = item;
}

ItemTag item;

public boolean isInvisible() {
CompoundTag compoundTag = NMSHandler.getItemHelper().getNbtData(item.getItemStack());
if (compoundTag == null) {
return false;
}
CompoundTag entTag = (CompoundTag) compoundTag.getValue().get("EntityTag");
if (entTag == null) {
return false;
}
byte b = entTag.getByte("Invisible");
return b == 1;
}

public ObjectTag getObjectAttribute(Attribute attribute) {

if (attribute == null) {
return null;
}

// <--[tag]
// @attribute <ItemTag.invisible>
// @returns ElementTag(Boolean)
// @group properties
// @mechanism ItemTag.invisible
// @description
// Returns whether an Item_Frame item will be invisible when placed.
// -->
if (attribute.startsWith("invisible")) {
return new ElementTag(isInvisible()).getObjectAttribute(attribute.fulfill(1));
}

return null;
}

public String getPropertyString() {
if (isInvisible()) {
return "true";
}
return null;
}

public String getPropertyId() {
return "invisible";
}

public void adjust(Mechanism mechanism) {

// <--[mechanism]
// @object ItemTag
// @name invisible
// @input ElementTag(Boolean)
// @description
// Changes whether an Item_Frame item will be invisible when placed.
// @tags
// <ItemTag.invisible>
// -->
if (mechanism.matches("invisible") && mechanism.requireBoolean()) {
CompoundTag compoundTag = NMSHandler.getItemHelper().getNbtData(item.getItemStack());
Map<String, Tag> result = new LinkedHashMap<>(compoundTag.getValue());
CompoundTag entityTag = (CompoundTag) result.get("EntityTag");
Map<String, Tag> entMap;
if (entityTag != null) {
entMap = new LinkedHashMap<>(entityTag.getValue());
}
else {
entMap = new LinkedHashMap<>();
}
if (mechanism.getValue().asBoolean()) {
entMap.put("Invisible", new ByteTag((byte) 1));
}
else {
entMap.remove("Invisible");
}
if (entMap.isEmpty()) {
result.remove("EntityTag");
}
else {
result.put("EntityTag", NMSHandler.getInstance().createCompoundTag(entMap));
}
compoundTag = NMSHandler.getInstance().createCompoundTag(result);
item.setItemStack(NMSHandler.getItemHelper().setNbtData(item.getItemStack(), compoundTag));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class ItemRawNBT implements Property {

public static boolean describes(ObjectTag item) {
// All items can have raw NBT
return item instanceof ItemTag && ((ItemTag) item).getItemStack().getType() != Material.AIR;
return item instanceof ItemTag && ((ItemTag) item).getBukkitMaterial() != Material.AIR;
}

public static ItemRawNBT getFrom(ObjectTag _item) {
Expand Down Expand Up @@ -91,6 +91,15 @@ public MapTag getNonDefaultNBTMap() {
for (StringHolder key : defaultNbtKeys) {
result.map.remove(key);
}
if (item.getBukkitMaterial() == Material.ITEM_FRAME) {
MapTag entityMap = (MapTag) result.getObject("EntityTag");
if (entityMap != null) {
entityMap.putObject("Invisible", null);
if (entityMap.map.isEmpty()) {
result.putObject("EntityTag", null);
}
}
}
return result;
}

Expand Down

0 comments on commit 43388bc

Please sign in to comment.