package joshie.harvest.crops.block; import joshie.harvest.api.crops.Crop; import joshie.harvest.core.base.block.BlockHFEnum; import joshie.harvest.crops.block.BlockFruit.Fruit; import joshie.harvest.crops.tile.TileFruit; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.IStringSerializable; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; import java.util.Locale; import static joshie.harvest.core.lib.HFModInfo.MODID; public class BlockFruit extends BlockHFEnum<BlockFruit, Fruit> { @SuppressWarnings("ConstantConditions") public BlockFruit() { super(Material.PLANTS, Fruit.class); setSoundType(SoundType.PLANT); setCreativeTab(null); } public enum Fruit implements IStringSerializable { APPLE, BANANA, GRAPE, ORANGE, PEACH; private final ResourceLocation cropLocation; private Crop crop; Fruit() { this.cropLocation = new ResourceLocation(MODID, getName()); } public Crop getCrop() { if (crop != null) return crop; else { crop = Crop.REGISTRY.get(cropLocation); return crop; } } @Override public String getName() { return toString().toLowerCase(Locale.ENGLISH); } } @Override @SuppressWarnings("deprecation, unchecked") public AxisAlignedBB getCollisionBoundingBox(IBlockState state, @Nonnull World world, @Nonnull BlockPos pos) { return NULL_AABB; } @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, @Nullable ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { Fruit fruit = getEnumFromState(state); world.setBlockToAir(pos); spawnAsEntity(world, pos, fruit.getCrop().getCropStack(1)); return true; } @Override @Nonnull public List<ItemStack> getDrops(@Nonnull IBlockAccess world, @Nonnull BlockPos pos, @Nonnull IBlockState state, int fortune) { List<ItemStack> ret = new ArrayList<>(); Fruit fruit = getEnumFromState(state); ret.add(fruit.getCrop().getCropStack(1)); return ret; } @Override public boolean hasTileEntity(IBlockState state) { return true; } @Override @Nonnull public TileEntity createTileEntity(@Nonnull World world, @Nonnull IBlockState state) { return new TileFruit(); } }