Package crazypants.enderio.material

Source Code of crazypants.enderio.material.BlockFusedQuartz

package crazypants.enderio.material;

import java.util.List;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.BlockEio;
import crazypants.enderio.EnderIO;
import crazypants.enderio.ModObject;
import crazypants.enderio.machine.painter.PainterUtil;
import crazypants.enderio.machine.painter.TileEntityPaintedBlock;

public class BlockFusedQuartz extends BlockEio {

  public static int renderId;

  public enum Type {

    FUSED_QUARTZ("fusedQuartz", "enderio:fusedQuartz", "enderio:fusedQuartzFrame", "enderio:fusedQuartzItem"),
    GLASS("fusedGlass", "enderio:fusedGlass", "enderio:fusedGlassFrame", "enderio:fusedGlassItem"),
    ENLIGHTENED_FUSED_QUARTZ("enlightenedFusedQuartz", "enderio:fusedQuartz", "enderio:fusedQuartzFrame", "enderio:fusedQuartzItem"),
    ENLIGHTENED_GLASS("enlightenedFusedGlass", "enderio:fusedGlass", "enderio:fusedGlassFrame", "enderio:fusedGlassItem");

    final String unlocalisedName;
    final String blockIcon;
    final String frameIcon;
    final String itemIcon;

    private Type(String unlocalisedName, String blockIcon, String frameIcon, String itemIcon) {
      this.unlocalisedName = unlocalisedName;
      this.frameIcon = frameIcon;
      this.blockIcon = blockIcon;
      this.itemIcon = itemIcon;
    }

  }

  public static BlockFusedQuartz create() {
    BlockFusedQuartz result = new BlockFusedQuartz();
    result.init();
    return result;
  }

  IIcon[] blockIcon;
  IIcon[] itemsIcons;
  IIcon[] frameIcons;

  private BlockFusedQuartz() {
    super(ModObject.blockFusedQuartz.unlocalisedName, TileEntityPaintedBlock.class, Material.glass);
    setStepSound(Block.soundTypeGlass);
  }

  @Override
  protected void init() {
    GameRegistry.registerBlock(this, ItemFusedQuartz.class, name);
    if(teClass != null) {
      GameRegistry.registerTileEntity(teClass, name + "TileEntity");
    }
  }

  @Override
  public float getExplosionResistance(Entity par1Entity, World world, int x, int y, int z, double explosionX, double explosionY, double explosionZ) {
    int meta = world.getBlockMetadata(x, y, z);
    meta = MathHelper.clamp_int(meta, 0, 1);
    if(meta == 0) {
      return 2000;
    } else {
      return super.getExplosionResistance(par1Entity);
    }
  }

  @Override
  public boolean renderAsNormalBlock() {
    return false;
  }

  @Override
  public boolean isOpaqueCube() {
    return false;
  }

  @Override
  public int getRenderType() {
    return renderId;
  }

  //TODO:1.7 this makes it go splat
  //  @Override
  //  @SideOnly(Side.CLIENT)
  //  public int getRenderBlockPass() {
  //    return 1;
  //  }
  //
  //  @Override
  //  public boolean canRenderInPass(int pass) {
  //    FusedQuartzRenderer.renderPass = pass;
  //    return true;
  //  }

  @Override
  public int getLightOpacity(IBlockAccess world, int x, int y, int z) {
    return 0;
  }

  @Override
  public int getLightValue(IBlockAccess world, int x, int y, int z) {
    Block block = world.getBlock(x, y, z);
    if(block != this) {
      return super.getLightValue(world, x, y, z);
    }
    int meta = world.getBlockMetadata(x, y, z);
    if(meta > 1) {
      return 15;
    }
    return super.getLightValue(world, x, y, z);
  }

  @Override
  public int damageDropped(int par1) {
    return par1;
  }

  @Override
  public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) {
    for (int j = 0; j < Type.values().length; ++j) {
      par3List.add(new ItemStack(par1, 1, j));
    }
  }

  @Override
  public boolean shouldSideBeRendered(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) {
    Block i1 = par1IBlockAccess.getBlock(par2, par3, par4);
    return i1 == this ? false : super.shouldSideBeRendered(par1IBlockAccess, par2, par3, par4, par5);
  }

  @Override
  public boolean isBlockSolid(IBlockAccess p_149747_1_, int p_149747_2_, int p_149747_3_, int p_149747_4_, int p_149747_5_) {
    return true;
  }

  @Override
  public boolean isSideSolid(IBlockAccess world, int x, int y, int z, ForgeDirection side) {   
    if(side == ForgeDirection.UP) { //stop drips
      return false
    }
    return true;   
  }
 
  @Override
  public boolean canPlaceTorchOnTop(World arg0, int arg1, int arg2, int arg3) {
    return true;
  }

  @Override
  public void registerBlockIcons(IIconRegister iIconRegister) {
    //This little oddity is so the standard rendering used for items and breaking effects
    //uses the item texture, while the custom renderer uses 'realBlockIcon' to render the 'non-frame' part of the block.
    Type[] ts = Type.values();
    blockIcon = new IIcon[ts.length];
    itemsIcons = new IIcon[ts.length];
    frameIcons = new IIcon[ts.length];

    for (int i = 0; i < ts.length; i++) {
      blockIcon[i] = iIconRegister.registerIcon(ts[i].blockIcon);
      itemsIcons[i] = iIconRegister.registerIcon(ts[i].itemIcon);
      frameIcons[i] = iIconRegister.registerIcon(ts[i].frameIcon);
    }
  }

  @Override
  @SideOnly(Side.CLIENT)
  public IIcon getIcon(int par1, int meta) {
    meta = MathHelper.clamp_int(meta, 0, Type.values().length - 1);
    return blockIcon[meta];
  }

  public IIcon getItemIcon(int meta) {
    meta = MathHelper.clamp_int(meta, 0, Type.values().length - 1);
    return itemsIcons[meta];
  }

  public IIcon getDefaultFrameIcon(int meta) {
    meta = MathHelper.clamp_int(meta, 0, Type.values().length - 1);
    return frameIcons[meta];
  }

  /**
   * Remove the tile entity too.
   */
  @Override
  public void breakBlock(World world, int x, int y, int z, Block par5, int par6) {

    if(!world.isRemote && world.getGameRules().getGameRuleBooleanValue("doTileDrops")) {
      TileEntity te = world.getTileEntity(x, y, z);

      if(te instanceof TileEntityPaintedBlock) {
        TileEntityPaintedBlock tef = (TileEntityPaintedBlock) te;

        ItemStack itemStack = createItemStackForSourceBlock(world.getBlockMetadata(x, y, z), tef.getSourceBlock(), tef.getSourceBlockMetadata());
        if(itemStack != null) {
          float f = 0.7F;
          double d0 = world.rand.nextFloat() * f + (1.0F - f) * 0.5D;
          double d1 = world.rand.nextFloat() * f + (1.0F - f) * 0.5D;
          double d2 = world.rand.nextFloat() * f + (1.0F - f) * 0.5D;
          EntityItem entityitem = new EntityItem(world, x + d0, y + d1, z + d2, itemStack);
          entityitem.delayBeforeCanPickup = 10;
          world.spawnEntityInWorld(entityitem);
        }
      }

    }

    super.breakBlock(world, x, y, z, par5, par6);
  }

  private ItemStack createItemStackForSourceBlock(int quartzBlockMeta, Block sourceBlock, int sourceBlockMetadata) {
    if(sourceBlock == null) {
      return null;
    }
    ItemStack result = new ItemStack(EnderIO.instance.itemFusedQuartzFrame, 1, quartzBlockMeta);
    PainterUtil.setSourceBlock(result, sourceBlock, sourceBlockMetadata);
    return result;
  }

}
TOP

Related Classes of crazypants.enderio.material.BlockFusedQuartz

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.