tsughub: btw-gloryholes

ref: 2c305a89aceb99de504672b0b1dce29d47d09aa2

View raw version
package btw.community.tsughoggr.gloryholes;

import java.util.Random;
import net.minecraft.src.Block;
import net.minecraft.src.BlockContainer;
import net.minecraft.src.World;
import net.minecraft.src.IBlockAccess;
import net.minecraft.src.ItemStack;
import net.minecraft.src.Item;
import net.minecraft.src.EntityLiving;
import net.minecraft.src.EntityPlayer;
import net.minecraft.src.Vec3;
import net.minecraft.src.MovingObjectPosition;
import net.minecraft.src.Material;
import net.minecraft.src.MathHelper;
import net.minecraft.src.TileEntity;
import net.minecraft.src.EntityLivingBase;

import btw.BTWMod;
import btw.item.BTWItems;
import btw.block.BTWBlocks;

import btw.block.MechanicalBlock;
import btw.block.util.MechPowerUtils;
import btw.item.util.ItemUtils;
import btw.block.model.BlockModel;

/*CLIENT ONLY*/
import net.minecraft.src.Icon;
import net.minecraft.src.IconRegister;
import net.minecraft.src.RenderBlocks;

import btw.util.MiscUtils;

public class TSGBlockBlowingStand extends BlockContainer implements MechanicalBlock {
	private static BlockModel models[] = new BlockModel[5];
	private static Icon icons[] = new Icon[5];
	public TSGBlockBlowingStand(int id){
		super(id, Material.rock);
		setHardness(2F);
		setResistance(10F);
		initModel();
	}

	/*Block*/
	public void
	registerIcons(IconRegister var1){
		icons[0] = var1.registerIcon("ice");
		icons[1] = var1.registerIcon("anvil");
		icons[2] = var1.registerIcon("planks_oak");
		icons[3] = var1.registerIcon("btw:stone_slab_top_strata_2");
		icons[4] = var1.registerIcon("btw:millstone_top");
	}
	public boolean
	hasLargeCenterHardPointToFacing(IBlockAccess ba, int i, int j, int k, int face, boolean bt){
		return false;
	}
	@Override
	public int
	onBlockPlaced(World wd, int i, int j, int k, int fc, float fx, float fy, float fz, int md){
		if(fc < 2)
			fc=2;
		wd.setBlockMetadataWithNotify(i,j,k,fc-2);
		return fc;
	}
	@Override
	public void
	onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack item){
		int fc = MiscUtils.convertOrientationToFlatBlockFacingReversed(player);
		System.out.println(fc);
		world.setBlockMetadataWithNotify(x,y,z,fc-2);
	}
	public Icon
	getIcon(int sid, int md){
		return icons[md%(icons.length)];
	}
	/*BlockContainer*/
	public TileEntity
	createNewTileEntity(World w){
		return new TSGBlowingStand();
	} 
	/*MechanicalBlock*/
	public boolean
	isInputtingMechanicalPower(World world, int x, int y, int z){
		return MechPowerUtils.isBlockPoweredByAxle(world, x, y, z, this);
	}
	public void
	overpower(World w, int x, int y, int z){
		/*TODO: Dump recipe*/
	}
	public boolean
	canInputAxlePowerToFacing(World w, int x, int y, int z, int fc){
		return fc == 1;
	}
	public boolean
	isOutputtingMechanicalPower(World world, int x, int y, int z){
		return false;
	}
	public boolean
	canOutputMechanicalPower(){
		return false;
	}
	public boolean
	canInputMechanicalPower(){
		return true;
	}
	/*Client Render*/
	public boolean
	renderAsNormalBlock() {
		return false;
	}
	public boolean
	isOpaqueCube(){
		return false;
	}
	private static void
	initModel(){
		for(int i=0;i<models.length;++i)
			models[i] = new BlockModel();
		models[0].addBox(0D, 0.01D, 0D, 1D, 0.375D, 1D);
		models[1].addBox(0.375D, 0.375D, 0D ,.625D,.625D,.625D);
		models[2].addBox( 0.3125D, 0.375D,0.625D, 0.6875D, 0.6875D,1D );
		models[3].addBox(0.25D,0.375D, 0.25D, 0.375D, 0.5625D, 0.5625D);
		models[3].addBox(0.625, 0.375D, 0.25D, 0.75D, 0.5625D, 0.5625D);
		models[4].addBox(0D, 0D, 0D, 1D, 0.01D, 1D);
	}
	@Override
	public void
	renderBlockAsItem(RenderBlocks rb, int md, float cd){
		models[0].renderAsItemBlock(rb, this, 3);
		models[1].renderAsItemBlock(rb, this, 1);
		models[2].renderAsItemBlock(rb, this, 0);
		models[3].renderAsItemBlock(rb, this, 2);

	}
	@Override
	public boolean
	renderBlock(RenderBlocks rb, int x, int y, int z){
		int md = rb.blockAccess.getBlockMetadata(x,y,z); /*1 - rod 1 - glass 11 - rotate*/
		int rot = (md&3)+2;
		BlockModel bt;

		models[0].renderAsBlockWithTexture(rb,this,x,y,z, icons[3]);
		if((md>>3) == 1){
			bt = models[1].makeTemporaryCopy();
			bt.rotateAroundYToFacing(rot);
			bt.renderAsBlockWithTexture(rb,this,x,y,z, icons[1]);
		}
		if((md >>2) == 1){
			bt = models[2].makeTemporaryCopy();
			bt.rotateAroundYToFacing(rot);
			bt.renderAsBlockWithTexture(rb,this,x,y,z, icons[0]);
		}

		/*No rotation required*/
		bt = models[3].makeTemporaryCopy();
		bt.rotateAroundYToFacing(rot);
		bt.renderAsBlockWithTexture(rb,this,x,y,z, icons[2]);

		models[4].renderAsBlockWithTexture(rb, this, x,y,z, icons[4]);
		return true;

	}

}