Fix serializing of more complex items such as player heads, don't include setArmor in disguise string but instead rely on sethelmet etc
This commit is contained in:
		| @@ -2738,7 +2738,21 @@ public class DisguiseUtilities { | ||||
|                     str[i] = Array.get(base.getValue(), i).toString();//+ getChar(base.getType()); | ||||
|                 } | ||||
|  | ||||
|                 return "[" + StringUtils.join(str, ",") + "]"; | ||||
|                 String c = ""; | ||||
|  | ||||
|                 switch (base.getType()) { | ||||
|                     case TAG_BYTE_ARRAY: | ||||
|                         c = "B;"; | ||||
|                         break; | ||||
|                     case TAG_INT_ARRAY: | ||||
|                         c = "I;"; | ||||
|                         break; | ||||
|                     case TAG_LONG_ARRAY: | ||||
|                         c = "L;"; | ||||
|                         break; | ||||
|                 } | ||||
|  | ||||
|                 return "[" + c + StringUtils.join(str, ",") + "]"; | ||||
|             case TAG_BYTE: | ||||
|             case TAG_INT: | ||||
|             case TAG_LONG: | ||||
|   | ||||
| @@ -114,11 +114,11 @@ public class ParamInfoItemStack extends ParamInfoEnum { | ||||
|             String[] split; | ||||
|  | ||||
|             // If it matches /give @p stone {data} | ||||
|             if (string.matches("[^{]+?[ -]\\{.+?}")) { | ||||
|             if (string.matches("^[^{]+?[ -]\\{[.].+?}$")) { | ||||
|                 split = string.substring(0, string.indexOf("{") - 1).split("[ -]"); | ||||
|                 split = Arrays.copyOf(split, split.length + 1); | ||||
|                 split[split.length - 1] = string.substring(string.indexOf("{")); | ||||
|             } else if (string.matches("[^{ ]+?\\{.+?}( [0-9]+)?")) { // /give @p stone[data] <amount?> | ||||
|             } else if (string.matches("^[^{ -]+?\\{.+?}([ -][0-9]+)?$")) { // /give @p stone[data] <amount?> | ||||
|                 split = new String[string.endsWith("}") ? 2 : 3]; | ||||
|                 split[0] = string.substring(0, string.indexOf("{")); | ||||
|                 split[string.endsWith("}") ? 1 : 2] = string | ||||
|   | ||||
| @@ -63,12 +63,19 @@ public class DisguiseParser { | ||||
|  | ||||
|                 for (Method setMethod : methods) { | ||||
|                     // Invalidate methods that can't be handled normally | ||||
|                     if (setMethod.getName().equals("addPotionEffect") || (setMethod.getName().equals("setSkin") && | ||||
|                             setMethod.getParameterTypes()[0] == String.class) || | ||||
|                             (setMethod.getName().equals("setTarget") && | ||||
|                                     setMethod.getParameterTypes()[0] != int.class) || | ||||
|                             (setMethod.getName().equals("setItemInMainHand") && | ||||
|                                     setMethod.getParameterTypes()[0] == Material.class)) { | ||||
|                     if (setMethod.getName().equals("addPotionEffect")) { | ||||
|                         continue; | ||||
|                     } else if (setMethod.getName().equals("setSkin") && | ||||
|                             setMethod.getParameterTypes()[0] == String.class) { | ||||
|                         continue; | ||||
|                     } else if (setMethod.getName().equals("setTarget") && | ||||
|                             setMethod.getParameterTypes()[0] != int.class) { | ||||
|                         continue; | ||||
|                     } else if (setMethod.getName().equals("setItemInMainHand") && | ||||
|                             setMethod.getParameterTypes()[0] == Material.class) { | ||||
|                         continue; | ||||
|                     } else if (setMethod.getName().matches("setArmor") && | ||||
|                             setMethod.getParameterTypes()[0] == ItemStack[].class) { | ||||
|                         continue; | ||||
|                     } | ||||
|  | ||||
| @@ -829,7 +836,8 @@ public class DisguiseParser { | ||||
|  | ||||
|                                 usedOptions.add(optionName); | ||||
|                                 doCheck(sender, permissions, disguisePerm, usedOptions); | ||||
|                                 String itemName = itemStack == null ? "null" : itemStack.getType().name().toLowerCase(Locale.ENGLISH); | ||||
|                                 String itemName = itemStack == null ? "null" : | ||||
|                                         itemStack.getType().name().toLowerCase(Locale.ENGLISH); | ||||
|  | ||||
|                                 if (!hasPermissionOption(disguiseOptions, optionName, itemName)) { | ||||
|                                     throw new DisguiseParseException(LibsMsg.PARSE_NO_PERM_PARAM, itemName, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user