package net.minecraft.src;

import net.minecraft.client.Minecraft;

import java.io.*;
import org.lwjgl.opengl.GL11;


public class mod_PCwireless extends BaseMod {
	/**
	 * Textures folder for this module, ending with slash.
	 */
	public static String imgDir = "/PowerCraft/wireless/";
	

	/**
	 * Configuration file
	 */
	public static PCMP conf = new PCMP("/config/PC_WIRELESS.properties", "PowerCraft wireless plugin - setup file\nBlock IDs possible: 115-255\n");

	/**
	 * Minecraft instance
	 */
	public static Minecraft mc = ModLoader.getMinecraftInstance();

	public mod_PCwireless() {
	}

	public static int rendererRadio = 0;
	public static int rendererSensor = 0;

	@Override
	public void load() {
		// preload
		mc.renderEngine.getTexture(imgDir + "tiles.png");
		mc.renderEngine.getTexture(imgDir + "radiogui.png");

		rendererRadio = ModLoader.getUniqueBlockModelID(this, true);
		rendererSensor = ModLoader.getUniqueBlockModelID(this, true);
		ModLoader.registerTileEntity(net.minecraft.src.PCwi_TileEntitySensor.class, "FCSensorRanged");

		ModLoader.registerBlock(sensor);
		Item.itemsList[sensor.blockID] = null;
		Item.itemsList[sensor.blockID] = new PCwi_ItemBlockSensor(sensor.blockID - 256, sensor).setItemName("PCwiSensorRanged");
		ModLoader.addName(sensor, "Motion Detector");
		ModLoader.addLocalization("tile.PCwiSensorRanged.item.name", "Item Motion Detector");
		ModLoader.addLocalization("tile.PCwiSensorRanged.living.name", "Mob Motion Detector");
		ModLoader.addLocalization("tile.PCwiSensorRanged.player.name", "Player Motion Detector");

		ModLoader.registerBlock(radioTx);
		ModLoader.addName(radioTx, "Redstone Radio Transmitter");

		ModLoader.registerBlock(radioRx);
		ModLoader.addName(radioRx, "Redstone Radio Receiver");

		ModLoader.addName(portableTx, "Radio Remote");

		portableTx.setIconIndex(ModLoader.addOverride("/gui/items.png", imgDir + "portable.png"));

		ModLoader.addRecipe(
				new ItemStack(radioTx),
				new Object[] { " I ", "RIR", "SSS",
					Character.valueOf('I'), Item.ingotGold, Character.valueOf('R'), Item.redstone, Character.valueOf('S'), Block.stone });
		
		ModLoader.addRecipe(
				new ItemStack(radioRx),
				new Object[] { " I ", "RIR", "SSS",
					Character.valueOf('I'), Item.ingotIron, Character.valueOf('R'), Item.redstone, Character.valueOf('S'), Block.stone });
		
		/*ModLoader.addRecipe(
				new ItemStack(radioTx),
				new Object[] { " I ", "RIR", "SSS", Character.valueOf('I'), Item.ingotGold, Character.valueOf('R'), Item.redstone,
					Character.valueOf('S'), Block.cobblestone });
		
		ModLoader.addRecipe(
				new ItemStack(radioRx),
				new Object[] { " I ", "RIR", "SSS", Character.valueOf('I'), Item.ingotIron, Character.valueOf('R'), Item.redstone,
					Character.valueOf('S'), Block.cobblestone });*/

		ModLoader.addRecipe(
				new ItemStack(portableTx),
				new Object[] { "T", "B", 
					Character.valueOf('B'), Block.button, Character.valueOf('T'), radioTx });

		ModLoader.addRecipe(
				new ItemStack(sensor, 1, 1),
				new Object[] { "R", "I", "S",
					Character.valueOf('I'), Item.ingotIron, Character.valueOf('R'), Item.redstone, Character.valueOf('S'), Block.stone });
		
		/*ModLoader.addRecipe(
				new ItemStack(sensor, 1, 1),
				new Object[] { "R", "I", "S",
					Character.valueOf('I'), Item.ingotIron, Character.valueOf('R'), Item.redstone, Character.valueOf('S'), Block.cobblestone });*/
		
		ModLoader.addRecipe(
				new ItemStack(sensor, 1, 0),
				new Object[] { "R", "I", "W",
					Character.valueOf('I'), Item.ingotIron, Character.valueOf('R'), Item.redstone, Character.valueOf('W'), Block.planks });
		
		ModLoader.addRecipe(
				new ItemStack(sensor, 1, 2),
				new Object[] { "R", "I", "O",
					Character.valueOf('I'), Item.ingotIron, Character.valueOf('R'), Item.redstone, Character.valueOf('O'), Block.obsidian });

		// TMI
		mod_PCcore.TMI_rangeDamage(sensor.blockID, 0, 2);
	}



	@Override
	public String getPriorities() {
		return "after:mod_PCcore";
	}

	@Override
	public String getVersion() {
		return mod_PCcore.VERSION;
	}

	static {

		conf.put("block_Transceiver", 153, PCMPType.BLOCK);
		conf.put("block_Receiver", 154, PCMPType.BLOCK);
		conf.put("block_SensorRanged", 229, PCMPType.BLOCK);
		conf.put("item_Remote", 19000, PCMPType.ITEM);

		conf.apply();
	}

	/** Radio transmitter block */
	public static Block radioTx = new PCwi_BlockRadioDevice(conf.getInt("block_Transceiver"), 0, 16, 0).setBlockName("PCwiRadioTx").setHardness(0.2F);
	
	/** Radio receiver block */
	public static Block radioRx = new PCwi_BlockRadioDevice(conf.getInt("block_Receiver"), 1, 17, 1).setBlockName("PCwiRadioRx").setHardness(0.2F);
	
	/** Entity sensor block (metadata subtypes)*/
	public static PCwi_BlockSensor sensor = (PCwi_BlockSensor) (new PCwi_BlockSensor(conf.getInt("block_SensorRanged"))
			.setBlockName("PCwiSensorRanged").setHardness(0.2F));

	/** Portable transmitter */
	public static Item portableTx = (new PCwi_ItemRadioPortableTx(conf.getInt("item_Remote"))).setMaxStackSize(1).setItemName("PCwiRadioPortableTx");


	@Override
	public boolean renderWorldBlock(RenderBlocks renderblocks, IBlockAccess iblockaccess, int i, int j, int k, Block block, int renderType) {
		RenderEngine renderengine = ModLoader.getMinecraftInstance().renderEngine;
		if (renderType == rendererSensor) {
			Tessellator tessellator = Tessellator.instance;

			tessellator.draw();
			tessellator.startDrawingQuads();
			
			boolean gf = RenderBlocks.cfgGrassFix;
			RenderBlocks.cfgGrassFix = false;

			renderengine.bindTexture(renderengine.getTexture(imgDir + "tiles.png"));

			float f = block.getBlockBrightness(iblockaccess, i, j, k);
			tessellator.setColorOpaque_F(f, f, f);

			boolean active = ((PCwi_TileEntitySensor) renderblocks.blockAccess.getBlockTileEntity(i, j, k)).active;
			int meta = renderblocks.blockAccess.getBlockMetadata(i, j, k);

			sensor.txswap = false;
			sensor.setShapeAndTextureForRenderer(1, active, meta);
			renderblocks.renderStandardBlock(sensor, i, j, k);
			sensor.setShapeAndTextureForRenderer(2, active, meta);
			renderblocks.renderStandardBlock(sensor, i, j, k);
			sensor.setShapeAndTextureForRenderer(0, active, meta);
			renderblocks.renderStandardBlock(sensor, i, j, k);
			sensor.txswap = true;

			sensor.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
			
			RenderBlocks.cfgGrassFix = gf;

			tessellator.draw();

			tessellator.startDrawingQuads();

			renderengine.bindTexture(renderengine.getTexture("/terrain.png"));
			return true;
		}

		if (renderType == rendererRadio) {
			Tessellator tessellator = Tessellator.instance;

			tessellator.draw();
			tessellator.startDrawingQuads();

			boolean gf = RenderBlocks.cfgGrassFix;
			RenderBlocks.cfgGrassFix = false;
			
			renderengine.bindTexture(renderengine.getTexture(imgDir + "tiles.png"));

			float f = block.getBlockBrightness(iblockaccess, i, j, k);
			tessellator.setColorOpaque_F(f, f, f);

			int meta = renderblocks.blockAccess.getBlockMetadata(i, j, k);

			renderblocks.renderStandardBlock(block, i, j, k);
			
			RenderBlocks.cfgGrassFix = gf;
			
			tessellator.draw();

			tessellator.startDrawingQuads();
			renderAntenna(block, meta, i, j, k);
			tessellator.draw();
			tessellator.startDrawingQuads();

			renderengine.bindTexture(renderengine.getTexture("/terrain.png"));
			return true;
		}
		return false;
	}

	public void renderAntenna(Block block, int i, double d, double d1, double d2) {
		Tessellator tessellator = Tessellator.instance;
		// crossed squares
		int j = ((PCwi_BlockRadioDevice) block).getAntennaTexture(i);

		int k = (j & 0xf) << 4;
		int l = j & 0xf0;
		double d3 = k / 256F;
		double d4 = (k + 15.99F) / 256F;
		double d5 = l / 256F;
		double d6 = (l + 15.99F) / 256F;
		double d7 = (d + 0.5D) - 0.45000000000000001D;
		double d8 = d + 0.5D + 0.45000000000000001D;
		double d9 = (d2 + 0.5D) - 0.45000000000000001D;
		double d10 = d2 + 0.5D + 0.45000000000000001D;
		tessellator.addVertexWithUV(d7, d1 + 1.0D, d9, d3, d5);
		tessellator.addVertexWithUV(d7, d1 + 0.0D, d9, d3, d6);
		tessellator.addVertexWithUV(d8, d1 + 0.0D, d10, d4, d6);
		tessellator.addVertexWithUV(d8, d1 + 1.0D, d10, d4, d5);
		tessellator.addVertexWithUV(d8, d1 + 1.0D, d10, d3, d5);
		tessellator.addVertexWithUV(d8, d1 + 0.0D, d10, d3, d6);
		tessellator.addVertexWithUV(d7, d1 + 0.0D, d9, d4, d6);
		tessellator.addVertexWithUV(d7, d1 + 1.0D, d9, d4, d5);
		tessellator.addVertexWithUV(d7, d1 + 1.0D, d10, d3, d5);
		tessellator.addVertexWithUV(d7, d1 + 0.0D, d10, d3, d6);
		tessellator.addVertexWithUV(d8, d1 + 0.0D, d9, d4, d6);
		tessellator.addVertexWithUV(d8, d1 + 1.0D, d9, d4, d5);
		tessellator.addVertexWithUV(d8, d1 + 1.0D, d9, d3, d5);
		tessellator.addVertexWithUV(d8, d1 + 0.0D, d9, d3, d6);
		tessellator.addVertexWithUV(d7, d1 + 0.0D, d10, d4, d6);
		tessellator.addVertexWithUV(d7, d1 + 1.0D, d10, d4, d5);
	}

	@Override
	public void renderInvBlock(RenderBlocks renderblocks, Block block, int i, int rtype) {
		RenderEngine renderengine = ModLoader.getMinecraftInstance().renderEngine;
		Tessellator tessellator = Tessellator.instance;

		if (rtype == rendererRadio) {
			renderengine.bindTexture(renderengine.getTexture(imgDir + "tiles.png"));

			block.setBlockBoundsForItemRender();
			GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
			tessellator.startDrawingQuads();
			tessellator.setNormal(0.0F, -1F, 0.0F);
			renderblocks.renderBottomFace(block, 0.0D, 0.0D, 0.0D, 6);
			tessellator.draw();
			tessellator.startDrawingQuads();
			tessellator.setNormal(0.0F, 1.0F, 0.0F);
			renderblocks.renderTopFace(block, 0.0D, 0.0D, 0.0D, 6);
			tessellator.draw();
			tessellator.startDrawingQuads();
			tessellator.setNormal(0.0F, 0.0F, -1F);
			renderblocks.renderEastFace(block, 0.0D, 0.0D, 0.0D, 18);
			tessellator.draw();
			tessellator.startDrawingQuads();
			tessellator.setNormal(0.0F, 0.0F, 1.0F);
			renderblocks.renderWestFace(block, 0.0D, 0.0D, 0.0D, 18);
			tessellator.draw();
			tessellator.startDrawingQuads();
			tessellator.setNormal(-1F, 0.0F, 0.0F);
			renderblocks.renderNorthFace(block, 0.0D, 0.0D, 0.0D, 18);
			tessellator.draw();
			tessellator.startDrawingQuads();
			tessellator.setNormal(1.0F, 0.0F, 0.0F);
			renderblocks.renderSouthFace(block, 0.0D, 0.0D, 0.0D, 18);
			tessellator.draw();
			GL11.glTranslatef(0.5F, 0.5F, 0.5F);

			tessellator.startDrawingQuads();
			tessellator.setNormal(0.0F, -1F, 0.0F);
			renderAntenna(block, 1, -0.5D, -0.5D, -0.5D);
			tessellator.draw();

			renderengine.bindTexture(renderengine.getTexture("/terrain.png"));

			return;
		}

		if (rtype == rendererSensor) {
			renderengine.bindTexture(renderengine.getTexture(imgDir + "tiles.png"));

			sensor.txswap = false;
			sensor.setShapeAndTextureForRenderer(1, true, i);
			mod_PCcore.renderInvBox(renderblocks, sensor, i);
			sensor.setShapeAndTextureForRenderer(2, true, i);
			mod_PCcore.renderInvBox(renderblocks, sensor, i);
			sensor.setShapeAndTextureForRenderer(0, true, i);
			mod_PCcore.renderInvBox(renderblocks, sensor, i);
			sensor.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
			sensor.txswap = true;

			renderengine.bindTexture(renderengine.getTexture("/terrain.png"));

			return;
		}
	}
}
