new Version Item Protect...

Signed-off-by: 502647092 <jtb1@163.com>
master
502647092 2015-10-20 20:58:13 +08:00
parent 12b6321bab
commit a33344dab2
15 changed files with 288 additions and 130 deletions

21
pom.xml
View File

@ -1,9 +1,9 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.CityCraft</groupId>
<groupId>cn.citycraft</groupId>
<artifactId>ProtectItem</artifactId>
<version>0.0.1-SNAPSHOT</version>
<version>1.0</version>
<name>ProtectItem</name>
<build>
<finalName>${project.name}</finalName>
@ -32,14 +32,9 @@
<artifactSet>
<includes>
<include>cn.citycraft:PluginHelper</include>
<include>org.mcstats.*:*</include>
</includes>
</artifactSet>
<relocations>
<relocation>
<pattern>org.mcstats</pattern>
<shadedPattern>${project.groupId}.${project.artifactId}.mcstats</shadedPattern>
</relocation>
<relocation>
<pattern>cn.citycraft.PluginHelper</pattern>
<shadedPattern>${project.groupId}.${project.artifactId}</shadedPattern>
@ -66,17 +61,13 @@
<id>citycraft-repo</id>
<url>http://ci.citycraft.cn:8800/jenkins/plugin/repository/everything/</url>
</repository>
<repository>
<id>Plugin Metrics</id>
<url>http://repo.mcstats.org/content/repositories/public</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<type>jar</type>
<version>1.8.3-R0.1-SNAPSHOT</version>
<version>1.8.8-R0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cn.citycraft</groupId>
@ -84,12 +75,6 @@
<type>jar</type>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.mcstats.bukkit</groupId>
<artifactId>metrics</artifactId>
<version>R8-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

View File

@ -1,98 +1,45 @@
package cn.citycraft.ProtectItem;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import cn.citycraft.ProtectItem.commands.ProtectItemCommand;
import cn.citycraft.ProtectItem.listen.ClickItemListen;
import cn.citycraft.ProtectItem.listen.DropItemListen;
import cn.citycraft.ProtectItem.listen.InteractItemListen;
import cn.citycraft.ProtectItem.listen.ItemHeldListen;
import cn.citycraft.ProtectItem.listen.PickupItemListen;
import cn.citycraft.ProtectItem.utils.ActionType;
import cn.citycraft.ProtectItem.utils.ItemManager;
public class ProtectItem extends JavaPlugin {
public String servername;
public String pluginname;
public ItemManager itemManager;
public static String getItemName(final ItemStack i) {
final String name = i.getType().name();
final int dur = i.getDurability();
final String dura = i.getMaxStackSize() != 1 ? dur != 0 ? "_" + dur : "" : "";
final String iname = name + dura;
return iname;
}
public boolean checkevent(final Player p, final ItemStack i, final String type) {
if (p.hasPermission("pi.bypass")) {
return false;
}
final String iname = getItemName(i);
final Location l = p.getLocation();
final World pw = l.getWorld();
for (final String protectworld : getConfig().getStringList("ProtectWorld")) {
if (pw.getName().equalsIgnoreCase(protectworld)) {
for (final String protectitem : getConfig().getStringList("ProtectItem")) {
if (iname.equalsIgnoreCase(protectitem)) {
p.sendMessage(pluginname + getmessage("Message." + type));
return true;
}
}
}
}
return false;
}
public String getmessage(final String path) {
final String message = getConfig().getString(path).replaceAll("&", "§");
return message;
}
@Override
public boolean onCommand(final CommandSender sender, final Command cmd, final String string, final String[] args) {
final Player p = (Player) sender;
switch (args.length) {
case 0:
final ItemStack item = p.getItemInHand();
p.sendMessage("\u00a7a手上物品类型名称为: \u00a76" + getItemName(item));
public boolean actionCheck(final Player p, final ItemStack i, final ActionType action) {
if (itemManager.canAction(i, action)) {
return true;
} else if (itemManager.hasActionPerm(p, i, action)) {
return true;
case 1:
if (p.hasPermission("pi.bypass")) {
if (args[0].equalsIgnoreCase("reload")) {
this.reloadConfig();
p.sendMessage("\u00a7a配置文件已重载...");
return true;
}
}
break;
default:
}
return false;
}
public ItemManager getItemManager() {
return itemManager;
}
@Override
public void onEnable() {
if (getConfig().getBoolean("Protect.Drop", true)) {
Bukkit.getPluginManager().registerEvents(new DropItemListen(this), this);
}
if (getConfig().getBoolean("Protect.Pickup", true)) {
Bukkit.getPluginManager().registerEvents(new PickupItemListen(this), this);
}
// if (getConfig().getBoolean("Protect.Break", true))
// Bukkit.getPluginManager().registerEvents(
// new BreakBlockListen(this), this);
// if (getConfig().getBoolean("Protect.Place", true))
// Bukkit.getPluginManager().registerEvents(
// new PlaceBlockListen(this), this);
getLogger().info("ProtectItem已加载!");
itemManager = new ItemManager(this);
final PluginManager pm = this.getServer().getPluginManager();
pm.registerEvents(new ClickItemListen(this), this);
pm.registerEvents(new DropItemListen(this), this);
pm.registerEvents(new InteractItemListen(this), this);
pm.registerEvents(new ItemHeldListen(this), this);
pm.registerEvents(new PickupItemListen(this), this);
this.getCommand("pi").setExecutor(new ProtectItemCommand(this));
}
@Override
public void onLoad() {
saveDefaultConfig();
reloadConfig();
servername = getmessage("servername");
pluginname = getmessage("pluginname") + " ";
}
}

View File

@ -0,0 +1,30 @@
package cn.citycraft.ProtectItem.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import cn.citycraft.PluginHelper.commands.BaseCommand;
import cn.citycraft.ProtectItem.ProtectItem;
public class CommandBan extends BaseCommand {
ProtectItem plugin;
public CommandBan(final ProtectItem main) {
super("ban");
this.plugin = main;
setOnlyPlayerExecutable();
setDescription("§c封禁手持物品");
setPossibleArguments("<封禁类型>");
}
@Override
public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
final Player p = (Player) sender;
final ItemStack item = p.getItemInHand();
plugin.getItemManager().addbanItem(item);
}
}

View File

@ -0,0 +1,26 @@
package cn.citycraft.ProtectItem.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
import cn.citycraft.PluginHelper.commands.BaseCommand;
import cn.citycraft.ProtectItem.ProtectItem;
public class CommandUnban extends BaseCommand {
ProtectItem plugin;
public CommandUnban(final ProtectItem main) {
super("unban");
this.plugin = main;
setOnlyPlayerExecutable();
setDescription("§a解禁手持物品");
setPossibleArguments("<解禁类型>");
}
@Override
public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
}
}

View File

@ -0,0 +1,35 @@
package cn.citycraft.ProtectItem.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import cn.citycraft.PluginHelper.commands.DefaultCommand;
import cn.citycraft.PluginHelper.commands.HandlerSubCommand;
import cn.citycraft.ProtectItem.ProtectItem;
public class ProtectItemCommand implements CommandExecutor, DefaultCommand {
HandlerSubCommand hsc;
ProtectItem plugin;
public ProtectItemCommand(final ProtectItem main) {
plugin = main;
hsc = new HandlerSubCommand(main);
hsc.setDefaultCommand(this);
hsc.registerCommand(new CommandBan(main));
hsc.registerCommand(new CommandUnban(main));
}
@Override
public void defaultExecute(final CommandSender sender, final Command command, final String label) throws CommandException {
hsc.sendHelp(sender, label);
}
@Override
public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) {
return hsc.onCommand(sender, cmd, label, args);
}
}

View File

@ -0,0 +1,28 @@
package cn.citycraft.ProtectItem.listen;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
import cn.citycraft.ProtectItem.ProtectItem;
import cn.citycraft.ProtectItem.utils.ActionType;
public class ClickItemListen implements Listener {
ProtectItem plugin;
public ClickItemListen(final ProtectItem main) {
plugin = main;
}
@EventHandler(ignoreCancelled = true)
public void onClickItem(final InventoryClickEvent e) {
final Player p = (Player) e.getWhoClicked();
final ItemStack i = e.getCurrentItem();
if (i != null && i.getType() != Material.AIR) {
e.setCancelled(plugin.actionCheck(p, i, ActionType.Click));
}
}
}

View File

@ -7,6 +7,7 @@ import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.inventory.ItemStack;
import cn.citycraft.ProtectItem.ProtectItem;
import cn.citycraft.ProtectItem.utils.ActionType;
public class DropItemListen implements Listener {
ProtectItem plugin;
@ -19,6 +20,6 @@ public class DropItemListen implements Listener {
public void onDropItem(final PlayerDropItemEvent e) {
final Player p = e.getPlayer();
final ItemStack i = e.getItemDrop().getItemStack();
e.setCancelled(plugin.checkevent(p, i, "Drop"));
e.setCancelled(plugin.actionCheck(p, i, ActionType.Drop));
}
}

View File

@ -0,0 +1,25 @@
package cn.citycraft.ProtectItem.listen;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import cn.citycraft.ProtectItem.ProtectItem;
import cn.citycraft.ProtectItem.utils.ActionType;
public class InteractItemListen implements Listener {
ProtectItem plugin;
public InteractItemListen(final ProtectItem main) {
plugin = main;
}
@EventHandler(ignoreCancelled = true)
public void onPickupItem(final PlayerInteractEvent e) {
final Player p = e.getPlayer();
final ItemStack i = p.getItemInHand();
e.setCancelled(plugin.actionCheck(p, i, ActionType.Interact));
}
}

View File

@ -0,0 +1,28 @@
package cn.citycraft.ProtectItem.listen;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerItemHeldEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import cn.citycraft.ProtectItem.ProtectItem;
import cn.citycraft.ProtectItem.utils.ActionType;
public class ItemHeldListen implements Listener {
ProtectItem plugin;
public ItemHeldListen(final ProtectItem main) {
plugin = main;
}
@EventHandler(ignoreCancelled = true)
public void onItemHeld(final PlayerItemHeldEvent e) {
final Player p = e.getPlayer();
final Inventory inv = p.getInventory();
final int slot = e.getNewSlot();
final ItemStack i = inv.getItem(slot);
e.setCancelled(plugin.actionCheck(p, i, ActionType.Held));
}
}

View File

@ -7,6 +7,7 @@ import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.inventory.ItemStack;
import cn.citycraft.ProtectItem.ProtectItem;
import cn.citycraft.ProtectItem.utils.ActionType;
public class PickupItemListen implements Listener {
ProtectItem plugin;
@ -19,6 +20,6 @@ public class PickupItemListen implements Listener {
public void onPickupItem(final PlayerPickupItemEvent e) {
final Player p = e.getPlayer();
final ItemStack i = e.getItem().getItemStack();
e.setCancelled(plugin.checkevent(p, i, "Pickup"));
e.setCancelled(plugin.actionCheck(p, i, ActionType.Pickup));
}
}

View File

@ -0,0 +1,9 @@
package cn.citycraft.ProtectItem.utils;
public enum ActionType {
Click(),
Drop(),
Held(),
Interact(),
Pickup()
}

View File

@ -0,0 +1,62 @@
package cn.citycraft.ProtectItem.utils;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import cn.citycraft.PluginHelper.config.FileConfig;
import cn.citycraft.ProtectItem.ProtectItem;
public class ItemManager {
FileConfig itemconfig;
HashMap<String, List<ActionType>> itemlist;
ProtectItem plugin;
@SuppressWarnings("unchecked")
public ItemManager(final ProtectItem main) {
plugin = main;
itemconfig = new FileConfig(plugin, "banitems");
itemlist = (HashMap<String, List<ActionType>>) itemconfig.get("banitems");
}
public void addbanItem(final ItemStack item) {
addbanItem(item, null);
}
public void addbanItem(final ItemStack item, final ActionType[] action) {
final String itemname = getItemName(item);
if (itemlist.containsKey(itemname)) {
final List<ActionType> actlist = itemlist.get(itemname);
for (final ActionType actionType : actlist) {
if (!actlist.contains(action)) {
actlist.add(actionType);
}
}
} else {
itemlist.put(itemname, Arrays.asList(action));
}
itemconfig.set("banitems", itemlist);
}
public boolean canAction(final ItemStack i, final ActionType action) {
final String itemname = getItemName(i);
final List<ActionType> actlist = itemlist.get(itemname);
final Boolean result = actlist.contains(action);
return result;
}
public String getItemName(final ItemStack i) {
final int dur = i.getDurability();
final String dura = i.getMaxStackSize() != 1 ? dur != 0 ? "_" + dur : "" : "";
return (i.getType().name() + dura).toLowerCase();
}
public boolean hasActionPerm(final Player p, final ItemStack i, final ActionType action) {
final String itemname = getItemName(i);
final String perm = String.format("%s.%s", itemname, action.toString().toLowerCase());
return p.hasPermission(itemname + ".*") ? true : p.hasPermission(perm);
}
}

View File

View File

@ -1,34 +1,5 @@
#本文件为保护插件的主配置文件
#服务器名称
#本文件为保护插件的主配置文件
#服务器名称
servername: ''
#插件名称
pluginname: '&6[&3物品保护&6]&r'
#提示消息
Message:
Reload: '&a配置文件已重新载入'
#方块安全提示
Drop: '&c当前世界禁止丢弃该物品'
Pickup: '&c当前世界禁止拾取该物品'
# Place: '&c当前世界禁止放置该物品'
# Break: '&c当前世界禁止破坏该物品'
#受到保护的类型
Protect:
Drop: true
Pickup: false
##Place: false
##Break: false
#受到保护的世界(不区分大小写)
ProtectWorld:
- world
#保护的物品(不区分大小写)
ProtectItem:
- XXXX
#例如(请输入物品类型名称,/pishow查看物品名称)
# - DIRT
# - GRASS
# - CHEST
# - TRAPPED_CHEST
#插件名称
pluginname: '&6[&3物品保护&6]&r'

View File

@ -0,0 +1,10 @@
#提示消息
Message:
Reload: '&a配置文件已重新载入'
#方块安全提示
Drop: '&c当前世界禁止丢弃该物品'
Pickup: '&c当前世界禁止拾取该物品'
Place: '&c当前世界禁止放置该物品'
Break: '&c当前世界禁止破坏该物品'
Use: '&c当前世界禁止使用该物品!'
Held: '&c当前世界禁止使用该物品!'