mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-08-10 17:55:44 +00:00
125 lines
4.0 KiB
Java
125 lines
4.0 KiB
Java
package com.hbm.particle;
|
|
|
|
import java.util.Random;
|
|
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
import com.hbm.wiaj.WorldInAJar;
|
|
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.particle.EntityFX;
|
|
import net.minecraft.client.renderer.RenderBlocks;
|
|
import net.minecraft.client.renderer.RenderHelper;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.client.renderer.texture.TextureManager;
|
|
import net.minecraft.client.renderer.texture.TextureMap;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.world.World;
|
|
|
|
public class ParticleDebris extends EntityFX {
|
|
|
|
private RenderBlocks renderer;
|
|
public WorldInAJar world;
|
|
public static Random rng = new Random();
|
|
|
|
public ParticleDebris(World world, double x, double y, double z) {
|
|
super(world, x, y, z);
|
|
}
|
|
|
|
public ParticleDebris(World world, double x, double y, double z, double mx, double my, double mz) {
|
|
super(world, x, y, z);
|
|
double mult = 3;
|
|
this.motionX = mx * mult;
|
|
this.motionY = my * mult;
|
|
this.motionZ = mz * mult;
|
|
this.particleMaxAge = 100;
|
|
this.particleGravity = 0.15F;
|
|
this.noClip = true;
|
|
}
|
|
|
|
@Override
|
|
public int getFXLayer() {
|
|
return 3;
|
|
}
|
|
|
|
@Override
|
|
public void onUpdate() {
|
|
this.prevPosX = this.posX;
|
|
this.prevPosY = this.posY;
|
|
this.prevPosZ = this.posZ;
|
|
|
|
if(this.particleAge > 5) this.noClip = false;
|
|
|
|
rng.setSeed(this.getEntityId());
|
|
this.prevRotationPitch = this.rotationPitch;
|
|
this.prevRotationYaw = this.rotationYaw;
|
|
this.rotationPitch += rng.nextFloat() * 10;
|
|
this.rotationYaw += rng.nextFloat() * 10;
|
|
|
|
if(this.getEntityId() % 3 == 0) {
|
|
TextureManager man = Minecraft.getMinecraft().renderEngine;
|
|
ParticleRocketFlame fx = new ParticleRocketFlame(man, worldObj, posX, posY, posZ).setScale(1F * Math.max(world.sizeY, 6) / 16F);
|
|
fx.prevPosX = fx.posX;
|
|
fx.prevPosY = fx.posY;
|
|
fx.prevPosZ = fx.posZ;
|
|
fx.setMaxAge(50);
|
|
Minecraft.getMinecraft().effectRenderer.addEffect(fx);
|
|
}
|
|
|
|
this.motionY -= this.particleGravity;
|
|
|
|
this.moveEntity(this.motionX, this.motionY, this.motionZ);
|
|
|
|
this.particleAge++;
|
|
if(this.onGround || this.isInWeb) this.setDead();
|
|
}
|
|
|
|
@Override
|
|
public void renderParticle(Tessellator tess, float interp, float fX, float fY, float fZ, float sX, float sZ) {
|
|
|
|
if(world == null) return;
|
|
|
|
if(renderer == null) {
|
|
renderer = new RenderBlocks(world);
|
|
}
|
|
|
|
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
|
|
double dX = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double)interp;
|
|
double dY = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double)interp;
|
|
double dZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double)interp;
|
|
|
|
float pX = (float) ((this.prevPosX + (this.posX - this.prevPosX) * (double) interp - dX));
|
|
float pY = (float) ((this.prevPosY + (this.posY - this.prevPosY) * (double) interp - dY));
|
|
float pZ = (float) ((this.prevPosZ + (this.posZ - this.prevPosZ) * (double) interp - dZ));
|
|
|
|
renderer.enableAO = true;
|
|
world.lightlevel = worldObj.getLightBrightnessForSkyBlocks((int) Math.floor(posX), (int) Math.floor(posY), (int) Math.floor(posZ), 0);
|
|
|
|
RenderHelper.disableStandardItemLighting();
|
|
GL11.glDisable(GL11.GL_BLEND);
|
|
//OpenGlHelper.glBlendFunc(770, 771, 1, 0);
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslatef(pX, pY, pZ);
|
|
GL11.glRotated(prevRotationPitch + (rotationPitch - prevRotationPitch) * interp, 0, 1, 0);
|
|
GL11.glRotated(prevRotationYaw + (rotationYaw - prevRotationYaw) * interp, 0, 0, 1);
|
|
GL11.glTranslated(-world.sizeX / 2D, -world.sizeY / 2D, -world.sizeZ / 2D);
|
|
|
|
Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
|
|
GL11.glShadeModel(GL11.GL_SMOOTH);
|
|
Tessellator.instance.startDrawingQuads();
|
|
|
|
for(int ix = 0; ix < world.sizeX; ix++) {
|
|
for(int iy = 0; iy < world.sizeY; iy++) {
|
|
for(int iz = 0; iz < world.sizeZ; iz++) {
|
|
try { renderer.renderBlockByRenderType(world.getBlock(ix, iy, iz), ix, iy, iz); } catch(Exception ex) { }
|
|
}
|
|
}
|
|
}
|
|
|
|
Tessellator.instance.draw();
|
|
GL11.glShadeModel(GL11.GL_FLAT);
|
|
GL11.glPopMatrix();
|
|
}
|
|
}
|