- 52
- 1
- 1
Решил создать свою частицу (с гл и tesselator работаю впервые). Для тестов я создал блок (тайл), который генерирует частицу. При установке блока майн выбрасывает исключение "Already tesselating!"
Вот рендер частицы:
Вот вызов метод, который создает частицы:
Сам метод:
Java:
java.lang.IllegalStateException: Already tesselating!
at net.minecraft.client.renderer.Tessellator.startDrawing(Tessellator.java:257)
at net.minecraft.client.renderer.Tessellator.startDrawingQuads(Tessellator.java:247)
at ensorcellcraft.client.fx.FxWisp.renderParticle(FxWisp.java:49)
at net.minecraft.client.particle.EffectRenderer.renderParticles(EffectRenderer.java:162)
at net.minecraft.client.renderer.EntityRenderer.renderWorld(EntityRenderer.java:1351)
at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1087)
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1067)
at net.minecraft.client.Minecraft.run(Minecraft.java:962)
at net.minecraft.client.main.Main.main(Main.java:164)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
at GradleStart.main(Unknown Source)
Вот рендер частицы:
Java:
@Override
public void renderParticle(Tessellator t, float partialTicks, float par3, float par4, float par5, float par6, float par7) {
Minecraft.getMinecraft().renderEngine.bindTexture(rl);
GL11.glEnable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
float scale = moteParticleScale * (1 - particleAge/particleMaxAge);
float x = (float)(prevPosX + (posX - prevPosX) * partialTicks - interpPosX);
float y = (float)(prevPosY + (posY - prevPosY) * partialTicks - interpPosY);
float z = (float)(prevPosZ + (posZ - prevPosZ) * partialTicks - interpPosZ);
t.startDrawingQuads();
t.setBrightness(240);
t.setColorRGBA_I(color, 128);
t.addVertexWithUV(x - par3 * scale - par6 * scale, y - par4 * scale, z - par5 * scale - par7 * scale, 0.0, 0.0);
t.addVertexWithUV(x - par3 * scale + par6 * scale, y + par4 * scale, z - par5 * scale + par7 * scale, 1.0, 0.0);
t.addVertexWithUV(x + par3 * scale + par6 * scale, y + par4 * scale, z + par5 * scale + par7 * scale,1.0, 1.0);
t.addVertexWithUV(x + par3 * scale - par6 * scale, y - par4 * scale, z + par5 * scale - par7 * scale, 0.0, 1.0);
t.draw();
GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_DEPTH_TEST);
}
Вот вызов метод, который создает частицы:
Java:
public void updateEntity() {
EnsorcellCraft.proxy.wispFX(this.worldObj, (double)this.xCoord, (double)this.yCoord + 1, (double)this.zCoord,
0.5d, 0d, 0d, 3, 100, 5910527);
}
Сам метод:
Java:
public void wispFX(World world, double x, double y, double z, double motionX, double motionY, double motionZ,
float size, int maxAge, int color) {
FxWisp wisp = new FxWisp(world, x, y, z, size, motionX, motionY, size, maxAge, color);
Minecraft.getMinecraft().effectRenderer.addEffect(wisp);
}