package net.minecraft.client.renderer.texturefx; import cpw.mods.fml.client.FMLTextureFX; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.util.MathHelper; @SideOnly(Side.CLIENT) public class TexturePortalFX extends FMLTextureFX { /** Portal tick counter */ private int portalTickCounter = 0; /** Portal texture data */ private byte[][] portalTextureData; public TexturePortalFX() { super(Block.portal.blockIndexInTexture); setup(); } @Override public void setup() { super.setup(); portalTextureData = new byte[32][tileSizeSquare << 4]; Random var1 = new Random(100L); for (int var2 = 0; var2 < 32; ++var2) { for (int var3 = 0; var3 < tileSizeBase; ++var3) { for (int var4 = 0; var4 < tileSizeBase; ++var4) { float var5 = 0.0F; int var6; for (var6 = 0; var6 < 2; ++var6) { float var7 = (float)(var6 * tileSizeBase) * 0.5F; float var8 = (float)(var6 * tileSizeBase) * 0.5F; float var9 = ((float)var3 - var7) / (float)tileSizeBase * 2.0F; float var10 = ((float)var4 - var8) / (float)tileSizeBase * 2.0F; if (var9 < -1.0F) { var9 += 2.0F; } if (var9 >= 1.0F) { var9 -= 2.0F; } if (var10 < -1.0F) { var10 += 2.0F; } if (var10 >= 1.0F) { var10 -= 2.0F; } float var11 = var9 * var9 + var10 * var10; float var12 = (float)Math.atan2((double)var10, (double)var9) + ((float)var2 / 32.0F * (float)Math.PI * 2.0F - var11 * 10.0F + (float)(var6 * 2)) * (float)(var6 * 2 - 1); var12 = (MathHelper.sin(var12) + 1.0F) / 2.0F; var12 /= var11 + 1.0F; var5 += var12 * 0.5F; } var5 += var1.nextFloat() * 0.1F; var6 = (int)(var5 * 100.0F + 155.0F); int var13 = (int)(var5 * var5 * 200.0F + 55.0F); int var14 = (int)(var5 * var5 * var5 * var5 * 255.0F); int var15 = (int)(var5 * 100.0F + 155.0F); int var16 = var4 * tileSizeBase + var3; this.portalTextureData[var2][var16 * 4 + 0] = (byte)var13; this.portalTextureData[var2][var16 * 4 + 1] = (byte)var14; this.portalTextureData[var2][var16 * 4 + 2] = (byte)var6; this.portalTextureData[var2][var16 * 4 + 3] = (byte)var15; } } } } public void onTick() { ++this.portalTickCounter; byte[] var1 = this.portalTextureData[this.portalTickCounter & 31]; for (int var2 = 0; var2 < tileSizeSquare; ++var2) { int var3 = var1[var2 * 4 + 0] & 255; int var4 = var1[var2 * 4 + 1] & 255; int var5 = var1[var2 * 4 + 2] & 255; int var6 = var1[var2 * 4 + 3] & 255; if (this.anaglyphEnabled) { int var7 = (var3 * 30 + var4 * 59 + var5 * 11) / 100; int var8 = (var3 * 30 + var4 * 70) / 100; int var9 = (var3 * 30 + var5 * 70) / 100; var3 = var7; var4 = var8; var5 = var9; } this.imageData[var2 * 4 + 0] = (byte)var3; this.imageData[var2 * 4 + 1] = (byte)var4; this.imageData[var2 * 4 + 2] = (byte)var5; this.imageData[var2 * 4 + 3] = (byte)var6; } } }