package cn.citycraft.ProtectItem.utils; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map.Entry; import java.util.Set; import org.bukkit.Material; import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import cn.citycraft.PluginHelper.config.FileConfig; import cn.citycraft.PluginHelper.utils.LocalUtil; import cn.citycraft.ProtectItem.ProtectItem; public class ItemManager { FileConfig itemconfig; HashMap> itemlist = new HashMap>(); ProtectItem plugin; public ItemManager(final ProtectItem main) { plugin = main; itemconfig = new FileConfig(plugin, "banitems.yml"); final ConfigurationSection cfg = itemconfig.getConfigurationSection("banitems"); if (cfg != null) { final Set items = itemconfig.getConfigurationSection("banitems").getKeys(false); if (items != null) { for (final String banitem : items) { final ArrayList actlist = new ArrayList(); for (final String action : itemconfig.getStringList("banitems." + banitem)) { try { final ActionType act = Enum.valueOf(ActionType.class, action); actlist.add(act); } catch (final Exception e) { } } itemlist.put(banitem, actlist); } } } } public void banItem(final ItemStack item) { banItem(item, ActionType.values()); } public void banItem(final ItemStack item, final ActionType... action) { final String itemname = getItemName(item); if (itemlist.containsKey(itemname)) { final ArrayList actlist = itemlist.get(itemname); final ArrayList addactlist = new ArrayList(); for (final ActionType actionType : actlist) { if (!actlist.contains(action)) { addactlist.add(actionType); } } actlist.addAll(addactlist); itemlist.put(itemname, actlist); } else { itemlist.put(itemname, new ArrayList<>(Arrays.asList(action))); } this.saveConfig(); } public boolean canAction(final ItemStack i, final ActionType action) { if (i == null || i.getType() == Material.AIR) { return true; } final String itemname = getItemName(i); final List actlist = itemlist.get(itemname); if (actlist == null) { return true; } final Boolean result = actlist.contains(action); return result ? false : true; } public String getItemName(final ItemStack i) { return LocalUtil.getItemType(i); } public boolean hasActionPerm(final Player p, final ItemStack i, final ActionType action) { final String itemname = getItemName(i); final String perm = String.format("pi.%s.%s", itemname, action.toString().toLowerCase()); return p.hasPermission("pi" + itemname + ".*") ? true : p.hasPermission(perm); } public void saveConfig() { final HashMap> banlist = new HashMap>(); for (final Entry> banitem : itemlist.entrySet()) { final List actlist = new ArrayList(); for (final ActionType act : banitem.getValue()) { actlist.add(act.toString()); } banlist.put(banitem.getKey(), actlist); } itemconfig.set("banitems", banlist); itemconfig.save(); } public void sendBanList(final CommandSender sender) { sender.sendMessage("§6服务器已禁封的物品如下:"); sender.sendMessage("§a物品 §c操作"); for (final Entry> item : itemlist.entrySet()) { String acts = ""; for (final ActionType act : item.getValue()) { acts += act.getName() + " "; } sender.sendMessage("§a" + LocalUtil.getItemName(item.getKey()) + " §c " + acts); } } public void unBanItem(final ItemStack item) { final String itemname = getItemName(item); itemlist.remove(itemname); this.saveConfig(); } public void unBanItem(final ItemStack item, final ActionType... action) { final String itemname = getItemName(item); if (itemlist.containsKey(itemname)) { final ArrayList actlist = itemlist.get(itemname); actlist.removeAll(Arrays.asList(action)); itemlist.put(itemname, actlist); } this.saveConfig(); } }