blob: bff3be9dc7d04681380124563d6563c02bc69b27 (
plain)
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
|
package org.bukkit.craftbukkit.inventory;
import java.util.Map;
import net.minecraft.server.NBTTagCompound;
import org.bukkit.FireworkEffect;
import org.bukkit.Material;
import org.bukkit.configuration.serialization.DelegateDeserialization;
import org.bukkit.craftbukkit.inventory.CraftMetaItem.SerializableMeta;
import org.bukkit.inventory.meta.FireworkEffectMeta;
import com.google.common.collect.ImmutableMap.Builder;
@DelegateDeserialization(SerializableMeta.class)
class CraftMetaCharge extends CraftMetaItem implements FireworkEffectMeta {
static final ItemMetaKey EXPLOSION = new ItemMetaKey("Explosion", "firework-effect");
private FireworkEffect effect;
CraftMetaCharge(CraftMetaItem meta) {
super(meta);
if (meta instanceof CraftMetaCharge) {
effect = ((CraftMetaCharge) meta).effect;
}
}
CraftMetaCharge(Map<String, Object> map) {
super(map);
setEffect(SerializableMeta.getObject(FireworkEffect.class, map, EXPLOSION.BUKKIT, true));
}
CraftMetaCharge(NBTTagCompound tag) {
super(tag);
if (tag.hasKey(EXPLOSION.NBT)) {
effect = CraftMetaFirework.getEffect(tag.getCompound(EXPLOSION.NBT));
}
}
public void setEffect(FireworkEffect effect) {
this.effect = effect;
}
public boolean hasEffect() {
return effect != null;
}
public FireworkEffect getEffect() {
return effect;
}
@Override
void applyToItem(NBTTagCompound itemTag) {
super.applyToItem(itemTag);
if (hasEffect()) {
itemTag.set(EXPLOSION.NBT, CraftMetaFirework.getExplosion(effect));
}
}
@Override
boolean applicableTo(Material type) {
switch (type) {
case FIREWORK_CHARGE:
return true;
default:
return false;
}
}
@Override
boolean isEmpty() {
return super.isEmpty() && !hasChargeMeta();
}
boolean hasChargeMeta() {
return hasEffect();
}
@Override
boolean equalsCommon(CraftMetaItem meta) {
if (!super.equalsCommon(meta)) {
return false;
}
if (meta instanceof CraftMetaCharge) {
CraftMetaCharge that = (CraftMetaCharge) meta;
return (hasEffect() ? that.hasEffect() && this.effect.equals(that.effect) : !that.hasEffect());
}
return true;
}
@Override
boolean notUncommon(CraftMetaItem meta) {
return super.notUncommon(meta) && (meta instanceof CraftMetaCharge || !hasChargeMeta());
}
@Override
int applyHash() {
final int original;
int hash = original = super.applyHash();
if (hasEffect()) {
hash = 61 * hash + effect.hashCode();
}
return hash != original ? CraftMetaCharge.class.hashCode() ^ hash : hash;
}
@Override
public CraftMetaCharge clone() {
return (CraftMetaCharge) super.clone();
}
@Override
Builder<String, Object> serialize(Builder<String, Object> builder) {
super.serialize(builder);
if (hasEffect()) {
builder.put(EXPLOSION.BUKKIT, effect);
}
return builder;
}
}
|