From e2511d69d8c31c56a34046fcf7566acd1ee3b4eb Mon Sep 17 00:00:00 2001 From: Brianna Date: Wed, 24 Apr 2019 19:46:36 -0400 Subject: [PATCH 1/3] Added 1.14 Support. --- .../com/songoda/epicbuckets/EpicBuckets.java | 39 + .../java/com/songoda/epicbuckets/Locale.java | 38 +- .../epicbuckets/file/ConfigManager.java | 16 +- .../epicbuckets/genbucket/Genbucket.java | 20 +- .../com/songoda/epicbuckets/gui/GUIBulk.java | 2 +- .../com/songoda/epicbuckets/gui/GUIMain.java | 2 +- .../com/songoda/epicbuckets/gui/GUIPanel.java | 14 +- .../com/songoda/epicbuckets/gui/GUIShop.java | 2 +- .../listeners/GenbucketPlaceListener.java | 4 +- .../com/songoda/epicbuckets/shop/Shop.java | 6 +- .../songoda/epicbuckets/shop/ShopManager.java | 6 +- .../com/songoda/epicbuckets/shop/SubShop.java | 14 +- .../epicbuckets/utils/InventoryHelper.java | 6 +- .../utils/{XMaterial.java => Materials.java} | 669 ++++++++++++------ .../songoda/epicbuckets/utils/Validator.java | 2 +- .../epicbuckets/utils/gui/AbstractGUI.java | 19 +- .../epicbuckets/utils/itemnbtapi/NBTList.java | 21 +- .../utils/itemnbtapi/ReflectionMethod.java | 21 +- .../itemnbtapi/utils/MinecraftVersion.java | 13 +- pom.xml | 2 +- 20 files changed, 633 insertions(+), 283 deletions(-) rename EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/{XMaterial.java => Materials.java} (63%) diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/EpicBuckets.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/EpicBuckets.java index 765ade0..9848e37 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/EpicBuckets.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/EpicBuckets.java @@ -24,7 +24,14 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; import java.util.ArrayList; import java.util.List; import java.util.function.Supplier; @@ -68,6 +75,8 @@ public class EpicBuckets extends JavaPlugin { Locale.saveDefaultLocale("en_US"); this.locale = Locale.getLocale(getConfig().getString("Locale", "en_US")); + this.update(); + this.references = new References(); debugger = new Debugger(); @@ -128,6 +137,36 @@ public class EpicBuckets extends JavaPlugin { this.getShopManager().reload(); } + private void update() { + try { + URL url = new URL("http://update.songoda.com/index.php?plugin=" + getDescription().getName() + "&version=" + getDescription().getVersion()); + URLConnection urlConnection = url.openConnection(); + InputStream is = urlConnection.getInputStream(); + InputStreamReader isr = new InputStreamReader(is); + + int numCharsRead; + char[] charArray = new char[1024]; + StringBuilder sb = new StringBuilder(); + while ((numCharsRead = isr.read(charArray)) > 0) { + sb.append(charArray, 0, numCharsRead); + } + String jsonString = sb.toString(); + JSONObject json = (JSONObject) new JSONParser().parse(jsonString); + + JSONArray files = (JSONArray) json.get("neededFiles"); + for (Object o : files) { + JSONObject file = (JSONObject) o; + + if ("locale".equals(file.get("type"))) { + InputStream in = new URL((String) file.get("link")).openStream(); + Locale.saveDefaultLocale(in, (String) file.get("name")); + } + } + } catch (Exception e) { + Bukkit.getLogger().warning("Failed to update."); + } + } + private ProtectionPluginHook register(Supplier hookSupplier) { return this.registerProtectionHook(hookSupplier.get()); } diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/Locale.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/Locale.java index 23425a1..4fb352e 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/Locale.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/Locale.java @@ -3,7 +3,7 @@ package com.songoda.epicbuckets; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; -import org.apache.commons.io.IOUtils; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.plugin.java.JavaPlugin; @@ -24,7 +24,7 @@ import java.util.stream.Collectors; public class Locale { private static final List LOCALES = Lists.newArrayList(); - private static final Pattern NODE_PATTERN = Pattern.compile("(\\w+(?:\\.{1}\\w+)*)\\s*=\\s*\"(.*)\""); + private static final Pattern NODE_PATTERN = Pattern.compile("(\\w+(?:\\.\\w+)*)\\s*=\\s*\"(.*)\""); private static final String FILE_EXTENSION = ".lang"; private static JavaPlugin plugin; private static File localeFolder; @@ -48,7 +48,7 @@ public class Locale { if (this.reloadMessages()) return; - plugin.getLogger().info("Loaded locale " + fileName); + Bukkit.getConsoleSender().sendMessage("Loaded locale " + fileName); } /** @@ -74,7 +74,9 @@ public class Locale { * Find all .lang file locales under the "locales" folder */ public static void searchForLocales() { - if (!localeFolder.exists()) localeFolder.mkdirs(); + if (!localeFolder.exists()) { + localeFolder.mkdirs(); + } for (File file : localeFolder.listFiles()) { String name = file.getName(); @@ -87,7 +89,7 @@ public class Locale { if (localeExists(localeValues[0] + "_" + localeValues[1])) continue; LOCALES.add(new Locale(localeValues[0], localeValues[1])); - plugin.getLogger().info("Found and loaded locale \"" + fileName + "\""); + Bukkit.getConsoleSender().sendMessage("Found and loaded locale \"" + fileName + "\""); } } @@ -151,11 +153,11 @@ public class Locale { /** * Save a default locale file from the project source directory, to the locale folder * - * @param path the path to the file to save + * @param in file to save * @param fileName the name of the file to save * @return true if the operation was successful, false otherwise */ - public static boolean saveDefaultLocale(String path, String fileName) { + public static boolean saveDefaultLocale(InputStream in, String fileName) { if (!localeFolder.exists()) localeFolder.mkdirs(); if (!fileName.endsWith(FILE_EXTENSION)) @@ -167,7 +169,7 @@ public class Locale { } try (OutputStream outputStream = new FileOutputStream(destinationFile)) { - IOUtils.copy(plugin.getResource(fileName), outputStream); + copy(in == null ? plugin.getResource(fileName) : in, outputStream); fileName = fileName.substring(0, fileName.lastIndexOf('.')); String[] localeValues = fileName.split("_"); @@ -190,7 +192,7 @@ public class Locale { * @return true if the operation was successful, false otherwise */ public static boolean saveDefaultLocale(String fileName) { - return saveDefaultLocale("", fileName); + return saveDefaultLocale(null, fileName); } /** @@ -244,6 +246,19 @@ public class Locale { return changed; } + private static void copy(InputStream input, OutputStream output) { + int n; + byte[] buffer = new byte[1024 * 4]; + + try { + while ((n = input.read(buffer)) != -1) { + output.write(buffer, 0, n); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + /** * Get the name of the language that this locale is based on. * (i.e. "en" for English, or "fr" for French) @@ -302,7 +317,7 @@ public class Locale { public String getMessage(String node, Object... args) { String message = getMessage(node); for (Object arg : args) { - message = message.replaceFirst("\\%.*?\\%", arg.toString()); + message = message.replaceFirst("%.*?%", arg.toString()); } return message; } @@ -360,4 +375,7 @@ public class Locale { return true; } + public String getPrefix() { + return getMessage("general.nametag.prefix") + " "; + } } \ No newline at end of file diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/file/ConfigManager.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/file/ConfigManager.java index 7db8699..6598023 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/file/ConfigManager.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/file/ConfigManager.java @@ -3,8 +3,8 @@ package com.songoda.epicbuckets.file; import com.songoda.epicbuckets.EpicBuckets; import com.songoda.epicbuckets.genbucket.GenbucketType; import com.songoda.epicbuckets.utils.InventoryHelper; +import com.songoda.epicbuckets.utils.Materials; import com.songoda.epicbuckets.utils.Validator; -import com.songoda.epicbuckets.utils.XMaterial; import org.bukkit.block.BlockFace; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; @@ -34,8 +34,8 @@ public class ConfigManager { private String bulkShopPurchasePath = "BULK-SHOP-INVENTORY.purchase-item"; private String menuItemsPath = "MENU-ITEMS"; - private List ignoredMaterials; - private List psuedoMaterials; + private List ignoredMaterials; + private List psuedoMaterials; private LinkedHashMap genbucketGroups; @@ -181,7 +181,7 @@ public class ConfigManager { HashMap chargingCostsPerItem = new HashMap<>(); epicBuckets.getConfig().getConfigurationSection("COST-FOR-INFINITE-USE." + bucket).getKeys(false) - .forEach(item -> chargingCostsPerItem.put(XMaterial.valueOf(item).parseItem(), + .forEach(item -> chargingCostsPerItem.put(Materials.valueOf(item).parseItem(), epicBuckets.getConfig().getDouble("COST-FOR-INFINITE-USE." + bucket + "." + item))); infiniteUseCost.put(GenbucketType.valueOf(bucket), chargingCostsPerItem); @@ -219,14 +219,14 @@ public class ConfigManager { private void setupFillItem() { boolean m = Validator.isMaterial(epicBuckets.getConfig().getString(getFillItemPath() + ".material")); - fillItem = ((!m) ? XMaterial.BLACK_STAINED_GLASS_PANE.parseItem() : XMaterial.valueOf(epicBuckets.getConfig().getString(getFillItemPath() + ".material")).parseItem()); + fillItem = ((!m) ? Materials.BLACK_STAINED_GLASS_PANE.parseItem() : Materials.valueOf(epicBuckets.getConfig().getString(getFillItemPath() + ".material")).parseItem()); fillItem = InventoryHelper.setDisplayName(fillItem, epicBuckets.getConfig().getString(getFillItemPath() + ".name")); } private void setupBackButton() { boolean m = Validator.isMaterial(epicBuckets.getConfig().getString(getBackButtonPath() + ".material")); - backButton = ((!m) ? XMaterial.BARRIER.parseItem() : XMaterial.valueOf(epicBuckets.getConfig().getString(getBackButtonPath() + ".material")).parseItem()); + backButton = ((!m) ? Materials.BARRIER.parseItem() : Materials.valueOf(epicBuckets.getConfig().getString(getBackButtonPath() + ".material")).parseItem()); backButton = InventoryHelper.setDisplayName(backButton, epicBuckets.getConfig().getString(getBackButtonPath() + ".name")); } @@ -282,11 +282,11 @@ public class ConfigManager { return bulkShopPurchasePath; } - public List getIgnoredMaterials() { + public List getIgnoredMaterials() { return ignoredMaterials; } - public List getPsuedoMaterials() { + public List getPsuedoMaterials() { return psuedoMaterials; } diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/genbucket/Genbucket.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/genbucket/Genbucket.java index 3d30d9d..35cafae 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/genbucket/Genbucket.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/genbucket/Genbucket.java @@ -2,7 +2,7 @@ package com.songoda.epicbuckets.genbucket; import com.songoda.epicbuckets.EpicBuckets; import com.songoda.epicbuckets.shop.SubShop; -import com.songoda.epicbuckets.utils.XMaterial; +import com.songoda.epicbuckets.utils.Materials; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -100,12 +100,12 @@ public abstract class Genbucket { Block b = getNextBlock(); if (isBelowVoid(moved + 1)) return false; if (b.getRelative(getBlockFace()).getType() != Material.AIR) { - if (b.getRelative(getBlockFace()).getType() != XMaterial.COBBLESTONE.parseMaterial()) { + if (b.getRelative(getBlockFace()).getType() != Materials.COBBLESTONE.parseMaterial()) { b.setType(getGenItem().getType()); return false; } } - b.getRelative(getBlockFace()).setType(XMaterial.COBBLESTONE.parseMaterial()); + b.getRelative(getBlockFace()).setType(Materials.COBBLESTONE.parseMaterial()); b.setType(getGenItem().getType()); return true; } @@ -114,12 +114,12 @@ public abstract class Genbucket { Block b = getNextBlock(moved, blockFace); if (isBelowVoid(moved + 1)) return false; if (b.getRelative(BlockFace.DOWN).getType() != Material.AIR) { - if (b.getRelative(BlockFace.DOWN).getType() != XMaterial.COBBLESTONE.parseMaterial()) { + if (b.getRelative(BlockFace.DOWN).getType() != Materials.COBBLESTONE.parseMaterial()) { b.setType(getGenItem().getType()); return false; } } - b.getRelative(BlockFace.DOWN).setType(XMaterial.COBBLESTONE.parseMaterial()); + b.getRelative(BlockFace.DOWN).setType(Materials.COBBLESTONE.parseMaterial()); b.setType(getGenItem().getType()); return true; } @@ -134,7 +134,7 @@ public abstract class Genbucket { } protected void fixHole(Block block) { - if (block.getType() == XMaterial.AIR.parseMaterial()) block.setType(getGenItem().getType()); + if (block.getType() == Materials.AIR.parseMaterial()) block.setType(getGenItem().getType()); } protected boolean spongeInRange(Block block) { @@ -145,7 +145,7 @@ public abstract class Genbucket { for (int x = -radius; x <= radius; x++) { for (int z = -radius; z <= radius; z++) { - if (block.getRelative(x, 0, z).getType() == XMaterial.SPONGE.parseMaterial()) return true; + if (block.getRelative(x, 0, z).getType() == Materials.SPONGE.parseMaterial()) return true; } } @@ -154,12 +154,12 @@ public abstract class Genbucket { protected boolean placeGen(Block block) { - List materials = epicBuckets.getConfigManager().getIgnoredMaterials(); + List materials = epicBuckets.getConfigManager().getIgnoredMaterials(); - if (!materials.contains(XMaterial.requestXMaterial(block.getType().name(), block.getData()))) + if (!materials.contains(Materials.requestMaterials(block.getType().name(), block.getData()))) return false; - if ((materials.contains(XMaterial.WATER) || materials.contains(XMaterial.LAVA)) && block.isLiquid()) + if ((materials.contains(Materials.WATER) || materials.contains(Materials.LAVA)) && block.isLiquid()) return false; if (!epicBuckets.canBuild(owner, block.getLocation())) return false; diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIBulk.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIBulk.java index 2598447..d2f463d 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIBulk.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIBulk.java @@ -33,7 +33,7 @@ public class GUIBulk extends AbstractGUI { } @Override - protected void constructGUI() { + public void constructGUI() { if (shopManager.isBulkFillInventory()) { int num = 0; while (num != size) { diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIMain.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIMain.java index 4ecb926..4da72f3 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIMain.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIMain.java @@ -27,7 +27,7 @@ public class GUIMain extends AbstractGUI { } @Override - protected void constructGUI() { + public void constructGUI() { if (configManager.isFillInventory()) { int num = 0; while (num != size) { diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIPanel.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIPanel.java index f71ea28..03df615 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIPanel.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIPanel.java @@ -3,7 +3,7 @@ package com.songoda.epicbuckets.gui; import com.songoda.epicbuckets.EpicBuckets; import com.songoda.epicbuckets.genbucket.Genbucket; import com.songoda.epicbuckets.utils.ChatUtil; -import com.songoda.epicbuckets.utils.XMaterial; +import com.songoda.epicbuckets.utils.Materials; import com.songoda.epicbuckets.utils.gui.AbstractGUI; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -32,7 +32,7 @@ public class GUIPanel extends AbstractGUI { } @Override - protected void constructGUI() { + public void constructGUI() { inventory.clear(); resetClickables(); @@ -88,7 +88,7 @@ public class GUIPanel extends AbstractGUI { private void registerExtraButtons() { if (page > 0) { - inventory.setItem(27, createItem(XMaterial.ARROW.parseItem(), epicBuckets.getLocale().getMessage("interface.admin.panel.previous"))); + inventory.setItem(27, createItem(Materials.ARROW.parseItem(), epicBuckets.getLocale().getMessage("interface.admin.panel.previous"))); registerClickable(27, (player, inventory, cursor, slot, type) -> { page--; constructGUI(); @@ -96,9 +96,9 @@ public class GUIPanel extends AbstractGUI { }); } - ItemStack deactiveButton = createItem(XMaterial.RED_WOOL.parseItem(), epicBuckets.getLocale().getMessage("interface.admin.panel.deactivateall")); - ItemStack pageButton = createItem(XMaterial.SIGN.parseItem(), epicBuckets.getLocale().getMessage("interface.admin.panel.page").replace("%page%", String.valueOf(page + 1))); - ItemStack nextButton = createItem(XMaterial.ARROW.parseItem(), epicBuckets.getLocale().getMessage("interface.admin.panel.next")); + ItemStack deactiveButton = createItem(Materials.RED_WOOL.parseItem(), epicBuckets.getLocale().getMessage("interface.admin.panel.deactivateall")); + ItemStack pageButton = createItem(Materials.OAK_SIGN.parseItem(), epicBuckets.getLocale().getMessage("interface.admin.panel.page").replace("%page%", String.valueOf(page + 1))); + ItemStack nextButton = createItem(Materials.ARROW.parseItem(), epicBuckets.getLocale().getMessage("interface.admin.panel.next")); inventory.setItem(30, deactiveButton); inventory.setItem(32, pageButton); @@ -134,7 +134,7 @@ public class GUIPanel extends AbstractGUI { private ItemStack createGenbucketItem(Genbucket genbucket) { - ItemStack skull = new ItemStack(XMaterial.PLAYER_HEAD.parseMaterial(), 1, (short) 3); + ItemStack skull = new ItemStack(Materials.PLAYER_HEAD.parseMaterial(), 1, (short) 3); SkullMeta meta = (SkullMeta) (skull.getItemMeta() != null ? skull.getItemMeta() : Bukkit.getItemFactory().getItemMeta(skull.getType())); meta.setOwner(genbucket.getOwner().getName()); meta.setDisplayName(ChatUtil.colorString(epicBuckets.getLocale().getMessage("interface.admin.panel.player").replace("%player%", genbucket.getOwner().getName()))); diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIShop.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIShop.java index d9042a7..d17a482 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIShop.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/gui/GUIShop.java @@ -32,7 +32,7 @@ public class GUIShop extends AbstractGUI { } @Override - protected void constructGUI() { + public void constructGUI() { if (shop.isFillInventory()) { int num = 0; while (num != size) { diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/listeners/GenbucketPlaceListener.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/listeners/GenbucketPlaceListener.java index 00e948a..d340564 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/listeners/GenbucketPlaceListener.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/listeners/GenbucketPlaceListener.java @@ -9,7 +9,7 @@ import com.songoda.epicbuckets.genbucket.types.Horizontal; import com.songoda.epicbuckets.genbucket.types.Infused; import com.songoda.epicbuckets.genbucket.types.PsuedoVertical; import com.songoda.epicbuckets.genbucket.types.Vertical; -import com.songoda.epicbuckets.utils.XMaterial; +import com.songoda.epicbuckets.utils.Materials; import com.songoda.epicbuckets.utils.itemnbtapi.NBTItem; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -91,7 +91,7 @@ public class GenbucketPlaceListener implements Listener { e.getPlayer().sendMessage(instance.getLocale().getMessage("event.genbucket.placedwrong").replace("%genbucket%", genbucket.getGenbucketType().formatName() + " Genbucket")); return; } - if (genbucket.getGenbucketType() == GenbucketType.PSUEDO && !instance.getConfigManager().getPsuedoMaterials().contains(XMaterial.requestXMaterial(e.getClickedBlock().getType().name(), e.getClickedBlock().getData()))) { + if (genbucket.getGenbucketType() == GenbucketType.PSUEDO && !instance.getConfigManager().getPsuedoMaterials().contains(Materials.requestMaterials(e.getClickedBlock().getType().name(), e.getClickedBlock().getData()))) { e.getPlayer().sendMessage(instance.getLocale().getMessage("event.genbucket.wrongmaterialpsuedo")); return; } diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/shop/Shop.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/shop/Shop.java index 7261803..33201f6 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/shop/Shop.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/shop/Shop.java @@ -3,8 +3,8 @@ package com.songoda.epicbuckets.shop; import com.songoda.epicbuckets.EpicBuckets; import com.songoda.epicbuckets.genbucket.GenbucketType; import com.songoda.epicbuckets.utils.InventoryHelper; +import com.songoda.epicbuckets.utils.Materials; import com.songoda.epicbuckets.utils.Validator; -import com.songoda.epicbuckets.utils.XMaterial; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.inventory.ItemStack; @@ -94,7 +94,7 @@ public class Shop { setEnabled(false); } - shopItem = ((!m) ? XMaterial.WATER_BUCKET.parseItem() : XMaterial.valueOf(epicBuckets.getConfig().getString(itemPath + ".material")).parseItem()); + shopItem = ((!m) ? Materials.WATER_BUCKET.parseItem() : Materials.valueOf(epicBuckets.getConfig().getString(itemPath + ".material")).parseItem()); shopItem = InventoryHelper.setLore(InventoryHelper.setDisplayName(shopItem, epicBuckets.getConfig().getString(itemPath + ".name")), epicBuckets.getConfig().getStringList(itemPath + ".lore")); } @@ -106,7 +106,7 @@ public class Shop { return subShops.get(shop); } - public SubShop getSubShop(XMaterial mat) { + public SubShop getSubShop(Materials mat) { for (SubShop subShop : subShops.values()) { if (subShop.getGenItem().getType() == mat.parseMaterial() && subShop.getGenItem().getDurability() == mat.parseItem().getDurability()) { diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/shop/ShopManager.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/shop/ShopManager.java index 2f14a1e..79fb882 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/shop/ShopManager.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/shop/ShopManager.java @@ -65,9 +65,9 @@ public class ShopManager { purchaseSlot = 40; } - increaseItem = ((!i) ? XMaterial.GREEN_STAINED_GLASS_PANE.parseItem() : XMaterial.valueOf(epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getBulkShopIncreasePath() + ".material")).parseItem()); - decreaseItem = ((!d) ? XMaterial.RED_STAINED_GLASS_PANE.parseItem() : XMaterial.valueOf(epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getBulkShopDecreasePath() + ".material")).parseItem()); - purchaseItem = ((!p) ? XMaterial.YELLOW_STAINED_GLASS.parseItem() : XMaterial.valueOf(epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getBulkShopPurchasePath() + ".material")).parseItem()); + increaseItem = ((!i) ? Materials.GREEN_STAINED_GLASS_PANE.parseItem() : Materials.valueOf(epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getBulkShopIncreasePath() + ".material")).parseItem()); + decreaseItem = ((!d) ? Materials.RED_STAINED_GLASS_PANE.parseItem() : Materials.valueOf(epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getBulkShopDecreasePath() + ".material")).parseItem()); + purchaseItem = ((!p) ? Materials.YELLOW_STAINED_GLASS.parseItem() : Materials.valueOf(epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getBulkShopPurchasePath() + ".material")).parseItem()); purchaseItem = InventoryHelper.setDisplayName(purchaseItem, epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getBulkShopPurchasePath() + ".name")); for (String s : epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getBulkShopIncreasePath() + ".slots").split(",")) { diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/shop/SubShop.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/shop/SubShop.java index 57ec9d9..329b77e 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/shop/SubShop.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/shop/SubShop.java @@ -2,8 +2,8 @@ package com.songoda.epicbuckets.shop; import com.songoda.epicbuckets.EpicBuckets; import com.songoda.epicbuckets.utils.InventoryHelper; +import com.songoda.epicbuckets.utils.Materials; import com.songoda.epicbuckets.utils.Validator; -import com.songoda.epicbuckets.utils.XMaterial; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.inventory.ItemStack; @@ -20,7 +20,7 @@ public class SubShop { private ItemStack shopItem; private ItemStack genItem; private ItemStack genShopItem; - private XMaterial type; + private Materials type; private Shop parent; private String item; @@ -60,7 +60,7 @@ public class SubShop { setEnabled(false); } - this.type = XMaterial.valueOf(shops.getString(subShopPath + ".type")); + this.type = Materials.valueOf(shops.getString(subShopPath + ".type")); this.shopName = shops.getString(subShopPath + ".name"); this.description = shops.getStringList(subShopPath + ".description"); this.genItemLore = shops.getStringList(subShopPath + ".item-lore"); @@ -76,12 +76,12 @@ public class SubShop { setEnabled(false); } - shopItem = ((!m) ? XMaterial.WATER_BUCKET.parseItem() : XMaterial.valueOf(shops.getString(subShopPath + ".icon")).parseItem()); + shopItem = ((!m) ? Materials.WATER_BUCKET.parseItem() : Materials.valueOf(shops.getString(subShopPath + ".icon")).parseItem()); shopItem = InventoryHelper.setDisplayName(InventoryHelper.setSubShopLore(shopItem, getDescription(), this), getShopName()); - genItem = ((!t) ? XMaterial.WATER_BUCKET.parseItem() : XMaterial.valueOf(shops.getString(subShopPath + ".type")).parseItem()); + genItem = ((!t) ? Materials.WATER_BUCKET.parseItem() : Materials.valueOf(shops.getString(subShopPath + ".type")).parseItem()); - genShopItem = ((!m) ? XMaterial.WATER_BUCKET.parseItem() : XMaterial.valueOf(shops.getString(subShopPath + ".icon")).parseItem()); + genShopItem = ((!m) ? Materials.WATER_BUCKET.parseItem() : Materials.valueOf(shops.getString(subShopPath + ".icon")).parseItem()); genShopItem = InventoryHelper.setDisplayName(InventoryHelper.setLore(genShopItem, getGenItemLore()), getShopName()); } @@ -133,7 +133,7 @@ public class SubShop { return item; } - public XMaterial getType() { + public Materials getType() { return type; } } diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/InventoryHelper.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/InventoryHelper.java index 595ee0d..bbea91d 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/InventoryHelper.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/InventoryHelper.java @@ -12,14 +12,14 @@ import java.util.stream.IntStream; public class InventoryHelper { - public static List convertMaterialList(List toConvert, String item) { - List converted = new ArrayList<>(); + public static List convertMaterialList(List toConvert, String item) { + List converted = new ArrayList<>(); for (String s : toConvert) { if (!Validator.isMaterial(s.toUpperCase())) { EpicBuckets.getInstance().getDebugger().sendConsole("Invalid material " + s.toUpperCase() + " in " + item + ", skipping.."); continue; } - converted.add(XMaterial.valueOf(s.toUpperCase())); + converted.add(Materials.valueOf(s.toUpperCase())); } return converted; } diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/XMaterial.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/Materials.java similarity index 63% rename from EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/XMaterial.java rename to EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/Materials.java index fe7370b..e4f4b1a 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/XMaterial.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/Materials.java @@ -1,53 +1,39 @@ package com.songoda.epicbuckets.utils; -/** - * The MIT License (MIT) - *

- * Copyright (c) 2018 Hex_27 - *

- * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - *

- * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - *

- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - **/ +import com.songoda.epicbuckets.utils.version.NMSUtil; +import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; +import java.lang.reflect.Method; import java.util.HashMap; -public enum XMaterial { +public enum Materials { ACACIA_BOAT("BOAT_ACACIA", 0), - ACACIA_BUTTON("WOOD_BUTTON", 0), + ACACIA_BUTTON("WOOD_BUTTON", 0, true), ACACIA_DOOR("ACACIA_DOOR", 0), ACACIA_FENCE("ACACIA_FENCE", 0), ACACIA_FENCE_GATE("ACACIA_FENCE_GATE", 0), ACACIA_LEAVES("LEAVES_2", 0), ACACIA_LOG("LOG_2", 0), ACACIA_PLANKS("WOOD", 4), - ACACIA_PRESSURE_PLATE("WOOD_PLATE", 0), + ACACIA_PRESSURE_PLATE("WOOD_PLATE", 0, true), ACACIA_SAPLING("SAPLING", 4), ACACIA_SLAB("WOOD_STEP", 4), + ACACIA_SIGN("STONE", 0, true), ACACIA_STAIRS("ACACIA_STAIRS", 4), - ACACIA_TRAPDOOR("TRAP_DOOR", 0), + ACACIA_TRAPDOOR("TRAP_DOOR", 0, true), + ACACIA_WALL_SIGN("STONE", 0, true), ACACIA_WOOD("LOG_2", 0), ACTIVATOR_RAIL("ACTIVATOR_RAIL", 0), AIR("AIR", 0), - ALLIUM("STONE", 0), + ALLIUM("STONE", 0, true), ANDESITE("STONE", 5), + ANDESITE_SLAB("STONE", 0, true), + ANDESITE_STAIRS("STONE", 0, true), + ANDESITE_WALL("STONE", 0, true), ANVIL("ANVIL", 0), APPLE("APPLE", 0), ARMOR_STAND("ARMOR_STAND", 0), @@ -56,34 +42,41 @@ public enum XMaterial { ATTACHED_PUMPKIN_STEM("PUMPKIN_STEM", 7), AZURE_BLUET("RED_ROSE", 3), BAKED_POTATO("BAKED_POTATO", 0), + BAMBOO("STONE", 0, true), + BAMBOO_SAPLING("STONE", 0, true), + BARREL("STONE", 0, true), BARRIER("BARRIER", 0), BAT_SPAWN_EGG("MONSTER_EGG", 0), BEACON("BEACON", 0), BEDROCK("BEDROCK", 0), BEEF("RAW_BEEF", 0), + BELL("STONE", 0, true), BEETROOT("BEETROOT", 0), BEETROOTS("BEETROOT", 0), BEETROOT_SEEDS("BEETROOT_SEEDS", 0), BEETROOT_SOUP("BEETROOT_SOUP", 0), BIRCH_BOAT("BOAT_BIRCH", 0), - BIRCH_BUTTON("WOOD_BUTTON", 0), + BIRCH_BUTTON("WOOD_BUTTON", 0, true), BIRCH_DOOR("BIRCH_DOOR", 0), BIRCH_FENCE("BIRCH_FENCE", 0), BIRCH_FENCE_GATE("BIRCH_FENCE_GATE", 0), BIRCH_LEAVES("LEAVES", 2), BIRCH_LOG("LOG", 2), BIRCH_PLANKS("WOOD", 2), - BIRCH_PRESSURE_PLATE("WOOD_PLATE", 0), + BIRCH_PRESSURE_PLATE("WOOD_PLATE", 0, true), BIRCH_SAPLING("SAPLING", 2), + BIRCH_SIGN("STONE", 0, true), BIRCH_SLAB("WOOD_STEP", 2), BIRCH_STAIRS("BIRCH_WOOD_STAIRS", 0), - BIRCH_TRAPDOOR("TRAP_DOOR", 0), + BIRCH_TRAPDOOR("TRAP_DOOR", 0, true), + BIRCH_WALL_SIGN("STONE", 0, true), BIRCH_WOOD("LOG", 2), BLACK_BANNER("BANNER", 0), BLACK_BED("BED", 15), BLACK_CARPET("CARPET", 15), BLACK_CONCRETE("CONCRETE", 15), BLACK_CONCRETE_POWDER("CONCRETE_POWDER", 15), + BLACK_DYE("STONE", 0, true), BLACK_GLAZED_TERRACOTTA("BLACK_GLAZED_TERRACOTTA", 0), BLACK_SHULKER_BOX("BLACK_SHULKER_BOX", 0), BLACK_STAINED_GLASS("STAINED_GLASS", 15), @@ -91,6 +84,7 @@ public enum XMaterial { BLACK_TERRACOTTA("STAINED_CLAY", 15), BLACK_WALL_BANNER("WALL_BANNER", 0), BLACK_WOOL("WOOL", 15), + BLAST_FURNACE("STONE", 0, true), BLAZE_POWDER("BLAZE_POWDER", 0), BLAZE_ROD("BLAZE_ROD", 0), BLAZE_SPAWN_EGG("MONSTER_EGG", 0), @@ -99,8 +93,9 @@ public enum XMaterial { BLUE_CARPET("CARPET", 11), BLUE_CONCRETE("CONCRETE", 11), BLUE_CONCRETE_POWDER("CONCRETE_POWDER", 11), + BLUE_DYE("STONE", 0, true), BLUE_GLAZED_TERRACOTTA("BLUE_GLAZED_TERRACOTTA", 0), - BLUE_ICE("PACKED_ICE", 0), + BLUE_ICE("PACKED_ICE", 0, true), BLUE_ORCHID("RED_ROSE", 1), BLUE_SHULKER_BOX("BLUE_SHULKER_BOX", 0), BLUE_STAINED_GLASS("STAINED_GLASS", 11), @@ -115,43 +110,53 @@ public enum XMaterial { BOOKSHELF("BOOKSHELF", 0), BOW("BOW", 0), BOWL("BOWL", 0), - BRAIN_CORAL("STONE", 0), - BRAIN_CORAL_BLOCK("STONE", 0), - BRAIN_CORAL_FAN("STONE", 0), + BRAIN_CORAL("STONE", 0, true), + BRAIN_CORAL_BLOCK("STONE", 0, true), + BRAIN_CORAL_FAN("STONE", 0, true), + BRAIN_CORAL_WALL_FAN("STONE", 0, true), + DEAD_BRAIN_CORAL_FAN("STONE", 0, true), + DEAD_BRAIN_CORAL_WALL_FAN("STONE", 0, true), BREAD("BREAD", 0), BREWING_STAND("BREWING_STAND", 0), BRICK("CLAY_BRICK", 0), BRICKS("BRICK", 0), BRICK_SLAB("STEP", 4), BRICK_STAIRS("BRICK_STAIRS", 0), + BRICK_WALL("STONE", 0, true), BROWN_BANNER("BANNER", 3), BROWN_BED("BED", 12), BROWN_CARPET("CARPET", 12), BROWN_CONCRETE("CONCRETE", 12), BROWN_CONCRETE_POWDER("CONCRETE_POWDER", 12), + BROWN_DYE("STONE", 0, true), BROWN_GLAZED_TERRACOTTA("BROWN_GLAZED_TERRACOTTA", 0), BROWN_MUSHROOM("BROWN_MUSHROOM", 0), - BROWN_MUSHROOM_BLOCK("BROWN_MUSHROOM", 0), //UNSURE + BROWN_MUSHROOM_BLOCK("HUGE_MUSHROOM_1", 0), // UNSURE BROWN_SHULKER_BOX("BROWN_SHULKER_BOX", 0), BROWN_STAINED_GLASS("STAINED_GLASS", 12), BROWN_STAINED_GLASS_PANE("STAINED_GLASS_PANE", 12), BROWN_TERRACOTTA("STAINED_CLAY", 12), BROWN_WALL_BANNER("WALL_BANNER", 3), BROWN_WOOL("WOOL", 12), - BUBBLE_COLUMN("STONE", 0), - BUBBLE_CORAL("STONE", 0), - BUBBLE_CORAL_BLOCK("STONE", 0), - BUBBLE_CORAL_FAN("STONE", 0), + BUBBLE_COLUMN("STONE", 0, true), + BUBBLE_CORAL("STONE", 0, true), + BUBBLE_CORAL_BLOCK("STONE", 0, true), + BUBBLE_CORAL_FAN("STONE", 0, true), + BUBBLE_CORAL_WALL_FAN("STONE", 0, true), + DEAD_BUBBLE_CORAL_FAN("STONE", 0, true), + DEAD_BUBBLE_CORAL_WALL_FAN("STONE", 0, true), BUCKET("BUCKET", 0), CACTUS("CACTUS", 0), - CACTUS_GREEN("INK_SACK", 2), CAKE("CAKE", 0), + CAMPFIRE("STONE", 0, true), CARROT("CARROT_ITEM", 0), CARROTS("CARROT", 0), CARROT_ON_A_STICK("CARROT_STICK", 0), + CARTOGRAPHY_TABLE("STONE", 0, true), CARVED_PUMPKIN("PUMPKIN", 0), + CAT_SPAWN_EGG("STONE", 0, true), CAULDRON("CAULDRON", 0), - CAVE_AIR("AIR", 0), + CAVE_AIR("AIR", 0, true), CAVE_SPIDER_SPAWN_EGG("MONSTER_EGG", 0), CHAINMAIL_BOOTS("CHAINMAIL_BOOTS", 0), CHAINMAIL_CHESTPLATE("CHAINMAIL_CHESTPLATE", 0), @@ -192,7 +197,9 @@ public enum XMaterial { COMMAND_BLOCK_MINECART("COMMAND_MINECART", 0), COMPARATOR("REDSTONE_COMPARATOR", 0), COMPASS("COMPASS", 0), - CONDUIT("STONE", 0), + COMPOSTER("STONE", 0, true), + CONDUIT("STONE", 0, true), + CORNFLOWER("STONE", 0, true), COOKED_BEEF("COOKED_BEEF", 0), COOKED_CHICKEN("COOKED_CHICKEN", 0), COOKED_COD("COOKED_FISH", 0), @@ -204,11 +211,15 @@ public enum XMaterial { COW_SPAWN_EGG("MONSTER_EGG", 0), CRACKED_STONE_BRICKS("SMOOTH_BRICK", 2), CRAFTING_TABLE("WORKBENCH", 0), + CREEPER_BANNER_PATTERN("STONE", 0, true), CREEPER_HEAD("SKULL", 0), CREEPER_SPAWN_EGG("MONSTER_EGG", 0), CREEPER_WALL_HEAD("SKULL", 0), - CUT_RED_SANDSTONE("STONE", 0), - CUT_SANDSTONE("STONE", 0), + CROSSBOW("STONE", 0, true), + CUT_RED_SANDSTONE("STONE", 0, true), + CUT_RED_SANDSTONE_SLAB("STONE", 0, true), + CUT_SANDSTONE("STONE", 0, true), + CUT_SANDSTONE_SLAB("STONE", 0, true), CYAN_BANNER("BANNER", 6), CYAN_BED("BED", 9), CYAN_CARPET("CARPET", 9), @@ -224,31 +235,34 @@ public enum XMaterial { CYAN_WOOL("WOOL", 9), DAMAGED_ANVIL("ANVIL", 2), DANDELION("YELLOW_FLOWER", 0), - DANDELION_YELLOW("INK_SACK", 11), DARK_OAK_BOAT("BOAT_DARK_OAK", 0), - DARK_OAK_BUTTON("WOOD_BUTTON", 0), + DARK_OAK_BUTTON("WOOD_BUTTON", 0, true), DARK_OAK_DOOR("DARK_OAK_DOOR", 0), DARK_OAK_FENCE("DARK_OAK_FENCE", 0), DARK_OAK_FENCE_GATE("DARK_OAK_FENCE_GATE", 0), DARK_OAK_LEAVES("LEAVES_2", 1), DARK_OAK_LOG("LOG_2", 1), DARK_OAK_PLANKS("WOOD", 5), - DARK_OAK_PRESSURE_PLATE("WOOD_PLATE", 0), + DARK_OAK_PRESSURE_PLATE("WOOD_PLATE", 0, true), DARK_OAK_SAPLING("SAPLING", 5), + DARK_OAK_SIGN("STONE", 0, true), DARK_OAK_SLAB("WOOD_STEP", 0), DARK_OAK_STAIRS("DARK_OAK_STAIRS", 0), - DARK_OAK_TRAPDOOR("TRAP_DOOR", 0), + DARK_OAK_TRAPDOOR("TRAP_DOOR", 0, true), + DARK_OAK_WALL_SIGN("STONE", 0, true), DARK_OAK_WOOD("LOG_2", 1), DARK_PRISMARINE("PRISMARINE", 2), - DARK_PRISMARINE_SLAB("STONE", 0), - DARK_PRISMARINE_STAIRS("STONE", 0), + DARK_PRISMARINE_SLAB("STONE", 0, true), + DARK_PRISMARINE_STAIRS("STONE", 0, true), DAYLIGHT_DETECTOR("DAYLIGHT_DETECTOR", 0), - DEAD_BRAIN_CORAL_BLOCK("STONE", 0), - DEAD_BUBBLE_CORAL_BLOCK("STONE", 0), + DEAD_BRAIN_CORAL_BLOCK("STONE", 0, true), + DEAD_BUBBLE_CORAL_BLOCK("STONE", 0, true), DEAD_BUSH("DEAD_BUSH", 0), - DEAD_FIRE_CORAL_BLOCK("STONE", 0), - DEAD_HORN_CORAL_BLOCK("STONE", 0), - DEAD_TUBE_CORAL_BLOCK("STONE", 0), + DEAD_FIRE_CORAL_BLOCK("STONE", 0, true), + DEAD_HORN_CORAL_BLOCK("STONE", 0, true), + DEAD_TUBE_CORAL_BLOCK("STONE", 0, true), + DEAD_TUBE_CORAL_FAN("STONE", 0, true), + DEAD_TUBE_CORAL_WALL_FAN("STONE", 0, true), DEBUG_STICK("STICK", 0), DETECTOR_RAIL("DETECTOR_RAIL", 0), DIAMOND("DIAMOND", 0), @@ -265,6 +279,9 @@ public enum XMaterial { DIAMOND_SHOVEL("DIAMOND_SPADE", 0), DIAMOND_SWORD("DIAMOND_SWORD", 0), DIORITE("STONE", 3), + DIORITE_SLAB("STONE", 0, true), + DIORITE_STAIRS("STONE", 0, true), + DIORITE_WALL("STONE", 0, true), DIRT("DIRT", 0), DISPENSER("DISPENSER", 0), DOLPHIN_SPAWN_EGG("MONSTER_EGG", 0), @@ -273,8 +290,8 @@ public enum XMaterial { DRAGON_EGG("DRAGON_EGG", 0), DRAGON_HEAD("SKULL", 5), DRAGON_WALL_HEAD("SKULL", 0), - DRIED_KELP("STONE", 0), - DRIED_KELP_BLOCK("STONE", 0), + DRIED_KELP("STONE", 0, true), + DRIED_KELP_BLOCK("STONE", 0, true), DROPPER("DROPPER", 0), DROWNED_SPAWN_EGG("MONSTER_EGG", 0), EGG("EGG", 0), @@ -297,6 +314,9 @@ public enum XMaterial { END_PORTAL_FRAME("ENDER_PORTAL_FRAME", 0), END_ROD("END_ROD", 0), END_STONE("ENDER_STONE", 0), + END_STONE_BRICK_SLAB("STONE", 0, true), + END_STONE_BRICK_STAIRS("STONE", 0, true), + END_STONE_BRICK_WALL("STONE", 0, true), END_STONE_BRICKS("END_BRICKS", 0), EVOKER_SPAWN_EGG("MONSTER_EGG", 0), EXPERIENCE_BOTTLE("EXP_BOTTLE", 0), @@ -309,9 +329,15 @@ public enum XMaterial { FIREWORK_ROCKET("FIREWORK", 0), FIREWORK_STAR("FIREWORK_CHARGE", 0), FIRE_CHARGE("FIREBALL", 0), - FIRE_CORAL("STONE", 0), - FIRE_CORAL_BLOCK("STONE", 0), - FIRE_CORAL_FAN("STONE", 0), + FIRE_CORAL("STONE", 0, true), + FIRE_CORAL_BLOCK("STONE", 0, true), + FIRE_CORAL_FAN("STONE", 0, true), + FIRE_CORAL_WALL_FAN("STONE", 0, true), + FLETCHING_TABLE("STONE", 0, true), + FLOWER_BANNER_PATTERN("STONE", 0, true), + FOX_SPAWN_EGG("STONE", 0, true), + DEAD_FIRE_CORAL_FAN("STONE", 0, true), + DEAD_FIRE_CORAL_WALL_FAN("STONE", 0, true), FISHING_ROD("FISHING_ROD", 0), FLINT("FLINT", 0), FLINT_AND_STEEL("FLINT_AND_STEEL", 0), @@ -325,6 +351,7 @@ public enum XMaterial { GLASS_BOTTLE("GLASS_BOTTLE", 0), GLASS_PANE("THIN_GLASS", 0), GLISTERING_MELON_SLICE("SPECKLED_MELON", 0), + GLOBE_BANNER_PATTERN("STONE", 0, true), GLOWSTONE("GLOWSTONE", 0), GLOWSTONE_DUST("GLOWSTONE_DUST", 0), GOLDEN_APPLE("GOLDEN_APPLE", 0), @@ -344,6 +371,9 @@ public enum XMaterial { GOLD_NUGGET("GOLD_NUGGET", 0), GOLD_ORE("GOLD_ORE", 0), GRANITE("STONE", 1), + GRANITE_SLAB("STONE", 0, true), + GRANITE_STAIRS("STONE", 0, true), + GRANITE_WALL("STONE", 0, true), GRASS("GRASS", 0), GRASS_BLOCK("GRASS", 0), GRASS_PATH("GRASS_PATH", 0), @@ -366,6 +396,7 @@ public enum XMaterial { GREEN_CARPET("CARPET", 13), GREEN_CONCRETE("CONCRETE", 13), GREEN_CONCRETE_POWDER("CONCRETE_POWDER", 13), + GREEN_DYE("CACTUS_GREEN", "INK_SACK", 2), GREEN_GLAZED_TERRACOTTA("GREEN_GLAZED_TERRACOTTA", 0), GREEN_SHULKER_BOX("GREEN_SHULKER_BOX", 0), GREEN_STAINED_GLASS("STAINED_GLASS", 13), @@ -373,16 +404,20 @@ public enum XMaterial { GREEN_TERRACOTTA("STAINED_CLAY", 13), GREEN_WALL_BANNER("WALL_BANNER", 0), GREEN_WOOL("WOOL", 13), + GRINDSTONE("STONE", 0, true), GUARDIAN_SPAWN_EGG("MONSTER_EGG", 0), GUNPOWDER("SULPHUR", 0), HAY_BLOCK("HAY_BLOCK", 0), - HEART_OF_THE_SEA("STONE", 0), + HEART_OF_THE_SEA("STONE", 0, true), HEAVY_WEIGHTED_PRESSURE_PLATE("IRON_PLATE", 0), HOPPER("HOPPER", 0), HOPPER_MINECART("HOPPER_MINECART", 0), - HORN_CORAL("STONE", 0), - HORN_CORAL_BLOCK("STONE", 0), - HORN_CORAL_FAN("STONE", 0), + HORN_CORAL("STONE", 0, true), + HORN_CORAL_BLOCK("STONE", 0, true), + HORN_CORAL_FAN("STONE", 0, true), + HORN_CORAL_WALL_FAN("STONE", 0, true), + DEAD_HORN_CORAL_FAN("STONE", 0, true), + DEAD_HORN_CORAL_WALL_FAN("STONE", 0, true), HORSE_SPAWN_EGG("MONSTER_EGG", 0), HUSK_SPAWN_EGG("MONSTER_EGG", 0), ICE("ICE", 0), @@ -412,25 +447,29 @@ public enum XMaterial { IRON_TRAPDOOR("IRON_TRAPDOOR", 0), ITEM_FRAME("ITEM_FRAME", 0), JACK_O_LANTERN("JACK_O_LANTERN", 0), + JIGSAW("STONE", 0, true), JUKEBOX("JUKEBOX", 0), JUNGLE_BOAT("BOAT_JUNGLE", 0), - JUNGLE_BUTTON("WOOD_BUTTON", 0), + JUNGLE_BUTTON("WOOD_BUTTON", 0, true), JUNGLE_DOOR("JUNGLE_DOOR", 0), JUNGLE_FENCE("JUNGLE_FENCE", 0), JUNGLE_FENCE_GATE("JUNGLE_FENCE_GATE", 0), JUNGLE_LEAVES("LEAVES", 3), JUNGLE_LOG("LOG", 3), JUNGLE_PLANKS("WOOD", 3), - JUNGLE_PRESSURE_PLATE("WOOD_PLATE", 0), + JUNGLE_PRESSURE_PLATE("WOOD_PLATE", 0, true), JUNGLE_SAPLING("SAPLING", 3), + JUNGLE_SIGN("STONE", 0, true), JUNGLE_SLAB("WOOD_STEP", 3), JUNGLE_STAIRS("JUNGLE_WOOD_STAIRS", 0), - JUNGLE_TRAPDOOR("TRAP_DOOR", 0), + JUNGLE_TRAPDOOR("TRAP_DOOR", 0, true), + JUNGLE_WALL_SIGN("STONE", 0, true), JUNGLE_WOOD("LOG", 3), - KELP("STONE", 0), - KELP_PLANT("STONE", 0), + KELP("STONE", 0, true), + KELP_PLANT("STONE", 0, true), KNOWLEDGE_BOOK("KNOWLEDGE_BOOK", 0), LADDER("LADDER", 0), + LANTERN("STONE", 0, true), LAPIS_BLOCK("LAPIS_BLOCK", 0), LAPIS_LAZULI("INK_SACK", 4), LAPIS_ORE("LAPIS_ORE", 0), @@ -442,7 +481,32 @@ public enum XMaterial { LEATHER_BOOTS("LEATHER_BOOTS", 0), LEATHER_CHESTPLATE("LEATHER_CHESTPLATE", 0), LEATHER_HELMET("LEATHER_HELMET", 0), + LEATHER_HORSE_ARMOR("STONE", 0, true), LEATHER_LEGGINGS("LEATHER_LEGGINGS", 0), + LECTERN("STONE", 0, true), + LEGACY_BED_BLOCK("BED_BLOCK", 0), + LEGACY_BREWING_STAND("BREWING_STAND_ITEM", 0), + LEGACY_BURNING_FURNACE("BURNING_FURNACE", 0), + LEGACY_CAKE_BLOCK("CAKE_BLOCK", 0), + LEGACY_CAULDRON_ITEM("CAULDRON_ITEM", 0), + LEGACY_DIODE_BLOCK_OFF("DIODE_BLOCK_OFF", 0), + LEGACY_DIODE_BLOCK_ON("DIODE_BLOCK_ON", 0), + LEGACY_DOUBLE_PLANT("DOUBLE_PLANT", 0), + LEGACY_DOUBLE_SLAB("DOUBLE_SLAB", 0), + LEGACY_EMPTY_MAP("EMPTY_MAP", 0), + LEGACY_FLOWER_POT_ITEM("FLOWER_POT_ITEM", 0), + LEGACY_IRON_DOOR_BLOCK("IRON_DOOR_BLOCK", 0), + LEGACY_NETHER_STALK("NETHER_STALK", 0), + LEGACY_NETHER_WARTS("NETHER_WARTS", 0), + LEGACY_PISTON_MOVING_PIECE("PISTON_MOVING_PIECE", 0), + LEGACY_REDSTONE_COMPARATOR_OFF("REDSTONE_COMPARATOR_OFF", 0), + LEGACY_REDSTONE_COMPARATOR_ON("REDSTONE_COMPARATOR_ON", 0), + LEGACY_SIGN_POST("SIGN_POST", 0), + LEGACY_SKULL_ITEM("SKULL_ITEM", 3), + LEGACY_STATIONARY_LAVA("STATIONARY_LAVA", 0), + LEGACY_STATIONARY_WATER("STATIONARY_WATER", 0), + LEGACY_SUGAR_CANE_BLOCK("SUGAR_CANE_BLOCK", 0), + LEGACY_WOODEN_DOOR("WOODEN_DOOR", 0), LEVER("LEVER", 0), LIGHT_BLUE_BANNER("BANNER", 12), LIGHT_BLUE_BED("BED", 3), @@ -473,6 +537,7 @@ public enum XMaterial { LIGHT_WEIGHTED_PRESSURE_PLATE("GOLD_PLATE", 0), LILAC("DOUBLE_PLANT", 1), LILY_PAD("WATER_LILY", 0), + LILY_OF_THE_VALLEY("STONE", 0, true), LIME_BANNER("BANNER", 10), LIME_BED("BED", 5), LIME_CARPET("CARPET", 5), @@ -488,6 +553,7 @@ public enum XMaterial { LIME_WOOL("WOOL", 5), LINGERING_POTION("LINGERING_POTION", 0), LLAMA_SPAWN_EGG("MONSTER_EGG", 0), + LOOM("STONE", 0, true), MAGENTA_BANNER("BANNER", 13), MAGENTA_BED("BED", 2), MAGENTA_CARPET("CARPET", 2), @@ -511,13 +577,19 @@ public enum XMaterial { MELON_STEM("MELON_STEM", 0), MILK_BUCKET("MILK_BUCKET", 0), MINECART("MINECART", 0), + MOJANG_BANNER_PATTERN("STONE", 0, true), MOOSHROOM_SPAWN_EGG("MONSTER_EGG", 0), MOSSY_COBBLESTONE("MOSSY_COBBLESTONE", 0), + MOSSY_COBBLESTONE_SLAB("STONE", 0, true), + MOSSY_COBBLESTONE_STAIRS("STONE", 0, true), MOSSY_COBBLESTONE_WALL("COBBLE_WALL", 1), + MOSSY_STONE_BRICK_SLAB("STONE", 0, true), + MOSSY_STONE_BRICK_STAIRS("STONE", 0, true), + MOSSY_STONE_BRICK_WALL("STONE", 0, true), MOSSY_STONE_BRICKS("SMOOTH_BRICK", 1), MOVING_PISTON("PISTON_MOVING_PIECE", 0), MULE_SPAWN_EGG("MONSTER_EGG", 0), - MUSHROOM_STEM("BROWN_MUSHROOM", 0), + MUSHROOM_STEM("BROWN_MUSHROOM", 0, true), MUSHROOM_STEW("MUSHROOM_SOUP", 0), MUSIC_DISC_11("GOLD_RECORD", 0), MUSIC_DISC_13("GREEN_RECORD", 0), @@ -534,9 +606,10 @@ public enum XMaterial { MUTTON("MUTTON", 0), MYCELIUM("MYCEL", 0), NAME_TAG("NAME_TAG", 0), - NAUTILUS_SHELL("STONE", 0), + NAUTILUS_SHELL("STONE", 0, true), NETHERRACK("NETHERRACK", 0), NETHER_BRICK("NETHER_BRICK", 0), + NETHER_BRICK_WALL("STONE", 0, true), NETHER_BRICKS("NETHER_BRICK", 0), NETHER_BRICK_FENCE("NETHER_FENCE", 0), NETHER_BRICK_SLAB("STEP", 6), @@ -557,9 +630,11 @@ public enum XMaterial { OAK_PLANKS("WOOD", 0), OAK_PRESSURE_PLATE("WOOD_PLATE", 0), OAK_SAPLING("SAPLING", 0), + OAK_SIGN("SIGN", 0), OAK_SLAB("WOOD_STEP", 0), OAK_STAIRS("WOOD_STAIRS", 0), OAK_TRAPDOOR("TRAP_DOOR", 0), + OAK_WALL_SIGN("WALL_SIGN", 0), OAK_WOOD("LOG", 0), OBSERVER("OBSERVER", 0), OBSIDIAN("OBSIDIAN", 0), @@ -581,13 +656,15 @@ public enum XMaterial { OXEYE_DAISY("RED_ROSE", 8), PACKED_ICE("PACKED_ICE", 0), PAINTING("PAINTING", 0), + PANDA_SPAWN_EGG("STONE", 0, true), PAPER("PAPER", 0), PARROT_SPAWN_EGG("MONSTER_EGG", 0), PEONY("DOUBLE_PLANT", 5), - PETRIFIED_OAK_SLAB("STONE", 0), - PHANTOM_MEMBRANE("STONE", 0), + PETRIFIED_OAK_SLAB("STONE", 0, true), + PHANTOM_MEMBRANE("STONE", 0, true), PHANTOM_SPAWN_EGG("MONSTER_EGG", 0), PIG_SPAWN_EGG("MONSTER_EGG", 0), + PILLAGER_SPAWN_EGG("STONE", 0, true), PINK_BANNER("BANNER", 9), PINK_BED("BED", 6), PINK_CARPET("CARPET", 6), @@ -604,52 +681,63 @@ public enum XMaterial { PINK_WOOL("WOOL", 6), PISTON("PISTON_BASE", 0), PISTON_HEAD("PISTON_EXTENSION", 0), - PLAYER_HEAD("SKULL_ITEM", 0), + PLAYER_HEAD("SKULL", 0), PLAYER_WALL_HEAD("SKULL", 0), PODZOL("DIRT", 2), POISONOUS_POTATO("POISONOUS_POTATO", 0), POLAR_BEAR_SPAWN_EGG("MONSTER_EGG", 0), POLISHED_ANDESITE("STONE", 6), + POLISHED_ANDESITE_SLAB("STONE", 0, true), + POLISHED_ANDESITE_STAIRS("STONE", 0, true), POLISHED_DIORITE("STONE", 4), + POLISHED_DIORITE_SLAB("STONE", 0, true), + POLISHED_DIORITE_STAIRS("STONE", 0, true), POLISHED_GRANITE("STONE", 2), + POLISHED_GRANITE_SLAB("STONE", 0, true), + POLISHED_GRANITE_STAIRS("STONE", 0, true), POPPED_CHORUS_FRUIT("CHORUS_FRUIT_POPPED", 0), POPPY("RED_ROSE", 0), PORKCHOP("PORK", 0), POTATO("POTATO_ITEM", 0), POTATOES("POTATO", 0), POTION("POTION", 0), - POTTED_ACACIA_SAPLING("FLOWER_POT", 0), - POTTED_ALLIUM("FLOWER_POT", 0), - POTTED_AZURE_BLUET("FLOWER_POT", 0), - POTTED_BIRCH_SAPLING("FLOWER_POT", 0), - POTTED_BLUE_ORCHID("FLOWER_POT", 0), - POTTED_BROWN_MUSHROOM("FLOWER_POT", 0), - POTTED_CACTUS("FLOWER_POT", 0), - POTTED_DANDELION("FLOWER_POT", 0), - POTTED_DARK_OAK_SAPLING("FLOWER_POT", 0), - POTTED_DEAD_BUSH("FLOWER_POT", 0), - POTTED_FERN("FLOWER_POT", 0), - POTTED_JUNGLE_SAPLING("FLOWER_POT", 0), - POTTED_OAK_SAPLING("FLOWER_POT", 0), - POTTED_ORANGE_TULIP("FLOWER_POT", 0), - POTTED_OXEYE_DAISY("FLOWER_POT", 0), - POTTED_PINK_TULIP("FLOWER_POT", 0), - POTTED_POPPY("FLOWER_POT", 0), - POTTED_RED_MUSHROOM("FLOWER_POT", 0), - POTTED_RED_TULIP("FLOWER_POT", 0), - POTTED_SPRUCE_SAPLING("FLOWER_POT", 0), - POTTED_WHITE_TULIP("FLOWER_POT", 0), + POTTED_ACACIA_SAPLING("FLOWER_POT", 0, true), + POTTED_ALLIUM("FLOWER_POT", 0, true), + POTTED_AZURE_BLUET("FLOWER_POT", 0, true), + POTTED_BAMBOO("STONE", 0, true), + POTTED_BIRCH_SAPLING("FLOWER_POT", 0, true), + POTTED_BLUE_ORCHID("FLOWER_POT", 0, true), + POTTED_BROWN_MUSHROOM("FLOWER_POT", 0, true), + POTTED_CACTUS("FLOWER_POT", 0, true), + POTTED_CORNFLOWER("STONE", 0, true), + POTTED_DANDELION("FLOWER_POT", 0, true), + POTTED_DARK_OAK_SAPLING("FLOWER_POT", 0, true), + POTTED_DEAD_BUSH("FLOWER_POT", 0, true), + POTTED_FERN("FLOWER_POT", 0, true), + POTTED_JUNGLE_SAPLING("FLOWER_POT", 0, true), + POTTED_LILY_OF_THE_VALLEY("STONE", 0, true), + POTTED_OAK_SAPLING("FLOWER_POT", 0, true), + POTTED_ORANGE_TULIP("FLOWER_POT", 0, true), + POTTED_OXEYE_DAISY("FLOWER_POT", 0, true), + POTTED_PINK_TULIP("FLOWER_POT", 0, true), + POTTED_POPPY("FLOWER_POT", 0, true), + POTTED_RED_MUSHROOM("FLOWER_POT", 0, true), + POTTED_RED_TULIP("FLOWER_POT", 0, true), + POTTED_SPRUCE_SAPLING("FLOWER_POT", 0, true), + POTTED_WHITE_TULIP("FLOWER_POT", 0, true), + POTTED_WITHER_ROSE("STONE", 0, true), POWERED_RAIL("POWERED_RAIL", 0), PRISMARINE("PRISMARINE", 0), PRISMARINE_BRICKS("PRISMARINE", 1), - PRISMARINE_BRICK_SLAB("STONE", 0), - PRISMARINE_BRICK_STAIRS("STONE", 0), + PRISMARINE_BRICK_SLAB("STONE", 0, true), + PRISMARINE_BRICK_STAIRS("STONE", 0, true), PRISMARINE_CRYSTALS("PRISMARINE_CRYSTALS", 0), PRISMARINE_SHARD("PRISMARINE_SHARD", 0), - PRISMARINE_SLAB("STONE", 0), - PRISMARINE_STAIRS("STONE", 0), + PRISMARINE_SLAB("STONE", 0, true), + PRISMARINE_STAIRS("STONE", 0, true), + PRISMARINE_WALL("STONE", 0, true), PUFFERFISH("RAW_FISH", 3), - PUFFERFISH_BUCKET("STONE", 0), + PUFFERFISH_BUCKET("STONE", 0, true), PUFFERFISH_SPAWN_EGG("MONSTER_EGG", 0), PUMPKIN("PUMPKIN", 0), PUMPKIN_PIE("PUMPKIN_PIE", 0), @@ -683,6 +771,7 @@ public enum XMaterial { RABBIT_SPAWN_EGG("MONSTER_EGG", 0), RABBIT_STEW("RABBIT_STEW", 0), RAIL("RAILS", 0), + RAVAGER_SPAWN_EGG("STONE", 0, true), REDSTONE("REDSTONE", 0), REDSTONE_BLOCK("REDSTONE_BLOCK", 0), REDSTONE_LAMP("REDSTONE_LAMP_OFF", 0), @@ -695,14 +784,19 @@ public enum XMaterial { RED_CARPET("CARPET", 14), RED_CONCRETE("CONCRETE", 14), RED_CONCRETE_POWDER("CONCRETE_POWDER", 14), + RED_DYE("ROSE_RED", "INK_SACK", 1), RED_GLAZED_TERRACOTTA("RED_GLAZED_TERRACOTTA", 0), RED_MUSHROOM("RED_MUSHROOM", 0), - RED_MUSHROOM_BLOCK("RED_MUSHROOM", 0), + RED_MUSHROOM_BLOCK("HUGE_MUSHROOM_2", 0), + RED_NETHER_BRICK_SLAB("STONE", 0, true), + RED_NETHER_BRICK_STAIRS("STONE", 0, true), + RED_NETHER_BRICK_WALL("STONE", 0, true), RED_NETHER_BRICKS("RED_NETHER_BRICK", 0), RED_SAND("SAND", 1), RED_SANDSTONE("RED_SANDSTONE", 0), RED_SANDSTONE_SLAB("STONE_SLAB2", 0), RED_SANDSTONE_STAIRS("RED_SANDSTONE_STAIRS", 0), + RED_SANDSTONE_WALL("STONE", 0, true), RED_SHULKER_BOX("RED_SHULKER_BOX", 0), RED_STAINED_GLASS("STAINED_GLASS", 14), RED_STAINED_GLASS_PANE("STAINED_GLASS_PANE", 14), @@ -713,7 +807,6 @@ public enum XMaterial { REPEATER("DIODE", 0), REPEATING_COMMAND_BLOCK("COMMAND_REPEATING", 0), ROSE_BUSH("DOUBLE_PLANT", 4), - ROSE_RED("INK_SACK", 1), ROTTEN_FLESH("ROTTEN_FLESH", 0), SADDLE("SADDLE", 0), SALMON("RAW_FISH", 1), @@ -723,115 +816,194 @@ public enum XMaterial { SANDSTONE("SANDSTONE", 0), SANDSTONE_SLAB("STEP", 1), SANDSTONE_STAIRS("SANDSTONE_STAIRS", 0), - SCUTE("STONE", 0), - SEAGRASS("STONE", 0), + SANDSTONE_WALL("STONE", 0, true), + SCAFFOLDING("STONE", 0, true), + SCUTE("STONE", 0, true), + SEAGRASS("STONE", 0, true), SEA_LANTERN("SEA_LANTERN", 0), - SEA_PICKLE("STONE", 0), + SEA_PICKLE("STONE", 0, true), SHEARS("SHEARS", 0), SHEEP_SPAWN_EGG("MONSTER_EGG", 0), SHIELD("SHIELD", 0), SHULKER_BOX("PURPLE_SHULKER_BOX", 0), SHULKER_SHELL("SHULKER_SHELL", 0), SHULKER_SPAWN_EGG("MONSTER_EGG", 0), - SIGN("SIGN", 0), SILVERFISH_SPAWN_EGG("MONSTER_EGG", 0), SKELETON_HORSE_SPAWN_EGG("MONSTER_EGG", 0), SKELETON_SKULL("SKULL", 0), SKELETON_SPAWN_EGG("MONSTER_EGG", 0), SKELETON_WALL_SKULL("SKULL", 0), + SKULL_BANNER_PATTERN("STONE", 0, true), SLIME_BALL("SLIME_BALL", 0), SLIME_BLOCK("SLIME_BLOCK", 0), SLIME_SPAWN_EGG("MONSTER_EGG", 0), - SMOOTH_QUARTZ("STONE", 0), + SMITHING_TABLE("STONE", 0, true), + SMOKER("STONE", 0, true), + SMOOTH_QUARTZ("STONE", 0, true), + SMOOTH_QUARTZ_SLAB("STONE", 0, true), + SMOOTH_QUARTZ_STAIRS("STONE", 0, true), SMOOTH_RED_SANDSTONE("RED_SANDSTONE", 2), + SMOOTH_RED_SANDSTONE_SLAB("STONE", 0, true), + SMOOTH_RED_SANDSTONE_STAIRS("STONE", 0, true), SMOOTH_SANDSTONE("SANDSTONE", 2), + SMOOTH_SANDSTONE_SLAB("STONE", 0, true), + SMOOTH_SANDSTONE_STAIRS("STONE", 0, true), SMOOTH_STONE("STEP", 0), + SMOOTH_STONE_SLAB("STONE", 0, true), SNOW("SNOW", 0), SNOWBALL("SNOW_BALL", 0), SNOW_BLOCK("SNOW_BLOCK", 0), SOUL_SAND("SOUL_SAND", 0), SPAWNER("MOB_SPAWNER", 0), + SPAWNER_BAT(null, -1), + SPAWNER_BLAZE(null, -1), + SPAWNER_CAVE_SPIDER(null, -1), + SPAWNER_CHICKEN(null, -1), + SPAWNER_COD(null, -1), + SPAWNER_COW(null, -1), + SPAWNER_CREEPER(null, -1), + SPAWNER_DOLPHIN(null, -1), + SPAWNER_DONKEY(null, -1), + SPAWNER_DROWNED(null, -1), + SPAWNER_ELDER_GUARDIAN(null, -1), + SPAWNER_ENDER_DRAGON(null, -1), + SPAWNER_ENDERMAN(null, -1), + SPAWNER_ENDERMITE(null, -1), + SPAWNER_EVOKER(null, -1), + SPAWNER_GHAST(null, -1), + SPAWNER_GIANT(null, -1), + SPAWNER_GUARDIAN(null, -1), + SPAWNER_HORSE(null, -1), + SPAWNER_HUSK(null, -1), + SPAWNER_ILLUSIONER(null, -1), + SPAWNER_IRON_GOLEM(null, -1), + SPAWNER_LLAMA(null, -1), + SPAWNER_MAGMA_CUBE(null, -1), + SPAWNER_MULE(null, -1), + SPAWNER_MUSHROOM_COW(null, -1), + SPAWNER_OCELOT(null, -1), + SPAWNER_PARROT(null, -1), + SPAWNER_PHANTOM(null, -1), + SPAWNER_PIG(null, -1), + SPAWNER_PIG_ZOMBIE(null, -1), + SPAWNER_POLAR_BEAR(null, -1), + SPAWNER_PUFFERFISH(null, -1), + SPAWNER_RABBIT(null, -1), + SPAWNER_SALMON(null, -1), + SPAWNER_SHEEP(null, -1), + SPAWNER_SHULKER(null, -1), + SPAWNER_SILVERFISH(null, -1), + SPAWNER_SKELETON(null, -1), + SPAWNER_SKELETON_HORSE(null, -1), + SPAWNER_SLIME(null, -1), + SPAWNER_SNOWMAN(null, -1), + SPAWNER_SPIDER(null, -1), + SPAWNER_SQUID(null, -1), + SPAWNER_STRAY(null, -1), + SPAWNER_TROPICAL_FISH(null, -1), + SPAWNER_TURTLE(null, -1), + SPAWNER_VEX(null, -1), + SPAWNER_VILLAGER(null, -1), + SPAWNER_VINDICATOR(null, -1), + SPAWNER_WITCH(null, -1), + SPAWNER_WITHER(null, -1), + SPAWNER_WITHER_SKELETON(null, -1), + SPAWNER_WOLF(null, -1), + SPAWNER_ZOMBIE(null, -1), + SPAWNER_ZOMBIE_HORSE(null, -1), + SPAWNER_ZOMBIE_VILLAGER(null, -1), SPECTRAL_ARROW("SPECTRAL_ARROW", 0), SPIDER_EYE("SPIDER_EYE", 0), SPIDER_SPAWN_EGG("MONSTER_EGG", 0), SPLASH_POTION("SPLASH_POTION", 0), SPONGE("SPONGE", 0), SPRUCE_BOAT("BOAT_SPRUCE", 0), - SPRUCE_BUTTON("WOOD_BUTTON", 0), + SPRUCE_BUTTON("WOOD_BUTTON", 0, true), SPRUCE_DOOR("SPRUCE_DOOR", 0), SPRUCE_FENCE("SPRUCE_FENCE", 0), SPRUCE_FENCE_GATE("SPRUCE_FENCE_GATE", 0), SPRUCE_LEAVES("LEAVES", 1), SPRUCE_LOG("LOG", 1), SPRUCE_PLANKS("WOOD", 1), - SPRUCE_PRESSURE_PLATE("WOOD_PLATE", 0), + SPRUCE_PRESSURE_PLATE("WOOD_PLATE", 0, true), SPRUCE_SAPLING("SAPLING", 1), + SPRUCE_SIGN("STONE", 0, true), SPRUCE_SLAB("WOOD_STEP", 1), SPRUCE_STAIRS("SPRUCE_WOOD_STAIRS", 0), - SPRUCE_TRAPDOOR("TRAP_DOOR", 0), + SPRUCE_TRAPDOOR("TRAP_DOOR", 0, true), + SPRUCE_WALL_SIGN("STONE", 0, true), SPRUCE_WOOD("LOG", 1), SQUID_SPAWN_EGG("MONSTER_EGG", 0), STICK("STICK", 0), STICKY_PISTON("PISTON_STICKY_BASE", 0), STONE("STONE", 0), + STONECUTTER("STONE", 0, true), STONE_AXE("STONE_AXE", 0), STONE_BRICKS("SMOOTH_BRICK", 0), STONE_BRICK_SLAB("STEP", 5), STONE_BRICK_STAIRS("SMOOTH_STAIRS", 0), + STONE_BRICK_WALL("STONE", 0, true), STONE_BUTTON("STONE_BUTTON", 0), STONE_HOE("STONE_HOE", 0), STONE_PICKAXE("STONE_PICKAXE", 0), STONE_PRESSURE_PLATE("STONE_PLATE", 0), STONE_SHOVEL("STONE_SPADE", 0), STONE_SLAB("STEP", 0), + STONE_STAIRS("STONE", 0, true), STONE_SWORD("STONE_SWORD", 0), STRAY_SPAWN_EGG("MONSTER_EGG", 0), STRING("STRING", 0), - STRIPPED_ACACIA_LOG("STONE", 0), - STRIPPED_ACACIA_WOOD("STONE", 0), - STRIPPED_BIRCH_LOG("STONE", 0), - STRIPPED_BIRCH_WOOD("STONE", 0), - STRIPPED_DARK_OAK_LOG("STONE", 0), - STRIPPED_DARK_OAK_WOOD("STONE", 0), - STRIPPED_JUNGLE_LOG("STONE", 0), - STRIPPED_JUNGLE_WOOD("STONE", 0), - STRIPPED_OAK_LOG("STONE", 0), - STRIPPED_OAK_WOOD("STONE", 0), - STRIPPED_SPRUCE_LOG("STONE", 0), - STRIPPED_SPRUCE_WOOD("STONE", 0), + STRIPPED_ACACIA_LOG("STONE", 0, true), + STRIPPED_ACACIA_WOOD("STONE", 0, true), + STRIPPED_BIRCH_LOG("STONE", 0, true), + STRIPPED_BIRCH_WOOD("STONE", 0, true), + STRIPPED_DARK_OAK_LOG("STONE", 0, true), + STRIPPED_DARK_OAK_WOOD("STONE", 0, true), + STRIPPED_JUNGLE_LOG("STONE", 0, true), + STRIPPED_JUNGLE_WOOD("STONE", 0, true), + STRIPPED_OAK_LOG("STONE", 0, true), + STRIPPED_OAK_WOOD("STONE", 0, true), + STRIPPED_SPRUCE_LOG("STONE", 0, true), + STRIPPED_SPRUCE_WOOD("STONE", 0, true), STRUCTURE_BLOCK("STRUCTURE_BLOCK", 0), STRUCTURE_VOID("STRUCTURE_VOID", 0), SUGAR("SUGAR", 0), SUGAR_CANE("SUGAR_CANE", 0), SUNFLOWER("DOUBLE_PLANT", 0), + SUSPICIOUS_STEW("STONE", 0, true), + SWEET_BERRIES("STONE", 0, true), + SWEET_BERRY_BUSH("STONE", 0, true), TALL_GRASS("DOUBLE_PLANT", 2), - TALL_SEAGRASS("STONE", 0), + TALL_SEAGRASS("STONE", 0, true), TERRACOTTA("HARD_CLAY", 0), TIPPED_ARROW("TIPPED_ARROW", 0), TNT("TNT", 0), TNT_MINECART("EXPLOSIVE_MINECART", 0), TORCH("TORCH", 0), TOTEM_OF_UNDYING("TOTEM", 0), + TRADER_LLAMA_SPAWN_EGG("STONE", 0, true), TRAPPED_CHEST("TRAPPED_CHEST", 0), - TRIDENT("STONE", 0), + TRIDENT("STONE", 0, true), TRIPWIRE("TRIPWIRE", 0), TRIPWIRE_HOOK("TRIPWIRE_HOOK", 0), TROPICAL_FISH("RAW_FISH", 0), TROPICAL_FISH_BUCKET("BUCKET", 0), TROPICAL_FISH_SPAWN_EGG("MONSTER_EGG", 0), - TUBE_CORAL("STONE", 0), - TUBE_CORAL_BLOCK("STONE", 0), - TUBE_CORAL_FAN("STONE", 0), - TURTLE_EGG("MONSTER_EGG", 0), - TURTLE_HELMET("STONE", 0), + TUBE_CORAL("STONE", 0, true), + TUBE_CORAL_BLOCK("STONE", 0, true), + TUBE_CORAL_FAN("STONE", 0, true), + TUBE_CORAL_WALL_FAN("STONE", 0, true), + TURTLE_EGG("STONE", 0, true), + TURTLE_HELMET("STONE", 0, true), TURTLE_SPAWN_EGG("MONSTER_EGG", 0), VEX_SPAWN_EGG("MONSTER_EGG", 0), VILLAGER_SPAWN_EGG("MONSTER_EGG", 0), VINDICATOR_SPAWN_EGG("MONSTER_EGG", 0), VINE("VINE", 0), - VOID_AIR("AIR", 0), + VOID_AIR("AIR", 0, true), WALL_SIGN("WALL_SIGN", 0), WALL_TORCH("TORCH", 1), + WANDERING_TRADER_SPAWN_EGG("STONE", 0, true), WATER("WATER", 0), WATER_BUCKET("WATER_BUCKET", 0), WET_SPONGE("SPONGE", 1), @@ -842,15 +1014,17 @@ public enum XMaterial { WHITE_CARPET("CARPET", 0), WHITE_CONCRETE("CONCRETE", 0), WHITE_CONCRETE_POWDER("CONCRETE_POWDER", 0), + WHITE_DYE("STONE", 0, true), WHITE_GLAZED_TERRACOTTA("WHITE_GLAZED_TERRACOTTA", 0), WHITE_SHULKER_BOX("WHITE_SHULKER_BOX", 0), WHITE_STAINED_GLASS("STAINED_GLASS", 0), WHITE_STAINED_GLASS_PANE("STAINED_GLASS_PANE", 0), - WHITE_TERRACOTTA("TERRACOTTA", 0), + WHITE_TERRACOTTA("STAINED_CLAY", 0), WHITE_TULIP("RED_ROSE", 6), WHITE_WALL_BANNER("WALL_BANNER", 0), WHITE_WOOL("WOOL", 0), WITCH_SPAWN_EGG("MONSTER_EGG", 0), + WITHER_ROSE("STONE", 0, true), WITHER_SKELETON_SKULL("SKULL", 0), WITHER_SKELETON_SPAWN_EGG("MONSTER_EGG", 0), WITHER_SKELETON_WALL_SKULL("SKULL", 0), @@ -867,6 +1041,7 @@ public enum XMaterial { YELLOW_CARPET("CARPET", 4), YELLOW_CONCRETE("CONCRETE", 4), YELLOW_CONCRETE_POWDER("CONCRETE_POWDER", 4), + YELLOW_DYE("DANDELION_YELLOW", "INK_SACK", 11), YELLOW_GLAZED_TERRACOTTA("YELLOW_GLAZED_TERRACOTTA", 0), YELLOW_SHULKER_BOX("YELLOW_SHULKER_BOX", 0), YELLOW_STAINED_GLASS("STAINED_GLASS", 4), @@ -879,17 +1054,44 @@ public enum XMaterial { ZOMBIE_PIGMAN_SPAWN_EGG("MONSTER_EGG", 0), ZOMBIE_SPAWN_EGG("MONSTER_EGG", 0), ZOMBIE_VILLAGER_SPAWN_EGG("MONSTER_EGG", 0), - ZOMBIE_WALL_HEAD("SKULL", 0),; - static int newV = -1; - private static HashMap cachedSearch = new HashMap<>(); - String m; - int data; + ZOMBIE_WALL_HEAD("SKULL", 0); - XMaterial(String m, int data) { - this.m = m; - this.data = data; + String old13Mat; + String old12Mat; + int data; + boolean is13Plusonly; + + Materials(String old13Mat, String old12Mat, int data) { + this(old13Mat, old12Mat, data, false); } + Materials(String old13Mat, String old12Mat, int data, boolean is13Plusonly) { + this.old13Mat = old13Mat; + this.old12Mat = old12Mat; + this.data = data; + this.is13Plusonly = is13Plusonly; + } + + Materials(String old12Mat, int data) { + this(null, old12Mat, data, false); + } + + Materials(String old12Mat, int data, boolean is13Plusonly) { + this(null, old12Mat, data, is13Plusonly); + } + + @SuppressWarnings("deprecation") + public ItemStack parseItem() throws NullPointerException { + Material mat = parseMaterial(); + if (isNewVersion()) { + return new ItemStack(mat); + } + if (mat == null) return null; + return new ItemStack(mat, 1, (byte) data); + } + + static int newV = -1; + public static boolean isNewVersion() { if (newV == 0) return false; if (newV == 1) return true; @@ -902,53 +1104,69 @@ public enum XMaterial { return false; } - public static XMaterial requestXMaterial(String name, byte data) { + /** + * Checks if a given Material is available for this server version + * + * @return True if the Material exists + */ + public boolean isAvailable() { + if (this.isSpawner() && this != Materials.SPAWNER) { + String spawnerType = this.name().replace("SPAWNER_", ""); + for (EntityType entityType : EntityType.values()) + if (entityType.name().equalsIgnoreCase(spawnerType)) + return true; + return false; + } + + return isNewVersion() || !this.is13Plusonly; + } + + private static HashMap cachedSearch = new HashMap<>(); + + public static Materials requestMaterials(String name, byte data) { if (cachedSearch.containsKey(name.toUpperCase() + "," + data)) { return cachedSearch.get(name.toUpperCase() + "," + data); } - for (XMaterial mat : XMaterial.values()) { - if (name.toUpperCase().equals(mat.m) && ((byte) mat.data) == data) { - cachedSearch.put(mat.m + "," + data, mat); - return mat; + + Materials pmat = null; + + for (Materials mat : Materials.values()) { + if (name.toUpperCase().equals(mat.old12Mat)) { + if (pmat == null) { + pmat = mat; + } + + if (((byte) mat.data) == data) { + cachedSearch.put(mat.old12Mat + "," + data, mat); + return mat; + } } } + + if (pmat != null) { + return pmat; + } + return null; } - public static XMaterial fromString(String key) { - XMaterial xmat = null; - try { - xmat = XMaterial.valueOf(key); - return xmat; - } catch (IllegalArgumentException e) { - String[] split = key.split(":"); - if (split.length == 1) { - xmat = requestXMaterial(key, (byte) 0); - } else { - xmat = requestXMaterial(split[0], (byte) Integer.parseInt(split[1])); - } - return xmat; - } - + public boolean isSpawner() { + return this.name().startsWith("SPAWNER"); } - public ItemStack parseItem() { - Material mat = parseMaterial(); - if (isNewVersion()) { - return new ItemStack(mat); - } - return new ItemStack(mat, 1, (byte) data); + public static Materials getSpawner(EntityType spawnerType) { + return fromString("SPAWNER_" + spawnerType.name()); } + @SuppressWarnings("deprecation") public boolean isSameMaterial(ItemStack comp) { if (isNewVersion()) { return comp.getType() == this.parseMaterial(); } - if (comp.getType() == this.parseMaterial() && - (int) comp.getData().getData() == (int) this.data) { + if (comp.getType() == this.parseMaterial() && (int) comp.getData().getData() == (int) this.data) { return true; } - XMaterial xmat = fromMaterial(comp.getType()); + Materials xmat = fromMaterial(comp.getType()); if (isDamageable(xmat)) { if (this.parseMaterial() == comp.getType()) { return true; @@ -957,12 +1175,12 @@ public enum XMaterial { return false; } - public XMaterial fromMaterial(Material mat) { + public Materials fromMaterial(Material mat) { try { - return XMaterial.valueOf(mat.toString()); + return Materials.valueOf(mat.toString()); } catch (IllegalArgumentException e) { - for (XMaterial xmat : XMaterial.values()) { - if (xmat.m.equals(mat.toString())) { + for (Materials xmat : Materials.values()) { + if (xmat.old12Mat.equals(mat.toString())) { return xmat; } } @@ -970,37 +1188,48 @@ public enum XMaterial { return null; } - public boolean isDamageable(XMaterial type) { + public static Materials fromString(String key) { + Materials xmat = null; + try { + xmat = Materials.valueOf(key); + return xmat; + } catch (IllegalArgumentException e) { + String[] split = key.split(":"); + if (split.length == 1) { + xmat = requestMaterials(key, (byte) 0); + } else { + xmat = requestMaterials(split[0], (byte) Integer.parseInt(split[1])); + } + return xmat; + } + } + + public static Materials getMaterials(Material material, byte data) { + if (NMSUtil.getVersionNumber() > 12) { + return fromString(material.name()); + } else { + return requestMaterials(material.name(), data); + } + } + + public boolean isDamageable(Materials type) { String[] split = type.toString().split("_"); int length = split.length; switch (split[length - 1]) { case "HELMET": - return true; - case "CHESTPLATE": - return true; - case "LEGGINGS": - return true; - case "BOOTS": - return true; - case "SWORD": - return true; - case "AXE": - return true; - case "PICKAXE": - return true; - case "SHOVEL": - return true; - case "HOE": - return true; - case "ELYTRA": - return true; - case "TURTLE_HELMET": - return true; - case "TRIDENT": - return true; - case "HORSE_ARMOR": - return true; case "SHEARS": + case "HORSE_ARMOR": + case "TRIDENT": + case "TURTLE_HELMET": + case "ELYTRA": + case "HOE": + case "SHOVEL": + case "PICKAXE": + case "AXE": + case "SWORD": + case "BOOTS": + case "LEGGINGS": + case "CHESTPLATE": return true; default: return false; @@ -1008,11 +1237,51 @@ public enum XMaterial { } public Material parseMaterial() { + if (this.isSpawner() && this != Materials.SPAWNER) + return Materials.SPAWNER.parseMaterial(); + Material mat = Material.matchMaterial(this.toString()); + if (mat != null) { return mat; } - return Material.matchMaterial(m); + + if (old13Mat != null) + mat = Material.matchMaterial(old13Mat); + + if (mat != null) + return mat; + + return Material.matchMaterial(old12Mat); } + public Material getPostMaterial() { + try { + Method getUnsafe = Bukkit.class.getMethod("getUnsafe", new Class[0]); + Object unsafe = getUnsafe.invoke(Bukkit.class, new Object[0]); + Method fromLegacy = unsafe.getClass().getMethod("fromLegacy", Material.class); + + if (fromLegacy != null) { + return (Material) fromLegacy.invoke(unsafe, Material.getMaterial("LEGACY_" + old12Mat)); + } + } catch (Exception e) { + } + + return parseMaterial(); + } + + public ItemStack getPostItem() { + try { + Method getUnsafe = Bukkit.class.getMethod("getUnsafe", new Class[0]); + Object unsafe = getUnsafe.invoke(Bukkit.class, new Object[0]); + Method fromLegacy = unsafe.getClass().getMethod("fromLegacy", Material.class); + + if (fromLegacy != null) { + return new ItemStack((Material) fromLegacy.invoke(unsafe, Material.getMaterial("LEGACY_" + old12Mat))); + } + } catch (Exception e) { + } + + return parseItem(); + } } \ No newline at end of file diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/Validator.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/Validator.java index ff978e9..0d204c0 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/Validator.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/Validator.java @@ -46,7 +46,7 @@ public class Validator { public static boolean isMaterial(String mat) { try { - XMaterial.valueOf(mat); + Materials.valueOf(mat); return true; } catch (IllegalArgumentException e) { return false; diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/gui/AbstractGUI.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/gui/AbstractGUI.java index 050f31e..c7f43bc 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/gui/AbstractGUI.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/gui/AbstractGUI.java @@ -28,6 +28,7 @@ public abstract class AbstractGUI implements Listener { private static boolean listenersInitialized = false; protected Player player; protected Inventory inventory = null; + protected String setTitle = null; protected boolean cancelBottom = false; private Map clickables = new HashMap<>(); private List onCloses = new ArrayList<>(); @@ -84,8 +85,7 @@ public abstract class AbstractGUI implements Listener { continue; if (event.getSlot() >= range.getMin() && event.getSlot() <= range.getMax()) { entry.getValue().Clickable(player, inventory, event.getCursor(), event.getSlot(), event.getClick()); - if (EpicBuckets.getInstance().isServerVersionAtLeast(ServerVersion.V1_12)) - player.playSound(player.getLocation(), entry.getKey().getOnClickSound(), 1F, 1F); + player.playSound(player.getLocation(), entry.getKey().getOnClickSound(), 1F, 1F); } } } @@ -116,8 +116,9 @@ public abstract class AbstractGUI implements Listener { public void init(String title, int slots) { if (inventory == null || inventory.getSize() != slots - || ChatColor.translateAlternateColorCodes('&', title) != inventory.getTitle()) { - this.inventory = Bukkit.getServer().createInventory(new GUIHolder(), slots, title); + || ChatColor.translateAlternateColorCodes('&', title) != player.getOpenInventory().getTitle()) { + this.inventory = Bukkit.getServer().createInventory(new GUIHolder(), slots, ChatColor.translateAlternateColorCodes('&', title)); + this.setTitle = ChatColor.translateAlternateColorCodes('&', title); if (this.clickables.size() == 0) registerClickables(); if (this.onCloses.size() == 0) @@ -128,7 +129,7 @@ public abstract class AbstractGUI implements Listener { player.openInventory(inventory); } - protected abstract void constructGUI(); + public abstract void constructGUI(); protected void addDraggable(Range range, boolean option) { this.draggableRanges.put(range, option); @@ -171,10 +172,6 @@ public abstract class AbstractGUI implements Listener { return createButton(slot, material, name, lore.toArray(new String[0])); } - protected ItemStack createButton(int slot, ItemStack item, String name, ArrayList lore) { - return createButton(slot, item, name, lore.toArray(new String[0])); - } - protected void registerClickable(int min, int max, ClickType clickType, boolean bottom, Clickable clickable) { clickables.put(new Range(min, max, clickType, bottom), clickable); } @@ -222,4 +219,8 @@ public abstract class AbstractGUI implements Listener { return AbstractGUI.this; } } + + public String getSetTitle() { + return setTitle; + } } diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/itemnbtapi/NBTList.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/itemnbtapi/NBTList.java index 39fa25c..7209869 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/itemnbtapi/NBTList.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/itemnbtapi/NBTList.java @@ -1,5 +1,7 @@ package com.songoda.epicbuckets.utils.itemnbtapi; +import com.songoda.epicbuckets.utils.itemnbtapi.utils.MinecraftVersion; + public class NBTList { private String listName; @@ -28,7 +30,11 @@ public class NBTList { } try { Object compound = ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz().newInstance(); - ReflectionMethod.LIST_ADD.run(listObject, compound); + if (MinecraftVersion.getVersion().getVersionId() >= MinecraftVersion.MC1_14_R1.getVersionId()) { + ReflectionMethod.LIST_ADD.run(listObject, 0, compound); + } else { + ReflectionMethod.LEGACY_LIST_ADD.run(listObject, compound); + } return new NBTListCompound(this, compound); } catch (Exception ex) { ex.printStackTrace(); @@ -69,7 +75,13 @@ public class NBTList { return; } try { - ReflectionMethod.LIST_ADD.run(listObject, ClassWrapper.NMS_NBTTAGSTRING.getClazz().getConstructor(String.class).newInstance(s)); + if (MinecraftVersion.getVersion().getVersionId() >= MinecraftVersion.MC1_14_R1.getVersionId()) { + ReflectionMethod.LIST_ADD.run(listObject, 0, + ClassWrapper.NMS_NBTTAGSTRING.getClazz().getConstructor(String.class).newInstance(s)); + } else { + ReflectionMethod.LEGACY_LIST_ADD.run(listObject, + ClassWrapper.NMS_NBTTAGSTRING.getClazz().getConstructor(String.class).newInstance(s)); + } save(); } catch (Exception ex) { ex.printStackTrace(); @@ -82,7 +94,8 @@ public class NBTList { return; } try { - ReflectionMethod.LIST_SET.run(listObject, i, ClassWrapper.NMS_NBTTAGSTRING.getClazz().getConstructor(String.class).newInstance(s)); + ReflectionMethod.LIST_SET.run(listObject, i, + ClassWrapper.NMS_NBTTAGSTRING.getClazz().getConstructor(String.class).newInstance(s)); save(); } catch (Exception ex) { ex.printStackTrace(); @@ -111,4 +124,4 @@ public class NBTList { return type; } -} +} \ No newline at end of file diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/itemnbtapi/ReflectionMethod.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/itemnbtapi/ReflectionMethod.java index 3d2bf0b..c7b52a8 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/itemnbtapi/ReflectionMethod.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/itemnbtapi/ReflectionMethod.java @@ -41,7 +41,8 @@ public enum ReflectionMethod { LIST_REMOVE_KEY(ClassWrapper.NMS_NBTTAGLIST.getClazz(), new Class[]{int.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "a"), new Since(MinecraftVersion.MC1_9_R1, "remove")), LIST_SIZE(ClassWrapper.NMS_NBTTAGLIST.getClazz(), new Class[]{}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "size")), LIST_SET(ClassWrapper.NMS_NBTTAGLIST.getClazz(), new Class[]{int.class, ClassWrapper.NMS_NBTBASE.getClazz()}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "a"), new Since(MinecraftVersion.MC1_13_R1, "set")), - LIST_ADD(ClassWrapper.NMS_NBTTAGLIST.getClazz(), new Class[]{ClassWrapper.NMS_NBTBASE.getClazz()}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "add")), + LEGACY_LIST_ADD(ClassWrapper.NMS_NBTTAGLIST.getClazz(), new Class[]{ClassWrapper.NMS_NBTBASE.getClazz()}, MinecraftVersion.MC1_7_R4, MinecraftVersion.MC1_13_R2, new Since(MinecraftVersion.MC1_7_R4, "add")), + LIST_ADD(ClassWrapper.NMS_NBTTAGLIST.getClazz(), new Class[]{int.class, ClassWrapper.NMS_NBTBASE.getClazz()}, MinecraftVersion.MC1_14_R1, new Since(MinecraftVersion.MC1_14_R1, "add")), LIST_GET_STRING(ClassWrapper.NMS_NBTTAGLIST.getClazz(), new Class[]{int.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "getString")), LIST_GET(ClassWrapper.NMS_NBTTAGLIST.getClazz(), new Class[]{int.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "get")), @@ -63,16 +64,21 @@ public enum ReflectionMethod { NBTFILE_WRITE(ClassWrapper.NMS_NBTCOMPRESSEDSTREAMTOOLS.getClazz(), new Class[]{ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), OutputStream.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "a")), //FIXME: No Spigot mapping! - PARSE_NBT(ClassWrapper.NMS_MOJANGSONPARSER.getClazz(), new Class[]{String.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "parse")),; + PARSE_NBT(ClassWrapper.NMS_MOJANGSONPARSER.getClazz(), new Class[]{String.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "parse")), + ; + + private MinecraftVersion removedAfter; private Since targetVersion; private Method method; private boolean loaded = false; private boolean compatible = false; - ReflectionMethod(Class targetClass, Class[] args, MinecraftVersion addedSince, Since... methodnames) { + ReflectionMethod(Class targetClass, Class[] args, MinecraftVersion addedSince, MinecraftVersion removedAfter, Since... methodnames) { + this.removedAfter = removedAfter; MinecraftVersion server = MinecraftVersion.getVersion(); - if (server.compareTo(addedSince) < 0) return; + if (server.compareTo(addedSince) < 0 || (this.removedAfter != null && server.getVersionId() > this.removedAfter.getVersionId())) + return; compatible = true; Since target = methodnames[0]; for (Since s : methodnames) { @@ -89,6 +95,10 @@ public enum ReflectionMethod { } } + ReflectionMethod(Class targetClass, Class[] args, MinecraftVersion addedSince, Since... methodnames) { + this(targetClass, args, addedSince, null, methodnames); + } + public Object run(Object target, Object... args) { try { return method.invoke(target, args); @@ -115,5 +125,4 @@ public enum ReflectionMethod { this.name = name; } } - -} +} \ No newline at end of file diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/itemnbtapi/utils/MinecraftVersion.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/itemnbtapi/utils/MinecraftVersion.java index 51d0143..2e5ae66 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/itemnbtapi/utils/MinecraftVersion.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/itemnbtapi/utils/MinecraftVersion.java @@ -12,7 +12,8 @@ public enum MinecraftVersion { MC1_11_R1(1111), MC1_12_R1(1121), MC1_13_R1(1131), - MC1_13_R2(1132); + MC1_13_R2(1132), + MC1_14_R1(1141); private static MinecraftVersion version; private static Boolean hasGsonSupport; @@ -23,6 +24,10 @@ public enum MinecraftVersion { this.versionId = versionId; } + public int getVersionId() { + return versionId; + } + public static MinecraftVersion getVersion() { if (version != null) { return version; @@ -55,8 +60,4 @@ public enum MinecraftVersion { return hasGsonSupport; } - public int getVersionId() { - return versionId; - } - -} +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 4574fe4..d118016 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ org.spigotmc spigot - 1.13.2 + 1.14-pre5-2 provided From 2705c78753f81b2d1bf0bbf70997ab06f00cea2c Mon Sep 17 00:00:00 2001 From: Brianna Date: Mon, 29 Apr 2019 16:21:52 -0400 Subject: [PATCH 2/3] Added updater. --- .../com/songoda/epicbuckets/EpicBuckets.java | 38 ++++-------------- .../utils/updateModules/LocaleModule.java | 32 +++++++++++++++ pom.xml | 40 ++++++++++++++++++- 3 files changed, 78 insertions(+), 32 deletions(-) create mode 100644 EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/updateModules/LocaleModule.java diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/EpicBuckets.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/EpicBuckets.java index 9848e37..30f3cf6 100644 --- a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/EpicBuckets.java +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/EpicBuckets.java @@ -15,6 +15,9 @@ import com.songoda.epicbuckets.utils.Debugger; import com.songoda.epicbuckets.utils.ServerVersion; import com.songoda.epicbuckets.utils.hooks.ClaimableProtectionPluginHook; import com.songoda.epicbuckets.utils.hooks.ProtectionPluginHook; +import com.songoda.epicbuckets.utils.updateModules.LocaleModule; +import com.songoda.update.Plugin; +import com.songoda.update.SongodaUpdate; import net.milkbowl.vault.economy.Economy; import org.apache.commons.lang.ArrayUtils; import org.bukkit.Bukkit; @@ -75,7 +78,10 @@ public class EpicBuckets extends JavaPlugin { Locale.saveDefaultLocale("en_US"); this.locale = Locale.getLocale(getConfig().getString("Locale", "en_US")); - this.update(); + //Running Songoda Updater + Plugin plugin = new Plugin(this, 27); + plugin.addModule(new LocaleModule()); + SongodaUpdate.load(plugin); this.references = new References(); @@ -137,36 +143,6 @@ public class EpicBuckets extends JavaPlugin { this.getShopManager().reload(); } - private void update() { - try { - URL url = new URL("http://update.songoda.com/index.php?plugin=" + getDescription().getName() + "&version=" + getDescription().getVersion()); - URLConnection urlConnection = url.openConnection(); - InputStream is = urlConnection.getInputStream(); - InputStreamReader isr = new InputStreamReader(is); - - int numCharsRead; - char[] charArray = new char[1024]; - StringBuilder sb = new StringBuilder(); - while ((numCharsRead = isr.read(charArray)) > 0) { - sb.append(charArray, 0, numCharsRead); - } - String jsonString = sb.toString(); - JSONObject json = (JSONObject) new JSONParser().parse(jsonString); - - JSONArray files = (JSONArray) json.get("neededFiles"); - for (Object o : files) { - JSONObject file = (JSONObject) o; - - if ("locale".equals(file.get("type"))) { - InputStream in = new URL((String) file.get("link")).openStream(); - Locale.saveDefaultLocale(in, (String) file.get("name")); - } - } - } catch (Exception e) { - Bukkit.getLogger().warning("Failed to update."); - } - } - private ProtectionPluginHook register(Supplier hookSupplier) { return this.registerProtectionHook(hookSupplier.get()); } diff --git a/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/updateModules/LocaleModule.java b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/updateModules/LocaleModule.java new file mode 100644 index 0000000..4943073 --- /dev/null +++ b/EpicBuckets-Plugin/src/main/java/com/songoda/epicbuckets/utils/updateModules/LocaleModule.java @@ -0,0 +1,32 @@ +package com.songoda.epicbuckets.utils.updateModules; + +import com.songoda.epicbuckets.EpicBuckets; +import com.songoda.update.Module; +import com.songoda.update.Plugin; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +public class LocaleModule implements Module { + + @Override + public void run(Plugin plugin) { + JSONObject json = plugin.getJson(); + try { + JSONArray files = (JSONArray) json.get("neededFiles"); + for (Object o : files) { + JSONObject file = (JSONObject) o; + + if (file.get("type").equals("locale")) { + InputStream in = new URL((String) file.get("link")).openStream(); + EpicBuckets.getInstance().getLocale().saveDefaultLocale(in, (String) file.get("name")); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/pom.xml b/pom.xml index d118016..3d1b2cc 100644 --- a/pom.xml +++ b/pom.xml @@ -16,9 +16,14 @@ org.spigotmc spigot - 1.14-pre5-2 + 1.14 provided + + com.songoda + songodaupdater + 1 + @@ -33,6 +38,39 @@ 1.8 + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + shaded + package + + shade + + + false + false + + + com.songoda:songodaupdater + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + From 0bf2c4d17e6f1f38e45a30c625afd46630444e91 Mon Sep 17 00:00:00 2001 From: Brianna Date: Mon, 29 Apr 2019 16:46:44 -0400 Subject: [PATCH 3/3] Version --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2dfcfe2..b7d4065 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,7 +4,7 @@ stages: variables: name: "EpicBuckets" path: "/builds/$CI_PROJECT_PATH" - version: "1.5.3" + version: "1.6" build: stage: build