List of usage examples for net.minecraftforge.event ForgeEventFactory onBucketUse
@Nullable
public static ActionResult<ItemStack> onBucketUse(@Nonnull PlayerEntity player, @Nonnull World world,
@Nonnull ItemStack stack, @Nullable RayTraceResult target)
From source file:de.ellpeck.actuallyadditions.mod.items.ItemWaterBowl.java
@SubscribeEvent public void onPlayerInteractEvent(PlayerInteractEvent.RightClickItem event) { if (event.getWorld() != null) { if (ConfigBoolValues.WATER_BOWL.isEnabled()) { if (StackUtil.isValid(event.getItemStack()) && event.getItemStack().getItem() == Items.BOWL) { RayTraceResult trace = WorldUtil.getNearestBlockWithDefaultReachDistance(event.getWorld(), event.getEntityPlayer(), true, false, false); ActionResult<ItemStack> result = ForgeEventFactory.onBucketUse(event.getEntityPlayer(), event.getWorld(), event.getItemStack(), trace); if (result == null && trace != null && trace.getBlockPos() != null) { if (event.getEntityPlayer().canPlayerEdit(trace.getBlockPos().offset(trace.sideHit), trace.sideHit, event.getItemStack())) { IBlockState state = event.getWorld().getBlockState(trace.getBlockPos()); Material material = state.getMaterial(); if (material == Material.WATER && state.getValue(BlockLiquid.LEVEL) == 0) { event.getEntityPlayer().playSound(SoundEvents.ITEM_BUCKET_FILL, 1.0F, 1.0F); if (!event.getWorld().isRemote) { event.getWorld().setBlockState(trace.getBlockPos(), Blocks.AIR.getDefaultState(), 11); ItemStack reduced = StackUtil.addStackSize(event.getItemStack(), -1); ItemStack bowl = new ItemStack(InitItems.itemWaterBowl); if (!StackUtil.isValid(reduced)) { event.getEntityPlayer().setHeldItem(event.getHand(), bowl); } else if (!event.getEntityPlayer().inventory .addItemStackToInventory(bowl.copy())) { EntityItem entityItem = new EntityItem(event.getWorld(), event.getEntityPlayer().posX, event.getEntityPlayer().posY, event.getEntityPlayer().posZ, bowl.copy()); entityItem.setPickupDelay(0); event.getWorld().spawnEntity(entityItem); }/*w ww . j av a 2 s .c o m*/ } } } } } } } }
From source file:de.ellpeck.actuallyadditions.mod.items.ItemWaterBowl.java
@Override public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, EnumHand hand) { ItemStack stack = player.getHeldItem(hand); RayTraceResult trace = WorldUtil.getNearestBlockWithDefaultReachDistance(world, player); ActionResult<ItemStack> result = ForgeEventFactory.onBucketUse(player, world, stack, trace); if (result != null) { return result; }//www.j av a 2 s . c o m if (trace == null) { return new ActionResult(EnumActionResult.PASS, stack); } else if (trace.typeOfHit != RayTraceResult.Type.BLOCK) { return new ActionResult(EnumActionResult.PASS, stack); } else { BlockPos pos = trace.getBlockPos(); if (!world.isBlockModifiable(player, pos)) { return new ActionResult(EnumActionResult.FAIL, stack); } else { BlockPos pos1 = world.getBlockState(pos).getBlock().isReplaceable(world, pos) && trace.sideHit == EnumFacing.UP ? pos : pos.offset(trace.sideHit); if (!player.canPlayerEdit(pos1, trace.sideHit, stack)) { return new ActionResult(EnumActionResult.FAIL, stack); } else if (this.tryPlaceContainedLiquid(player, world, pos1)) { return !player.capabilities.isCreativeMode ? new ActionResult(EnumActionResult.SUCCESS, new ItemStack(Items.BOWL)) : new ActionResult(EnumActionResult.SUCCESS, stack); } else { return new ActionResult(EnumActionResult.FAIL, stack); } } } }