2022-12-27 10:59:46 -08:00
|
|
|
package net.minecraft.block;
|
|
|
|
|
|
|
|
import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom;
|
2023-01-11 20:06:59 -08:00
|
|
|
import net.minecraft.block.properties.IProperty;
|
2022-12-27 10:59:46 -08:00
|
|
|
import net.minecraft.block.properties.PropertyInteger;
|
|
|
|
import net.minecraft.block.state.BlockState;
|
|
|
|
import net.minecraft.block.state.IBlockState;
|
2023-01-11 20:06:59 -08:00
|
|
|
import net.minecraft.creativetab.CreativeTabs;
|
2022-12-27 10:59:46 -08:00
|
|
|
import net.minecraft.init.Blocks;
|
|
|
|
import net.minecraft.init.Items;
|
|
|
|
import net.minecraft.item.Item;
|
|
|
|
import net.minecraft.util.BlockPos;
|
|
|
|
import net.minecraft.util.MathHelper;
|
|
|
|
import net.minecraft.world.World;
|
|
|
|
|
|
|
|
/**+
|
|
|
|
* This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source code.
|
2023-01-14 07:56:36 -08:00
|
|
|
*
|
2022-12-27 10:59:46 -08:00
|
|
|
* Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!"
|
|
|
|
* Mod Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team
|
2023-01-14 07:56:36 -08:00
|
|
|
*
|
2023-01-11 20:06:59 -08:00
|
|
|
* EaglercraftX 1.8 patch files are (c) 2022-2023 LAX1DUDE. All Rights Reserved.
|
2023-01-14 07:56:36 -08:00
|
|
|
*
|
2022-12-27 10:59:46 -08:00
|
|
|
* WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
|
|
|
|
* NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
|
|
|
|
* TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
|
|
|
|
* SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
|
2023-01-14 07:56:36 -08:00
|
|
|
*
|
2022-12-27 10:59:46 -08:00
|
|
|
* NOT FOR COMMERCIAL OR MALICIOUS USE
|
2023-01-14 07:56:36 -08:00
|
|
|
*
|
|
|
|
* (please read the 'LICENSE' file this repo's root directory for more info)
|
|
|
|
*
|
2022-12-27 10:59:46 -08:00
|
|
|
*/
|
|
|
|
public class BlockCrops extends BlockBush implements IGrowable {
|
2023-01-14 07:56:36 -08:00
|
|
|
|
|
|
|
public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 7);
|
|
|
|
|
|
|
|
protected BlockCrops() {
|
|
|
|
this.setDefaultState(this.blockState.getBaseState().withProperty(AGE, Integer.valueOf(0)));
|
|
|
|
this.setTickRandomly(true);
|
|
|
|
float f = 0.5F;
|
|
|
|
this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, 0.25F, 0.5F + f);
|
|
|
|
this.setCreativeTab((CreativeTabs) null);
|
|
|
|
this.setHardness(0.0F);
|
|
|
|
this.setStepSound(soundTypeGrass);
|
|
|
|
this.disableStats();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**+
|
|
|
|
* is the block grass, dirt or farmland
|
|
|
|
*/
|
|
|
|
protected boolean canPlaceBlockOn(Block block) {
|
|
|
|
return block == Blocks.farmland;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) {
|
|
|
|
super.updateTick(world, blockpos, iblockstate, random);
|
|
|
|
if (world.getLightFromNeighbors(blockpos.up()) >= 9) {
|
|
|
|
int i = ((Integer) iblockstate.getValue(AGE)).intValue();
|
|
|
|
if (i < 7) {
|
|
|
|
float f = getGrowthChance(this, world, blockpos);
|
|
|
|
if (random.nextInt((int) (25.0F / f) + 1) == 0) {
|
|
|
|
world.setBlockState(blockpos, iblockstate.withProperty(AGE, Integer.valueOf(i + 1)), 2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void grow(World worldIn, BlockPos pos, IBlockState state) {
|
|
|
|
int i = ((Integer) state.getValue(AGE)).intValue() + MathHelper.getRandomIntegerInRange(worldIn.rand, 2, 5);
|
|
|
|
if (i > 7) {
|
|
|
|
i = 7;
|
|
|
|
}
|
|
|
|
|
|
|
|
worldIn.setBlockState(pos, state.withProperty(AGE, Integer.valueOf(i)), 2);
|
|
|
|
}
|
|
|
|
|
|
|
|
protected static float getGrowthChance(Block blockIn, World worldIn, BlockPos pos) {
|
|
|
|
float f = 1.0F;
|
|
|
|
BlockPos blockpos = pos.down();
|
|
|
|
|
|
|
|
for (int i = -1; i <= 1; ++i) {
|
|
|
|
for (int j = -1; j <= 1; ++j) {
|
|
|
|
float f1 = 0.0F;
|
|
|
|
IBlockState iblockstate = worldIn.getBlockState(blockpos.add(i, 0, j));
|
|
|
|
if (iblockstate.getBlock() == Blocks.farmland) {
|
|
|
|
f1 = 1.0F;
|
|
|
|
if (((Integer) iblockstate.getValue(BlockFarmland.MOISTURE)).intValue() > 0) {
|
|
|
|
f1 = 3.0F;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (i != 0 || j != 0) {
|
|
|
|
f1 /= 4.0F;
|
|
|
|
}
|
|
|
|
|
|
|
|
f += f1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
BlockPos blockpos1 = pos.north();
|
|
|
|
BlockPos blockpos2 = pos.south();
|
|
|
|
BlockPos blockpos3 = pos.west();
|
|
|
|
BlockPos blockpos4 = pos.east();
|
|
|
|
boolean flag = blockIn == worldIn.getBlockState(blockpos3).getBlock() || blockIn == worldIn.getBlockState(blockpos4).getBlock();
|
|
|
|
boolean flag1 = blockIn == worldIn.getBlockState(blockpos1).getBlock() || blockIn == worldIn.getBlockState(blockpos2).getBlock();
|
|
|
|
if (flag && flag1) {
|
|
|
|
f /= 2.0F;
|
|
|
|
} else {
|
|
|
|
boolean flag2 = blockIn == worldIn.getBlockState(blockpos3.north()).getBlock() || blockIn == worldIn.getBlockState(blockpos4.north()).getBlock() || blockIn == worldIn.getBlockState(blockpos4.south()).getBlock() || blockIn == worldIn.getBlockState(blockpos3.south()).getBlock();
|
|
|
|
if (flag2) {
|
|
|
|
f /= 2.0F;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return f;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean canBlockStay(World world, BlockPos blockpos, IBlockState var3) {
|
|
|
|
return (world.getLight(blockpos) >= 8 || world.canSeeSky(blockpos)) && this.canPlaceBlockOn(world.getBlockState(blockpos.down()).getBlock());
|
|
|
|
}
|
|
|
|
|
|
|
|
protected Item getSeed() {
|
|
|
|
return Items.wheat_seeds;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected Item getCrop() {
|
|
|
|
return Items.wheat;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**+
|
|
|
|
* Get the Item that this Block should drop when harvested.
|
|
|
|
*/
|
|
|
|
public Item getItemDropped(IBlockState iblockstate, EaglercraftRandom var2, int var3) {
|
|
|
|
return ((Integer) iblockstate.getValue(AGE)).intValue() == 7 ? this.getCrop() : this.getSeed();
|
|
|
|
}
|
|
|
|
|
|
|
|
public Item getItem(World var1, BlockPos var2) {
|
|
|
|
return this.getSeed();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**+
|
|
|
|
* Whether this IGrowable can grow
|
|
|
|
*/
|
|
|
|
public boolean canGrow(World var1, BlockPos var2, IBlockState iblockstate, boolean var4) {
|
|
|
|
return ((Integer) iblockstate.getValue(AGE)).intValue() < 7;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean canUseBonemeal(World var1, EaglercraftRandom var2, BlockPos var3, IBlockState var4) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void grow(World world, EaglercraftRandom var2, BlockPos blockpos, IBlockState iblockstate) {
|
|
|
|
this.grow(world, blockpos, iblockstate);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**+
|
|
|
|
* Convert the given metadata into a BlockState for this Block
|
|
|
|
*/
|
|
|
|
public IBlockState getStateFromMeta(int i) {
|
|
|
|
return this.getDefaultState().withProperty(AGE, Integer.valueOf(i));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**+
|
|
|
|
* Convert the BlockState into the correct metadata value
|
|
|
|
*/
|
|
|
|
public int getMetaFromState(IBlockState iblockstate) {
|
|
|
|
return ((Integer) iblockstate.getValue(AGE)).intValue();
|
|
|
|
}
|
|
|
|
|
|
|
|
protected BlockState createBlockState() {
|
|
|
|
return new BlockState(this, new IProperty[] { AGE });
|
|
|
|
}
|
|
|
|
}
|