All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.minecraft.server.BlockCrops Maven / Gradle / Ivy

package net.minecraft.server;

import org.bukkit.craftbukkit.event.CraftEventFactory;

import java.util.Random;

public class BlockCrops extends BlockPlant implements IBlockFragilePlantElement {

  public static final BlockStateInteger AGE = BlockStateInteger.of("age", 0, 7);

  protected BlockCrops() {
    this.j(this.blockStateList.getBlockData().set(BlockCrops.AGE, Integer.valueOf(0)));
    this.a(true);
    float f = 0.5F;

    this.a(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, 0.25F, 0.5F + f);
    this.a((CreativeModeTab) null);
    this.c(0.0F);
    this.a(BlockCrops.h);
    this.K();
  }

  protected static float a(Block block, World world, BlockPosition blockposition) {
    float f = 1.0F;
    BlockPosition blockposition1 = blockposition.down();

    for (int i = -1; i <= 1; ++i) {
      for (int j = -1; j <= 1; ++j) {
        float f1 = 0.0F;
        IBlockData iblockdata = world.getType(blockposition1.a(i, 0, j));

        if (iblockdata.getBlock() == Blocks.FARMLAND) {
          f1 = 1.0F;
          if (iblockdata.get(BlockSoil.MOISTURE).intValue() > 0) {
            f1 = 3.0F;
          }
        }

        if (i != 0 || j != 0) {
          f1 /= 4.0F;
        }

        f += f1;
      }
    }

    BlockPosition blockposition2 = blockposition.north();
    BlockPosition blockposition3 = blockposition.south();
    BlockPosition blockposition4 = blockposition.west();
    BlockPosition blockposition5 = blockposition.east();
    boolean flag = block == world.getType(blockposition4).getBlock() || block == world.getType(blockposition5).getBlock();
    boolean flag1 = block == world.getType(blockposition2).getBlock() || block == world.getType(blockposition3).getBlock();

    if (flag && flag1) {
      f /= 2.0F;
    } else {
      boolean flag2 = block == world.getType(blockposition4.north()).getBlock() || block == world.getType(blockposition5.north()).getBlock() || block == world.getType(blockposition5.south()).getBlock() || block == world.getType(blockposition4.south()).getBlock();

      if (flag2) {
        f /= 2.0F;
      }
    }

    return f;
  }

  protected boolean c(Block block) {
    return block == Blocks.FARMLAND;
  }

  public void b(World world, BlockPosition pos, IBlockData iblockdata, Random random) {
    super.b(world, pos, iblockdata, random);
    if (world.getLightLevel(pos.up()) >= 9) {
      int i = iblockdata.get(BlockCrops.AGE).intValue();

      if (i < 7) {
        float f = a(this, world, pos);

        if (random.nextInt((int) (world.growthOdds / world.spigotConfig.wheatModifier * (25.0F / f)) + 1) == 0) { // Spigot                    // CraftBukkit start
          IBlockData data = iblockdata.set(AGE, Integer.valueOf(i + 1));
          CraftEventFactory.handleBlockGrowEvent(world, pos.getX(), pos.getY(), pos.getZ(), this, toLegacyData(data));
          // CraftBukkit end
        }
      }
    }

  }

  public void g(World world, BlockPosition blockposition, IBlockData iblockdata) {
    int i = iblockdata.get(BlockCrops.AGE).intValue() + MathHelper.nextInt(world.random, 2, 5);

    if (i > 7) {
      i = 7;
    }

    // CraftBukkit start
    IBlockData data = iblockdata.set(AGE, Integer.valueOf(i));
    CraftEventFactory.handleBlockGrowEvent(world, blockposition.getX(), blockposition.getY(), blockposition.getZ(), this, toLegacyData(data));
    // CraftBukkit end
  }

  public boolean f(World world, BlockPosition blockposition, IBlockData iblockdata) {
    return (world.k(blockposition) >= 8 || world.i(blockposition)) && this.c(world.getType(blockposition.down()).getBlock());
  }

  protected Item l() {
    return Items.WHEAT_SEEDS;
  }

  protected Item n() {
    return Items.WHEAT;
  }

  public void dropNaturally(World world, BlockPosition blockposition, IBlockData iblockdata, float f, int i) {
    super.dropNaturally(world, blockposition, iblockdata, f, 0);
    if (!world.isClientSide) {
      int j = iblockdata.get(BlockCrops.AGE).intValue();

      if (j >= 7) {
        int k = 3 + i;

        for (int l = 0; l < k; ++l) {
          if (world.random.nextInt(15) <= j) {
            a(world, blockposition, new ItemStack(this.l(), 1, 0));
          }
        }
      }

    }
  }

  public Item getDropType(IBlockData iblockdata, Random random, int i) {
    return iblockdata.get(BlockCrops.AGE).intValue() == 7 ? this.n() : this.l();
  }

  public boolean a(World world, BlockPosition blockposition, IBlockData iblockdata, boolean flag) {
    return iblockdata.get(BlockCrops.AGE).intValue() < 7;
  }

  public boolean a(World world, Random random, BlockPosition blockposition, IBlockData iblockdata) {
    return true;
  }

  public void b(World world, Random random, BlockPosition blockposition, IBlockData iblockdata) {
    this.g(world, blockposition, iblockdata);
  }

  public IBlockData fromLegacyData(int i) {
    return this.getBlockData().set(BlockCrops.AGE, Integer.valueOf(i));
  }

  public int toLegacyData(IBlockData iblockdata) {
    return iblockdata.get(BlockCrops.AGE).intValue();
  }

  protected BlockStateList getStateList() {
    return new BlockStateList(this, BlockCrops.AGE);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy