001    package net.minecraft.client.renderer.texturefx;
002    
003    import cpw.mods.fml.client.FMLTextureFX;
004    import cpw.mods.fml.relauncher.Side;
005    import cpw.mods.fml.relauncher.SideOnly;
006    import net.minecraft.block.Block;
007    
008    @SideOnly(Side.CLIENT)
009    public class TextureWaterFX extends FMLTextureFX
010    {
011        /** red RGB value for water texture */
012        protected float[] red = new float[256];
013    
014        /** green RGB value for water texture */
015        protected float[] green = new float[256];
016    
017        /** blue RGB value for water texture */
018        protected float[] blue = new float[256];
019    
020        /** alpha RGB value for water texture */
021        protected float[] alpha = new float[256];
022        private int tickCounter = 0;
023    
024        public TextureWaterFX()
025        {
026            super(Block.waterMoving.blockIndexInTexture);
027            setup();
028        }
029    
030        @Override
031        public void setup()
032        {
033            super.setup();
034            red = new float[tileSizeSquare];
035            green = new float[tileSizeSquare];
036            blue = new float[tileSizeSquare];
037            alpha = new float[tileSizeSquare];
038            tickCounter = 0;
039        }
040    
041        public void onTick()
042        {
043            ++this.tickCounter;
044            int var1;
045            int var2;
046            float var3;
047            int var5;
048            int var6;
049    
050            for (var1 = 0; var1 < tileSizeBase; ++var1)
051            {
052                for (var2 = 0; var2 < tileSizeBase; ++var2)
053                {
054                    var3 = 0.0F;
055    
056                    for (int var4 = var1 - 1; var4 <= var1 + 1; ++var4)
057                    {
058                        var5 = var4 & tileSizeMask;
059                        var6 = var2 & tileSizeMask;
060                        var3 += this.red[var5 + var6 * tileSizeBase];
061                    }
062    
063                    this.green[var1 + var2 * tileSizeBase] = var3 / 3.3F + this.blue[var1 + var2 * tileSizeBase] * 0.8F;
064                }
065            }
066    
067            for (var1 = 0; var1 < tileSizeBase; ++var1)
068            {
069                for (var2 = 0; var2 < tileSizeBase; ++var2)
070                {
071                    this.blue[var1 + var2 * tileSizeBase] += this.alpha[var1 + var2 * tileSizeBase] * 0.05F;
072    
073                    if (this.blue[var1 + var2 * tileSizeBase] < 0.0F)
074                    {
075                        this.blue[var1 + var2 * tileSizeBase] = 0.0F;
076                    }
077    
078                    this.alpha[var1 + var2 * tileSizeBase] -= 0.1F;
079    
080                    if (Math.random() < 0.05D)
081                    {
082                        this.alpha[var1 + var2 * tileSizeBase] = 0.5F;
083                    }
084                }
085            }
086    
087            float[] var12 = this.green;
088            this.green = this.red;
089            this.red = var12;
090    
091            for (var2 = 0; var2 < tileSizeSquare; ++var2)
092            {
093                var3 = this.red[var2];
094    
095                if (var3 > 1.0F)
096                {
097                    var3 = 1.0F;
098                }
099    
100                if (var3 < 0.0F)
101                {
102                    var3 = 0.0F;
103                }
104    
105                float var13 = var3 * var3;
106                var5 = (int)(32.0F + var13 * 32.0F);
107                var6 = (int)(50.0F + var13 * 64.0F);
108                int var7 = 255;
109                int var8 = (int)(146.0F + var13 * 50.0F);
110    
111                if (this.anaglyphEnabled)
112                {
113                    int var9 = (var5 * 30 + var6 * 59 + var7 * 11) / 100;
114                    int var10 = (var5 * 30 + var6 * 70) / 100;
115                    int var11 = (var5 * 30 + var7 * 70) / 100;
116                    var5 = var9;
117                    var6 = var10;
118                    var7 = var11;
119                }
120    
121                this.imageData[var2 * 4 + 0] = (byte)var5;
122                this.imageData[var2 * 4 + 1] = (byte)var6;
123                this.imageData[var2 * 4 + 2] = (byte)var7;
124                this.imageData[var2 * 4 + 3] = (byte)var8;
125            }
126        }
127    }