Finished Crafting Confirm Screen Added logic to prevent crafting in cpus with too little storage.
176 lines
4.4 KiB
Java
176 lines
4.4 KiB
Java
package appeng.client.render.blocks;
|
|
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.gui.FontRenderer;
|
|
import net.minecraft.client.renderer.GLAllocation;
|
|
import net.minecraft.client.renderer.OpenGlHelper;
|
|
import net.minecraft.client.renderer.RenderBlocks;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
|
|
|
import org.lwjgl.opengl.GL11;
|
|
import org.lwjgl.opengl.GL12;
|
|
|
|
import appeng.api.storage.data.IAEItemStack;
|
|
import appeng.block.AEBaseBlock;
|
|
import appeng.client.ClientHelper;
|
|
import appeng.core.AELog;
|
|
import appeng.tile.AEBaseTile;
|
|
import appeng.tile.crafting.TileCraftingMonitorTile;
|
|
import appeng.util.Platform;
|
|
|
|
public class RenderBlockCraftingCPUMonitor extends RenderBlockCraftingCPU
|
|
{
|
|
|
|
public RenderBlockCraftingCPUMonitor() {
|
|
super( true, 20 );
|
|
}
|
|
|
|
@Override
|
|
public void renderTile(AEBaseBlock block, AEBaseTile tile, Tessellator tess, double x, double y, double z, float f, RenderBlocks renderer)
|
|
{
|
|
if ( Platform.isDrawing( tess ) )
|
|
return;
|
|
|
|
if ( tile instanceof TileCraftingMonitorTile )
|
|
{
|
|
TileCraftingMonitorTile cmt = (TileCraftingMonitorTile) tile;
|
|
IAEItemStack ais = (IAEItemStack) cmt.getJobProgress();
|
|
|
|
if ( cmt.dspList == null )
|
|
{
|
|
cmt.updateList = true;
|
|
cmt.dspList = GLAllocation.generateDisplayLists( 1 );
|
|
}
|
|
|
|
if ( ais != null )
|
|
{
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated( x + 0.5, y + 0.5, z + 0.5 );
|
|
|
|
if ( cmt.updateList )
|
|
{
|
|
cmt.updateList = false;
|
|
GL11.glNewList( cmt.dspList, GL11.GL_COMPILE_AND_EXECUTE );
|
|
tesrRenderScreen( tess, cmt, ais );
|
|
GL11.glEndList();
|
|
}
|
|
else
|
|
GL11.glCallList( cmt.dspList );
|
|
|
|
GL11.glPopMatrix();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void tesrRenderScreen(Tessellator tess, TileCraftingMonitorTile cmt, IAEItemStack ais)
|
|
{
|
|
ForgeDirection side = cmt.getForward();
|
|
|
|
ForgeDirection walrus = side.offsetY != 0 ? ForgeDirection.SOUTH : ForgeDirection.UP;
|
|
int spin = 0;
|
|
|
|
int max = 5;
|
|
while (walrus != cmt.getUp() && max-- > 0)
|
|
{
|
|
spin++;
|
|
walrus = Platform.rotateAround( walrus, side );
|
|
}
|
|
|
|
GL11.glPushAttrib( GL11.GL_ALL_ATTRIB_BITS );
|
|
ForgeDirection d = side;
|
|
GL11.glTranslated( d.offsetX * 0.69, d.offsetY * 0.69, d.offsetZ * 0.69 );
|
|
|
|
float scale = 0.7f;
|
|
GL11.glScalef( scale, scale, scale );
|
|
|
|
if ( d == ForgeDirection.UP )
|
|
{
|
|
GL11.glScalef( 1.0f, -1.0f, 1.0f );
|
|
GL11.glRotatef( 90.0f, 1.0f, 0.0f, 0.0f );
|
|
GL11.glRotatef( (float) spin * 90.0F, 0, 0, 1 );
|
|
}
|
|
|
|
if ( d == ForgeDirection.DOWN )
|
|
{
|
|
GL11.glScalef( 1.0f, -1.0f, 1.0f );
|
|
GL11.glRotatef( -90.0f, 1.0f, 0.0f, 0.0f );
|
|
GL11.glRotatef( (float) spin * -90.0F, 0, 0, 1 );
|
|
}
|
|
|
|
if ( d == ForgeDirection.EAST )
|
|
{
|
|
GL11.glScalef( -1.0f, -1.0f, -1.0f );
|
|
GL11.glRotatef( -90.0f, 0.0f, 1.0f, 0.0f );
|
|
}
|
|
|
|
if ( d == ForgeDirection.WEST )
|
|
{
|
|
GL11.glScalef( -1.0f, -1.0f, -1.0f );
|
|
GL11.glRotatef( 90.0f, 0.0f, 1.0f, 0.0f );
|
|
}
|
|
|
|
if ( d == ForgeDirection.NORTH )
|
|
{
|
|
GL11.glScalef( -1.0f, -1.0f, -1.0f );
|
|
}
|
|
|
|
if ( d == ForgeDirection.SOUTH )
|
|
{
|
|
GL11.glScalef( -1.0f, -1.0f, -1.0f );
|
|
GL11.glRotatef( 180.0f, 0.0f, 1.0f, 0.0f );
|
|
}
|
|
|
|
GL11.glPushMatrix();
|
|
try
|
|
{
|
|
ItemStack sis = ais.getItemStack();
|
|
sis.stackSize = 1;
|
|
|
|
int br = 16 << 20 | 16 << 4;
|
|
int var11 = br % 65536;
|
|
int var12 = br / 65536;
|
|
OpenGlHelper.setLightmapTextureCoords( OpenGlHelper.lightmapTexUnit, var11 * 0.8F, var12 * 0.8F );
|
|
|
|
GL11.glColor4f( 1.0F, 1.0F, 1.0F, 1.0F );
|
|
|
|
GL11.glDisable( GL11.GL_LIGHTING );
|
|
GL11.glDisable( GL12.GL_RESCALE_NORMAL );
|
|
// RenderHelper.enableGUIStandardItemLighting();
|
|
tess.setColorOpaque_F( 1.0f, 1.0f, 1.0f );
|
|
|
|
ClientHelper.proxy.doRenderItem( sis, cmt.getWorldObj() );
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
AELog.error( e );
|
|
}
|
|
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glTranslatef( 0.0f, 0.14f, -0.24f );
|
|
GL11.glScalef( 1.0f / 62.0f, 1.0f / 62.0f, 1.0f / 62.0f );
|
|
|
|
long qty = ais.getStackSize();
|
|
if ( qty > 999999999999L )
|
|
qty = 999999999999L;
|
|
|
|
String msg = Long.toString( qty );
|
|
if ( qty > 1000000000 )
|
|
msg = Long.toString( qty / 1000000000 ) + "B";
|
|
else if ( qty > 1000000 )
|
|
msg = Long.toString( qty / 1000000 ) + "M";
|
|
else if ( qty > 9999 )
|
|
msg = Long.toString( qty / 1000 ) + "K";
|
|
|
|
FontRenderer fr = Minecraft.getMinecraft().fontRenderer;
|
|
int width = fr.getStringWidth( msg );
|
|
GL11.glTranslatef( -0.5f * width, 0.0f, -1.0f );
|
|
fr.drawString( msg, 0, 0, 0 );
|
|
|
|
GL11.glPopAttrib();
|
|
}
|
|
|
|
}
|