Skip to content

Commit

Permalink
Add support for vanilla JSON metadata syntax (/give, /i, /kit, etc.)
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisgward committed Jan 20, 2014
1 parent 839bfe0 commit 9ce1158
Show file tree
Hide file tree
Showing 22 changed files with 53 additions and 13 deletions.
45 changes: 32 additions & 13 deletions Essentials/src/com/earth2me/essentials/MetaItemStack.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import com.earth2me.essentials.utils.NumberUtil;
import java.util.*;
import java.util.regex.Pattern;

import com.google.common.base.Joiner;
import net.ess3.api.IEssentials;
import org.bukkit.Color;
import org.bukkit.DyeColor;
Expand Down Expand Up @@ -36,7 +38,7 @@ public class MetaItemStack
}
}
private final transient Pattern splitPattern = Pattern.compile("[:+',;.]");
private final ItemStack stack;
private ItemStack stack;
private FireworkEffect.Builder builder = FireworkEffect.builder();
private PotionEffectType pEffectType;
private PotionEffect pEffect;
Expand Down Expand Up @@ -95,25 +97,42 @@ private void resetPotionMeta()

public void parseStringMeta(final CommandSource sender, final boolean allowUnsafe, String[] string, int fromArg, final IEssentials ess) throws Exception
{

for (int i = fromArg; i < string.length; i++)
if (string[fromArg].startsWith("{"))
{
addStringMeta(sender, allowUnsafe, string[i], ess);
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);
}
}
if (validFirework)
else
{
if (!hasMetaPermission(sender, "firework", true, true, ess))
for (int i = fromArg; i < string.length; i++)
{
throw new Exception(_("noMetaFirework"));
addStringMeta(sender, allowUnsafe, string[i], ess);
}
FireworkEffect effect = builder.build();
FireworkMeta fmeta = (FireworkMeta)stack.getItemMeta();
fmeta.addEffect(effect);
if (fmeta.getEffects().size() > 1 && !hasMetaPermission(sender, "firework-multiple", true, true, ess))
if (validFirework)
{
throw new Exception(_("multipleCharges"));
if (!hasMetaPermission(sender, "firework", true, true, ess))
{
throw new Exception(_("noMetaFirework"));
}
FireworkEffect effect = builder.build();
FireworkMeta fmeta = (FireworkMeta)stack.getItemMeta();
fmeta.addEffect(effect);
if (fmeta.getEffects().size() > 1 && !hasMetaPermission(sender, "firework-multiple", true, true, ess))
{
throw new Exception(_("multipleCharges"));
}
stack.setItemMeta(fmeta);
}
stack.setItemMeta(fmeta);
}
}

Expand Down
1 change: 1 addition & 0 deletions Essentials/src/messages.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,3 +533,4 @@ mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You can not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

This comment has been minimized.

Copy link
@necrodoom

necrodoom Jan 20, 2014

Contributor

Sentence is not stopped.
Fix please.
(Too tired to do 20 commits)

1 change: 1 addition & 0 deletions Essentials/src/messages_cs.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,5 @@ mayNotJailOffline=\u00a7Nemuzes uveznit hrace, kteri nejsou pripojeni.
muteExemptOffline=\u00a7Nemuzes umlcet hrace, kteri nejsou pripojeni.
ignoreExempt=\u00a74Nemuzes ignorovat tohoto hrace.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_da.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Du kan ikke s\u00e6tte offline spillere i f\u00e6ngsel.
muteExemptOffline=\u00a74Du kan ikke g\u00f8re offline spillere tavse.
ignoreExempt=\u00a74Du kan ikke ignorere den spiller.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_de.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Du darfst abgemeldete Spieler nicht einsperren.
muteExemptOffline=\u00a74Du darfst abgemeldete Spieler nicht stummschalten.
ignoreExempt=\u00a74Du kannst diesen Spieler nicht ignorieren.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_en.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You may not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_es.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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.
ignoreExempt=\u00a74No puedes ignorar a este jugador.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_fi.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You can not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_fr.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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.
ignoreExempt=\u00a74Vous ne pouvez pas ignorer ce joueur.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_hu.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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.
ignoreExempt=\u00a74Nem hagyhatod figyelmen k\u00edv\u0171l ezt a j\u00e1t\u00e9kost.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_it.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Non puoi imprigionare un giocatore che e'' offline.
muteExemptOffline=\u00a74Non puoi silenziare un giocatore che e'' offline.
ignoreExempt=\u00a74Non puoi ignorare quel giocatore.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_lt.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Tu negali pasodinti i kalejima neprisijungusiu zaideju.
muteExemptOffline=\u00a74Tu negali uztildyti neprisijungusiu zaideju.
ignoreExempt=\u00a74Tu negali ignoruoti sio zaidejo.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_nl.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Je mag geen offline spelers in de gevangenis zetten.
muteExemptOffline=\u00a74Je mag geen offline players dempen
ignoreExempt=\u00a74Je kan die speler niet negeren.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_pl.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Nie mozesz wrzucic do wiezienia graczy offline.
muteExemptOffline=\u00a74Nie mozesz wyciszyc graczy offline.
ignoreExempt=\u00a74Nie mozesz ignorowac tego gracza.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_pt.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74Voce nao pode prender jogadores desconectados.
muteExemptOffline=\u00a74Voce nao pode silenciar jogadores desconectados.
ignoreExempt=\u00a74Voce nao pode ignorar aquele jogador.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_ro.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You can not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_ru.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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.
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.
noMetaJson=JSON Metadata is not supported in this version of Bukkit
1 change: 1 addition & 0 deletions Essentials/src/messages_sv.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74DU kan inte f\u00e4ngelse urkopplad-spelare.
muteExemptOffline=\u00a74DU kan inte st\u00e4nga av urkopplad-spelare.
ignoreExempt=\u00a74DU kan inte ignorera den spelaren.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_tr.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You can not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_zh.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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.
ignoreExempt=\u00a74\u4f60\u65e0\u6cd5\u5ffd\u7565\u90a3\u4e2a\u73a9\u5bb6.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_zh_HK.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You can not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

1 change: 1 addition & 0 deletions Essentials/src/messages_zh_TW.properties
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,5 @@ mayNotJailOffline=\u00a74You may not jail offline players.
muteExemptOffline=\u00a74You may not mute offline players.
ignoreExempt=\u00a74You can not ignore that player.
unsafeTeleportDestination=\u00a74The teleport destination is unsafe and teleport-safety is disabled.
noMetaJson=JSON Metadata is not supported in this version of Bukkit

3 comments on commit 9ce1158

@khobbits
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any reason this is an if/else? is it not possible to mix vanilla and essentials metadata?

@chrisgward
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code could get quite messy if we attempt both, as we would need to iterate over the string and find where the JSON (Mojangson, apparently they call it) starts/ends and pass that to the unsafe code. This can also be a problem with the replacement keys which are json-like ({.*})... that can be solved by evaluating those first, however.

@chrisgward
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Though that final solution would be an issue should there be any of the JSON characters in there... escape all the things?

Please sign in to comment.