mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
216 lines
7.7 KiB
Java
216 lines
7.7 KiB
Java
package com.hbm.render.tileentity;
|
|
|
|
import java.nio.FloatBuffer;
|
|
import java.util.Random;
|
|
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
import com.hbm.main.ResourceManager;
|
|
import com.hbm.render.util.RenderSparks;
|
|
import com.hbm.tileentity.machine.TileEntityCore;
|
|
|
|
import net.minecraft.client.renderer.GLAllocation;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraft.world.World;
|
|
|
|
public class RenderCore extends TileEntitySpecialRenderer {
|
|
|
|
private static final ResourceLocation sky = new ResourceLocation("textures/environment/end_sky.png");
|
|
private static final ResourceLocation portal = new ResourceLocation("textures/entity/end_portal.png");
|
|
private static final Random random = new Random(31100L);
|
|
FloatBuffer buffer = GLAllocation.createDirectFloatBuffer(16);
|
|
|
|
@Override
|
|
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) {
|
|
|
|
TileEntityCore core = (TileEntityCore)tileEntity;
|
|
renderStandby(x, y, z);
|
|
}
|
|
|
|
public void renderStandby(double x, double y, double z) {
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5);
|
|
GL11.glDisable(GL11.GL_LIGHTING);
|
|
GL11.glEnable(GL11.GL_CULL_FACE);
|
|
GL11.glDisable(GL11.GL_TEXTURE_2D);
|
|
|
|
GL11.glScalef(0.25F, 0.25F, 0.25F);
|
|
GL11.glColor3f(0.5F, 0.5F, 0.5F);
|
|
ResourceManager.sphere_uv.renderAll();
|
|
|
|
GL11.glEnable(GL11.GL_BLEND);
|
|
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
|
|
GL11.glScalef(1.25F, 1.25F, 1.25F);
|
|
GL11.glColor3f(0.1F, 0.1F, 0.1F);
|
|
ResourceManager.sphere_uv.renderAll();
|
|
GL11.glDisable(GL11.GL_BLEND);
|
|
|
|
GL11.glEnable(GL11.GL_TEXTURE_2D);
|
|
GL11.glEnable(GL11.GL_LIGHTING);
|
|
|
|
if((System.currentTimeMillis() / 100) % 10 == 0) {
|
|
for(int i = 0; i < 3; i++) {
|
|
RenderSparks.renderSpark((int) System.currentTimeMillis() / 100 + i * 10000, 0, 0, 0, 1.5F, 5, 10, 0xFFFF00, 0xFFFFFF);
|
|
RenderSparks.renderSpark((int) System.currentTimeMillis() / 50 + i * 10000, 0, 0, 0, 1.5F, 5, 10, 0xFFFF00, 0xFFFFFF);
|
|
}
|
|
}
|
|
|
|
GL11.glPopMatrix();
|
|
}
|
|
|
|
public void renderVoid(TileEntity tile, double x, double y, double z) {
|
|
|
|
World world = tile.getWorldObj();
|
|
GL11.glPushMatrix();
|
|
|
|
GL11.glDisable(GL11.GL_LIGHTING);
|
|
|
|
random.setSeed(31110L);
|
|
|
|
GL11.glDisable(GL11.GL_LIGHTING);
|
|
|
|
GL11.glTexGeni(GL11.GL_S, GL11.GL_TEXTURE_GEN_MODE, GL11.GL_EYE_LINEAR);
|
|
GL11.glTexGeni(GL11.GL_T, GL11.GL_TEXTURE_GEN_MODE, GL11.GL_EYE_LINEAR);
|
|
GL11.glTexGeni(GL11.GL_R, GL11.GL_TEXTURE_GEN_MODE, GL11.GL_EYE_LINEAR);
|
|
GL11.glTexGeni(GL11.GL_Q, GL11.GL_TEXTURE_GEN_MODE, GL11.GL_EYE_LINEAR);
|
|
GL11.glEnable(GL11.GL_TEXTURE_GEN_S);
|
|
GL11.glEnable(GL11.GL_TEXTURE_GEN_T);
|
|
GL11.glEnable(GL11.GL_TEXTURE_GEN_R);
|
|
GL11.glEnable(GL11.GL_TEXTURE_GEN_Q);
|
|
GL11.glMatrixMode(GL11.GL_TEXTURE);
|
|
GL11.glPushMatrix();
|
|
GL11.glLoadIdentity();
|
|
float f100 = world.getTotalWorldTime() % 500L / 500F;
|
|
GL11.glTranslatef(random.nextFloat(), f100, random.nextFloat());
|
|
|
|
Tessellator tessellator = Tessellator.instance;
|
|
|
|
final int end = 10;
|
|
for (int i = 0; i < end; ++i) {
|
|
float f5 = end - i;
|
|
float f7 = 1.0F / (f5 + 1.0F);
|
|
|
|
if (i == 0) {
|
|
this.bindTexture(sky);
|
|
f7 = 0.0F;
|
|
f5 = 65.0F;
|
|
GL11.glEnable(GL11.GL_BLEND);
|
|
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
|
}
|
|
|
|
if (i == 1) {
|
|
this.bindTexture(portal);
|
|
GL11.glEnable(GL11.GL_BLEND);
|
|
GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE);
|
|
}
|
|
|
|
GL11.glTranslatef(random.nextFloat() * (1 - f7), random.nextFloat() * (1 - f7), random.nextFloat() * (1 - f7));
|
|
float scale = 0.9F;
|
|
GL11.glScalef(scale, scale, scale);
|
|
float ang = 360 / end;
|
|
GL11.glRotatef(ang * i + ang * random.nextFloat(), 0.0F, 0.0F, 1.0F);
|
|
|
|
float f11 = (float) random.nextDouble() * 0.5F + 0.9F;
|
|
float f12 = (float) random.nextDouble() * 0.5F + 0.1F;
|
|
float f13 = (float) random.nextDouble() * 0.5F + 0.9F;
|
|
if (i == 0) {
|
|
f13 = 1.0F;
|
|
f12 = 1.0F;
|
|
f11 = 1.0F;
|
|
}
|
|
f13 *= f7;
|
|
f12 *= f7;
|
|
f11 *= f7;
|
|
|
|
GL11.glTexGen(GL11.GL_S, GL11.GL_EYE_PLANE, this.func_147525_a(1, 0, 0, 0));
|
|
GL11.glTexGen(GL11.GL_T, GL11.GL_EYE_PLANE, this.func_147525_a(0, 0, 1, 0));
|
|
GL11.glTexGen(GL11.GL_R, GL11.GL_EYE_PLANE, this.func_147525_a(0, 0, 0, 1));
|
|
GL11.glTexGen(GL11.GL_Q, GL11.GL_EYE_PLANE, this.func_147525_a(0, 1, 0, 0));
|
|
|
|
GL11.glRotatef(180, 0, 0, 1);
|
|
tessellator.startDrawingQuads();
|
|
tessellator.setColorOpaque_F(f11, f12, f13);
|
|
tessellator.setBrightness(0xF000F0);
|
|
tessellator.addVertex(x + 0.0, y + 0.0, z + 1.0);
|
|
tessellator.addVertex(x + 0.0, y + 0.0, z + 0.0);
|
|
tessellator.addVertex(x + 1.0, y + 0.0, z + 0.0);
|
|
tessellator.addVertex(x + 1.0, y + 0.0, z + 1.0);
|
|
tessellator.draw();
|
|
|
|
tessellator.startDrawingQuads();
|
|
tessellator.setColorOpaque_F(f11, f12, f13);
|
|
tessellator.setBrightness(0xF000F0);
|
|
tessellator.addVertex(x + 1.0, y + 1.0, z + 1.0);
|
|
tessellator.addVertex(x + 1.0, y + 1.0, z + 0.0);
|
|
tessellator.addVertex(x + 0.0, y + 1.0, z + 0.0);
|
|
tessellator.addVertex(x + 0.0, y + 1.0, z + 1.0);
|
|
tessellator.draw();
|
|
|
|
GL11.glTexGen(GL11.GL_S, GL11.GL_EYE_PLANE, this.func_147525_a(0, 1, 0, 0));
|
|
GL11.glTexGen(GL11.GL_T, GL11.GL_EYE_PLANE, this.func_147525_a(1, 0, 0, 0));
|
|
GL11.glTexGen(GL11.GL_R, GL11.GL_EYE_PLANE, this.func_147525_a(0, 0, 0, 1));
|
|
GL11.glTexGen(GL11.GL_Q, GL11.GL_EYE_PLANE, this.func_147525_a(0, 0, 1, 0));
|
|
|
|
tessellator.startDrawingQuads();
|
|
tessellator.setColorOpaque_F(f11, f12, f13);
|
|
tessellator.setBrightness(0xF000F0);
|
|
tessellator.addVertex(x + 0.0, y + 0.0, z + 0.0);
|
|
tessellator.addVertex(x + 0.0, y + 1.0, z + 0.0);
|
|
tessellator.addVertex(x + 1.0, y + 1.0, z + 0.0);
|
|
tessellator.addVertex(x + 1.0, y + 0.0, z + 0.0);
|
|
|
|
tessellator.addVertex(x + 1.0, y + 0.0, z + 1.0);
|
|
tessellator.addVertex(x + 1.0, y + 1.0, z + 1.0);
|
|
tessellator.addVertex(x + 0.0, y + 1.0, z + 1.0);
|
|
tessellator.addVertex(x + 0.0, y + 0.0, z + 1.0);
|
|
tessellator.draw();
|
|
|
|
GL11.glTexGen(GL11.GL_S, GL11.GL_EYE_PLANE, this.func_147525_a(0, 1, 0, 0));
|
|
GL11.glTexGen(GL11.GL_T, GL11.GL_EYE_PLANE, this.func_147525_a(0, 0, 1, 0));
|
|
GL11.glTexGen(GL11.GL_R, GL11.GL_EYE_PLANE, this.func_147525_a(0, 0, 0, 1));
|
|
GL11.glTexGen(GL11.GL_Q, GL11.GL_EYE_PLANE, this.func_147525_a(1, 0, 0, 0));
|
|
|
|
tessellator.startDrawingQuads();
|
|
tessellator.setColorOpaque_F(f11, f12, f13);
|
|
tessellator.setBrightness(0xF000F0);
|
|
tessellator.addVertex(x + 0.0, y + 0.0, z + 1.0);
|
|
tessellator.addVertex(x + 0.0, y + 1.0, z + 1.0);
|
|
tessellator.addVertex(x + 0.0, y + 1.0, z + 0.0);
|
|
tessellator.addVertex(x + 0.0, y + 0.0, z + 0.0);
|
|
tessellator.draw();
|
|
|
|
tessellator.startDrawingQuads();
|
|
tessellator.setColorOpaque_F(f11, f12, f13);
|
|
tessellator.setBrightness(0xF000F0);
|
|
tessellator.addVertex(x + 1.0, y + 0.0, z + 0.0);
|
|
tessellator.addVertex(x + 1.0, y + 1.0, z + 0.0);
|
|
tessellator.addVertex(x + 1.0, y + 1.0, z + 1.0);
|
|
tessellator.addVertex(x + 1.0, y + 0.0, z + 1.0);
|
|
tessellator.draw();
|
|
}
|
|
|
|
GL11.glPopMatrix();
|
|
GL11.glMatrixMode(GL11.GL_MODELVIEW);
|
|
GL11.glDisable(GL11.GL_BLEND);
|
|
GL11.glDisable(GL11.GL_TEXTURE_GEN_S);
|
|
GL11.glDisable(GL11.GL_TEXTURE_GEN_T);
|
|
GL11.glDisable(GL11.GL_TEXTURE_GEN_R);
|
|
GL11.glDisable(GL11.GL_TEXTURE_GEN_Q);
|
|
GL11.glEnable(GL11.GL_LIGHTING);
|
|
GL11.glPopMatrix();
|
|
}
|
|
|
|
private FloatBuffer func_147525_a(float x, float y, float z, float w) {
|
|
|
|
this.buffer.clear();
|
|
this.buffer.put(x).put(y).put(z).put(w);
|
|
this.buffer.flip();
|
|
return this.buffer;
|
|
}
|
|
|
|
}
|