Use utility methods in MetaItemStack

This commit is contained in:
md678685 2018-12-09 12:16:15 +00:00
parent 3df3f8a812
commit 1206178eca

View file

@ -3,7 +3,9 @@ package com.earth2me.essentials;
import com.earth2me.essentials.textreader.BookInput; import com.earth2me.essentials.textreader.BookInput;
import com.earth2me.essentials.textreader.BookPager; import com.earth2me.essentials.textreader.BookPager;
import com.earth2me.essentials.textreader.IText; import com.earth2me.essentials.textreader.IText;
import com.earth2me.essentials.utils.EnumUtil;
import com.earth2me.essentials.utils.FormatUtil; import com.earth2me.essentials.utils.FormatUtil;
import com.earth2me.essentials.utils.MaterialUtil;
import com.earth2me.essentials.utils.NumberUtil; import com.earth2me.essentials.utils.NumberUtil;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
@ -103,10 +105,6 @@ public class MetaItemStack {
completePotion = true; completePotion = true;
} }
private boolean isPotion(Material type) {
return type.name().endsWith("POTION");
}
public boolean canSpawn(final IEssentials ess) { public boolean canSpawn(final IEssentials ess) {
try { try {
ess.getServer().getUnsafe().modifyItemStack(stack.clone(), "{}"); ess.getServer().getUnsafe().modifyItemStack(stack.clone(), "{}");
@ -164,16 +162,8 @@ public class MetaItemStack {
return; return;
} }
Material banner = null; Material WRITTEN_BOOK = EnumUtil.getMaterial("WRITTEN_BOOK");
Material shield = null; Material SHIELD = EnumUtil.getMaterial("SHIELD"); // 1.9
try {
// 1.8
banner = Material.valueOf("BANNER");
// 1.9
shield = Material.valueOf("SHIELD");
} catch(IllegalArgumentException ignored){}
if (split.length > 1 && split[0].equalsIgnoreCase("name") && hasMetaPermission(sender, "name", false, true, ess)) { if (split.length > 1 && split[0].equalsIgnoreCase("name") && hasMetaPermission(sender, "name", false, true, ess)) {
final String displayName = FormatUtil.replaceFormat(split[1].replace('_', ' ')); final String displayName = FormatUtil.replaceFormat(split[1].replace('_', ' '));
@ -191,16 +181,16 @@ public class MetaItemStack {
} else if (split[0].equalsIgnoreCase("unbreakable") && hasMetaPermission(sender, "unbreakable", false, true, ess)) { } else if (split[0].equalsIgnoreCase("unbreakable") && hasMetaPermission(sender, "unbreakable", false, true, ess)) {
boolean value = split.length > 1 ? Boolean.valueOf(split[1]) : true; boolean value = split.length > 1 ? Boolean.valueOf(split[1]) : true;
setUnbreakable(stack, value); setUnbreakable(stack, value);
} else if (split.length > 1 && (split[0].equalsIgnoreCase("player") || split[0].equalsIgnoreCase("owner")) && (stack.getType() == Material.SKELETON_SKULL || stack.getType() == Material.WITHER_SKELETON_SKULL) && hasMetaPermission(sender, "head", false, true, ess)) { } else if (split.length > 1 && (split[0].equalsIgnoreCase("player") || split[0].equalsIgnoreCase("owner")) && hasMetaPermission(sender, "head", false, true, ess)) {
if (stack.getDurability() == 3) { if (MaterialUtil.isPlayerHead(stack.getType(), stack.getDurability())) {
final String owner = split[1]; final String owner = split[1];
final SkullMeta meta = (SkullMeta) stack.getItemMeta(); final SkullMeta meta = (SkullMeta) stack.getItemMeta();
meta.setOwner(owner); meta.setOwningPlayer(ess.getServer().getOfflinePlayer(owner));
stack.setItemMeta(meta); stack.setItemMeta(meta);
} else { } else {
throw new Exception(tl("onlyPlayerSkulls")); throw new Exception(tl("onlyPlayerSkulls"));
} }
} else if (split.length > 1 && split[0].equalsIgnoreCase("book") && stack.getType() == Material.WRITTEN_BOOK && (hasMetaPermission(sender, "book", true, true, ess) || hasMetaPermission(sender, "chapter-" + split[1].toLowerCase(Locale.ENGLISH), true, true, ess))) { } else if (split.length > 1 && split[0].equalsIgnoreCase("book") && stack.getType() == WRITTEN_BOOK && (hasMetaPermission(sender, "book", true, true, ess) || hasMetaPermission(sender, "chapter-" + split[1].toLowerCase(Locale.ENGLISH), true, true, ess))) {
final BookMeta meta = (BookMeta) stack.getItemMeta(); final BookMeta meta = (BookMeta) stack.getItemMeta();
final IText input = new BookInput("book", true, ess); final IText input = new BookInput("book", true, ess);
final BookPager pager = new BookPager(input); final BookPager pager = new BookPager(input);
@ -208,42 +198,44 @@ public class MetaItemStack {
List<String> pages = pager.getPages(split[1]); List<String> pages = pager.getPages(split[1]);
meta.setPages(pages); meta.setPages(pages);
stack.setItemMeta(meta); stack.setItemMeta(meta);
} else if (split.length > 1 && split[0].equalsIgnoreCase("author") && stack.getType() == Material.WRITTEN_BOOK && hasMetaPermission(sender, "author", false, true, ess)) { } else if (split.length > 1 && split[0].equalsIgnoreCase("author") && stack.getType() == WRITTEN_BOOK && hasMetaPermission(sender, "author", false, true, ess)) {
final String author = FormatUtil.replaceFormat(split[1]); final String author = FormatUtil.replaceFormat(split[1]);
final BookMeta meta = (BookMeta) stack.getItemMeta(); final BookMeta meta = (BookMeta) stack.getItemMeta();
meta.setAuthor(author); meta.setAuthor(author);
stack.setItemMeta(meta); stack.setItemMeta(meta);
} else if (split.length > 1 && split[0].equalsIgnoreCase("title") && stack.getType() == Material.WRITTEN_BOOK && hasMetaPermission(sender, "title", false, true, ess)) { } else if (split.length > 1 && split[0].equalsIgnoreCase("title") && stack.getType() == WRITTEN_BOOK && hasMetaPermission(sender, "title", false, true, ess)) {
final String title = FormatUtil.replaceFormat(split[1].replace('_', ' ')); final String title = FormatUtil.replaceFormat(split[1].replace('_', ' '));
final BookMeta meta = (BookMeta) stack.getItemMeta(); final BookMeta meta = (BookMeta) stack.getItemMeta();
meta.setTitle(title); meta.setTitle(title);
stack.setItemMeta(meta); stack.setItemMeta(meta);
} else if (split.length > 1 && split[0].equalsIgnoreCase("power") && (stack.getType() == Material.FIREWORK_ROCKET || stack.getType() == Material.FIREWORK_STAR)&& hasMetaPermission(sender, "firework-power", false, true, ess)) { } else if (split.length > 1 && split[0].equalsIgnoreCase("power") && (MaterialUtil.isFirework(stack.getType()))&& hasMetaPermission(sender, "firework-power", false, true, ess)) {
final int power = NumberUtil.isInt(split[1]) ? Integer.parseInt(split[1]) : 0; final int power = NumberUtil.isInt(split[1]) ? Integer.parseInt(split[1]) : 0;
final FireworkMeta meta = (FireworkMeta) stack.getItemMeta(); final FireworkMeta meta = (FireworkMeta) stack.getItemMeta();
meta.setPower(power > 3 ? 4 : power); meta.setPower(power > 3 ? 4 : power);
stack.setItemMeta(meta); stack.setItemMeta(meta);
} else if (split.length > 1 && split[0].equalsIgnoreCase("itemflags") && hasMetaPermission(sender, "itemflags", false, true, ess)) { } else if (split.length > 1 && split[0].equalsIgnoreCase("itemflags") && hasMetaPermission(sender, "itemflags", false, true, ess)) {
addItemFlags(string); addItemFlags(string);
} else if (stack.getType() == Material.FIREWORK_ROCKET || stack.getType() == Material.FIREWORK_STAR) {//WARNING - Meta for fireworks will be ignored after this point. } else if (MaterialUtil.isFirework(stack.getType())) {//WARNING - Meta for fireworks will be ignored after this point.
addFireworkMeta(sender, false, string, ess); addFireworkMeta(sender, false, string, ess);
} else if (isPotion(stack.getType())) { //WARNING - Meta for potions will be ignored after this point. } else if (MaterialUtil.isPotion(stack.getType())) { //WARNING - Meta for potions will be ignored after this point.
addPotionMeta(sender, false, string, ess); addPotionMeta(sender, false, string, ess);
} else if (banner != null && stack.getType() == banner) { //WARNING - Meta for banners will be ignored after this point. } else if (MaterialUtil.isBanner(stack.getType())) {
//WARNING - Meta for banners will be ignored after this point.
addBannerMeta(sender, false, string, ess); addBannerMeta(sender, false, string, ess);
} else if (shield != null && stack.getType() == shield) { //WARNING - Meta for shields will be ignored after this point. } else if (SHIELD != null && stack.getType() == SHIELD) { //WARNING - Meta for shields will be ignored after this point.
addBannerMeta(sender, false, string, ess); addBannerMeta(sender, false, string, ess);
} else if (split.length > 1 && (split[0].equalsIgnoreCase("color") || split[0].equalsIgnoreCase("colour")) && (stack.getType() == Material.LEATHER_BOOTS || stack.getType() == Material.LEATHER_CHESTPLATE || stack.getType() == Material.LEATHER_HELMET || stack.getType() == Material.LEATHER_LEGGINGS)) { } else if (split.length > 1 && (split[0].equalsIgnoreCase("color") || split[0].equalsIgnoreCase("colour")) && MaterialUtil.isLeatherArmor(stack.getType())) {
final String[] color = split[1].split("(\\||,)"); final String[] color = split[1].split("(\\||,)");
if(color.length == 1 && (NumberUtil.isInt(color[0]) || color[0].startsWith("#"))) { // int rgb and hex if (color.length == 1 && (NumberUtil.isInt(color[0]) || color[0].startsWith("#"))) {
// Either integer or hexadecimal
final LeatherArmorMeta meta = (LeatherArmorMeta) stack.getItemMeta(); final LeatherArmorMeta meta = (LeatherArmorMeta) stack.getItemMeta();
String input = color[0]; String input = color[0];
if(input.startsWith("#")) { if (input.startsWith("#")) { // Hex
meta.setColor(Color.fromRGB( meta.setColor(Color.fromRGB(
Integer.valueOf(input.substring(1, 3), 16), Integer.valueOf(input.substring(1, 3), 16),
Integer.valueOf(input.substring(3, 5), 16), Integer.valueOf(input.substring(3, 5), 16),
Integer.valueOf(input.substring(5, 7), 16))); Integer.valueOf(input.substring(5, 7), 16)));
} else { } else { // Int
meta.setColor(Color.fromRGB(Integer.parseInt(input))); meta.setColor(Color.fromRGB(Integer.parseInt(input)));
} }
stack.setItemMeta(meta); stack.setItemMeta(meta);
@ -287,7 +279,7 @@ public class MetaItemStack {
} }
public void addFireworkMeta(final CommandSource sender, final boolean allowShortName, final String string, final IEssentials ess) throws Exception { public void addFireworkMeta(final CommandSource sender, final boolean allowShortName, final String string, final IEssentials ess) throws Exception {
if (stack.getType() == Material.FIREWORK_ROCKET || stack.getType() == Material.FIREWORK_STAR) { if (MaterialUtil.isFirework(stack.getType())) {
final String[] split = splitPattern.split(string, 2); final String[] split = splitPattern.split(string, 2);
if (split.length < 2) { if (split.length < 2) {
return; return;
@ -359,7 +351,7 @@ public class MetaItemStack {
} }
public void addPotionMeta(final CommandSource sender, final boolean allowShortName, final String string, final IEssentials ess) throws Exception { public void addPotionMeta(final CommandSource sender, final boolean allowShortName, final String string, final IEssentials ess) throws Exception {
if (isPotion(stack.getType())) { if (MaterialUtil.isPotion(stack.getType())) {
final String[] split = splitPattern.split(string, 2); final String[] split = splitPattern.split(string, 2);
if (split.length < 2) { if (split.length < 2) {