/
ItemScriptContainer.java
118 lines (96 loc) · 4.12 KB
/
ItemScriptContainer.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
package net.aufdemrand.denizen.scripts.containers.core;
import java.util.ArrayList;
import java.util.List;
import net.aufdemrand.denizen.npc.dNPC;
import net.aufdemrand.denizen.scripts.ScriptRegistry;
import net.aufdemrand.denizen.scripts.containers.ScriptContainer;
import net.aufdemrand.denizen.tags.TagManager;
import net.aufdemrand.denizen.utilities.arguments.Item;
import net.aufdemrand.denizen.utilities.debugging.dB;
import net.aufdemrand.denizen.utilities.nbt.LeatherColorer;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.meta.ItemMeta;
public class ItemScriptContainer extends ScriptContainer {
dNPC npc = null;
Player player = null;
public ItemScriptContainer(ConfigurationSection configurationSection, String scriptContainerName) {
super(configurationSection, scriptContainerName);
}
// public Item getItemFrom() {
// return getItemFrom(null, null);
// }
public Item getItemFrom(Player player, dNPC npc) {
// Try to use this script to make an item.
Item stack = null;
try {
// Check validity of material
if (contains("MATERIAL")){
String material = TagManager.tag(player, npc, getString("MATERIAL"));
stack = Item.valueOf(material);
}
// Make sure we're working with a valid base ItemStack
if (stack == null) return null;
ItemMeta meta = stack.getItemMeta();
// Set Display Name
if (contains("DISPLAY NAME")){
String displayName = TagManager.tag(player, npc, getString("DISPLAY NAME"));
meta.setDisplayName(displayName);
}
// Set Lore
if (contains("LORE")) {
List<String> taggedLore = new ArrayList<String>();
for (String l : getStringList("LORE")){
l = TagManager.tag(player, npc, l);
taggedLore.add(l);
}
meta.setLore(taggedLore);
}
stack.setItemMeta(meta);
// Set Enchantments
if (contains("ENCHANTMENTS")) {
for (String enchantment : getStringList("ENCHANTMENTS")) {
try {
// Build enchantment context
int level = 1;
if (enchantment.split(":").length > 1) {
level = Integer.valueOf(enchantment.split(":")[1]);
enchantment = TagManager.tag(player, npc, enchantment.split(":")[0]);
}
// Add enchantment
Enchantment ench = Enchantment.getByName(enchantment.toUpperCase());
stack.addEnchantment(ench, level);
} catch (Exception e) {
// Invalid enchantment information, let's try the next entry
continue;
}
}
}
// Set Color
if (contains("COLOR"))
LeatherColorer.colorArmor(stack, getString("COLOR"));
// Set Book
if (contains("BOOK")) {
BookScriptContainer book = ScriptRegistry
.getScriptContainerAs(getString("BOOK"), BookScriptContainer.class);
stack = book.writeBookTo(stack, player, npc);
}
// Set Id of the stack
stack.setId(getName());
} catch (Exception e) {
dB.echoError("Woah! An exception has been called with this item script!");
if (!dB.showStackTraces)
dB.echoError("Enable '/denizen stacktrace' for the nitty-gritty.");
else e.printStackTrace();
stack = null;
}
return stack;
}
public void setNPC(dNPC npc) {
this.npc = npc;
}
public void setPlayer(Player player) {
this.player = player;
}
}