- 279
- 0
У меня есть класс extends EntityFX.
По пути текстуры лежит стандартный файл с партиклами из майнкарфта.
Как вызвать партикл в блоке?
Где нужно регистрировать партиклы?
Поправьте если где то что то сделал не так. Просто не могу разобраться с этой дрянью.
Код:
package ru.steevenrichard.lastdays.common.blocks;
import org.lwjgl.opengl.GL11;
import net.minecraft.client.Minecraft;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
public abstract class BlockParticleTest extends EntityFX{
private static ResourceLocation particles = new ResourceLocation("lastdays:particles/particles.png");
public BlockParticleTest(World wrd, double x, double y, double z){
super(wrd, x, y, z);
}
//Этот метод скопипастен полностью, кроме того, что помечено.
@Override
public void renderParticle(Tessellator tess, float partialTicks, float par3, float par4, float par5, float par6, float par7){
Minecraft.getMinecraft().renderEngine.bindTexture(getIconLoc());//МЕТКА
GL11.glDepthMask(false);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glAlphaFunc(GL11.GL_GREATER, 0.003921569F);//МЕТКА
tess.startDrawingQuads();//МЕТКА
tess.setBrightness(getBrightnessForRender(partialTicks));//МЕТКА
float scale = 0.1F * particleScale;
float x = (float)(prevPosX + (posX - prevPosX) * partialTicks - interpPosX);
float y = (float)(prevPosY + (posY - prevPosY) * partialTicks - interpPosY);
float z = (float)(prevPosZ + (posZ - prevPosZ) * partialTicks - interpPosZ);
tess.addVertexWithUV(x - par3 * scale - par6 * scale, y - par4 * scale, z - par5 * scale - par7 * scale, /*НАЧАЛО_МЕТКИ*/0.0, 0.0/*КОНЕЦ_МЕТКИ*/);
tess.addVertexWithUV(x - par3 * scale + par6 * scale, y + par4 * scale, z - par5 * scale + par7 * scale, /*НАЧАЛО_МЕТКИ*/1.0, 0.0/*КОНЕЦ_МЕТКИ*/);
tess.addVertexWithUV(x + par3 * scale + par6 * scale, y + par4 * scale, z + par5 * scale + par7 * scale, /*НАЧАЛО_МЕТКИ*/1.0, 1.0/*КОНЕЦ_МЕТКИ*/);
tess.addVertexWithUV(x + par3 * scale - par6 * scale, y - par4 * scale, z + par5 * scale - par7 * scale, /*НАЧАЛО_МЕТКИ*/0.0, 1.0/*КОНЕЦ_МЕТКИ*/);
tess.draw();//МЕТКА
GL11.glDisable(GL11.GL_BLEND);
GL11.glDepthMask(true);
GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);//МЕТКА
}
protected ResourceLocation getIconLoc() {
return particles;
}
@Override
public int getFXLayer(){
return 3;//Корень зла, если это - 3, то при рендере он без твоего согласия не вызывает заранее tess.startDrawingQuads(); и tess.draw(); , что позволяет иметь свою текстуру.
}
//Те три метода, что ниже, для удобства
public BlockParticleTest setMaxAge(int maxAge){
particleMaxAge = maxAge;
return this;
}
public BlockParticleTest setGravity(double gravity){
particleGravity = (float)gravity;
return this;
}
}
Как вызвать партикл в блоке?
Где нужно регистрировать партиклы?
Поправьте если где то что то сделал не так. Просто не могу разобраться с этой дрянью.