From 3bcee64220b1f37d9f798d1f72793c9d0ca018c5 Mon Sep 17 00:00:00 2001 From: j502647092 Date: Wed, 7 Oct 2015 13:29:54 +0800 Subject: [PATCH] fix some bug and Release Version 1.3... Signed-off-by: j502647092 --- pom.xml | 2 +- .../QuickShop/Config/ConfigManager.java | 7 +- .../QuickShop/Listeners/PlayerListener.java | 18 ----- .../QuickShop/Listeners/ProtectListener.java | 70 ++++++++++++++++--- .../org/maxgamer/QuickShop/QuickShop.java | 12 +++- src/main/resources/config.yml | 4 +- 6 files changed, 80 insertions(+), 33 deletions(-) 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