DrZhark Posted March 23, 2013 Posted March 23, 2013 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); } } Quote
Nuchaz Posted March 23, 2013 Posted March 23, 2013 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. Quote
DrZhark Posted March 24, 2013 Author Posted March 24, 2013 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); } Quote
TheSparkst3r Posted March 24, 2013 Posted March 24, 2013 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 Quote I'm Sparkst3r, that kid who makes Sphax textures. Well hi there.
Recommended Posts
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.