    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    }