package ihl.items_blocks; import ic2.api.tile.IWrenchable; import ic2.core.IC2; import ic2.core.IHasGui; import ic2.core.item.tool.ItemToolCutter; import ihl.IHLCreativeTab; import ihl.IHLMod; import ihl.IHLModInfo; import ihl.collector.GlassBoxTileEntity; import ihl.datanet.RedstoneSignalConverterTileEntity; import ihl.flexible_cable.BatterySwitchUnitTileEntity; import ihl.flexible_cable.IronWorkbenchTileEntity; import ihl.flexible_cable.RectifierTransformerUnitTileEntity; import ihl.interfaces.IEnergyNetNode; import ihl.interfaces.IMultiPowerCableHolder; import ihl.processing.chemistry.ChemicalReactorTileEntity; import ihl.processing.chemistry.CryogenicDistillerTileEntity; import ihl.processing.chemistry.ElectrolysisBathTileEntity; import ihl.processing.chemistry.FluidizedBedReactorTileEntity; import ihl.processing.chemistry.FractionatorBottomTileEntity; import ihl.processing.chemistry.FractionatorCoverTileEntity; import ihl.processing.chemistry.FractionatorSectionTileEntity; import ihl.processing.chemistry.GaedesMercuryRotaryPumpTileEntity; import ihl.processing.chemistry.GoldChimneyKneeTileEntity; import ihl.processing.chemistry.LabElectrolyzerTileEntity; import ihl.processing.chemistry.LeadOvenTileEntity; import ihl.processing.chemistry.LoomTileEntity; import ihl.processing.chemistry.PaperMachineTileEntity; import ihl.processing.chemistry.PrecipitatorCondenserTileEntity; import ihl.processing.chemistry.RefluxCondenserTileEntity; import ihl.processing.metallurgy.AchesonFurnanceTileEntity; import ihl.processing.metallurgy.CoilerTileEntity; import ihl.processing.metallurgy.DetonationSprayingMachineTileEntity; import ihl.processing.metallurgy.ExtruderTileEntity; import ihl.processing.metallurgy.GasWeldingStationTileEntity; import ihl.processing.metallurgy.ImpregnatingMachineTileEntity; import ihl.processing.metallurgy.LathePart1TileEntity; import ihl.processing.metallurgy.LathePart2TileEntity; import ihl.processing.metallurgy.MuffleFurnanceTileEntity; import ihl.processing.metallurgy.RollingMachinePart1TileEntity; import ihl.processing.metallurgy.RollingMachinePart2TileEntity; import ihl.processing.metallurgy.VacuumInductionMeltingFurnaceTileEntity; import ihl.processing.metallurgy.VulcanizationExtrudingMoldTileEntity; import ihl.processing.metallurgy.WireMillTileEntity; import ihl.processing.metallurgy.WoodenRollingMachinePart1TileEntity; import ihl.processing.metallurgy.WoodenRollingMachinePart2TileEntity; import ihl.tunneling_shield.HydrotransportPulpRegeneratorTileEntity; import ihl.utils.IHLUtils; import java.util.ArrayList; import java.util.List; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; 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.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class MachineBaseBlock extends Block implements ITileEntityProvider{ MachineType type; private static List instances = new ArrayList(); @SideOnly(Side.CLIENT) IIcon textureSide, textureBack, textureFrontMuffleFurnance, textureTop, textureTopAchesonFurnance, textureTopGoldFurnace, textureFrontGoldFurnace, textureSideGoldFurnace, textureFrontCryogenicDistiller, textureTopCryogenicDistiller, textureBackCryogenicDistiller, textureFrontChemicalReactor, textureLeftMachineCasing, textureTopMachineCasing, textureRightMachineCasing, textureFrontMachineCasing, textureFrontPaperMachine, textureBackMachineCasing, frequencyGeneratorBack, frequencyGeneratorBottom, frequencyGeneratorFront, frequencyGeneratorLeft, frequencyGeneratorRight, frequencyGeneratorTop, bronzeTubTop, bronzeTubSide, glassBoxTop, glassBoxSide, glassBoxBottom, glassBoxInnerSide, glassBoxInnerBottom, vacuumInductionMeltingFurnaceFront, vacuumInductionMeltingFurnaceBack, vacuumInductionMeltingFurnaceLeft, vacuumInductionMeltingFurnaceRight, hydrotransportPulpRegeneratorFront, hydrotransportPulpRegeneratorBack, redstoneSignalConverterEmitterSide, redstoneSignalConverterEmptySide, redstoneSignalConverterSensorSide, steel, redPaint, greenPaint, rubberInsulatedCase, powerPort; public MachineBaseBlock(MachineType type1) { super(Material.iron); this.type=type1; this.setCreativeTab(IHLCreativeTab.tab); this.setBlockName(type.unlocalizedName); this.setHardness(2F); this.setResistance(1F); instances.add(this); } @Override public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { if(IC2.platform.isSimulating()) { TileEntity te = world.getTileEntity(x,y,z); if(world.getBlock(x, y+1, z)==Blocks.fire) { if(te instanceof DetonationSprayingMachineTileEntity) { ((DetonationSprayingMachineTileEntity)te).operate(); world.setBlockToAir(x, y+1, z); } } if(te instanceof RedstoneSignalConverterTileEntity) { RedstoneSignalConverterTileEntity rscte = (RedstoneSignalConverterTileEntity) te; rscte.linksOrInventoryChanged=true; } } } @Override public void onBlockPreDestroy(World world, int x, int y, int z, int meta) { if(!world.isRemote) { TileEntity te = world.getTileEntity(x, y, z); if(te!=null) { if(te instanceof IEnergyNetNode) { IEnergyNetNode ate = (IEnergyNetNode) te; ate.removeAttachedChains(); } if(te instanceof IMultiPowerCableHolder) { IMultiPowerCableHolder ate = (IMultiPowerCableHolder) te; ate.removeAttachedChains(); } if(te instanceof IronWorkbenchTileEntity) { IronWorkbenchTileEntity iwb=(IronWorkbenchTileEntity) te; iwb.dropContents(); } else if(te instanceof IInventory) { IInventory inventory = (IInventory)te; for(int i = 0; i< inventory.getSizeInventory();i++) { if(inventory.getStackInSlot(i)!=null)world.spawnEntityInWorld(new EntityItem(world, x, y+1, z, inventory.getStackInSlot(i))); } } if(te instanceof RedstoneSignalConverterTileEntity) { RedstoneSignalConverterTileEntity rsce = (RedstoneSignalConverterTileEntity)te; rsce.removeAttachedChains(); } } } super.onBlockPreDestroy(world, x, y, z, meta); } @SuppressWarnings("rawtypes") @Override public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB aabb, List list, Entity entity) { switch(this.type) { case BronzeTub: this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.1F, 1.0F); super.addCollisionBoxesToList(world, x, y, z, aabb, list, entity); this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.1F, 1.0F, 1.0F); super.addCollisionBoxesToList(world, x, y, z, aabb, list, entity); this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.1F); super.addCollisionBoxesToList(world, x, y, z, aabb, list, entity); this.setBlockBounds(0.9F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); super.addCollisionBoxesToList(world, x, y, z, aabb, list, entity); this.setBlockBounds(0.0F, 0.0F, 0.9F, 1.0F, 1.0F, 1.0F); super.addCollisionBoxesToList(world, x, y, z, aabb, list, entity); this.setBlockBoundsForItemRender(); break; case GlassBox: this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.1F, 1.0F); super.addCollisionBoxesToList(world, x, y, z, aabb, list, entity); this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.1F, 1.0F, 1.0F); super.addCollisionBoxesToList(world, x, y, z, aabb, list, entity); this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.1F); super.addCollisionBoxesToList(world, x, y, z, aabb, list, entity); this.setBlockBounds(0.9F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); super.addCollisionBoxesToList(world, x, y, z, aabb, list, entity); this.setBlockBounds(0.0F, 0.0F, 0.9F, 1.0F, 1.0F, 1.0F); super.addCollisionBoxesToList(world, x, y, z, aabb, list, entity); this.setBlockBoundsForItemRender(); break; case RedstoneSignalConverter: this.setBlockBounds(0.2F, 0.2F, 0.2F, 0.8F, 0.8F, 0.8F); super.addCollisionBoxesToList(world, x, y, z, aabb, list, entity); break; default: super.addCollisionBoxesToList(world, x, y, z, aabb, list, entity); break; } } @Override public void setBlockBoundsForItemRender() { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } @Override public void setBlockBoundsBasedOnState(IBlockAccess blockAccess, int x, int y, int z) { int facing = 3; TileEntity te = blockAccess.getTileEntity(x, y, z); if(te!=null && te instanceof IWrenchable) { IWrenchable tebh = (IWrenchable) te; facing=tebh.getFacing(); } switch(this.type) { case VacuumInductionMeltingFurnace: switch(facing) { case 0: this.setBlockBounds(-1.0F, -2.0F, 0.0F, 2.0F, 1.0F, 3.0F); break; case 1: this.setBlockBounds(-1.0F, 0.0F, 0.0F, 2.0F, 3.0F, 3.0F); break; case 2: this.setBlockBounds(-1.0F, 0.0F, -2.0F, 2.0F, 3.0F, 1.0F); break; case 3: this.setBlockBounds(-1.0F, 0.0F, 0.0F, 2.0F, 3.0F, 3.0F); break; case 4: this.setBlockBounds(-2.0F, 0.0F, -1.0F, 1.0F, 3.0F, 2.0F); break; case 5: this.setBlockBounds(0.0F, 0.0F, -1.0F, 3.0F, 3.0F, 2.0F); break; default: break; } break; default: super.setBlockBoundsBasedOnState(blockAccess, x, y, z); break; } } public static void init() { MachineType[] var1 = MachineType.values(); for(int i=0;i teclass1, boolean isNormalBlock1,ItemStack itemDroppedOnBlockDestroy1) { unlocalizedName=unlocalizedName1; teclass=teclass1; isNormalBlock=isNormalBlock1; if(isNormalBlock) { specialBlockRendererId=0; } else { specialBlockRendererId=-2; } itemDroppedOnBlockDestroy=itemDroppedOnBlockDestroy1; } MachineType(String unlocalizedName1, Class teclass1, boolean isNormalBlock1,boolean hasSpecialBlockRenderer1, ItemStack itemDroppedOnBlockDestroy1) { unlocalizedName=unlocalizedName1; teclass=teclass1; isNormalBlock=isNormalBlock1; hasSpecialBlockRenderer=hasSpecialBlockRenderer1; itemDroppedOnBlockDestroy=itemDroppedOnBlockDestroy1; } String unlocalizedName; Class teclass; boolean isNormalBlock=true; boolean hasSpecialBlockRenderer=false; int specialBlockRendererId=-2; ItemStack itemDroppedOnBlockDestroy; } @Override public int getRenderType() { if(this.type.hasSpecialBlockRenderer) { return IHLMod.proxy.shareBlockRendererByMachineType(this.type); } return this.type.specialBlockRendererId; } @Override public boolean isOpaqueCube() { return this.type==null?false:this.type.isNormalBlock; } @Override public boolean renderAsNormalBlock() { return this.type.isNormalBlock; } @SideOnly(Side.CLIENT) public IIcon getAdditionalIconsForBlockRenderer(int flag) { switch(this.type) { case BronzeTub: return this.bronzeTubSide; case GlassBox: switch(flag) { case 0: return this.glassBoxInnerSide; case 1: return this.glassBoxInnerBottom; } case RedstoneSignalConverter: switch(flag) { case 0: return this.redstoneSignalConverterEmptySide; case 1: return this.redstoneSignalConverterEmitterSide; case 2: return this.redstoneSignalConverterSensorSide; } default: return this.blockIcon; } } }