mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
136 lines
4.2 KiB
Java
136 lines
4.2 KiB
Java
package com.hbm.render.tileentity;
|
|
|
|
import org.lwjgl.opengl.GL11;
|
|
import org.lwjgl.opengl.GL12;
|
|
|
|
import com.hbm.render.util.RenderDecoItem;
|
|
import com.hbm.tileentity.machine.storage.TileEntityMassStorage;
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.renderer.OpenGlHelper;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.client.renderer.entity.RenderItem;
|
|
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public class RenderMassStorage extends TileEntitySpecialRenderer {
|
|
|
|
private RenderItem itemRenderer = new RenderDecoItem(this);
|
|
|
|
@Override
|
|
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) {
|
|
if(!(tile instanceof TileEntityMassStorage)) return;
|
|
TileEntityMassStorage storage = (TileEntityMassStorage) tile;
|
|
|
|
if(storage.type == null) return;
|
|
|
|
Minecraft mc = Minecraft.getMinecraft();
|
|
int dir = storage.getBlockMetadata() / 4;
|
|
|
|
// fuck this shit, push pop the whole ass lighting state then for all I fucken care
|
|
GL11.glPushAttrib(GL11.GL_ENABLE_BIT | GL11.GL_LIGHTING_BIT | GL11.GL_COLOR_BUFFER_BIT | GL11.GL_TRANSFORM_BIT);
|
|
|
|
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
|
|
|
|
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
|
|
|
|
GL11.glPushMatrix();
|
|
{
|
|
|
|
// align to block
|
|
GL11.glTranslated(x, y, z);
|
|
|
|
// align item (and flip)
|
|
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
|
|
GL11.glRotatef(180.0F, 0, 0, 1);
|
|
switch(dir) {
|
|
case 1: GL11.glRotatef(180.0F, 0, 1, 0); break;
|
|
case 2: GL11.glRotatef(-90.0F, 0, 1, 0); break;
|
|
case 3: GL11.glRotatef(90.0F, 0, 1, 0); break;
|
|
}
|
|
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
|
|
|
|
|
|
GL11.glTranslatef(0, 0, -0.005F); // offset to prevent z-fighting
|
|
GL11.glScalef(1.0F / 16.0F, 1.0F / 16.0F, -0.0001F); // scale to block size
|
|
|
|
|
|
GL11.glPushMatrix();
|
|
{
|
|
|
|
GL11.glTranslatef(4.0F, 2.5F, 0); // adjust to centered location
|
|
GL11.glScalef(8.0F / 16.0F, 8.0F / 16.0F, 1); // scale to 8 pixels across
|
|
|
|
if(mc.gameSettings.fancyGraphics) {
|
|
itemRenderer.renderItemAndEffectIntoGUI(mc.fontRenderer, mc.renderEngine, storage.type, 0, 0);
|
|
} else {
|
|
itemRenderer.renderItemIntoGUI(mc.fontRenderer, mc.renderEngine, storage.type, 0, 0, true);
|
|
}
|
|
|
|
}
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glColor3f(1, 1, 1);
|
|
|
|
String text = getTextForCount(storage.getStockpile(), mc.fontRenderer.getUnicodeFlag());
|
|
|
|
int textX = 32 - mc.fontRenderer.getStringWidth(text) / 2;
|
|
int textY = 44;
|
|
|
|
GL11.glDisable(GL11.GL_LIGHTING);
|
|
GL11.glPushMatrix();
|
|
{
|
|
|
|
GL11.glScalef(4.0F / 16.0F, 4.0F / 16.0F, 4.0F / 16.0F);
|
|
|
|
int fontColor = 0x00FF00;
|
|
|
|
// funky text shadow rendering with no z-fighting and alpha testing still enabled
|
|
mc.fontRenderer.drawString(text, textX + 1, textY + 1, (fontColor & 16579836) >> 2 | fontColor & -16777216);
|
|
GL11.glTranslatef(0, 0, 1);
|
|
mc.fontRenderer.drawString(text, textX, textY, 0x00FF00);
|
|
|
|
}
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glDisable(GL11.GL_TEXTURE_2D);
|
|
|
|
double fraction = (double) storage.getStockpile() / (double) storage.getCapacity();
|
|
|
|
GL11.glColor3d(1.0 - fraction, fraction, 0.0);
|
|
|
|
double bMinX = 2;
|
|
double bMaxX = 2 + fraction * 12;
|
|
double bMinY = 13.5;
|
|
double bMaxY = 14;
|
|
|
|
Tessellator tessellator = Tessellator.instance;
|
|
tessellator.startDrawingQuads();
|
|
tessellator.addVertex(bMinX, bMaxY, 0);
|
|
tessellator.addVertex(bMaxX, bMaxY, 0);
|
|
tessellator.addVertex(bMaxX, bMinY, 0);
|
|
tessellator.addVertex(bMinX, bMinY, 0);
|
|
tessellator.draw();
|
|
|
|
GL11.glEnable(GL11.GL_TEXTURE_2D);
|
|
GL11.glEnable(GL11.GL_LIGHTING);
|
|
|
|
}
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPopAttrib();
|
|
}
|
|
|
|
private String getTextForCount(int stackSize, boolean isUnicode) {
|
|
if(stackSize >= 100000000 || (stackSize >= 1000000 && isUnicode)) return String.format("%.0fM", stackSize / 1000000f);
|
|
if(stackSize >= 1000000) return String.format("%.1fM", stackSize / 1000000f);
|
|
if(stackSize >= 100000 || (stackSize >= 10000 && isUnicode)) return String.format("%.0fK", stackSize / 1000f);
|
|
if(stackSize >= 10000) return String.format("%.1fK", stackSize / 1000f);
|
|
return String.valueOf(stackSize);
|
|
}
|
|
|
|
}
|