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 }