diff --git a/pom.xml b/pom.xml
index 2d9f462..c194534 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
org.maxgamer
QuickShop
- 1.2
+ 1.3
${project.name}
diff --git a/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java b/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java
index 2b9f96c..f10824e 100644
--- a/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java
+++ b/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java
@@ -37,7 +37,7 @@ public class ConfigManager {
protected int findDistance = 30;
protected Material superItem = Material.GOLD_AXE;
protected double feeForPriceChange = 0.0;
-
+ protected boolean preventhopper = false;
/** Use SpoutPlugin to get item / block names */
protected boolean useSpout = false;
@@ -65,6 +65,7 @@ public class ConfigManager {
this.priceChangeRequiresFee = plugin.getConfig().getBoolean("shop.price-change-requires-fee");
this.findDistance = plugin.getConfig().getInt("shop.find-distance");
this.feeForPriceChange = plugin.getConfig().getDouble("shop.fee-for-price-change");
+ this.preventhopper = plugin.getConfig().getBoolean("preventhopper");
}
public double getFeeForPriceChange() {
@@ -107,6 +108,10 @@ public class ConfigManager {
return logAction;
}
+ public boolean isPreventHopper() {
+ return preventhopper;
+ }
+
public boolean isPriceChangeRequiresFee() {
return priceChangeRequiresFee;
}
diff --git a/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java b/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java
index fc91d3d..0084865 100644
--- a/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java
+++ b/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java
@@ -12,20 +12,17 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
-import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
-import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.BlockIterator;
import org.maxgamer.QuickShop.QuickShop;
import org.maxgamer.QuickShop.Shop.Info;
import org.maxgamer.QuickShop.Shop.Shop;
import org.maxgamer.QuickShop.Shop.ShopAction;
-import org.maxgamer.QuickShop.Util.MarkUtil;
import org.maxgamer.QuickShop.Util.MsgUtil;
import org.maxgamer.QuickShop.Util.Util;
@@ -120,21 +117,6 @@ public class PlayerListener implements Listener {
}
}
- @EventHandler
- public void onItemClick(final InventoryClickEvent e) {
- final Player p = (Player) e.getWhoClicked();
- final ItemStack ci = e.getCurrentItem();
- final Inventory inv = e.getInventory();
- final int solt = e.getSlot();
- try {
- if (MarkUtil.hasMark(ci)) {
- inv.setItem(solt, new ItemStack(Material.AIR));
- Bukkit.broadcastMessage("§6[§b快捷商店§6] §4警告 " + p.getDisplayName() + " §c非法获取快捷商店悬浮物品 已清理...");
- }
- } catch (final Exception ex) {
- }
- }
-
@EventHandler
public void onJoin(final PlayerJoinEvent e) {
// Notify the player any messages they were sent
diff --git a/src/main/java/org/maxgamer/QuickShop/Listeners/ProtectListener.java b/src/main/java/org/maxgamer/QuickShop/Listeners/ProtectListener.java
index 8647acb..f771b4f 100644
--- a/src/main/java/org/maxgamer/QuickShop/Listeners/ProtectListener.java
+++ b/src/main/java/org/maxgamer/QuickShop/Listeners/ProtectListener.java
@@ -1,28 +1,81 @@
package org.maxgamer.QuickShop.Listeners;
+import org.bukkit.Bukkit;
+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.event.inventory.InventoryMoveItemEvent;
+import org.bukkit.event.inventory.InventoryPickupItemEvent;
+import org.bukkit.event.player.PlayerItemHeldEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
+import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
+import org.maxgamer.QuickShop.QuickShop;
import org.maxgamer.QuickShop.Util.MarkUtil;
-public class ProtectListener {
+public class ProtectListener implements Listener {
+
+ private final QuickShop plugin;
+
+ public ProtectListener(final QuickShop plugin) {
+ this.plugin = plugin;
+ }
@EventHandler
public void onInvMove(final InventoryMoveItemEvent e) {
final ItemStack ci = e.getItem();
if (MarkUtil.hasMark(ci)) {
e.setCancelled(true);
+ final ItemStack[] items = e.getSource().getContents();
+ for (final ItemStack itemStack : items) {
+ if (MarkUtil.hasMark(itemStack)) {
+ itemStack.setType(Material.AIR);
+ }
+ }
+ e.getSource().setContents(items);
}
}
- // @EventHandler
- // public void onInvPickup(final InventoryPickupItemEvent e) {
- // final ItemStack ci = e.getItem().getItemStack();
- // if (MarkUtil.hasMark(ci)) {
- // e.setCancelled(true);
- // }
- // }
+ @EventHandler
+ public void onInvPickup(final InventoryPickupItemEvent e) {
+ if (!plugin.getConfigManager().isPreventHopper()) {
+ return;
+ }
+ final ItemStack ci = e.getItem().getItemStack();
+ if (MarkUtil.hasMark(ci)) {
+ e.setCancelled(true);
+ }
+ }
+
+ @EventHandler
+ public void onItemClick(final InventoryClickEvent e) {
+ final Player p = (Player) e.getWhoClicked();
+ final ItemStack ci = e.getCurrentItem();
+ final Inventory inv = e.getInventory();
+ final int solt = e.getSlot();
+ try {
+ if (MarkUtil.hasMark(ci)) {
+ inv.setItem(solt, new ItemStack(Material.AIR));
+ Bukkit.broadcastMessage("§6[§b快捷商店§6] §4警告 " + p.getDisplayName() + " §c非法 §d§l获取 " + ci.getItemMeta().getDisplayName() + " §a已清理...");
+ }
+ } catch (final Exception ex) {
+ }
+ }
+
+ @EventHandler
+ public void onPlayerHandlerItem(final PlayerItemHeldEvent e) {
+ final Player p = e.getPlayer();
+ final ItemStack[] cis = p.getInventory().getArmorContents();
+ for (final ItemStack itemStack : cis) {
+ if (MarkUtil.hasMark(itemStack)) {
+ Bukkit.broadcastMessage("§6[§b快捷商店§6] §4警告 " + p.getDisplayName() + " §c非法 §e§l穿戴 " + itemStack.getItemMeta().getDisplayName() + " §a已清理...");
+ itemStack.setType(Material.AIR);
+ }
+ }
+ p.getInventory().setArmorContents(cis);
+ }
@EventHandler
public void onPlayerPickup(final PlayerPickupItemEvent e) {
@@ -31,5 +84,4 @@ public class ProtectListener {
e.setCancelled(true);
}
}
-
}
diff --git a/src/main/java/org/maxgamer/QuickShop/QuickShop.java b/src/main/java/org/maxgamer/QuickShop/QuickShop.java
index 3b8d8be..cc7e3fb 100644
--- a/src/main/java/org/maxgamer/QuickShop/QuickShop.java
+++ b/src/main/java/org/maxgamer/QuickShop/QuickShop.java
@@ -20,6 +20,7 @@ import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitTask;
import org.maxgamer.QuickShop.Command.QS;
@@ -38,6 +39,7 @@ import org.maxgamer.QuickShop.Listeners.ChatListener;
import org.maxgamer.QuickShop.Listeners.ChunkListener;
import org.maxgamer.QuickShop.Listeners.LockListener;
import org.maxgamer.QuickShop.Listeners.PlayerListener;
+import org.maxgamer.QuickShop.Listeners.ProtectListener;
import org.maxgamer.QuickShop.Listeners.WorldListener;
import org.maxgamer.QuickShop.Shop.ContainerShop;
import org.maxgamer.QuickShop.Shop.Shop;
@@ -72,6 +74,7 @@ public class QuickShop extends JavaPlugin {
// Listeners (These don't)
private final BlockListener blockListener = new BlockListener(this);
private final PlayerListener playerListener = new PlayerListener(this);
+ private final ProtectListener protectListener = new ProtectListener(this);
private final ChunkListener chunkListener = new ChunkListener(this);
private final WorldListener worldListener = new WorldListener(this);
private BukkitTask itemWatcherTask;
@@ -316,9 +319,11 @@ public class QuickShop extends JavaPlugin {
MsgUtil.loadTransactionMessages();
MsgUtil.clean();
// Register events
- Bukkit.getServer().getPluginManager().registerEvents(blockListener, this);
- Bukkit.getServer().getPluginManager().registerEvents(playerListener, this);
- Bukkit.getServer().getPluginManager().registerEvents(worldListener, this);
+ final PluginManager pm = this.getServer().getPluginManager();
+ pm.registerEvents(blockListener, this);
+ pm.registerEvents(playerListener, this);
+ pm.registerEvents(worldListener, this);
+ pm.registerEvents(protectListener, this);
if (configManager.isDisplay()) {
Bukkit.getServer().getPluginManager().registerEvents(chunkListener, this);
// Display item handler thread
@@ -334,6 +339,7 @@ public class QuickShop extends JavaPlugin {
if (configManager.getFindDistance() > 100) {
getLogger().warning("商店查找半径过大 可能导致服务器Lag! 推荐使用低于 100 的配置!");
}
+ this.getLogger().info("载入完成! 版本: " + this.getDescription().getVersion() + " 重制 by 喵♂呜");
new VersionChecker(this);
try {
final Metrics metrics = new Metrics(this);
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 48138f1..1cced9e 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -1,7 +1,9 @@
-Version: 1.0
+Version: 1.1
#超级工具(OP可以用该工具在创造模式打破所有商店)
superitem: GOLD_AXE
+#阻止漏洞吸取商店物品(非特殊情况不要开启)
+preventhopper: false
#Tax amount (decimal) - Eg, P1 buys $50 worth of stuff from P2. Therefore, P1 loses $50, P2 gains $(1-0.05)*50, and tax-account gains $(0.05)*50.
tax: 0.05