Added 1.14 Support.

This commit is contained in:
Brianna 2019-04-24 19:46:36 -04:00
parent ea7aac0284
commit e2511d69d8
20 changed files with 633 additions and 283 deletions

View File

@ -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<ProtectionPluginHook> hookSupplier) {
return this.registerProtectionHook(hookSupplier.get());
}

View File

@ -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<Locale> 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") + " ";
}
}

View File

@ -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<XMaterial> ignoredMaterials;
private List<XMaterial> psuedoMaterials;
private List<Materials> ignoredMaterials;
private List<Materials> psuedoMaterials;
private LinkedHashMap<String, Integer> genbucketGroups;
@ -181,7 +181,7 @@ public class ConfigManager {
HashMap<ItemStack, Double> 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<XMaterial> getIgnoredMaterials() {
public List<Materials> getIgnoredMaterials() {
return ignoredMaterials;
}
public List<XMaterial> getPsuedoMaterials() {
public List<Materials> getPsuedoMaterials() {
return psuedoMaterials;
}

View File

@ -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<XMaterial> materials = epicBuckets.getConfigManager().getIgnoredMaterials();
List<Materials> 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;

View File

@ -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) {

View File

@ -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) {

View File

@ -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())));

View File

@ -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) {

View File

@ -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;
}

View File

@ -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()) {

View File

@ -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(",")) {

View File

@ -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;
}
}

View File

@ -12,14 +12,14 @@ import java.util.stream.IntStream;
public class InventoryHelper {
public static List<XMaterial> convertMaterialList(List<String> toConvert, String item) {
List<XMaterial> converted = new ArrayList<>();
public static List<Materials> convertMaterialList(List<String> toConvert, String item) {
List<Materials> 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;
}

View File

@ -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;

View File

@ -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<Range, Clickable> clickables = new HashMap<>();
private List<OnClose> onCloses = new ArrayList<>();
@ -84,7 +85,6 @@ 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);
}
}
@ -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<String> 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;
}
}

View File

@ -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();

View File

@ -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;
}
}
}

View File

@ -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;
}
}

View File

@ -16,7 +16,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>1.13.2</version>
<version>1.14-pre5-2</version>
<scope>provided</scope>
</dependency>
</dependencies>