package buildcraftAdditions.blocks.multiBlocks;
import java.util.Random;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import buildcraftAdditions.BuildcraftAdditions;
import buildcraftAdditions.multiBlocks.IMultiBlockTile;
import buildcraftAdditions.multiBlocks.MultiBlockPatern;
import buildcraftAdditions.utils.RenderUtils;
/**
* Copyright (c) 2014-2015, AEnterprise
* http://buildcraftadditions.wordpress.com/
* Buildcraft Additions is distributed under the terms of GNU GPL v3.0
* Please check the contents of the license located in
* http://buildcraftadditions.wordpress.com/wiki/licensing-stuff/
*/
public abstract class MultiBlockBase extends BlockContainer {
public final char identifier;
public final MultiBlockPatern patern;
public final String altTexture;
@SideOnly(Side.CLIENT)
private IIcon altIcon;
public MultiBlockBase(String blockName, char identifier, MultiBlockPatern patern, String textureName, String gameRegistryName) {
this(blockName, identifier, patern, textureName, "multiBlockSeeInvisible", gameRegistryName);
}
public MultiBlockBase(String blockName, char identifier, MultiBlockPatern patern, String textureName, String altTexture, String gameregistryName) {
super(Material.iron);
setHardness(5);
setResistance(10);
setBlockName(blockName);
setBlockTextureName("bcadditions:" + textureName);
setCreativeTab(BuildcraftAdditions.bcadditions);
this.identifier = identifier;
this.patern = patern;
this.altTexture = altTexture;
GameRegistry.registerBlock(this, gameregistryName);
}
@Override
public void registerBlockIcons(IIconRegister register) {
super.registerBlockIcons(register);
altIcon = RenderUtils.registerIcon(register, altTexture);
}
@Override
public IIcon getIcon(int side, int meta) {
return meta != 0 ? altIcon : blockIcon;
}
@Override
public void onBlockAdded(World world, int x, int y, int z) {
world.scheduleBlockUpdate(x, y, z, this, 80);
}
@Override
public void updateTick(World world, int x, int y, int z, Random random) {
if (world.getBlockMetadata(x, y, z) == 0) {
patern.checkPatern(world, x, y, z);
world.scheduleBlockUpdate(x, y, z, this, 80);
}
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int meta, float hitX, float hitY, float hitZ) {
TileEntity tile = world.getTileEntity(x, y, z);
return tile != null && tile instanceof IMultiBlockTile && ((IMultiBlockTile) tile).onBlockActivated(player);
}
@Override
public void onBlockPreDestroy(World world, int x, int y, int z, int meta) {
TileEntity tile = world.getTileEntity(x, y, z);
if (tile != null && tile instanceof IMultiBlockTile)
((IMultiBlockTile) tile).invalidateMultiblock();
}
@Override
public abstract TileEntity createNewTileEntity(World world, int meta);
@Override
public boolean isOpaqueCube() {
return false;
}
}