Newer
Older
void-pack-super-server / work / decompile-ee3ecae0 / net / minecraft / server / ItemBoneMeal.java
package net.minecraft.server;

import javax.annotation.Nullable;

public class ItemBoneMeal extends Item {

    public ItemBoneMeal(Item.Info item_info) {
        super(item_info);
    }

    @Override
    public EnumInteractionResult a(ItemActionContext itemactioncontext) {
        World world = itemactioncontext.getWorld();
        BlockPosition blockposition = itemactioncontext.getClickPosition();
        BlockPosition blockposition1 = blockposition.shift(itemactioncontext.getClickedFace());

        if (a(itemactioncontext.getItemStack(), world, blockposition)) {
            if (!world.isClientSide) {
                world.triggerEffect(2005, blockposition, 0);
            }

            return EnumInteractionResult.SUCCESS;
        } else {
            IBlockData iblockdata = world.getType(blockposition);
            boolean flag = iblockdata.d(world, blockposition, itemactioncontext.getClickedFace());

            if (flag && a(itemactioncontext.getItemStack(), world, blockposition1, itemactioncontext.getClickedFace())) {
                if (!world.isClientSide) {
                    world.triggerEffect(2005, blockposition1, 0);
                }

                return EnumInteractionResult.SUCCESS;
            } else {
                return EnumInteractionResult.PASS;
            }
        }
    }

    public static boolean a(ItemStack itemstack, World world, BlockPosition blockposition) {
        IBlockData iblockdata = world.getType(blockposition);

        if (iblockdata.getBlock() instanceof IBlockFragilePlantElement) {
            IBlockFragilePlantElement iblockfragileplantelement = (IBlockFragilePlantElement) iblockdata.getBlock();

            if (iblockfragileplantelement.a(world, blockposition, iblockdata, world.isClientSide)) {
                if (world instanceof WorldServer) {
                    if (iblockfragileplantelement.a(world, world.random, blockposition, iblockdata)) {
                        iblockfragileplantelement.a((WorldServer) world, world.random, blockposition, iblockdata);
                    }

                    itemstack.subtract(1);
                }

                return true;
            }
        }

        return false;
    }

    public static boolean a(ItemStack itemstack, World world, BlockPosition blockposition, @Nullable EnumDirection enumdirection) {
        if (world.getType(blockposition).getBlock() == Blocks.WATER && world.getFluid(blockposition).g() == 8) {
            if (!(world instanceof WorldServer)) {
                return true;
            } else {
                int i = 0;

                while (i < 128) {
                    BlockPosition blockposition1 = blockposition;
                    BiomeBase biomebase = world.getBiome(blockposition);
                    IBlockData iblockdata = Blocks.SEAGRASS.getBlockData();
                    int j = 0;

                    while (true) {
                        if (j < i / 16) {
                            blockposition1 = blockposition1.b(ItemBoneMeal.i.nextInt(3) - 1, (ItemBoneMeal.i.nextInt(3) - 1) * ItemBoneMeal.i.nextInt(3) / 2, ItemBoneMeal.i.nextInt(3) - 1);
                            biomebase = world.getBiome(blockposition1);
                            if (!world.getType(blockposition1).p(world, blockposition1)) {
                                ++j;
                                continue;
                            }
                        } else {
                            if (biomebase == Biomes.WARM_OCEAN || biomebase == Biomes.DEEP_WARM_OCEAN) {
                                if (i == 0 && enumdirection != null && enumdirection.m().c()) {
                                    iblockdata = (IBlockData) ((Block) TagsBlock.WALL_CORALS.a(world.random)).getBlockData().set(BlockCoralFanWallAbstract.a, enumdirection);
                                } else if (ItemBoneMeal.i.nextInt(4) == 0) {
                                    iblockdata = ((Block) TagsBlock.UNDERWATER_BONEMEALS.a(ItemBoneMeal.i)).getBlockData();
                                }
                            }

                            if (iblockdata.getBlock().a(TagsBlock.WALL_CORALS)) {
                                for (j = 0; !iblockdata.canPlace(world, blockposition1) && j < 4; ++j) {
                                    iblockdata = (IBlockData) iblockdata.set(BlockCoralFanWallAbstract.a, EnumDirection.EnumDirectionLimit.HORIZONTAL.a(ItemBoneMeal.i));
                                }
                            }

                            if (iblockdata.canPlace(world, blockposition1)) {
                                IBlockData iblockdata1 = world.getType(blockposition1);

                                if (iblockdata1.getBlock() == Blocks.WATER && world.getFluid(blockposition1).g() == 8) {
                                    world.setTypeAndData(blockposition1, iblockdata, 3);
                                } else if (iblockdata1.getBlock() == Blocks.SEAGRASS && ItemBoneMeal.i.nextInt(10) == 0) {
                                    ((IBlockFragilePlantElement) Blocks.SEAGRASS).a((WorldServer) world, ItemBoneMeal.i, blockposition1, iblockdata1);
                                }
                            }
                        }

                        ++i;
                        break;
                    }
                }

                itemstack.subtract(1);
                return true;
            }
        } else {
            return false;
        }
    }
}