@EventHandler public void onPlayerInteractEvent(PlayerInteractEvent event) { if (!isEnabled()) return; try { if (event.hasBlock() && event.getClickedBlock().getType() == Material.SIGN) return; if (event.hasItem() && event.useItemInHand() != Event.Result.DENY) { ForgePermittor.log( "ItemType: " + getValidator().CheckItem(event.getItem()).toString(), true); if (!getProtectionManager() .CanUseItem( event.getPlayer(), event.getPlayer().getLocation(), getValidator().CheckItem(event.getItem()))) { event.setUseItemInHand(Event.Result.DENY); event.setUseInteractedBlock(Event.Result.DENY); return; } } if (event.hasBlock() && event.useInteractedBlock() != Event.Result.DENY) { ForgePermittor.log( "BlockType: " + getValidator().CheckBlock(event.getClickedBlock()).toString(), true); if (!getProtectionManager() .CanUseBlock( event.getPlayer(), event.getClickedBlock(), getValidator().CheckBlock(event.getClickedBlock()))) { event.setUseInteractedBlock(Event.Result.DENY); } } } catch (Exception e) { e.printStackTrace(); } }
@EventHandler public void onBlockPlaceEvent(BlockPlaceEvent event) { if (!isEnabled()) return; if (event.isCancelled()) return; try { BlockType type = BlockType.Unknown; Player player = event.getPlayer(); Block block = event.getBlock(); if (event.getBlock().getTypeId() == 0) { ForgePermittor.log("tile: " + getValidator().CheckItem(event.getItemInHand()), true); if (getValidator().CheckItem(event.getItemInHand()) == ItemType.Container) type = BlockType.Container; } else { ForgePermittor.log("tile: " + getValidator().CheckBlock(event.getBlock()), true); type = getValidator().CheckBlock(event.getBlock()); } if (type == BlockType.Container) { if (CheckBlockPlaceforContainer(player, block.getRelative(BlockFace.NORTH)) || CheckBlockPlaceforContainer(player, block.getRelative(BlockFace.SOUTH)) || CheckBlockPlaceforContainer(player, block.getRelative(BlockFace.WEST)) || CheckBlockPlaceforContainer(player, block.getRelative(BlockFace.EAST))) { event.setCancelled(true); } } } catch (Exception e) { ForgePermittor.log(e.toString(), true); } }
public ItemType CheckItem(ItemStack stack) throws InvocationTargetException, IllegalAccessException { int ItemID = stack.getTypeId(); byte meta = stack.getData().getData(); Object item = nmsResolver.getItemList().get(ItemID); ForgePermittor.log(item.toString(), true); if (item != null) { /* if (this.getInformationManager().HasConnectableInferface(item)) return ItemType.Connectable;*/ if (this.getInformationManager().HasItemBlockContainerInterface(item)) return ItemType.Container; if (this.getInformationManager().HasFoodInterface(item)) return ItemType.Food; if (this.getInformationManager().HasSwordInterface(item)) return ItemType.Weapon; if (this.getInformationManager().HasItemBlockInterface(item)) return CheckItemBlock(item, ItemID, meta); if (this.getInformationManager().HasItemInterface(item)) { if (nmsResolver .getItemStackHandler() .HasTagCompound(nmsResolver.getCraftItemStackHandler().asNMSCopy(stack))) return ItemType.AdvItem; return ItemType.Item; } } return ItemType.Unknown; }
private boolean CheckBlockPlaceforContainer(Player player, Block block) { try { if (block.getTypeId() != 0 && getValidator().CheckBlock(block) == BlockType.Container) if (!getProtectionManager().CanBreakBlock(player, block)) return true; } catch (Exception e) { ForgePermittor.log(Util.stackTraceToString(e), true); } return false; }
public BlockType CheckBlock(Block block) throws InvocationTargetException, IllegalAccessException { if (block.getTypeId() < 4096 && block.getTypeId() != 0) { Object object = nmsResolver.getBlockList().get(block.getTypeId()); ForgePermittor.log(object.getClass().toString(), true); // todo Test if this doesn't break something if ( /*this.getInformationManager().HasContainerInterface(object) || */ nmsResolver .getCraftWorldHandler() .HasTileEntity(block)) if (this.getInformationManager() .HasTradeBlockInterface(nmsResolver.getCraftWorldHandler().getTileEntityFrom(block))) return BlockType.Trade; else return BlockType.Container; // CheckConnectable(block); if (this.getInformationManager().HasBlockInterface(object)) return BlockType.Block; } return BlockType.Unknown; }