package crazypants.enderio.machine.generator.combustion; import java.util.Random; 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 net.minecraftforge.common.util.ForgeDirection; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import crazypants.enderio.GuiHandler; import crazypants.enderio.ModObject; import crazypants.enderio.machine.AbstractMachineBlock; import crazypants.enderio.machine.AbstractMachineEntity; import crazypants.enderio.machine.IoMode; import crazypants.enderio.network.PacketHandler; public class BlockCombustionGenerator extends AbstractMachineBlock<TileCombustionGenerator> { public static int renderId = -1; private IIcon overlayPullSides, overlayPullTopBottom, overlayDisabledNoCenter; public static BlockCombustionGenerator create() { PacketHandler.INSTANCE.registerMessage(PacketCombustionTank.class, PacketCombustionTank.class, PacketHandler.nextID(), Side.CLIENT); BlockCombustionGenerator gen = new BlockCombustionGenerator(); gen.init(); return gen; } protected BlockCombustionGenerator() { super(ModObject.blockCombustionGenerator, TileCombustionGenerator.class); } @Override public int getLightOpacity() { return 0; } @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileCombustionGenerator) { return new ContainerCombustionEngine(player.inventory, (TileCombustionGenerator) te); } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileCombustionGenerator) { return new GuiCombustionGenerator(player.inventory, (TileCombustionGenerator) te); } return null; } @Override protected int getGuiId() { return GuiHandler.GUI_ID_COMBUSTION_GEN; } @Override public int getRenderType() { return renderId; } @Override public boolean renderAsNormalBlock() { return false; } @Override public boolean isOpaqueCube() { return false; } @SideOnly(Side.CLIENT) @Override protected void registerOverlayIcons(IIconRegister iIconRegister) { super.registerOverlayIcons(iIconRegister); overlayPullSides = iIconRegister.registerIcon("enderio:overlays/pullSides"); overlayPullTopBottom = iIconRegister.registerIcon("enderio:overlays/pullTopBottom"); overlayDisabledNoCenter = iIconRegister.registerIcon("enderio:overlays/disabledNoCenter"); } @Override public IIcon getOverlayIconForMode(TileCombustionGenerator tile, ForgeDirection face, IoMode mode) { if(face.offsetY == 0 || mode == IoMode.NONE) { return super.getOverlayIconForMode(tile, face, mode); } return mode == IoMode.PULL ? face.offsetY == 0 ? overlayPullSides : overlayPullTopBottom : overlayDisabledNoCenter; } @Override protected String getMachineFrontIconKey(boolean active) { return getBackIconKey(active); } @Override protected String getModelIconKey(boolean active) { return "enderio:combustionGenModel"; } @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(World world, int x, int y, int z, Random rand) { // If active, randomly throw some smoke around if(isActive(world, x, y, z)) { TileEntity te = world.getTileEntity(x, y, z); int facing = 3; if(te instanceof AbstractMachineEntity) { AbstractMachineEntity me = (AbstractMachineEntity) te; facing = me.facing; } ForgeDirection dir = ForgeDirection.getOrientation(facing); float startX = x + (dir.offsetX == 0 ? 0.5f : 0f); float startY = y + 0.5f; float startZ = z + (dir.offsetZ == 0 ? 0.5f : 0f); if(dir.offsetX == 1) { startX++; } else if(dir.offsetZ == 1) { startZ++; } for (int i = 0; i < 2; i++) { float xOffset = 0; float yOffset = 0; float zOffset = 0; world.spawnParticle("smoke", startX + xOffset, startY + yOffset, startZ + zOffset, 0.0D, 0.0D, 0.0D); } } } }