/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.royaldev.royalcommands; import org.apache.commons.lang.ArrayUtils; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.royaldev.royalcommands.tools.Pair; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.logging.Logger; public class ItemNameManager { // <Aliases, <ID, Data>> public final Map<String[], Pair<Material, Short>> items = new HashMap<>(); public ItemNameManager(Iterable<String[]> values) { for (String[] s : values) { if (s.length < 1) continue; String[] aliases; try { aliases = s[2].split(","); } catch (IndexOutOfBoundsException e) { Logger l = Logger.getLogger("Minecraft"); l.warning("[RoyalCommands] Values passed in ItemNameManager invalid: "); for (String ss : s) l.warning("[RoyalCommands] - " + ss); continue; } Material m; short data; try { m = Material.valueOf(s[0]); } catch (IllegalArgumentException ex) { RoyalCommands.getInstance().getLogger().warning("Material in items.csv is invalid: " + s[0]); continue; } try { data = Short.valueOf(s[1]); } catch (NumberFormatException e) { RoyalCommands.getInstance().getLogger().warning("Data in items.csv file is invalid: " + s[1]); continue; } synchronized (items) { items.put(aliases, new Pair<>(m, data)); } } } public boolean aliasExists(Material m) { return aliasExists(new Pair<>(m, (short) 0)); } public boolean aliasExists(ItemStack is) { return aliasExists(new Pair<>(is.getType(), is.getDurability())); } public boolean aliasExists(Pair<Material, Short> data) { return items.values().contains(data); } public ItemStack getItemStackFromAlias(String alias) { boolean found = false; String[] aliases = null; String data = null; if (alias.contains(":")) { String[] datas = alias.split(":"); data = (datas.length > 1) ? datas[1] : ""; alias = datas[0]; } for (String[] s : items.keySet()) if (ArrayUtils.contains(s, alias.toLowerCase())) { found = true; aliases = s; break; } if (!found) return null; final Pair<Material, Short> itemstackData = items.get(aliases); final ItemStack is = new ItemStack(itemstackData.getFirst(), 1, itemstackData.getSecond()); if (data != null && !data.isEmpty()) { try { is.setDurability(Short.parseShort(data)); } catch (NumberFormatException ignored) {} } return is; } public List<String> getPossibleNames(String incompleteName) { incompleteName = incompleteName.toLowerCase(); final List<String> possibleNames = new ArrayList<>(); for (final String possible[] : items.keySet()) { for (String possibleName : possible) { possibleName = possibleName.toLowerCase(); if (!possibleName.startsWith(incompleteName)) continue; if (possibleName.equals(incompleteName)) possibleNames.add(0, possibleName); else possibleNames.add(possibleName); } } return possibleNames; } }