Example usage for net.minecraftforge.event ForgeEventFactory onBucketUse

List of usage examples for net.minecraftforge.event ForgeEventFactory onBucketUse

Introduction

In this page you can find the example usage for net.minecraftforge.event ForgeEventFactory onBucketUse.

Prototype

@Nullable
    public static ActionResult<ItemStack> onBucketUse(@Nonnull PlayerEntity player, @Nonnull World world,
            @Nonnull ItemStack stack, @Nullable RayTraceResult target) 

Source Link

Usage

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);
            }
        }
    }
}