134 lines
4.3 KiB
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();
|
|
}
|
|
|
|
}
|