mirror of
https://github.com/amalthea-mc/ShopChest.git
synced 2024-11-22 10:22:29 +00:00
Prevent players from fishing shop items
This commit is contained in:
parent
ee90215dd6
commit
ec62d3593f
@ -3,6 +3,7 @@ package de.epiceric.shopchest.listeners;
|
|||||||
|
|
||||||
import de.epiceric.shopchest.ShopChest;
|
import de.epiceric.shopchest.ShopChest;
|
||||||
import de.epiceric.shopchest.utils.ShopUtils;
|
import de.epiceric.shopchest.utils.ShopUtils;
|
||||||
|
import de.epiceric.shopchest.utils.Utils;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
@ -13,15 +14,19 @@ import org.bukkit.event.Listener;
|
|||||||
import org.bukkit.event.block.*;
|
import org.bukkit.event.block.*;
|
||||||
import org.bukkit.event.entity.ItemDespawnEvent;
|
import org.bukkit.event.entity.ItemDespawnEvent;
|
||||||
import org.bukkit.event.inventory.InventoryPickupItemEvent;
|
import org.bukkit.event.inventory.InventoryPickupItemEvent;
|
||||||
import org.bukkit.event.inventory.InventoryType;
|
|
||||||
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
||||||
|
import org.bukkit.event.player.PlayerFishEvent;
|
||||||
import org.bukkit.event.player.PlayerPickupItemEvent;
|
import org.bukkit.event.player.PlayerPickupItemEvent;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|
||||||
public class ItemProtectListener implements Listener {
|
public class ItemProtectListener implements Listener {
|
||||||
|
|
||||||
private ShopUtils shopUtils;
|
private ShopUtils shopUtils;
|
||||||
|
private ShopChest plugin;
|
||||||
|
|
||||||
public ItemProtectListener(ShopChest plugin) {
|
public ItemProtectListener(ShopChest plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
this.shopUtils = plugin.getShopUtils();
|
this.shopUtils = plugin.getShopUtils();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,4 +103,32 @@ public class ItemProtectListener implements Listener {
|
|||||||
if (shopUtils.isShop(b.getLocation())) e.setCancelled(true);
|
if (shopUtils.isShop(b.getLocation())) e.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
|
public void onPlayerFish(PlayerFishEvent e) {
|
||||||
|
if (e.getState() == PlayerFishEvent.State.CAUGHT_ENTITY) {
|
||||||
|
if (e.getCaught() instanceof Item) {
|
||||||
|
Item item = (Item) e.getCaught();
|
||||||
|
if (item.hasMetadata("shopItem")) {
|
||||||
|
plugin.debug(e.getPlayer().getName() + " tried to fish a shop item");
|
||||||
|
e.setCancelled(true);
|
||||||
|
|
||||||
|
// Use some reflection to get the EntityFishingHook class so the hook can be removed...
|
||||||
|
try {
|
||||||
|
Class<?> craftFishClass = Class.forName("org.bukkit.craftbukkit." + Utils.getServerVersion() + ".entity.CraftFish");
|
||||||
|
Object craftFish = craftFishClass.cast(e.getHook());
|
||||||
|
|
||||||
|
Class<?> entityFishingHookClass = Class.forName("net.minecraft.server." + Utils.getServerVersion() + ".EntityFishingHook");
|
||||||
|
Object entityFishingHook = craftFishClass.getDeclaredMethod("getHandle").invoke(craftFish);
|
||||||
|
|
||||||
|
entityFishingHookClass.getDeclaredMethod("die").invoke(entityFishingHook);
|
||||||
|
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException | ClassNotFoundException ex) {
|
||||||
|
plugin.debug("Failed to kill fishing hook with reflection");
|
||||||
|
plugin.debug(ex);
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user