Skip to content

Commit 7f6475f

Browse files
authored
ItemTag.item_model/max_durability/max_stack_size/rarity (#2734)
* Components :o - Added support for the `item_model`, `max_durability`, `food`, `max_stack_size`, and `rarity` item components. - Additionally made sure that the paper `ItemTag.rarity` didn't conflict with the new >1.20 rarity component mech. * Updated name + corrected registration * Addressed comments * Addressed comments. * Max durability tag for <=1.19 * Update ItemDurability.java * Reverted changes. * Forgot to revert item extensions file. * New item component registry system * toString --> asMinimalString * Addressed comments * tern * Update PaperModule.java * moved version check into paperitemextension file * Removed legacy tag meta
1 parent d6b4f2b commit 7f6475f

7 files changed

Lines changed: 147 additions & 11 deletions

File tree

paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ComponentAdaptersRegistry.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,9 @@ public class ComponentAdaptersRegistry {
55
public static void register() {
66
DataComponentAdapter.register(new FoodAdapter());
77
DataComponentAdapter.register(new GliderAdapter());
8+
DataComponentAdapter.register(new ItemModelAdapter());
9+
DataComponentAdapter.register(new MaxDurabilityAdapter());
10+
DataComponentAdapter.register(new MaxStackSizeAdapter());
11+
DataComponentAdapter.register(new RarityAdapter());
812
}
913
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.denizenscript.denizen.paper.datacomponents;
2+
3+
import com.denizenscript.denizen.utilities.Utilities;
4+
import com.denizenscript.denizencore.objects.Mechanism;
5+
import com.denizenscript.denizencore.objects.core.ElementTag;
6+
import io.papermc.paper.datacomponent.DataComponentTypes;
7+
import net.kyori.adventure.key.Key;
8+
9+
public class ItemModelAdapter extends DataComponentAdapter.Valued<ElementTag, Key> {
10+
11+
// <--[property]
12+
// @object ItemTag
13+
// @name item_model
14+
// @input ElementTag
15+
// @description
16+
// Controls an item's model <@link language Item Components> in namespaced key format.
17+
// The default namespace is "minecraft", so for example an input of "stone" becomes "minecraft:stone", and will set the item model to a stone block.
18+
// This can also be used to display item models from your own custom resource packs.
19+
// @mechanism
20+
// Provide no input to reset the item to its default value.
21+
// -->
22+
23+
public ItemModelAdapter() {
24+
super(ElementTag.class, DataComponentTypes.ITEM_MODEL, "item_model");
25+
}
26+
27+
@Override
28+
public ElementTag toDenizen(Key value) {
29+
return new ElementTag(value.asMinimalString(), true);
30+
}
31+
32+
@Override
33+
public Key fromDenizen(ElementTag value, Mechanism mechanism) {
34+
return Utilities.parseNamespacedKey(value.asString());
35+
}
36+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.denizenscript.denizen.paper.datacomponents;
2+
3+
import com.denizenscript.denizencore.objects.Mechanism;
4+
import com.denizenscript.denizencore.objects.core.ElementTag;
5+
import io.papermc.paper.datacomponent.DataComponentTypes;
6+
7+
public class MaxDurabilityAdapter extends DataComponentAdapter.Valued<ElementTag, Integer> {
8+
9+
// <--[property]
10+
// @object ItemTag
11+
// @name max_durability
12+
// @input ElementTag(Number)
13+
// @description
14+
// Controls an item's max durability <@link language Item Components>.
15+
// @mechanism
16+
// Provide no input to reset the item to its default value.
17+
// -->
18+
19+
public MaxDurabilityAdapter() {
20+
super(ElementTag.class, DataComponentTypes.MAX_DAMAGE, "max_durability");
21+
}
22+
23+
@Override
24+
public ElementTag toDenizen(Integer value) {
25+
return new ElementTag(value);
26+
}
27+
28+
@Override
29+
public Integer fromDenizen(ElementTag value, Mechanism mechanism) {
30+
return mechanism.requireInteger() ? value.asInt() : null;
31+
}
32+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.denizenscript.denizen.paper.datacomponents;
2+
3+
import com.denizenscript.denizencore.objects.Mechanism;
4+
import com.denizenscript.denizencore.objects.core.ElementTag;
5+
import io.papermc.paper.datacomponent.DataComponentTypes;
6+
7+
public class MaxStackSizeAdapter extends DataComponentAdapter.Valued<ElementTag, Integer> {
8+
9+
// <--[property]
10+
// @object ItemTag
11+
// @name max_stack_size
12+
// @input ElementTag(Number)
13+
// @description
14+
// Controls an item's max stack size <@link language Item Components>.
15+
// @mechanism
16+
// Provide no input to reset the item to its default value.
17+
// -->
18+
19+
public MaxStackSizeAdapter() {
20+
super(ElementTag.class, DataComponentTypes.MAX_STACK_SIZE, "max_stack_size");
21+
}
22+
23+
@Override
24+
public ElementTag toDenizen(Integer value) {
25+
return new ElementTag(value);
26+
}
27+
28+
@Override
29+
public Integer fromDenizen(ElementTag value, Mechanism mechanism) {
30+
return mechanism.requireInteger() ? value.asInt() : null;
31+
}
32+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.denizenscript.denizen.paper.datacomponents;
2+
3+
import com.denizenscript.denizencore.objects.Mechanism;
4+
import com.denizenscript.denizencore.objects.core.ElementTag;
5+
import io.papermc.paper.datacomponent.DataComponentTypes;
6+
import org.bukkit.inventory.ItemRarity;
7+
8+
public class RarityAdapter extends DataComponentAdapter.Valued<ElementTag, ItemRarity> {
9+
10+
// <--[property]
11+
// @object ItemTag
12+
// @name rarity
13+
// @input ElementTag
14+
// @description
15+
// Controls an item's rarity <@link language Item Components>.
16+
// See <@link url https://jd.papermc.io/paper/org/bukkit/inventory/ItemRarity.html> for valid rarity values.
17+
// @mechanism
18+
// Provide no input to reset the item to its default value.
19+
// -->
20+
21+
public RarityAdapter() {
22+
super(ElementTag.class, DataComponentTypes.RARITY, "rarity");
23+
}
24+
25+
@Override
26+
public ElementTag toDenizen(ItemRarity value) {
27+
return new ElementTag(value);
28+
}
29+
30+
@Override
31+
public ItemRarity fromDenizen(ElementTag value, Mechanism mechanism) {
32+
return mechanism.requireEnum(ItemRarity.class) ? value.asEnum(ItemRarity.class) : null;
33+
}
34+
}
Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,18 @@
11
package com.denizenscript.denizen.paper.properties;
22

3+
import com.denizenscript.denizen.nms.NMSHandler;
4+
import com.denizenscript.denizen.nms.NMSVersion;
35
import com.denizenscript.denizen.objects.ItemTag;
46
import com.denizenscript.denizencore.objects.core.ElementTag;
57

68
public class PaperItemExtensions {
79

810
public static void register() {
911

10-
// <--[tag]
11-
// @attribute <ItemTag.rarity>
12-
// @returns ElementTag
13-
// @group paper
14-
// @Plugin Paper
15-
// @description
16-
// Returns the rarity of an item, as "common", "uncommon", "rare", or "epic".
17-
// -->
18-
ItemTag.tagProcessor.registerTag(ElementTag.class, "rarity", (attribute, item) -> {
19-
return new ElementTag(item.getItemStack().getRarity());
20-
});
12+
if (NMSHandler.getVersion().isAtMost(NMSVersion.v1_20)) {
13+
ItemTag.tagProcessor.registerTag(ElementTag.class, "rarity", (attribute, item) -> {
14+
return new ElementTag(item.getItemStack().getRarity());
15+
});
16+
}
2117
}
2218
}

plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemCustomModel.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class ItemCustomModel extends ItemProperty<ElementTag> {
1515
// @description
1616
// Controls the custom model data ID number of the item.
1717
// Use with no input to remove the custom model data.
18+
// Prefer <@link property ItemTag.item_model> on MC 1.21+.
1819
// See also <@link tag ItemTag.has_custom_model_data>
1920
// -->
2021
public static boolean describes(ItemTag item) {
@@ -56,6 +57,7 @@ public static void register() {
5657
// @group properties
5758
// @description
5859
// Returns whether the item has a custom model data ID number set on it.
60+
// Prefer <@link property ItemTag.item_model> on MC 1.21+.
5961
// See also <@link tag ItemTag.custom_model_data>.
6062
// -->
6163
PropertyParser.registerTag(ItemCustomModel.class, ElementTag.class, "has_custom_model_data", (attribute, prop) -> {

0 commit comments

Comments
 (0)