Files
AkarinMC/src/main/java/net/minecraft/server/BlockCrops.java
2019-03-04 18:16:32 +08:00

187 lines
6.8 KiB
Java

package net.minecraft.server;
import java.util.Random;
import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit
public class BlockCrops extends BlockPlant implements IBlockFragilePlantElement {
public static final BlockStateInteger AGE = BlockProperties.W;
private static final VoxelShape[] a = new VoxelShape[] { Block.a(0.0D, 0.0D, 0.0D, 16.0D, 2.0D, 16.0D), Block.a(0.0D, 0.0D, 0.0D, 16.0D, 4.0D, 16.0D), Block.a(0.0D, 0.0D, 0.0D, 16.0D, 6.0D, 16.0D), Block.a(0.0D, 0.0D, 0.0D, 16.0D, 8.0D, 16.0D), Block.a(0.0D, 0.0D, 0.0D, 16.0D, 10.0D, 16.0D), Block.a(0.0D, 0.0D, 0.0D, 16.0D, 12.0D, 16.0D), Block.a(0.0D, 0.0D, 0.0D, 16.0D, 14.0D, 16.0D), Block.a(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D)};
protected BlockCrops(Block.Info block_info) {
super(block_info);
this.v((IBlockData) ((IBlockData) this.blockStateList.getBlockData()).set(this.d(), 0));
}
public VoxelShape a(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) {
return BlockCrops.a[(Integer) iblockdata.get(this.d())];
}
protected boolean b(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) {
return iblockdata.getBlock() == Blocks.FARMLAND;
}
public BlockStateInteger d() {
return BlockCrops.AGE;
}
public int e() {
return 7;
}
protected int k(IBlockData iblockdata) {
return (Integer) iblockdata.get(this.d());
}
public IBlockData setAge(int i) {
return (IBlockData) this.getBlockData().set(this.d(), i);
}
public boolean w(IBlockData iblockdata) {
return (Integer) iblockdata.get(this.d()) >= this.e();
}
public void a(IBlockData iblockdata, World world, BlockPosition blockposition, Random random) {
super.a(iblockdata, world, blockposition, random);
if (world.isLightLevel(blockposition.up(), 9)) { // Paper
int i = this.k(iblockdata);
if (i < this.e()) {
float f = a((Block) this, (IBlockAccess) world, blockposition);
// Spigot start
int modifier;
if (this == Blocks.BEETROOTS) {
modifier = world.spigotConfig.beetrootModifier;
} else if (this == Blocks.CARROTS) {
modifier = world.spigotConfig.carrotModifier;
} else if (this == Blocks.POTATOES) {
modifier = world.spigotConfig.potatoModifier;
} else {
modifier = world.spigotConfig.wheatModifier;
}
if (random.nextInt((int) ((100.0F / modifier) * (25.0F / f)) + 1) == 0) {
// Spigot end
CraftEventFactory.handleBlockGrowEvent(world, blockposition, this.setAge(i + 1), 2); // CraftBukkit
}
}
}
}
public void a(World world, BlockPosition blockposition, IBlockData iblockdata) {
int i = this.k(iblockdata) + this.a(world);
int j = this.e();
if (i > j) {
i = j;
}
CraftEventFactory.handleBlockGrowEvent(world, blockposition, this.setAge(i), 2); // CraftBukkit
}
protected int a(World world) {
return MathHelper.nextInt(world.random, 2, 5);
}
protected static float a(Block block, IBlockAccess iblockaccess, 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 = iblockaccess.getType(blockposition1.a(i, 0, j));
if (iblockdata.getBlock() == Blocks.FARMLAND) {
f1 = 1.0F;
if ((Integer) iblockdata.get(BlockSoil.MOISTURE) > 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 == iblockaccess.getType(blockposition4).getBlock() || block == iblockaccess.getType(blockposition5).getBlock();
boolean flag1 = block == iblockaccess.getType(blockposition2).getBlock() || block == iblockaccess.getType(blockposition3).getBlock();
if (flag && flag1) {
f /= 2.0F;
} else {
boolean flag2 = block == iblockaccess.getType(blockposition4.north()).getBlock() || block == iblockaccess.getType(blockposition5.north()).getBlock() || block == iblockaccess.getType(blockposition5.south()).getBlock() || block == iblockaccess.getType(blockposition4.south()).getBlock();
if (flag2) {
f /= 2.0F;
}
}
return f;
}
public boolean canPlace(IBlockData iblockdata, IWorldReader iworldreader, BlockPosition blockposition) {
return (iworldreader.getLightLevel(blockposition, 0) >= 8 || iworldreader.e(blockposition)) && super.canPlace(iblockdata, iworldreader, blockposition);
}
protected IMaterial f() {
return Items.WHEAT_SEEDS;
}
protected IMaterial g() {
return Items.WHEAT;
}
public void dropNaturally(IBlockData iblockdata, World world, BlockPosition blockposition, float f, int i) {
super.dropNaturally(iblockdata, world, blockposition, f, 0);
if (!world.isClientSide) {
int j = this.k(iblockdata);
if (j >= this.e()) {
int k = 3 + i;
for (int l = 0; l < k; ++l) {
if (world.random.nextInt(2 * this.e()) <= j) {
a(world, blockposition, new ItemStack(this.f()));
}
}
}
}
}
public IMaterial getDropType(IBlockData iblockdata, World world, BlockPosition blockposition, int i) {
return this.w(iblockdata) ? this.g() : this.f();
}
public ItemStack a(IBlockAccess iblockaccess, BlockPosition blockposition, IBlockData iblockdata) {
return new ItemStack(this.f());
}
public boolean a(IBlockAccess iblockaccess, BlockPosition blockposition, IBlockData iblockdata, boolean flag) {
return !this.w(iblockdata);
}
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.a(world, blockposition, iblockdata);
}
protected void a(BlockStateList.a<Block, IBlockData> blockstatelist_a) {
blockstatelist_a.a(BlockCrops.AGE);
}
}