package buildcraft.core.crops; import java.util.List; import net.minecraft.block.Block; import net.minecraft.block.BlockCrops; import net.minecraft.block.BlockDoublePlant; import net.minecraft.block.BlockMelon; import net.minecraft.block.BlockMushroom; import net.minecraft.block.BlockNetherWart; import net.minecraft.block.BlockTallGrass; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.util.ForgeDirection; import buildcraft.api.crops.ICropHandler; import buildcraft.core.lib.utils.BlockUtils; public class CropHandlerPlantable implements ICropHandler { @Override public boolean isSeed(ItemStack stack) { if (stack.getItem() instanceof IPlantable) { return true; } if (stack.getItem() instanceof ItemBlock) { Block block = ((ItemBlock) stack.getItem()).field_150939_a; if (block instanceof IPlantable && block != Blocks.reeds) { return true; } } return false; } @Override public boolean canSustainPlant(World world, ItemStack seed, int x, int y, int z) { if (seed.getItem() instanceof IPlantable) { return world.getBlock(x, y, z).canSustainPlant(world, x, y, z, ForgeDirection.UP, (IPlantable) seed.getItem()) && world.isAirBlock(x, y + 1, z); } else { Block block = world.getBlock(x, y, z); IPlantable plantable = (IPlantable) ((ItemBlock) seed.getItem()).field_150939_a; return block.canSustainPlant(world, x, y, z, ForgeDirection.UP, plantable) && block != ((ItemBlock) seed.getItem()).field_150939_a && world.isAirBlock(x, y + 1, z); } } @Override public boolean plantCrop(World world, EntityPlayer player, ItemStack seed, int x, int y, int z) { return BlockUtils.useItemOnBlock(world, player, seed, x, y, z, ForgeDirection.UP); } @Override public boolean isMature(IBlockAccess blockAccess, Block block, int meta, int x, int y, int z) { if (block == null) { return false; } else if (block instanceof BlockTallGrass || block instanceof BlockMelon || block instanceof BlockMushroom || block instanceof BlockDoublePlant || block == Blocks.pumpkin) { return true; } else if (block instanceof BlockCrops) { return meta == 7; } else if (block instanceof BlockNetherWart) { return meta == 3; } else if (block instanceof IPlantable) { if (y > 0 && blockAccess.getBlock(x, y - 1, z) == block) { return true; } } return false; } @Override public boolean harvestCrop(World world, int x, int y, int z, List<ItemStack> drops) { if (!world.isRemote) { Block block = world.getBlock(x, y, z); int meta = world.getBlockMetadata(x, y, z); if (BlockUtils.breakBlock((WorldServer) world, x, y, z, drops)) { world.playAuxSFXAtEntity(null, 2001, x, y, z, Block.getIdFromBlock(block) + (meta << 12)); return true; } } return false; } }