Jump to content

Recommended Posts

Posted

Hi

 

I'm on the slow painful process of updating my mod, I can't seem to find a way to render custom particles as before, as the ForgeHooksClient.bindTexture has been removed and I don't see any hooks on the RenderGlobal.class

 

Anyone can please enlighten me?

 

@SideOnly(Side.CLIENT)
public class MoCEntityFXStar extends EntityFX {

/**
     * sets which texture to use (2 = items.png)
     */
    @Override
    public int getFXLayer()
    {
        return 2;
    }

    

    @Override
    public String getTexture()
    {
        return "/mocreatures/items.png";
    }

    @Override
    public void renderParticle(Tessellator par1Tessellator, float par2, float par3, float par4, float par5, float par6, float par7)
    {
        ForgeHooksClient.bindTexture(getTexture(), 0);

        float var8 = (float) (this.getParticleTextureIndex() % 16) / 16.0F;
        float var9 = var8 + 0.0624375F;
        float var10 = (float) (this.getParticleTextureIndex() / 16) / 16.0F;
        float var11 = var10 + 0.0624375F;
        float var12 = 0.1F * this.particleScale;
        float var13 = (float) (this.prevPosX + (this.posX - this.prevPosX) * (double) par2 - interpPosX);
        float var14 = (float) (this.prevPosY + (this.posY - this.prevPosY) * (double) par2 - interpPosY);
        float var15 = (float) (this.prevPosZ + (this.posZ - this.prevPosZ) * (double) par2 - interpPosZ);
        float var16 = 1.2F - ((float) Math.random() * 0.5F);
        par1Tessellator.setColorOpaque_F(this.particleRed * var16, this.particleGreen * var16, this.particleBlue * var16);
        par1Tessellator.addVertexWithUV((double) (var13 - par3 * var12 - par6 * var12), (double) (var14 - par4 * var12), (double) (var15 - par5 * var12 - par7 * var12), (double) var9, (double) var11);
        par1Tessellator.addVertexWithUV((double) (var13 - par3 * var12 + par6 * var12), (double) (var14 + par4 * var12), (double) (var15 - par5 * var12 + par7 * var12), (double) var9, (double) var10);
        par1Tessellator.addVertexWithUV((double) (var13 + par3 * var12 + par6 * var12), (double) (var14 + par4 * var12), (double) (var15 + par5 * var12 + par7 * var12), (double) var8, (double) var10);
        par1Tessellator.addVertexWithUV((double) (var13 + par3 * var12 - par6 * var12), (double) (var14 - par4 * var12), (double) (var15 + par5 * var12 - par7 * var12), (double) var8, (double) var11);

    }


}

Posted

I noticed some of the bindTexture stuff has moved around a little. In places where I used ForgeHooksClient.binTexture(String, int) for 1.4.7, I now use:  FMLClientHandler.instance().getClient().renderEngine.bindTexture(String) for 1.5.x (no more int variable required). I am not sure if there is a simpler way, but this seems to work. Though I haven't tried it with EntityFX, it works great on my item renderers that implement IItemRenderer.

 

Hope that helps. :)

Posted

Thanks Nuchaz

 

it worked.

 

I had to replace some parameters on the addVertexWithUV, as the previous code was calculating the particle coordinates within the particles.png sheet, and binding a single texture wouldn't need that.

 

I'm showing the code for others to profit:

 

@Override
    public void renderParticle(Tessellator par1Tessellator, float par2, float par3, float par4, float par5, float par6, float par7)
    {
        //func_98187_b() = bindTexture();
    	FMLClientHandler.instance().getClient().renderEngine.func_98187_b("/mods/mocreatures/textures/misc/FXvanish.png");
        float scale = 0.1F * this.particleScale;
        float xPos = (float) (this.prevPosX + (this.posX - this.prevPosX) * (double) par2 - interpPosX);
        float yPos = (float) (this.prevPosY + (this.posY - this.prevPosY) * (double) par2 - interpPosY);
        float zPos = (float) (this.prevPosZ + (this.posZ - this.prevPosZ) * (double) par2 - interpPosZ);
        float colorIntensity = 1.0F;
        par1Tessellator.setColorOpaque_F(this.particleRed * colorIntensity, this.particleGreen * colorIntensity, this.particleBlue * colorIntensity);//, 1.0F);

        par1Tessellator.addVertexWithUV((double) (xPos - par3 * scale - par6 * scale), (double) (yPos - par4 * scale), (double) (zPos - par5 * scale - par7 * scale), 0D, 1D);
        par1Tessellator.addVertexWithUV((double) (xPos - par3 * scale + par6 * scale), (double) (yPos + par4 * scale), (double) (zPos - par5 * scale + par7 * scale), 1D, 1D);
        par1Tessellator.addVertexWithUV((double) (xPos + par3 * scale + par6 * scale), (double) (yPos + par4 * scale), (double) (zPos + par5 * scale + par7 * scale), 1D, 0D);
        par1Tessellator.addVertexWithUV((double) (xPos + par3 * scale - par6 * scale), (double) (yPos - par4 * scale), (double) (zPos + par5 * scale - par7 * scale), 0D, 0D);

        
    }

Posted

Thanks DrZhark. That helped me fix my particles for 1.5 :)

Although I'm having another problem with this. When ever I spawn my particle in the world. Every other particle in the world doesnt render, they are either invisible or just not rendering altogether. I've fixed my problem with having every particle in the world turning into my plasma particle, but fixing that caused this.

I also get no error when this occurs.

My ClientProxy

public class ClientProxy extends CommonProxy{
   @SidedProxy(clientSide = "mods.anotherWorld.client.ClientProxy", serverSide = "mods.anotherWorld.common.CommonProxy")
   public static ClientProxy proxy;
   
   /**
    * Spawns a Plasma particle
    * @param world The world to spawn the particle in
    * @param x X location to spawn the particle at
    * @param y Y location to spawn the particle at
    * @param z Z location to spawn the particle at
    * @param xVel X velocity to spawn the particle with
    * @param yVel Y velocity to spawn the particle with
    * @param zVel Z velocity to spawn the particle with
    * @param colour RGB colour to spawn the particle as
    */
   @SideOnly(Side.CLIENT)
   public void spawnPlasma(World world, double x, double y, double z, double xVel, double yVel, double zVel, float[] colour) {
       EntityFXPlasma fx = new EntityFXPlasma(Minecraft.getMinecraft().theWorld, x, y, z, xVel, yVel, zVel, colour);
       FMLClientHandler.instance().getClient().effectRenderer.addEffect((EntityFX)fx);

    }   
}

My spawning code. The particle velocity is determined by the meta data(Direction) of the block

    @SideOnly(Side.CLIENT)
    @Override
    public void randomDisplayTick(World world, int x, int y, int z, Random par5Random)
    {

    	for (int i = 0; i < 100; i++) {
    		double xStart = 0;
    		double yStart = 0;
    		double zStart = 0;
    		float red = 0F;
    		float green = (float) (0.1 + (Math.random() * 0.3));
    		float blue = (float) (0.1 + (Math.random() * 0.9));
        	float[] colour = {red, green, blue};
        	double xVel = 0.0D;
        	double zVel = 0.0D;
        	
        	if (world.getBlockMetadata(x, y, z) == 1) {
        		xVel = 0.0D;
        		zVel = -0.5D;
        		xStart = (x + 0.1) + (Math.random() * 0.9);
        		yStart = (y + 0.1) + (Math.random() * 0.9);
        		zStart = (z + 0.1) + (Math.random() * -6);
        	}
        	if (world.getBlockMetadata(x, y, z) == 2) {
        		xVel = 0.5D;
        		zVel = 0.0D;
        		xStart = (x + 0.1) + (Math.random() * 6);
        		yStart = (y + 0.1) + (Math.random() * 0.9);
        		zStart = (z + 0.1) + (Math.random() * 0.9);
        	}
        	if (world.getBlockMetadata(x, y, z) == 3) {
        		xVel = 0.0D;
        		zVel = 0.5D;
        		xStart = (x + 0.1) + (Math.random() * 0.9);
        		yStart = (y + 0.1) + (Math.random() * 0.9);
        		zStart = (z + 0.1) + (Math.random() * 6);
        	}
        	if (world.getBlockMetadata(x, y, z) == 4) {
        		xVel = -0.5D;
        		zVel = 0.0D;
        		xStart = (x + 0.1) + (Math.random() * -6);
        		yStart = (y + 0.1) + (Math.random() * 0.9);
        		zStart = (z + 0.1) + (Math.random() * 0.9);
        	}
        	
    		AnotherWorld.proxyClient.spawnPlasma(FMLClientHandler.instance().getClient().theWorld, xStart, yStart, zStart, xVel, 0.0D, zVel, colour);
    	}
    }

And using DrZhark's renderParticle method above with the path changed to my 16x16 particle texture

 

 

I'm Sparkst3r, that kid who makes Sphax textures.

Well hi there. :D

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.