@SubscribeEvent(priority = EventPriority.LOWEST) // allow others to cancel this public static void onClick(@Nonnull PlayerInteractEvent.LeftClickBlock event) { final World world = event.getWorld(); if (world != null && !world.isRemote && event.getUseBlock() != Result.DENY) { final EntityPlayer player = event.getEntityPlayer(); if (player != null && !player.isSpectator() && !world.isAirBlock(event.getPos())) { final EnumFacing face = NullHelper.first(event.getFace(), EnumFacing.DOWN); final BlockPos pos = event.getPos().offset(face); if (world.getBlockState(pos).getBlock() instanceof BlockColdFire && player.canPlayerEdit(pos, face, Prep.getEmpty())) { world.playEvent(null, 1009, pos, 0); world.setBlockToAir(pos); } } } }
event.setCanceled(true); }else { ((PlayerInteractEvent.LeftClickBlock) event).setUseBlock(copy.getUseBlock()); ((PlayerInteractEvent.LeftClickBlock) event).setUseItem(copy.getUseItem());
/** * Make a complete copy of the argument. * @param event to copy over * @return the copy */ private static PlayerInteractEvent copy(PlayerInteractEvent event){ PlayerInteractEvent copy = null; if(event instanceof PlayerInteractEvent.RightClickEmpty) copy = new PlayerInteractEvent.RightClickEmpty(event.getEntityPlayer(), event.getHand()); else if(event instanceof PlayerInteractEvent.LeftClickBlock) { copy = new PlayerInteractEvent.LeftClickBlock(event.getEntityPlayer(), event.getPos(), event.getFace(), ((PlayerInteractEvent.LeftClickBlock) event).getHitVec()); ((PlayerInteractEvent.LeftClickBlock)copy).setUseItem(((PlayerInteractEvent.LeftClickBlock) event).getUseItem()); ((PlayerInteractEvent.LeftClickBlock)copy).setUseBlock(((PlayerInteractEvent.LeftClickBlock) event).getUseBlock()); } else if(event instanceof PlayerInteractEvent.EntityInteractSpecific) copy = new PlayerInteractEvent.EntityInteractSpecific(event.getEntityPlayer(), event.getHand(), ((PlayerInteractEvent.EntityInteractSpecific) event).getTarget(), ((PlayerInteractEvent.EntityInteractSpecific) event).getLocalPos()); else if(event instanceof PlayerInteractEvent.EntityInteract) copy = new PlayerInteractEvent.EntityInteract(event.getEntityPlayer(), event.getHand(), ((PlayerInteractEvent.EntityInteract) event).getTarget()); else if(event instanceof PlayerInteractEvent.RightClickBlock) { copy = new PlayerInteractEvent.RightClickBlock(event.getEntityPlayer(), event.getHand(), event.getPos(), event.getFace(), ((PlayerInteractEvent.RightClickBlock) event).getHitVec()); ((PlayerInteractEvent.RightClickBlock)copy).setUseItem(((PlayerInteractEvent.RightClickBlock) event).getUseItem()); ((PlayerInteractEvent.RightClickBlock)copy).setUseBlock(((PlayerInteractEvent.RightClickBlock) event).getUseBlock()); } else if(event instanceof PlayerInteractEvent.RightClickItem) copy = new PlayerInteractEvent.RightClickItem(event.getEntityPlayer(),event.getHand()); if(event.isCanceled()){ copy.setCanceled(true); } return copy; }
@SubscribeEvent public void playerInteractEvent(PlayerInteractEvent.LeftClickBlock event) { // only show event if either the test block or the test item is involved if (event.getPos() != null && event.getWorld().getBlockState(event.getPos()) == StartupCommon.blockToolTest) { } else { ItemStack heldItemStack = (event.getEntityPlayer() == null) ? ItemStack.EMPTY : //EMPTY_ITEM event.getEntityPlayer().getItemStackFromSlot(EntityEquipmentSlot.MAINHAND); Item heldItem = heldItemStack.getItem(); if (heldItem != StartupCommon.itemToolsTest) { return; } } StartupCommon.methodCallLogger.enterMethod("Event.PlayerInteractEvent.LeftClickBlock", "pos=" + event.getPos() + ", hitVec=" + event.getHitVec() +", face=" + event.getFace() ); // your code here StartupCommon.methodCallLogger.exitMethod("Event.PlayerInteractEvent.LeftClickBlock", "cancelled=" + event.isCanceled() + "; useItem=" + event.getUseItem() + "; useBlock=" + event.getUseBlock()); }