73 lines
3.0 KiB
Java

package com.hbm.particle;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
@SideOnly(Side.CLIENT)
public class EntityFXRotating extends EntityFX {
protected EntityFXRotating(World world, double x, double y, double z) {
super(world, x, y, z);
}
@Override
public int getFXLayer() {
return 1;
}
public void renderParticleRotated(Tessellator tess, float interp, float sX, float sY, float sZ, float dX, float dZ, double scale) {
float pX = (float) (this.prevPosX + (this.posX - this.prevPosX) * (double) interp - interpPosX);
float pY = (float) (this.prevPosY + (this.posY - this.prevPosY) * (double) interp - interpPosY);
float pZ = (float) (this.prevPosZ + (this.posZ - this.prevPosZ) * (double) interp - interpPosZ);
float rotation = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * interp;
double x1 = 0 - sX * scale - dX * scale;
double y1 = 0 - sY * scale;
double z1 = 0 - sZ * scale - dZ * scale;
double x2 = 0 - sX * scale + dX * scale;
double y2 = 0 + sY * scale;
double z2 = 0 - sZ * scale + dZ * scale;
double x3 = 0 + sX * scale + dX * scale;
double y3 = 0 + sY * scale;
double z3 = 0 + sZ * scale + dZ * scale;
double x4 = 0 + sX * scale - dX * scale;
double y4 = 0 - sY * scale;
double z4 = 0 + sZ * scale - dZ * scale;
double nX = ((y2 - y1) * (z3 - z1)) - ((z2 - z1) * (y3 - y1));
double nY = ((z2 - z1) * (x3 - x1)) - ((x2 - x1) * (z3 - z1));
double nZ = ((x2 - x1) * (y3 - y1)) - ((y2 - y1) * (x3 - x1));
Vec3 vec = Vec3.createVectorHelper(nX, nY, nZ).normalize();
nX = vec.xCoord;
nY = vec.yCoord;
nZ = vec.zCoord;
double cosTh = Math.cos(rotation * Math.PI / 180D);
double sinTh = Math.sin(rotation * Math.PI / 180D);
double x01 = x1 * cosTh + (nY * z1 - nZ * y1) * sinTh;
double y01 = y1 * cosTh + (nZ * x1 - nX * z1) * sinTh;
double z01 = z1 * cosTh + (nX * y1 - nY * x1) * sinTh;
double x02 = x2 * cosTh + (nY * z2 - nZ * y2) * sinTh;
double y02 = y2 * cosTh + (nZ * x2 - nX * z2) * sinTh;
double z02 = z2 * cosTh + (nX * y2 - nY * x2) * sinTh;
double x03 = x3 * cosTh + (nY * z3 - nZ * y3) * sinTh;
double y03 = y3 * cosTh + (nZ * x3 - nX * z3) * sinTh;
double z03 = z3 * cosTh + (nX * y3 - nY * x3) * sinTh;
double x04 = x4 * cosTh + (nY * z4 - nZ * y4) * sinTh;
double y04 = y4 * cosTh + (nZ * x4 - nX * z4) * sinTh;
double z04 = z4 * cosTh + (nX * y4 - nY * x4) * sinTh;
tess.addVertexWithUV(pX + x01, pY + y01, pZ + z01, particleIcon.getMaxU(), particleIcon.getMaxV());
tess.addVertexWithUV(pX + x02, pY + y02, pZ + z02, particleIcon.getMaxU(), particleIcon.getMinV());
tess.addVertexWithUV(pX + x03, pY + y03, pZ + z03, particleIcon.getMinU(), particleIcon.getMinV());
tess.addVertexWithUV(pX + x04, pY + y04, pZ + z04, particleIcon.getMinU(), particleIcon.getMaxV());
}
}