Skip to content

Commit a5b3dae

Browse files
committed
Add ability to register custom item transformers.
1 parent c4f10d9 commit a5b3dae

File tree

2 files changed

+69
-4
lines changed

2 files changed

+69
-4
lines changed

Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.earth2me.essentials;
22

3+
import com.earth2me.essentials.items.transform.PluginItemTransformer;
34
import com.earth2me.essentials.textreader.BookInput;
45
import com.earth2me.essentials.textreader.BookPager;
56
import com.earth2me.essentials.textreader.IText;
@@ -10,10 +11,7 @@
1011
import com.earth2me.essentials.utils.VersionUtil;
1112
import com.google.common.base.Joiner;
1213
import net.ess3.api.IEssentials;
13-
import org.bukkit.Color;
14-
import org.bukkit.DyeColor;
15-
import org.bukkit.FireworkEffect;
16-
import org.bukkit.Material;
14+
import org.bukkit.*;
1715
import org.bukkit.block.Banner;
1816
import org.bukkit.block.banner.PatternType;
1917
import org.bukkit.enchantments.Enchantment;
@@ -47,6 +45,9 @@
4745
public class MetaItemStack {
4846
private static final Map<String, DyeColor> colorMap = new HashMap<>();
4947
private static final Map<String, FireworkEffect.Type> fireworkShape = new HashMap<>();
48+
49+
//Contains plugin registered item meta data transformers.
50+
private static final transient Map<String, PluginItemTransformer> itemTransformers = new HashMap<>();
5051
private static boolean useNewSkullMethod = true;
5152

5253
static {
@@ -78,6 +79,32 @@ public MetaItemStack(final ItemStack stack) {
7879
this.stack = stack.clone();
7980
}
8081

82+
/**
83+
* Registers an item transformer, belonging to a plugin, that can manipulate certain item metadata.
84+
* @param key the key for the transformer.
85+
* @param itemTransformer the actual transformer.
86+
*/
87+
public static void registerItemTransformer(String key, PluginItemTransformer itemTransformer){
88+
//Warn people if they're trying to register over top of someone else.
89+
if(itemTransformers.containsKey(key)){
90+
Bukkit.getLogger().warning(String.format("[Essentials] - Plugin transformer registered to \"%s\" attempted to register already existing item transformer \"%s\" belonging to \"%s\"!",
91+
itemTransformer.getPlugin().getName(),
92+
key,
93+
itemTransformers.get(key).getPlugin().getName()));
94+
return;
95+
}
96+
97+
itemTransformers.put(key, itemTransformer);
98+
}
99+
100+
/**
101+
* Unregisters a certain item transformer under key "key".
102+
* @param key the transformer key.
103+
*/
104+
public static void unregisterItemTransformer(String key){
105+
itemTransformers.remove(key);
106+
}
107+
81108
private static void setSkullOwner(final IEssentials ess, final ItemStack stack, final String owner) {
82109
if (!(stack.getItemMeta() instanceof SkullMeta)) return;
83110

@@ -303,11 +330,28 @@ public void addStringMeta(final CommandSource sender, final boolean allowUnsafe,
303330
} else {
304331
throw new Exception(tl("leatherSyntax"));
305332
}
333+
} else if (split.length > 1 && itemTransformers.containsKey(split[0])) {
334+
transformItem(split[0], split[1]);
306335
} else {
307336
parseEnchantmentStrings(sender, allowUnsafe, split, ess);
308337
}
309338
}
310339

340+
private void transformItem(String key, String data){
341+
PluginItemTransformer transformer = itemTransformers.get(key);
342+
343+
//Ignore, the plugin is disabled.
344+
if(!transformer.getPlugin().isEnabled())
345+
return;
346+
347+
try{
348+
stack = transformer.apply(data, stack);
349+
}catch(Throwable thr){
350+
Bukkit.getLogger().severe(String.format("[Essentials] - Error applying data \"%s\" to itemstack! Plugin: %s, Key: %s", data, transformer.getPlugin().getName(), key));
351+
thr.printStackTrace();
352+
}
353+
}
354+
311355
public void addItemFlags(final String string) throws Exception {
312356
final String[] separate = splitPattern.split(string, 2);
313357
if (separate.length != 2) {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.earth2me.essentials.items.transform;
2+
3+
import org.bukkit.inventory.ItemStack;
4+
import org.bukkit.plugin.Plugin;
5+
6+
public abstract class PluginItemTransformer {
7+
private final Plugin plugin;
8+
9+
public PluginItemTransformer(Plugin thePlugin){
10+
if(thePlugin == null)
11+
throw new IllegalArgumentException("Plugin cannot be null!");
12+
13+
this.plugin = thePlugin;
14+
}
15+
16+
public abstract ItemStack apply(String data, ItemStack original);
17+
18+
public Plugin getPlugin() {
19+
return plugin;
20+
}
21+
}

0 commit comments

Comments
 (0)