Add support for vanilla JSON metadata syntax (/give, /i, /kit, etc.)

This commit is contained in:
Chris Ward 2014-01-21 00:54:48 +11:00
parent 839bfe0c2e
commit 9ce1158aeb
22 changed files with 53 additions and 13 deletions

View file

@ -8,6 +8,8 @@ import com.earth2me.essentials.utils.FormatUtil;
import com.earth2me.essentials.utils.NumberUtil; import com.earth2me.essentials.utils.NumberUtil;
import java.util.*; import java.util.*;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import com.google.common.base.Joiner;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import org.bukkit.Color; import org.bukkit.Color;
import org.bukkit.DyeColor; import org.bukkit.DyeColor;
@ -36,7 +38,7 @@ public class MetaItemStack
} }
} }
private final transient Pattern splitPattern = Pattern.compile("[:+',;.]"); private final transient Pattern splitPattern = Pattern.compile("[:+',;.]");
private final ItemStack stack; private ItemStack stack;
private FireworkEffect.Builder builder = FireworkEffect.builder(); private FireworkEffect.Builder builder = FireworkEffect.builder();
private PotionEffectType pEffectType; private PotionEffectType pEffectType;
private PotionEffect pEffect; private PotionEffect pEffect;
@ -95,7 +97,23 @@ public class MetaItemStack
public void parseStringMeta(final CommandSource sender, final boolean allowUnsafe, String[] string, int fromArg, final IEssentials ess) throws Exception public void parseStringMeta(final CommandSource sender, final boolean allowUnsafe, String[] string, int fromArg, final IEssentials ess) throws Exception
{ {
if (string[fromArg].startsWith("{"))
{
try
{
stack = ess.getServer().getUnsafe().modifyItemStack(stack, Joiner.on(' ').join(Arrays.asList(string).subList(fromArg, string.length)));
}
catch (NoSuchMethodError nsme)
{
throw new Exception(_("noMetaJson"), nsme);
}
catch (Throwable throwable)
{
throw new Exception(throwable.getMessage(), throwable);
}
}
else
{
for (int i = fromArg; i < string.length; i++) for (int i = fromArg; i < string.length; i++)
{ {
addStringMeta(sender, allowUnsafe, string[i], ess); addStringMeta(sender, allowUnsafe, string[i], ess);
@ -116,6 +134,7 @@ public class MetaItemStack
stack.setItemMeta(fmeta); stack.setItemMeta(fmeta);
} }
} }
}
public void addStringMeta(final CommandSource sender, final boolean allowUnsafe, final String string, final IEssentials ess) throws Exception public void addStringMeta(final CommandSource sender, final boolean allowUnsafe, final String string, final IEssentials ess) throws Exception
{ {

View file

@ -533,3 +533,4 @@ mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players. muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You can not ignore that player. ignoreExempt=\u00a74You can not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a7Nemuzes uveznit hrace, kteri nejsou pripojeni.
muteExemptOffline=\u00a7Nemuzes umlcet hrace, kteri nejsou pripojeni. muteExemptOffline=\u00a7Nemuzes umlcet hrace, kteri nejsou pripojeni.
ignoreExempt=\u00a74Nemuzes ignorovat tohoto hrace. ignoreExempt=\u00a74Nemuzes ignorovat tohoto hrace.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Du kan ikke s\u00e6tte offline spillere i f\u00e6ngsel.
muteExemptOffline=\u00a74Du kan ikke g\u00f8re offline spillere tavse. muteExemptOffline=\u00a74Du kan ikke g\u00f8re offline spillere tavse.
ignoreExempt=\u00a74Du kan ikke ignorere den spiller. ignoreExempt=\u00a74Du kan ikke ignorere den spiller.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Du darfst abgemeldete Spieler nicht einsperren.
muteExemptOffline=\u00a74Du darfst abgemeldete Spieler nicht stummschalten. muteExemptOffline=\u00a74Du darfst abgemeldete Spieler nicht stummschalten.
ignoreExempt=\u00a74Du kannst diesen Spieler nicht ignorieren. ignoreExempt=\u00a74Du kannst diesen Spieler nicht ignorieren.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players. muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You may not ignore that player. ignoreExempt=\u00a74You may not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74No puedes encarcelar a jugadores que no est\u00e1n cone
muteExemptOffline=\u00a74No puedes silenciar a jugadores que no est\u00e1n conectados. muteExemptOffline=\u00a74No puedes silenciar a jugadores que no est\u00e1n conectados.
ignoreExempt=\u00a74No puedes ignorar a este jugador. ignoreExempt=\u00a74No puedes ignorar a este jugador.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players. muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You can not ignore that player. ignoreExempt=\u00a74You can not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Vous ne pouvez pas emprisonner les joueurs d\u00e9conne
muteExemptOffline=\u00a74Vous ne pouvez pas rendre muets les joueurs d\u00e9connect\u00e9s. muteExemptOffline=\u00a74Vous ne pouvez pas rendre muets les joueurs d\u00e9connect\u00e9s.
ignoreExempt=\u00a74Vous ne pouvez pas ignorer ce joueur. ignoreExempt=\u00a74Vous ne pouvez pas ignorer ce joueur.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Nem b\u00f6rt\u00f6n\u00f6zhetsz be Offline j\u00e1t\u0
muteExemptOffline=\u00a74Nem n\u00e9m\u00edthatsz le Offline j\u00e1t\u00e9kost. muteExemptOffline=\u00a74Nem n\u00e9m\u00edthatsz le Offline j\u00e1t\u00e9kost.
ignoreExempt=\u00a74Nem hagyhatod figyelmen k\u00edv\u0171l ezt a j\u00e1t\u00e9kost. ignoreExempt=\u00a74Nem hagyhatod figyelmen k\u00edv\u0171l ezt a j\u00e1t\u00e9kost.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Non puoi imprigionare un giocatore che e'' offline.
muteExemptOffline=\u00a74Non puoi silenziare un giocatore che e'' offline. muteExemptOffline=\u00a74Non puoi silenziare un giocatore che e'' offline.
ignoreExempt=\u00a74Non puoi ignorare quel giocatore. ignoreExempt=\u00a74Non puoi ignorare quel giocatore.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Tu negali pasodinti i kalejima neprisijungusiu zaideju.
muteExemptOffline=\u00a74Tu negali uztildyti neprisijungusiu zaideju. muteExemptOffline=\u00a74Tu negali uztildyti neprisijungusiu zaideju.
ignoreExempt=\u00a74Tu negali ignoruoti sio zaidejo. ignoreExempt=\u00a74Tu negali ignoruoti sio zaidejo.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Je mag geen offline spelers in de gevangenis zetten.
muteExemptOffline=\u00a74Je mag geen offline players dempen muteExemptOffline=\u00a74Je mag geen offline players dempen
ignoreExempt=\u00a74Je kan die speler niet negeren. ignoreExempt=\u00a74Je kan die speler niet negeren.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Nie mozesz wrzucic do wiezienia graczy offline.
muteExemptOffline=\u00a74Nie mozesz wyciszyc graczy offline. muteExemptOffline=\u00a74Nie mozesz wyciszyc graczy offline.
ignoreExempt=\u00a74Nie mozesz ignorowac tego gracza. ignoreExempt=\u00a74Nie mozesz ignorowac tego gracza.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Voce nao pode prender jogadores desconectados.
muteExemptOffline=\u00a74Voce nao pode silenciar jogadores desconectados. muteExemptOffline=\u00a74Voce nao pode silenciar jogadores desconectados.
ignoreExempt=\u00a74Voce nao pode ignorar aquele jogador. ignoreExempt=\u00a74Voce nao pode ignorar aquele jogador.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players. muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You can not ignore that player. ignoreExempt=\u00a74You can not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,3 +533,4 @@ mayNotJailOffline=\u00a74\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u044
muteExemptOffline=\u00a74\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0442\u043a\u043d\u0443\u0442\u044c \u0438\u0433\u0440\u043e\u043a\u0430 \u0432 \u043e\u0444\u0444\u043b\u0430\u0439\u043d\u0435. muteExemptOffline=\u00a74\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0442\u043a\u043d\u0443\u0442\u044c \u0438\u0433\u0440\u043e\u043a\u0430 \u0432 \u043e\u0444\u0444\u043b\u0430\u0439\u043d\u0435.
ignoreExempt=\u00a74\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u0438\u0433\u0440\u043e\u043a\u0430. ignoreExempt=\u00a74\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u0438\u0433\u0440\u043e\u043a\u0430.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74DU kan inte f\u00e4ngelse urkopplad-spelare.
muteExemptOffline=\u00a74DU kan inte st\u00e4nga av urkopplad-spelare. muteExemptOffline=\u00a74DU kan inte st\u00e4nga av urkopplad-spelare.
ignoreExempt=\u00a74DU kan inte ignorera den spelaren. ignoreExempt=\u00a74DU kan inte ignorera den spelaren.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players. muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You can not ignore that player. ignoreExempt=\u00a74You can not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74\u4f60\u53ef\u80fd\u65e0\u6cd5\u76d1\u7981\u5df2\u79bb\
muteExemptOffline=\u00a74\u4f60\u53ef\u80fd\u65e0\u6cd5\u7981\u8a00\u5df2\u79bb\u7ebf\u73a9\u5bb6. muteExemptOffline=\u00a74\u4f60\u53ef\u80fd\u65e0\u6cd5\u7981\u8a00\u5df2\u79bb\u7ebf\u73a9\u5bb6.
ignoreExempt=\u00a74\u4f60\u65e0\u6cd5\u5ffd\u7565\u90a3\u4e2a\u73a9\u5bb6. ignoreExempt=\u00a74\u4f60\u65e0\u6cd5\u5ffd\u7565\u90a3\u4e2a\u73a9\u5bb6.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players. muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You can not ignore that player. ignoreExempt=\u00a74You can not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

View file

@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players. muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You can not ignore that player. ignoreExempt=\u00a74You can not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled. unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit