From dd17ebd0097d587542d549be43313e016487d14a Mon Sep 17 00:00:00 2001 From: LexManos Date: Mon, 26 Mar 2012 02:48:58 -0700 Subject: [PATCH] Cleanup the EffectRenderer patches, Allows custom food items to have the proper particals. Cleaned up special case class in favor of basic java generics. --- .../src/forge/BlockTextureParticles.java | 15 -- .../minecraft/src/EffectRenderer.java.patch | 139 ++++++++++-------- .../net/minecraft/src/RenderGlobal.java.patch | 45 ++++++ 3 files changed, 120 insertions(+), 79 deletions(-) delete mode 100755 forge/forge_client/src/net/minecraft/src/forge/BlockTextureParticles.java diff --git a/forge/forge_client/src/net/minecraft/src/forge/BlockTextureParticles.java b/forge/forge_client/src/net/minecraft/src/forge/BlockTextureParticles.java deleted file mode 100755 index 1bee16d34..000000000 --- a/forge/forge_client/src/net/minecraft/src/forge/BlockTextureParticles.java +++ /dev/null @@ -1,15 +0,0 @@ -package net.minecraft.src.forge; - -import java.util.ArrayList; -import java.util.List; - -public class BlockTextureParticles -{ - public String texture; - public List effects; - - public BlockTextureParticles() - { - effects = new ArrayList(); - } -} diff --git a/forge/patches/minecraft/net/minecraft/src/EffectRenderer.java.patch b/forge/patches/minecraft/net/minecraft/src/EffectRenderer.java.patch index a841b7262..1e562af33 100644 --- a/forge/patches/minecraft/net/minecraft/src/EffectRenderer.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/EffectRenderer.java.patch @@ -1,6 +1,12 @@ --- ../src_base/minecraft/net/minecraft/src/EffectRenderer.java 0000-00-00 00:00:00.000000000 -0000 +++ ../src_work/minecraft/net/minecraft/src/EffectRenderer.java 0000-00-00 00:00:00.000000000 -0000 -@@ -5,6 +5,8 @@ +@@ -1,10 +1,14 @@ + package net.minecraft.src; + + import java.util.ArrayList; ++import java.util.Hashtable; + import java.util.List; ++import java.util.Map.Entry; import java.util.Random; import org.lwjgl.opengl.GL11; @@ -9,130 +15,135 @@ public class EffectRenderer { /** Reference to the World object. */ -@@ -15,6 +17,8 @@ +@@ -15,6 +19,8 @@ /** RNG. */ private Random rand = new Random(); -+ private List effectList = new ArrayList(); ++ private Hashtable> effectList = new Hashtable>(); + public EffectRenderer(World par1World, RenderEngine par2RenderEngine) { if (par1World != null) -@@ -57,6 +61,23 @@ +@@ -57,6 +63,24 @@ } } } + -+ for (int x = 0; x < effectList.size(); x++) ++ for (String key : effectList.keySet()) + { -+ BlockTextureParticles entry = (BlockTextureParticles)effectList.get(x); -+ for (int y = 0; y < entry.effects.size(); y++) ++ ArrayList entry = effectList.get(key); ++ for (int y = 0; y < entry.size(); y++) + { -+ EntityFX entityfx = (EntityFX)entry.effects.get(y); -+ if (entityfx.isDead) ++ EntityFX var3 = entry.get(y); ++ var3.onUpdate(); ++ if (var3.isDead) + { -+ entry.effects.remove(y--); ++ entry.remove(y--); + } + } + if (effectList.size() == 0) + { -+ effectList.remove(x--); ++ effectList.remove(key); + } + } } /** -@@ -102,12 +123,30 @@ - for (int var11 = 0; var11 < this.fxLayers[var8].size(); ++var11) - { - EntityFX var12 = (EntityFX)this.fxLayers[var8].get(var11); -+ if (var12 instanceof EntityDiggingFX) -+ { -+ continue; -+ } - var10.setBrightness(var12.getBrightnessForRender(par2)); - var12.renderParticle(var10, par2, var3, var7, var4, var5, var6); - } - +@@ -109,6 +133,23 @@ var10.draw(); } -+ Tessellator tessallator = Tessellator.instance; -+ for (int x = 0; x < effectList.size(); x++) + } ++ ++ Tessellator tessallator = Tessellator.instance; ++ ++ for (Entry> entry : effectList.entrySet()) ++ { ++ GL11.glBindTexture(GL11.GL_TEXTURE_2D, renderer.getTexture(entry.getKey())); ++ tessallator.startDrawingQuads(); ++ for (EntityFX entryfx : entry.getValue()) + { -+ BlockTextureParticles entry = (BlockTextureParticles)effectList.get(x); -+ GL11.glBindTexture(GL11.GL_TEXTURE_2D, renderer.getTexture(entry.texture)); -+ tessallator.startDrawingQuads(); -+ for (int y = 0; y < entry.effects.size(); y++) ++ if (entryfx.getFXLayer() != 3) + { -+ EntityFX entryfx = (EntityFX)entry.effects.get(y); + tessallator.setBrightness(entryfx.getBrightnessForRender(par2)); + entryfx.renderParticle(tessallator, par2, var3, var7, var4, var5, var6); + } -+ tessallator.draw(); + } - } ++ tessallator.draw(); ++ } } -@@ -141,6 +180,13 @@ + public void func_1187_b(Entity par1Entity, float par2) +@@ -141,6 +182,12 @@ { this.fxLayers[var2].clear(); } + -+ for (int x = 0; x < effectList.size(); x++) ++ for (ArrayList entry : effectList.values()) + { -+ BlockTextureParticles entry = (BlockTextureParticles)effectList.get(x); -+ entry.effects.clear(); ++ entry.clear(); + } + effectList.clear(); } public void addBlockDestroyEffects(int par1, int par2, int par3, int par4, int par5) -@@ -160,7 +206,7 @@ +@@ -160,7 +207,7 @@ double var13 = (double)par2 + ((double)var9 + 0.5D) / (double)var7; double var15 = (double)par3 + ((double)var10 + 0.5D) / (double)var7; int var17 = this.rand.nextInt(6); - this.addEffect((new EntityDiggingFX(this.worldObj, var11, var13, var15, var11 - (double)par1 - 0.5D, var13 - (double)par2 - 0.5D, var15 - (double)par3 - 0.5D, var6, var17, par5)).func_4041_a(par1, par2, par3)); -+ addDigParticleEffect((EntityDiggingFX)(new EntityDiggingFX(this.worldObj, var11, var13, var15, var11 - (double)par1 - 0.5D, var13 - (double)par2 - 0.5D, var15 - (double)par3 - 0.5D, var6, var17, par5)).func_4041_a(par1, par2, par3), var6); ++ this.addEffect((new EntityDiggingFX(this.worldObj, var11, var13, var15, var11 - (double)par1 - 0.5D, var13 - (double)par2 - 0.5D, var15 - (double)par3 - 0.5D, var6, var17, par5)).func_4041_a(par1, par2, par3), var6); } } } -@@ -212,7 +258,7 @@ +@@ -212,12 +259,49 @@ var8 = (double)par1 + var6.maxX + (double)var7; } - this.addEffect((new EntityDiggingFX(this.worldObj, var8, var10, var12, 0.0D, 0.0D, 0.0D, var6, par4, this.worldObj.getBlockMetadata(par1, par2, par3))).func_4041_a(par1, par2, par3).multiplyVelocity(0.2F).func_405_d(0.6F)); -+ addDigParticleEffect((EntityDiggingFX)(new EntityDiggingFX(this.worldObj, var8, var10, var12, 0.0D, 0.0D, 0.0D, var6, par4, this.worldObj.getBlockMetadata(par1, par2, par3))).func_4041_a(par1, par2, par3).multiplyVelocity(0.2F).func_405_d(0.6F), var6); ++ this.addEffect((new EntityDiggingFX(this.worldObj, var8, var10, var12, 0.0D, 0.0D, 0.0D, var6, par4, this.worldObj.getBlockMetadata(par1, par2, par3))).func_4041_a(par1, par2, par3).multiplyVelocity(0.2F).func_405_d(0.6F), var6); } } -@@ -220,4 +266,30 @@ + public String getStatistics() { - return "" + (this.fxLayers[0].size() + this.fxLayers[1].size() + this.fxLayers[2].size()); - } -+ -+ public void addDigParticleEffect(EntityDiggingFX effect, Block block) -+ { -+ boolean added = false; -+ String texture = ForgeHooksClient.getTexture("/terrain.png", block); -+ -+ for (int x = 0; x < effectList.size(); x++) +- return "" + (this.fxLayers[0].size() + this.fxLayers[1].size() + this.fxLayers[2].size()); ++ int size = 0; ++ for (List x : fxLayers) + { -+ BlockTextureParticles entry = (BlockTextureParticles)effectList.get(x); -+ if (entry.texture.equals(texture)) -+ { -+ entry.effects.add(effect); -+ added = true; -+ } ++ size += x.size(); + } -+ -+ if (!added) ++ for (ArrayList entry : effectList.values()) + { -+ BlockTextureParticles entry = new BlockTextureParticles(); -+ entry.texture = texture; -+ entry.effects.add(effect); -+ effectList.add(entry); ++ size += entry.size(); + } -+ -+ addEffect(effect); ++ return Integer.toString(size); + } ++ ++ public void addEffect(EntityFX effect, Object effectObject) ++ { ++ if (effectObject == null || !(effect instanceof EntityDiggingFX || effect instanceof EntityBreakingFX)) ++ { ++ addEffect(effect); ++ return; ++ } ++ ++ String texture = "/terrain.png"; ++ if (effect.getFXLayer() == 0) ++ { ++ texture = "/particles.png"; ++ } ++ else if (effect.getFXLayer() == 2) ++ { ++ texture = "/gui/items.png"; ++ } ++ texture = ForgeHooksClient.getTexture(texture, effectObject); ++ ++ ArrayList set = effectList.get(texture); ++ if (set == null) ++ { ++ set = new ArrayList(); ++ effectList.put(texture, set); ++ } ++ set.add(effect); + } } diff --git a/forge/patches/minecraft/net/minecraft/src/RenderGlobal.java.patch b/forge/patches/minecraft/net/minecraft/src/RenderGlobal.java.patch index bd173d972..00a5ba37a 100644 --- a/forge/patches/minecraft/net/minecraft/src/RenderGlobal.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/RenderGlobal.java.patch @@ -26,3 +26,48 @@ /** OpenGL occlusion query base */ private IntBuffer glOcclusionQueryBase; +@@ -1835,6 +1835,7 @@ + double var17 = this.mc.renderViewEntity.posY - par4; + double var19 = this.mc.renderViewEntity.posZ - par6; + EntityFX var21 = null; ++ Object effectObject = null; + + if (par1Str.equals("hugeexplosion")) + { +@@ -1954,6 +1955,7 @@ + else if (par1Str.equals("snowballpoof")) + { + var21 = new EntityBreakingFX(this.worldObj, par2, par4, par6, Item.snowball); ++ effectObject = Item.snowball; + } + else if (par1Str.equals("dripWater")) + { +@@ -1970,6 +1972,7 @@ + else if (par1Str.equals("slime")) + { + var21 = new EntityBreakingFX(this.worldObj, par2, par4, par6, Item.slimeBall); ++ effectObject = Item.slimeBall; + } + else if (par1Str.equals("heart")) + { +@@ -1983,17 +1986,19 @@ + { + var24 = Integer.parseInt(par1Str.substring(par1Str.indexOf("_") + 1)); + var21 = new EntityBreakingFX(this.worldObj, par2, par4, par6, par8, par10, par12, Item.itemsList[var24]); ++ effectObject = Item.itemsList[var24]; + } + else if (par1Str.startsWith("tilecrack_")) + { + var24 = Integer.parseInt(par1Str.substring(par1Str.indexOf("_") + 1)); + var21 = new EntityDiggingFX(this.worldObj, par2, par4, par6, par8, par10, par12, Block.blocksList[var24], 0, 0); ++ effectObject = Block.blocksList[var24]; + } + } + + if (var21 != null) + { +- this.mc.effectRenderer.addEffect((EntityFX)var21); ++ this.mc.effectRenderer.addEffect((EntityFX)var21, effectObject); + } + + return (EntityFX)var21;