-
-
Notifications
You must be signed in to change notification settings - Fork 102
/
EntityAge.java
149 lines (116 loc) · 4.3 KB
/
EntityAge.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
145
146
147
148
149
package net.aufdemrand.denizen.objects.properties;
import net.aufdemrand.denizen.objects.Element;
import net.aufdemrand.denizen.objects.dEntity;
import net.aufdemrand.denizen.objects.dObject;
import net.aufdemrand.denizen.tags.Attribute;
import net.aufdemrand.denizen.utilities.debugging.dB;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.trait.Age;
import org.bukkit.entity.*;
public class EntityAge implements Property {
public static boolean describes(dObject entity) {
if (!(entity instanceof dEntity)) return false;
// Check if entity is Ageable, or a Zombie
return (((dEntity) entity).getBukkitEntity() instanceof Ageable)
|| ((dEntity) entity).getBukkitEntity().getType() == EntityType.ZOMBIE;
}
public static EntityAge getFrom(dObject entity) {
if (!describes(entity)) return null;
else return new EntityAge((dEntity) entity);
}
///////////////////
// Instance Fields and Methods
/////////////
private EntityAge(dEntity entity) {
ageable = entity;
}
dEntity ageable;
public boolean isBaby() {
if (ageable.getBukkitEntity().getType() == EntityType.ZOMBIE)
return ((Zombie) ageable.getBukkitEntity()).isBaby();
else
return !((Ageable) ageable.getBukkitEntity()).isAdult();
}
public void setBaby(boolean bool) {
dB.log(ageable.isNPC() + " <--- is NPC?");
if (ageable.isNPC()) {
NPC ageable_npc = ageable.getNPC();
if (!ageable_npc.hasTrait(Age.class))
ageable_npc.addTrait(Age.class);
ageable_npc.getTrait(Age.class).setAge(bool ? -24000 : 1);
} else {
if (ageable.getBukkitEntity().getType() == EntityType.ZOMBIE)
((Zombie) ageable.getBukkitEntity()).setBaby(bool);
else if (bool)
((Ageable) ageable.getBukkitEntity()).setBaby();
else
((Ageable) ageable.getBukkitEntity()).setAge(1);
}
}
public void setAge(int val) {
if (ageable.isNPC()) {
NPC ageable_npc = ageable.getNPC();
ageable_npc.getTrait(Age.class).setAge(val);
} else {
if (ageable.getBukkitEntity().getType() == EntityType.ZOMBIE)
((Zombie) ageable.getBukkitEntity()).setBaby(val >= 1);
else
((Ageable) ageable.getBukkitEntity()).setAge(val);
}
}
public int getAge() {
if (ageable.getBukkitEntity().getType() == EntityType.ZOMBIE)
return ((Zombie) ageable.getBukkitEntity()).isBaby() ? 0 : 1;
else
return ((Ageable) ageable.getBukkitEntity()).getAge();
}
public void setLock(boolean bool) {
if (ageable.getBukkitEntity().getType() != EntityType.ZOMBIE)
((Ageable) ageable.getBukkitEntity()).setAgeLock(bool);
}
public boolean getLock() {
if (ageable.getBukkitEntity().getType() == EntityType.ZOMBIE)
return true;
else return ((Ageable) ageable.getBukkitEntity()).getAgeLock();
}
/////////
// Property Methods
///////
@Override
public String getPropertyString() {
if (getAge() != 1)
return getPropertyId() + '=' + (getAge() == 0
? "baby" : getAge() + ';');
else return PropertyParser.NONE;
}
@Override
public String getPropertyId() {
return "age";
}
///////////
// dObject Attributes
////////
@Override
public String getAttribute(Attribute attribute) {
if (attribute == null) return "null";
// <--[tag]
// @attribute <e@entity.age>
// @returns Element(Number)
// @description
// If the entity is ageable, returns the entity's age number.
// -->
if (attribute.startsWith("age"))
return new Element(getAge())
.getAttribute(attribute.fulfill(1));
// <--[tag]
// @attribute <e@entity.is_baby>
// @returns Element(Boolean)
// @description
// If the entity is ageable, returns whether the entity is a baby.
// -->
if (attribute.startsWith("is_baby"))
return new Element(isBaby())
.getAttribute(attribute.fulfill(1));
return null;
}
}