Package forestry.farming.gadgets

Source Code of forestry.farming.gadgets.BlockMushroom

/*******************************************************************************
* Copyright (c) 2011-2014 SirSengir.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0.txt
*
* Various Contributors including, but not limited to:
* SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
******************************************************************************/
package forestry.farming.gadgets;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import forestry.core.IItemTyped;
import net.minecraft.block.Block;
import net.minecraft.block.BlockSapling;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.WorldGenerator;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

import forestry.core.config.Defaults;
import forestry.core.proxy.Proxies;
import forestry.farming.worldgen.WorldGenBigMushroom;

public class BlockMushroom extends BlockSapling implements IItemTyped {

  public enum MushroomType {
    BROWN, RED;
  }

  private final WorldGenerator[] generators;
  private final ItemStack[] drops;

  public BlockMushroom() {
    super();
    setHardness(0.0f);
    this.generators = new WorldGenerator[] { new WorldGenBigMushroom(Blocks.brown_mushroom_block), new WorldGenBigMushroom(Blocks.red_mushroom_block) };
    this.drops = new ItemStack[] { new ItemStack(Blocks.brown_mushroom), new ItemStack(Blocks.red_mushroom) };
    setCreativeTab(null);
    setTickRandomly(true);
  }

  @Override
  public boolean getTickRandomly() {
    return true;
  }

  // / DROPS
  @Override
  public ArrayList<ItemStack> getDrops(World world, int X, int Y, int Z, int metadata, int fortune) {
    ArrayList<ItemStack> ret = new ArrayList<ItemStack>();

    MushroomType type = getTypeFromMeta(metadata);

    ret.add(drops[type.ordinal()]);

    return ret;
  }

  @Override
  protected boolean canPlaceBlockOn(Block block) {
    return block == Blocks.mycelium;
  }

  @Override
  public void updateTick(World world, int i, int j, int k, Random random) {

    if (!Proxies.common.isSimulating(world))
      return;

    int meta = world.getBlockMetadata(i, j, k);
    MushroomType type = getTypeFromMeta(meta);
    int maturity = meta >> 2;

    tickGermling(world, i, j, k, random, type, maturity);
  }

  private void tickGermling(World world, int i, int j, int k, Random random, MushroomType type, int maturity) {

    int lightvalue = world.getBlockLightValue(i, j + 1, k);

    if (random.nextInt(2) != 0)
      return;

    if (maturity != 3) {
      maturity = 3;
      int matX = maturity << 2;
      int meta = (matX | type.ordinal());
      world.setBlockMetadataWithNotify(i, j, k, meta, Defaults.FLAG_BLOCK_SYNCH);
    } else if (lightvalue <= 7)
      func_149878_d(world, i, j, k, random);
  }

  @Override
  public void func_149878_d(World world, int i, int j, int k, Random random) {
    int type = world.getBlockMetadata(i, j, k) & 0x03;

    if(type >= generators.length)
      return;

    world.setBlockToAir(i, j, k);
    if (!generators[type].generate(world, random, i, j, k))
      world.setBlock(i, j, k, this, type, 0);
  }

  @Override
  public MushroomType getTypeFromMeta(int meta) {
    meta %= 3;
    if (meta >= MushroomType.values().length)
      return null;
    return MushroomType.values()[meta];
  }

  /* ICONS */
  @SuppressWarnings({"unchecked", "rawtypes"})
  @SideOnly(Side.CLIENT)
  @Override
  public void getSubBlocks(Item item, CreativeTabs tab, List list) {
    list.add(new ItemStack(item, 1, 0));
    list.add(new ItemStack(item, 1, 1));
  }

  @SideOnly(Side.CLIENT)
  @Override
  public void registerBlockIcons(IIconRegister register) {
  }

  @SideOnly(Side.CLIENT)
  @Override
  public IIcon getIcon(int side, int meta) {
    MushroomType type = getTypeFromMeta(meta);

    if (type == MushroomType.BROWN)
      return Blocks.brown_mushroom.getIcon(side, meta);
    else if (type == MushroomType.RED)
      return Blocks.red_mushroom.getIcon(side, meta);
    else
      return null;
  }

}
TOP

Related Classes of forestry.farming.gadgets.BlockMushroom

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.