diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java index 5ee9ccd675..386204d5dd 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java @@ -104,6 +104,7 @@ public static void registermainProperties() { PropertyParser.registerProperty(ItemBaseColor.class, ItemTag.class); PropertyParser.registerProperty(ItemBlockMaterial.class, ItemTag.class); PropertyParser.registerProperty(ItemBook.class, ItemTag.class); + PropertyParser.registerProperty(ItemBookGeneration.class, ItemTag.class); PropertyParser.registerProperty(ItemDisplayname.class, ItemTag.class); PropertyParser.registerProperty(ItemDurability.class, ItemTag.class); PropertyParser.registerProperty(ItemCanDestroy.class, ItemTag.class); diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemBookGeneration.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemBookGeneration.java new file mode 100644 index 0000000000..bb7257ba4a --- /dev/null +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemBookGeneration.java @@ -0,0 +1,100 @@ +package com.denizenscript.denizen.objects.properties.item; + +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 org.bukkit.inventory.meta.BookMeta; + +public class ItemBookGeneration implements Property { + + public static boolean describes(ObjectTag item) { + return item instanceof ItemTag && ((ItemTag) item).getItemStack().getType() == Material.WRITTEN_BOOK; + } + + public static ItemBookGeneration getFrom(ObjectTag _item) { + if (!describes(_item)) { + return null; + } + else { + return new ItemBookGeneration((ItemTag) _item); + } + } + + public static final String[] handledTags = new String[] { + "book_generation" + }; + + public static final String[] handledMechs = new String[] { + "book_generation" + }; + + private ItemBookGeneration(ItemTag _item) { + item = _item; + } + + ItemTag item; + + @Override + public ObjectTag getObjectAttribute(Attribute attribute) { + + if (attribute == null) { + return null; + } + + // <--[tag] + // @attribute + // @returns ListTag + // @mechanism ItemTag.book_generation + // @group properties + // @description + // Returns the generation of the book (if any), as ORIGINAL, COPY_OF_ORIGINAL, COPY_OF_COPY, or TATTERED. + // --> + if (attribute.startsWith("book_generation")) { + BookMeta meta = (BookMeta) item.getItemMeta(); + if (!meta.hasGeneration()) { + return null; + } + return new ElementTag(meta.getGeneration().name()).getObjectAttribute(attribute.fulfill(1)); + } + + return null; + } + + @Override + public String getPropertyString() { + BookMeta meta = (BookMeta) item.getItemMeta(); + if (!meta.hasGeneration()) { + return null; + } + return meta.getGeneration().name(); + } + + @Override + public String getPropertyId() { + return "book_generation"; + } + + @Override + public void adjust(Mechanism mechanism) { + + // <--[mechanism] + // @object ItemTag + // @name book_generation + // @input ListTag + // @description + // Sets the generation of the book (if any), as ORIGINAL, COPY_OF_ORIGINAL, COPY_OF_COPY, or TATTERED. + // @tags + // + // --> + if (mechanism.matches("book_generation") && mechanism.requireEnum(false, BookMeta.Generation.values())) { + BookMeta meta = (BookMeta) item.getItemMeta(); + meta.setGeneration(BookMeta.Generation.valueOf(mechanism.getValue().asString().toUpperCase())); + item.setItemMeta(meta); + } + + } +} diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemHidden.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemHidden.java index 6c9ec5f135..1482460a78 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemHidden.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemHidden.java @@ -14,7 +14,7 @@ public class ItemHidden implements Property { public static boolean describes(ObjectTag item) { - // All items can have flags + // All items can have hides return item instanceof ItemTag && ((ItemTag) item).getItemStack().getType() != Material.AIR; } diff --git a/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/item/InventoryCommand.java b/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/item/InventoryCommand.java index 4abfa2f958..688efa56d9 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/item/InventoryCommand.java +++ b/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/item/InventoryCommand.java @@ -134,7 +134,7 @@ public InventoryCommand() { // // @Usage // Use to set a temporary flag on the player's held item. - // - inventory flag slot: flag my_target: duration:1d + // - inventory flag slot: my_target: duration:1d // --> private enum Action {OPEN, CLOSE, COPY, MOVE, SWAP, ADD, REMOVE, SET, KEEP, EXCLUDE, FILL, CLEAR, UPDATE, ADJUST, FLAG}