ProtectItem/src/main/java/cn/citycraft/ProtectItem/utils/ItemManager.java

134 lines
4.3 KiB
Java

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<String, ArrayList<ActionType>> itemlist = new HashMap<String, ArrayList<ActionType>>();
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<String> items = itemconfig.getConfigurationSection("banitems").getKeys(false);
if (items != null) {
for (final String banitem : items) {
final ArrayList<ActionType> actlist = new ArrayList<ActionType>();
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<ActionType> actlist = itemlist.get(itemname);
final ArrayList<ActionType> addactlist = new ArrayList<ActionType>();
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<ActionType> 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<String, List<String>> banlist = new HashMap<String, List<String>>();
for (final Entry<String, ArrayList<ActionType>> banitem : itemlist.entrySet()) {
final List<String> actlist = new ArrayList<String>();
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<String, ArrayList<ActionType>> 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<ActionType> actlist = itemlist.get(itemname);
actlist.removeAll(Arrays.asList(action));
itemlist.put(itemname, actlist);
}
this.saveConfig();
}
}