@SubscribeEvent
public static void onPostRender(RenderWorldLastEvent event) {
Minecraft mc = Minecraft.getMinecraft();
TextureManager renderer = mc.renderEngine;
int dim = mc.world.provider.getDimension();
EntityPlayerSP player = mc.player;
float frame = event.getPartialTicks();
renderer.bindTexture(SPRITE_SHEET_ALT);
GL11.glPushMatrix();
GL11.glColor4f(1F, 1F, 1F, 1F);
GlStateManager.enableBlend();
GL11.glEnable(GL11.GL_BLEND); // 3042 = 0xBE2 = GL_BLEND (redundant?)
GL11.glAlphaFunc(GL11.GL_GREATER, 0.004F);
GlStateManager.depthMask(false); // isTransparent (therefore calls unnecessary in particle classes)
boolean rebound = false;
for (int layer = 3; layer >= 0; --layer) {
if (particles[layer].containsKey(dim)) {
ArrayList<Particle> fx = (ArrayList) particles[layer].get(dim);
if (!fx.isEmpty()) {
if (!rebound && layer < 2) {
renderer.bindTexture(SPRITE_SHEET);
rebound = true;
}
GL11.glPushMatrix();
switch (layer) {
case 0: case 2:
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_CURRENT_BIT);
break;
case 1: case 3:
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
break;
}
float f1 = ActiveRenderInfo.getRotationX();
float f2 = ActiveRenderInfo.getRotationZ();
float f3 = ActiveRenderInfo.getRotationYZ();
float f4 = ActiveRenderInfo.getRotationXY();
float f5 = ActiveRenderInfo.getRotationXZ();
Particle.interpPosX = player.lastTickPosX + (player.posX - player.lastTickPosX) * frame;
Particle.interpPosY = player.lastTickPosY + (player.posY - player.lastTickPosY) * frame;
Particle.interpPosZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * frame;
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder worldRenderer = tessellator.getBuffer();
worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.PARTICLE_POSITION_TEX_COLOR_LMAP);
for (final Particle effect : fx) {
if (effect != null) {
try {
effect.renderParticle(worldRenderer, player, frame, f1, f5, f2, f3, f4);
} catch (Exception err) {
crashParticle(err, effect);
}
}
}
tessellator.draw();
GL11.glPopMatrix();
}
}
}
GlStateManager.depthMask(true);
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GlStateManager.disableBlend();
GlStateManager.alphaFunc(GL11.GL_GREATER, 0.1F);
GL11.glPopMatrix();
}
ParticleEngine.java 文件源码
java
阅读 20
收藏 0
点赞 0
评论 0
项目:magistics
作者:
评论列表
文章目录