Package erogenousbeef.bigreactors.common.multiblock.block

Source Code of erogenousbeef.bigreactors.common.multiblock.block.BlockMultiblockGlass

package erogenousbeef.bigreactors.common.multiblock.block;

import java.util.List;

import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import erogenousbeef.bigreactors.common.BigReactors;
import erogenousbeef.bigreactors.common.multiblock.tileentity.TileEntityReactorGlass;
import erogenousbeef.bigreactors.common.multiblock.tileentity.TileEntityTurbinePartGlass;
import erogenousbeef.bigreactors.utils.StaticUtils;
import erogenousbeef.core.multiblock.IMultiblockPart;
import erogenousbeef.core.multiblock.MultiblockControllerBase;

public class BlockMultiblockGlass extends BlockContainer {

  public static final int METADATA_REACTOR = 0;
  public static final int METADATA_TURBINE = 1;
 
  private static final String textureBaseName = "multiblockGlass";
 
  private static String[] subBlocks = new String[] { "reactor", "turbine" };
  private IIcon[][] icons = new IIcon[subBlocks.length][16];
  private IIcon transparentIcon;
 
  public BlockMultiblockGlass(Material material) {
    super(material);
   
    setStepSound(soundTypeGlass);
    setHardness(2.0f);
    setBlockName("brMultiblockGlass");
    this.setBlockTextureName(BigReactors.TEXTURE_NAME_PREFIX + textureBaseName);
    setCreativeTab(BigReactors.TAB);
  }

  @Override
  public TileEntity createNewTileEntity(World world, int metadata) {
    switch(metadata) {
    case METADATA_REACTOR:
      return new TileEntityReactorGlass();
    case METADATA_TURBINE:
      return new TileEntityTurbinePartGlass();
    default:
      throw new IllegalArgumentException("Unrecognized metadata");
    }
  }
 
  @Override
  @SideOnly(Side.CLIENT)
  public void registerBlockIcons(IIconRegister par1IconRegister)
  {
    this.transparentIcon = par1IconRegister.registerIcon(BigReactors.TEXTURE_NAME_PREFIX + "tile." + textureBaseName + ".transparent");
   
    for(int metadata = 0; metadata < subBlocks.length; metadata++) {
      for(int i = 0; i < 16; ++i) {
        icons[metadata][i] = par1IconRegister.registerIcon(BigReactors.TEXTURE_NAME_PREFIX + "tile." + textureBaseName + "." + subBlocks[metadata] + "." + Integer.toString(i));
      }
    }
  }

  @Override
    public IIcon getIcon(IBlockAccess blockAccess, int x, int y, int z, int side) {
    ForgeDirection[] dirsToCheck = StaticUtils.neighborsBySide[side];
    ForgeDirection dir;
    Block myBlock = blockAccess.getBlock(x, y, z);
    int myBlockMetadata = blockAccess.getBlockMetadata(x, y, z);
   
    // First check if we have a block in front of us of the same type - if so, just be completely transparent on this side
    ForgeDirection out = ForgeDirection.getOrientation(side);
    if(blockAccess.getBlock(x + out.offsetX, y + out.offsetY, z + out.offsetZ) == myBlock &&
        blockAccess.getBlockMetadata(x + out.offsetX, y + out.offsetY, z + out.offsetZ) == myBlockMetadata) {
      return transparentIcon;
    }
   
    // Calculate icon index based on whether the blocks around this block match it
    // Icons use a naming pattern so that the bits correspond to:
    // 1 = Connected on top, 2 = connected on bottom, 4 = connected on left, 8 = connected on right
    int iconIdx = 0;
    for(int i = 0; i < dirsToCheck.length; i++) {
      dir = dirsToCheck[i];
      // Same blockID and metadata on this side?
      if(blockAccess.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ) == myBlock &&
          blockAccess.getBlockMetadata(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ) == myBlockMetadata) {
        // Connected!
        iconIdx |= 1 << i;
      }
    }
   
    return icons[myBlockMetadata][iconIdx];
  }
 
  @Override
  public IIcon getIcon(int side, int metadata) {
    return icons[metadata][0];
  }

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

  public ItemStack getItemStack(String name) {
    int metadata = -1;
    for(int i = 0; i < subBlocks.length; i++) {
      if(subBlocks[i].equals(name)) {
        metadata = i;
        break;
      }
    }
   
    if(metadata < 0) {
      throw new IllegalArgumentException("Unable to find a block with the name " + name);
    }
    return new ItemStack(this, 1, metadata);
  }

  @Override
  public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List)
  {
    for(int i = 0; i < subBlocks.length; i++) {
      par3List.add(new ItemStack(this, 1, i));
    }
  }
 
  @Override
  public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9) {
    if(player.isSneaking()) {
      return false;
    }

    // If the player's hands are empty and they rightclick on a multiblock, they get a
    // multiblock-debugging message if the machine is not assembled.
    if(!world.isRemote && player.getCurrentEquippedItem() == null) {
      TileEntity te = world.getTileEntity(x, y, z);
      if(te instanceof IMultiblockPart) {
        MultiblockControllerBase controller = ((IMultiblockPart)te).getMultiblockController();

        if(controller == null) {
          player.addChatMessage(new ChatComponentText(String.format("SERIOUS ERROR - server part @ %d, %d, %d has no controller!", x, y, z))); //TODO Localize
        }
        else {
          Exception e = controller.getLastValidationException();
          if(e != null) {
            player.addChatMessage(new ChatComponentText(e.getMessage()));
            return true;
          }
        }
      }
    }
   
    return false;
  }
 
  @Override
    public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z)
    {
    return false;
    }
}
TOP

Related Classes of erogenousbeef.bigreactors.common.multiblock.block.BlockMultiblockGlass

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.