Реквест гайда по частицам или помогите сразу здесь.

Всем привет. Вопрос таков, как сделать так, что при получении какого либо урона игрок спавнил на себе частицы, при этом кастомные частицы. Допустим, по игроку стукнули, он заспавнил частицы крови. И так же, как их привязать на зомби?
Есть идея о событиях, но нет вообще никакого представления о частицах. Прошу помощи.
 
771
5
Наследуешь это и все.

Код:
public abstract class EntityParticle extends EntityFX{

    public EntityParticle(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 abstract ResourceLocation getIconLoc();

    @Override
    public int getFXLayer(){
        return 3;//Корень зла, если это - 3, то при рендере он без твоего согласия не вызывает заранее tess.startDrawingQuads(); и tess.draw(); , что позволяет иметь свою текстуру.
    }
        //Те три метода, что ниже, для удобства
    public EntityParticle setMaxAge(int maxAge){
        particleMaxAge = maxAge;
        return this;
    }

    public EntityParticle setGravity(double gravity){
        particleGravity = (float)gravity;
        return this;
    }

    public EntityParticle setScale(double scale){
        particleScale = (float)scale;
        return this;
    }
}
 
Это все конечно же круто, но хотелось бы более подробный и разжеванный гайд.
 
Равен, распиши же более подробно. Я на деревянную голову не особо смыслю.
 
2,955
12
И нихрена у тебя не заработает и крашнится. Во первых, нахрена здесь рандом. Во вторых, где SideOnly(Side.CLIENT)
 
771
5
Наследуешь тот класс. 
Он заставит тебя создать метод getResourceLoc.
Возвращаешь в нем новый ResourceLocation, собственно твою текстуру частицы.
 
Сверху