Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.mysticalcrops.blocks;
- import com.mysticalcrops.MysticalCrops;
- import com.mysticalcrops.items.CropItems;
- import net.minecraft.block.Block;
- import net.minecraft.block.BlockCrops;
- import net.minecraft.block.IGrowable;
- import net.minecraft.block.properties.PropertyInteger;
- import net.minecraft.block.state.BlockStateContainer;
- import net.minecraft.block.state.IBlockState;
- import net.minecraft.creativetab.CreativeTabs;
- import net.minecraft.entity.item.EntityItem;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.init.Blocks;
- import net.minecraft.item.Item;
- import net.minecraft.item.ItemStack;
- import net.minecraft.util.EnumFacing;
- import net.minecraft.util.EnumHand;
- import net.minecraft.util.math.BlockPos;
- import net.minecraft.util.math.MathHelper;
- import net.minecraft.world.IBlockAccess;
- import net.minecraft.world.World;
- import net.minecraftforge.common.EnumPlantType;
- import net.minecraftforge.common.IPlantable;
- import net.minecraftforge.fml.common.FMLLog;
- import java.util.List;
- import java.util.Random;
- /**
- * Created by Sword_Korn on 6/13/2016.
- */
- public class MysticalCropBlock extends BlockCrops implements IGrowable, IPlantable {
- public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 3);
- public final String regName;
- public MysticalCropBlock(String regName) {
- super();
- this.regName = regName;
- this.setDefaultState(blockState.getBaseState().withProperty(getAge(), 0));
- this.setCreativeTab(MysticalCrops.cropsTab);
- }
- public boolean isSuitableForPlant(Block soil) {
- return soil == Blocks.FARMLAND;
- }
- protected PropertyInteger getAge() {
- return AGE;
- }
- public int getHarvestReadyAge() {
- return 3;
- }
- public boolean isHarvestReady(IBlockState state) {
- return state.getValue(getAge()) >= getHarvestReadyAge();
- }
- protected Item getSeeds() {
- final Item seeds = CropItems.seedsMap.get(this);
- if(seeds == null) {
- FMLLog.bigWarning("No seeds detected!");
- return new Item();
- }
- return seeds;
- }
- @Override
- public ItemStack getItem(World world, BlockPos pos, IBlockState state) {
- return new ItemStack(getSeeds());
- }
- @Override
- public boolean canGrow(World worl, BlockPos pos, IBlockState state, boolean isClient) {
- return !isHarvestReady(state);
- }
- protected Item getHarvestedItem() {
- final Item harvestedItem = CropItems.havestedItemMap.get(this);
- if(harvestedItem == null) {
- FMLLog.bigWarning("No drop registered!");
- return new Item();
- }
- return harvestedItem;
- }
- @Override
- public IBlockState getStateFromMeta(int meta) {
- return getDefaultState().withProperty(getAge(), meta);
- }
- @Override
- public void updateTick(World world, BlockPos pos, IBlockState state, Random rnd) {
- this.checkAndDropBlock(world, pos, state);
- if(world.getLightFromNeighbors(pos.up()) >= 9) {
- int i = this.getMetaFromState(state);
- if(i < this.getHarvestReadyAge()) {
- float f = getGrowthChance(this, world, pos);
- if(rnd.nextInt((int) (25.0F / f) + 1) == 0) {
- world.setBlockState(pos, this.getStateFromMeta(i + 1), 2);
- }
- }
- }
- }
- @Override
- public Item getItemDropped(IBlockState state, Random rnd, int fortune) {
- if(!isHarvestReady(state)) {
- return getSeeds();
- }else{
- return getHarvestedItem();
- }
- }
- public int getMetaFromState(IBlockState state) {
- return state.getValue(getAge());
- }
- @Override
- public boolean canPlaceBlockAt(World world, BlockPos pos) {
- Block soilBlock = world.getBlockState(pos.down()).getBlock();
- return this.isSuitableForPlant(soilBlock);
- }
- @Override
- public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand,
- ItemStack stack, EnumFacing side, float hitX, float hitY, float hitZ) {
- if(isHarvestReady(state)) {
- if(world.isRemote) {
- return true;
- }
- final ItemStack savedStack = new ItemStack(getHarvestedItem());
- world.setBlockState(pos, state.withProperty(AGE, 0), 3);
- final EntityItem entItem = new EntityItem(world, player.posX, player.posY - 1D, player.posZ, savedStack);
- world.spawnEntityInWorld(entItem);
- entItem.onCollideWithPlayer(player);
- return true;
- }
- return false;
- }
- @SuppressWarnings({"unchecked", "rawtypes"})
- @Override
- public void getSubBlocks(Item item, CreativeTabs tab, List list) {
- list.add(new ItemStack(item, 1, 0));
- list.add(new ItemStack(item, 1, 3));
- }
- @Override
- public EnumPlantType getPlantType(IBlockAccess world, BlockPos pos) {
- return EnumPlantType.Crop;
- }
- @Override
- protected BlockStateContainer createBlockState() {
- return new BlockStateContainer(this, AGE);
- }
- protected int getRandomInt(World world) {
- return MathHelper.getRandomIntegerInRange(world.rand, 1, 3);
- }
- @Override
- public void grow(World world, BlockPos pos, IBlockState state) {
- int newGrowth = getMetaFromState(state) + getRandomInt(world);
- int maxGrowth = getHarvestReadyAge();
- if(newGrowth > maxGrowth) {
- newGrowth = maxGrowth;
- }
- world.setBlockState(pos, getStateFromMeta(newGrowth), 2);
- }
- @Override
- public void grow(World world, Random rnd, BlockPos pos, IBlockState state) {
- grow(world, pos, state);
- }
- @Override
- public int hashCode() {
- return regName.hashCode();
- }
- @Override
- public boolean equals(Object obj) {
- return (obj instanceof MysticalCropBlock && regName.equals(((MysticalCropBlock) obj).regName));
- }
- @Override
- public List<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
- List<ItemStack> ret = new java.util.ArrayList<ItemStack>();
- Random rnd = world instanceof World ? ((World) world).rand : new Random();
- int age = getMetaFromState(state);
- int count = quantityDropped(state, fortune, rnd);
- for(int i = 0; i < count; i++) {
- Item item = this.getItemDropped(state, rnd, fortune);
- if(item != null) {
- ret.add(new ItemStack(item, 1, this.damageDropped(state)));
- }
- }
- if(age >= getHarvestReadyAge()) {
- for(int i = 0; i < 3 + fortune; ++i) {
- if(rnd.nextInt(2 * getHarvestReadyAge()) <= age) {
- ret.add(new ItemStack(this.getSeed(), 1, 0));
- }
- }
- }
- return ret;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment