-
-
Notifications
You must be signed in to change notification settings - Fork 103
/
ItemSpawnEgg.java
144 lines (123 loc) · 4.63 KB
/
ItemSpawnEgg.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package com.denizenscript.denizen.objects.properties.item;
import com.denizenscript.denizen.utilities.debugging.Debug;
import com.denizenscript.denizen.nms.NMSHandler;
import com.denizenscript.denizen.nms.NMSVersion;
import com.denizenscript.denizen.objects.dItem;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.Mechanism;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.properties.Property;
import com.denizenscript.denizencore.tags.Attribute;
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.meta.SpawnEggMeta;
public class ItemSpawnEgg implements Property {
public static boolean describes(ObjectTag item) {
return item instanceof dItem
&& ((dItem) item).getItemStack().getItemMeta() instanceof SpawnEggMeta;
}
public static ItemSpawnEgg getFrom(ObjectTag _item) {
if (!describes(_item)) {
return null;
}
else {
return new ItemSpawnEgg((dItem) _item);
}
}
public static final String[] handledTags = new String[] {
"spawn_id", "spawn_egg_entity", "spawn_type"
};
public static final String[] handledMechs = new String[] {
"spawn_id", "spawn_egg", "spawn_type"
};
private ItemSpawnEgg(dItem _item) {
item = _item;
}
dItem item;
private EntityType getEntityType() {
return ((SpawnEggMeta) item.getItemStack().getItemMeta()).getSpawnedType();
}
@Override
public String getAttribute(Attribute attribute) {
if (attribute == null) {
return null;
}
// <--[tag]
// @attribute <i@item.spawn_id>
// @returns ElementTag(Number)
// @group properties
// @mechanism dItem.spawn_id
// @description
// NOTE: ID numbers are deprecated since 1.11
// Use <i@item.spawn_type> instead!
// Returns the spawn egg number of the item.
// -->
if ((attribute.startsWith("spawn_id") || attribute.startsWith("spawn_egg_entity"))
&& getEntityType() != null) {
return new ElementTag(getEntityType().getTypeId())
.getAttribute(attribute.fulfill(1));
}
// <--[tag]
// @attribute <i@item.spawn_type>
// @returns ElementTag
// @group properties
// @mechanism dItem.spawn_type
// @description
// Returns the spawn egg's entity type.
// -->
if (attribute.startsWith("spawn_type") && getEntityType() != null) {
return new ElementTag(getEntityType().name())
.getAttribute(attribute.fulfill(1));
}
return null;
}
@Override
public String getPropertyString() {
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_13_R2)) {
return null; // handled by the Material itself in 1.13
}
return getEntityType() != null ? getEntityType().name() : null;
}
@Override
public String getPropertyId() {
return "spawn_type";
}
@Override
public void adjust(Mechanism mechanism) {
// <--[mechanism]
// @object dItem
// @name spawn_id
// @input Element(Number)
// @description
// NOTE: ID numbers are deprecated since 1.11
// Use <@link mechanism dItem.spawn_type> instead!
// Sets what mob a spawn egg holds.
// @tags
// <i@item.spawn_id>
// -->
if ((mechanism.matches("spawn_id") || mechanism.matches("spawn_egg"))
&& mechanism.requireInteger()) {
SpawnEggMeta sem = (SpawnEggMeta) item.getItemStack().getItemMeta();
sem.setSpawnedType(EntityType.fromId(mechanism.getValue().asInt()));
item.getItemStack().setItemMeta(sem);
}
// <--[mechanism]
// @object dItem
// @name spawn_type
// @input Element
// @description
// Sets what entity type a spawn egg holds.
// @tags
// <i@item.spawn_type>
// -->
if (mechanism.matches("spawn_type") && mechanism.requireEnum(false, EntityType.values())) {
try {
SpawnEggMeta sem = (SpawnEggMeta) item.getItemStack().getItemMeta();
sem.setSpawnedType(EntityType.valueOf(mechanism.getValue().asString().toUpperCase()));
item.getItemStack().setItemMeta(sem);
}
catch (IllegalArgumentException e) {
Debug.echoError(mechanism.getValue().asString().toUpperCase() + " is not a valid spawn egg entity!");
}
}
}
}