From cf5ff81d187a9ef00ad9240561b95328b0923059 Mon Sep 17 00:00:00 2001 From: PeytonPlayz595 <106421860+PeytonPlayz595@users.noreply.github.com> Date: Mon, 29 Jul 2024 17:35:32 -0400 Subject: [PATCH] Texture animation lag fix from b1.3 --- resources/glsl/core.glsl | 121 +++++++++++--- resources/sprite_sheet/clock.png | Bin 0 -> 3199 bytes resources/sprite_sheet/compass.png | Bin 0 -> 1187 bytes resources/sprite_sheet/fire_0.png | Bin 0 -> 13406 bytes resources/sprite_sheet/fire_1.png | Bin 0 -> 14143 bytes resources/sprite_sheet/fire_1.txt | 1 + resources/sprite_sheet/lava.png | Bin 0 -> 11357 bytes resources/sprite_sheet/lava.txt | 1 + resources/sprite_sheet/lava_flow.png | Bin 0 -> 10773 bytes resources/sprite_sheet/lava_flow.txt | 1 + resources/sprite_sheet/portal.png | Bin 0 -> 25991 bytes resources/sprite_sheet/water.png | Bin 0 -> 14534 bytes resources/sprite_sheet/water.txt | 1 + resources/sprite_sheet/water_flow.png | Bin 0 -> 10164 bytes .../eaglercraft/SpriteSheetTexture.java | 156 ++++++++++++++++++ .../eaglercraft/TextureNewClockFX.java | 72 ++++++++ .../eaglercraft/TextureNewCompassFX.java | 96 +++++++++++ src/net/minecraft/client/Minecraft.java | 30 ++-- src/net/minecraft/src/RenderEngine.java | 45 ++++- src/net/minecraft/src/TextureCompassFX.java | 145 ---------------- src/net/minecraft/src/TextureFlamesFX.java | 77 --------- src/net/minecraft/src/TextureLavaFX.java | 81 --------- src/net/minecraft/src/TextureLavaFlowFX.java | 85 ---------- src/net/minecraft/src/TexturePortalFX.java | 86 ---------- src/net/minecraft/src/TextureWatchFX.java | 100 ----------- src/net/minecraft/src/TextureWaterFX.java | 85 ---------- src/net/minecraft/src/TextureWaterFlowFX.java | 86 ---------- 27 files changed, 481 insertions(+), 788 deletions(-) create mode 100644 resources/sprite_sheet/clock.png create mode 100644 resources/sprite_sheet/compass.png create mode 100644 resources/sprite_sheet/fire_0.png create mode 100644 resources/sprite_sheet/fire_1.png create mode 100644 resources/sprite_sheet/fire_1.txt create mode 100644 resources/sprite_sheet/lava.png create mode 100644 resources/sprite_sheet/lava.txt create mode 100644 resources/sprite_sheet/lava_flow.png create mode 100644 resources/sprite_sheet/lava_flow.txt create mode 100644 resources/sprite_sheet/portal.png create mode 100644 resources/sprite_sheet/water.png create mode 100644 resources/sprite_sheet/water.txt create mode 100644 resources/sprite_sheet/water_flow.png create mode 100644 src/net/lax1dude/eaglercraft/SpriteSheetTexture.java create mode 100644 src/net/lax1dude/eaglercraft/TextureNewClockFX.java create mode 100644 src/net/lax1dude/eaglercraft/TextureNewCompassFX.java delete mode 100644 src/net/minecraft/src/TextureCompassFX.java delete mode 100644 src/net/minecraft/src/TextureFlamesFX.java delete mode 100644 src/net/minecraft/src/TextureLavaFX.java delete mode 100644 src/net/minecraft/src/TextureLavaFlowFX.java delete mode 100644 src/net/minecraft/src/TexturePortalFX.java delete mode 100644 src/net/minecraft/src/TextureWatchFX.java delete mode 100644 src/net/minecraft/src/TextureWaterFX.java delete mode 100644 src/net/minecraft/src/TextureWaterFlowFX.java diff --git a/resources/glsl/core.glsl b/resources/glsl/core.glsl index a320299..9f11465 100644 --- a/resources/glsl/core.glsl +++ b/resources/glsl/core.glsl @@ -23,10 +23,14 @@ in vec4 a_color; #ifdef CC_a_normal in vec4 a_normal; #endif - -#ifdef CC_fog -out vec4 v_position; +#ifdef CC_a_texture1 +in vec2 a_texture1; #endif + +#ifdef CC_TEX_GEN_STRQ +out vec4 v_object_pos; +#endif +out vec4 v_position; #ifdef CC_a_color out vec4 v_color; #endif @@ -36,11 +40,20 @@ out vec4 v_normal; #ifdef CC_a_texture0 out vec2 v_texture0; #endif +#ifdef CC_a_texture1 +out vec2 v_texture1; +#endif + +#endif + + +#ifdef CC_VERT void main(){ vec4 pos = matrix_m * vec4(a_position, 1.0); -#ifdef CC_fog v_position = pos; +#ifdef CC_TEX_GEN_STRQ + v_object_pos = vec4(a_position, 1.0); #endif #ifdef CC_a_color v_color = a_color; @@ -50,6 +63,9 @@ void main(){ #endif #ifdef CC_a_texture0 v_texture0 = a_texture0; +#endif +#ifdef CC_a_texture1 + v_texture1 = a_texture1; #endif gl_Position = matrix_p * pos; } @@ -58,12 +74,10 @@ void main(){ #ifdef CC_FRAG -#ifdef CC_unit0 uniform sampler2D tex0; -#ifndef CC_a_texture0 +uniform sampler2D tex1; uniform vec2 texCoordV0; -#endif -#endif +uniform vec2 texCoordV1; #ifdef CC_lighting uniform vec3 light0Pos; uniform vec3 light1Pos; @@ -71,20 +85,35 @@ uniform vec3 normalUniform; #endif #ifdef CC_fog uniform vec4 fogColor; -uniform int fogMode; -uniform float fogStart; -uniform float fogEnd; -uniform float fogDensity; -uniform float fogPremultiply; +//X = uniform float fogMode; +//Y = uniform float fogStart; +//Z = uniform float fogEnd - fogStart; +//W = uniform float fogDensity; +uniform vec4 fogParam; #endif uniform vec4 colorUniform; #ifdef CC_alphatest uniform float alphaTestF; #endif - -#ifdef CC_fog -in vec4 v_position; +#ifdef CC_TEX_GEN_STRQ +//uniform int textureGenS_M; +//uniform int textureGenT_M; +//uniform int textureGenR_M; +//uniform int textureGenQ_M; +uniform ivec4 textureGen_M; +uniform vec4 textureGenS_V; +uniform vec4 textureGenT_V; +uniform vec4 textureGenR_V; +uniform vec4 textureGenQ_V; #endif +#ifdef CC_patch_anisotropic +uniform vec2 anisotropic_fix; +#endif + +#ifdef CC_TEX_GEN_STRQ +in vec4 v_object_pos; +#endif +in vec4 v_position; #ifdef CC_a_color in vec4 v_color; #endif @@ -94,10 +123,14 @@ in vec4 v_normal; #ifdef CC_a_texture0 in vec2 v_texture0; #endif +#ifdef CC_a_texture1 +in vec2 v_texture1; +#endif out vec4 fragColor; #define TEX_MAT3x2(mat4In) mat3x2(mat4In[0].xy,mat4In[1].xy,mat4In[3].xy) +#define TEX_MAT4x3(mat4In) mat4x3(mat4In[0].xyw,mat4In[1].xyw,mat4In[2].xyw,mat4In[3].xyw) void main(){ #ifdef CC_a_color @@ -106,12 +139,48 @@ void main(){ vec4 color = colorUniform; #endif +#ifdef CC_TEX_GEN_STRQ + vec4 texSrc[2]; + texSrc[0] = v_object_pos; + texSrc[1] = v_position; + + vec4 texPos; + texPos.x = dot(texSrc[textureGen_M.x], textureGenS_V); + texPos.y = dot(texSrc[textureGen_M.y], textureGenT_V); + texPos.z = dot(texSrc[textureGen_M.z], textureGenR_V); + texPos.w = dot(texSrc[textureGen_M.w], textureGenQ_V); + texPos.xyz = TEX_MAT4x3(matrix_t) * texPos; + color *= texture(tex0, texPos.xy / texPos.z).bgra; +#ifdef CC_alphatest + if(color.a < alphaTestF){ + discard; + } +#endif +#else #ifdef CC_unit0 #ifdef CC_a_texture0 - color *= texture(tex0, (TEX_MAT3x2(matrix_t) * vec3(v_texture0, 1.0)).xy).rgba; + +#ifdef CC_patch_anisotropic + vec2 uv = TEX_MAT3x2(matrix_t) * vec3(v_texture0, 1.0); + + /* https://bugs.chromium.org/p/angleproject/issues/detail?id=4994 */ + uv = ((uv * anisotropic_fix) - fract(uv * anisotropic_fix) + 0.5) / anisotropic_fix; + + vec4 texColor = texture(tex0, uv); #else - color *= texture(tex0, (TEX_MAT3x2(matrix_t) * vec3(texCoordV0, 1.0)).xy).rgba; + vec4 texColor = texture(tex0, TEX_MAT3x2(matrix_t) * vec3(v_texture0, 1.0)); #endif + +#else + vec4 texColor = texture(tex0, TEX_MAT3x2(matrix_t) * vec3(texCoordV0, 1.0)); +#endif + +#ifdef CC_swap_rb + color *= texColor.rgba; +#else + color *= texColor.bgra; +#endif + #endif #ifdef CC_alphatest @@ -120,6 +189,15 @@ void main(){ } #endif +#ifdef CC_unit1 +#ifdef CC_a_texture1 + color.rgb *= texture(tex1, (v_texture1 + 8.0) * 0.00390625).bgr; +#else + color.rgb *= texture(tex1, (texCoordV1 + 8.0) * 0.00390625).bgr; +#endif +#endif +#endif + #ifdef CC_lighting #ifdef CC_a_normal vec3 normal = ((v_normal.xyz - 0.5) * 2.0); @@ -133,11 +211,12 @@ void main(){ #ifdef CC_fog float dist = sqrt(dot(v_position, v_position)); - float i = (fogMode == 1) ? clamp((dist - fogStart) / (fogEnd - fogStart), 0.0, 1.0) : clamp(1.0 - exp(-(fogDensity * dist)), 0.0, 1.0); - color.rgb = mix(color.rgb, fogColor.xyz, i * fogColor.a); + float i = fogParam.x == 1.0 ? (dist - fogParam.y) / fogParam.z : 1.0 - exp(-fogParam.w * dist); + color.rgb = mix(color.rgb, fogColor.xyz, clamp(i, 0.0, 1.0) * fogColor.a); #endif fragColor = color; } -#endif \ No newline at end of file +#endif + diff --git a/resources/sprite_sheet/clock.png b/resources/sprite_sheet/clock.png new file mode 100644 index 0000000000000000000000000000000000000000..5bbcf5eefdd6b0209c76c115b054f0f9bc444624 GIT binary patch literal 3199 zcmXX}c|2768$QR8LzY97LdRSw3DI(gFquJ_%0(*Fy)IIviAE<_xHzq&V0@}-*=w(eV*ri-#P2$;ifs)U@infnwzMu z-r%YYLCTP-3i#F=+}Z~&YIN$(a0pV@ReWIRTJ}N+(pa_0m9m}DHuz;X)v(n78nJG* zIbg1T^fwO1(T~lzZ+TJsqF(9xAN2X=J4&Cb^B-BRIAUIu-ZsUx>?&7(VzIX(awjiL z{X-~qbNWMUJx}G?W}>RTRdmtP471Z#L$|HJX@wgPENaYNwf0k0xyB9}4}@`_p>m&=jMpr__F=Admlh`%ihxSGt3=1kFU;y!W`EP6ZZBw+OTK z*b}}RCd%?&vxADy16>S#%b~C@u2NL ztL&qVA*fu|IT_b~TB$I&K?Fx{-Tph;fBN|z)R>hXmG|w)dDn)+c_(J|dC@XFsm#oi z&;H7qver8{95;E6A?qeFq!I@XyR#`!X0~eHy5bpWozs|y$jxQwg75Wj)m2gXezC)A z;w~;pm+c}>8FW-m7+P9Zu89z~v}l|Ntft%8X4RmkIs71=)1@{TvN3u$7(bY_cAWeM z^9~Ou_bx69$CA_{apeKW{1ZcqEkFv(nDKZ%TF`>j1%=El?_2l0R)YEvMf?=g5Npg* zJ%+|mHVv_TcvMvLS}y$3aN)&9qSjQ*b&&K1Oo)sL&Y{J*<;O^>MrYCF8-m;X4d3zY zcXwo>;GJHWDXhV{e=sVAdLe9I&p$PF`VLjnx)SpA8%(tP_$i+!j(X|Mfgq`c#mM-e z1}L^vaoDAoDW$ROlL0QbehT>|8_;+Dme#RT6DMZS2fKf|>%PTAMihIee2R{Nbx6+} z&1F0(1knz23`u0n#;NcCOOQBr$@O&y+wYCbu$(ZRr(RuMN*0E>PD2gjbZ z=-zjv>1ut}I|z=lvL_dI@N*LOzPJCT%EimvZVGk!ZBGsD(NO_WJ?^9JVF#I&*;hvxc6X1s1@M=+H@^nV2kq(ObzGGc(J;X=RekBH8CYdfak znpZfc2(B);+7VNJW+NC9`F|?+dL!$DD>ZZewBQRFhbW@tK zkW+u(>~%%ro~Xx4i%VE+^wmEU%~x#nKvv#HOvp}@D?X%!LnF3OAVbRG;=LeD4UJ z$}bxWQ*z{bQu0>4FoiflxF8$M9W6y4o=!UUB&6512AP-cjgRpE@sAdNa$js|O=5#0 zB7$mW&+RTX(bvyqMs&XiVecG&24G)+l!4*0BeCg7Txfe&uD-q*VU}NTT{<)0bAbk? z5gRwY5hDS;o-*(&9Zd@wR#i zJSAVbI*?0BNEjyv2`Jr$XVF^8x?pdm9(^HuTPH|{+RlC{^v_hY$_YO<0b9Fq>#^V= z$_n|?U+xcZ1muU4#9b)M0TUTK?@Bn(GYK~$4!WltRUbDdCG52gV9;+i&CF6?B7ZfW z!ao(Gum#32cWQNdSCY#szt*{a^KY2w54|I-ts;B+WQ;1Ed&}hHw_rxQgD1sX;?CXiCJSoW`=v%h1<5##B_=u% z zqo)>GjrLWum4HDhOCB7&(dc6DjZIh5FJIkf^UN0zJ^4gMGO1pYdPa(;&EQm-1Rl;- zR=9zM^%_-QLT@F~P36c?OU!|p)EErX(s%d|ZRd2nL^TyptE=IS$Imj&^uvH{fTt9! zW{&0G4sV#6R(clN_wS=WpQ~SCW^Db?C$8;T_imI4Gy#ZWo#C9JvBcS0xYo)q?g~QEA^`ZNyCb2&5DL zW*Qk4y(Q@5K~PI?wtvrjl( z-eyI*cbn9kB!4j!ItMUf@c#e3^HgUo7FaOv@)hrlYhkhSviV?~`4t=c%_rP)6aa*F zi?ASFAwt1=>+bNRgoT#{^IB5vC@ff z{cpwyO-TmmJ@u>e0`1x^Pd4d+hb=lTp&w-G5g%J@1DAexF<$^bFkQ{;1q16*O% zy$=N_?V|)%JCKVedIyEr+?<(p2)Y(Y?_Xqfh;(!5;9k3XUu$-5{R`V~WpkW9we_{6 z8q2JDJ9s5>YU{?gi1A`71R2MD3VVw&zQ>Ke`pN-YlM9I1DUZ(r&dYdIA&nGzEemSB5_CK10Z2MF5IW0gYo2Si?ipaCSis6oH6M9vb32OM*U|cwDKLz!@Od% zT~`T`>W#!y#Zo}=j|O{D=I1c~mq;io*<<`k_vla8F>y$Yjl(6IrnYGO$DpHMt!ciw z=+0L#qTR6G=r{lEq{ncf$q}oF6Vw@X&|l(lqr;?h&6VG#1z_IgqO3(&&000k7hoo# z4>Wu2w-}XLy6z;MC2nPdbZTKvAKWp0^6zfiiLh-|g~)Z9ACvCoRNpuE$w+?u6ek}& z*n!-YyL(Si>PZCs<7gR`;$qmw^;#fk$L90|U1(2s1Lwnj^u$ zz!K`|;uunK>+Ri*ezzSY*gw?kq5j0w)KS9x1H!V$MV)%+Fd@J}5TwC})Aa%i_ zAonYZXLx2#GM^?d7*B+c)puKmPH< zg8x#0^=zwGOtt@iv0g8~?54o(JNL1Lo~$%q`_Jo+SN*#lOQ;`SXy&2mFfDayzM7}e z=g99jYz|z!D7Z=IGFy;!T4Y<^_SN;$=g*xpkm@y%;Q5riR)OIkYpC_Kd&lmsJ@)1J zc|o_u6TdCLf9KAV`1m>VAN|U^rSVtwU7qPOh7S)fr{^|we-36iVJ-cCifX{dm9jTq z9Mt~wAjRT{1<&is3;AY$Z3A={uzz{bTRnk&$Nv56zbvp&s$af8&2if5vrjfT zYQgi@HiMP%!w(Ps7mUx@MT=Qp|2(MTYv>tl&!1vZzUahV=DDnXa$DG%C$WBMkX!Tn z&jAzn4YTA|$ceOavSO4C57g-jwCppR-zxDM{4F3_Pt;V)MCnrS8WfZgO z$(1bf_{}49{cF>$7mOhB2DuB&RSrNyfE?~q>Z_c03A^69xZ;_x_fKZYOZW5g|FadJ zmG_wZ)E;b#s7*lo_LI#H&l_uc4hu{+`Fel;jeN7u=?mBj@2#Js!Z}H0A<(Y3HZzv2 zER;C^)#2aP{q+?eK0C-B1KHFZ`e8wqM)X^I0pUG16Bh0X;O~0Pn$Eu?ZUOu2U2!Xn z4p!L*g$k_x>oLiEMd*DE$33PYF1Z&z5%>N$$XxLK`4Xg4|7qhawt`jZMo$IStgjC^&HVDs+s0Ye zV2@8}-&$O|_+1jyHMtqI_VI8vz$-tSw|Os zu5#SFrt=&yaE*3;__n~p9Bjx7=E}+m|Br85Sw2lsce+jSJb7?<{B>abQqam|l0*tP03^pH=>Y6iQxzlMyGQL{ z-*r5yS^*f~77Q1bvVUQCU1>jUm1Wb_y3~{MS61cAv?pq6zO1nizsjV~&&RM}!v&D% ve;!G_|GrjHZiVb#n+d;dE;pxV)iW3yv0W&ha(M}`)M4;+^>bP0l+XkK`4}a~ literal 0 HcmV?d00001 diff --git a/resources/sprite_sheet/fire_0.png b/resources/sprite_sheet/fire_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f0626fa5a8b59e1a75905873010fa743de4ec7 GIT binary patch literal 13406 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 A_y7O^ literal 0 HcmV?d00001 diff --git a/resources/sprite_sheet/fire_1.png b/resources/sprite_sheet/fire_1.png new file mode 100644 index 0000000000000000000000000000000000000000..183f2636fc713817fccc23f0274950a7f4f07a7f GIT binary patch literal 14143 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 JPDHLkV1myoclQ7Q literal 0 HcmV?d00001 diff --git a/resources/sprite_sheet/fire_1.txt b/resources/sprite_sheet/fire_1.txt new file mode 100644 index 0000000..0cd6d4b --- /dev/null +++ b/resources/sprite_sheet/fire_1.txt @@ -0,0 +1 @@ +8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7 \ No newline at end of file diff --git a/resources/sprite_sheet/lava.png b/resources/sprite_sheet/lava.png new file mode 100644 index 0000000000000000000000000000000000000000..6230b5352618075e6129a49dfcf442b66f6bae10 GIT binary patch literal 11357 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 literal 0 HcmV?d00001 diff --git a/resources/sprite_sheet/lava.txt b/resources/sprite_sheet/lava.txt new file mode 100644 index 0000000..82afa8d --- /dev/null +++ b/resources/sprite_sheet/lava.txt @@ -0,0 +1 @@ +0*2,1*2,2*2,3*2,4*2,5*2,6*2,7*2,8*2,9*2,10*2,11*2,12*2,13*2,14*2,15*2,16*2,17*2,18*2,19*2,18*2,17*2,16*2,15*2,14*2,13*2,12*2,11*2,10*2,9*2,8*2,7*2,6*2,5*2,4*2,3*2,2*2,1*2 \ No newline at end of file diff --git a/resources/sprite_sheet/lava_flow.png b/resources/sprite_sheet/lava_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..78ca3c270ed11d817b807b149c595ea31faad34b GIT binary patch literal 10773 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 literal 0 HcmV?d00001 diff --git a/resources/sprite_sheet/water.png b/resources/sprite_sheet/water.png new file mode 100644 index 0000000000000000000000000000000000000000..77758026da98fdc7da2b67be1fc39354ffcce7db GIT binary patch literal 14534 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 literal 0 HcmV?d00001 diff --git a/resources/sprite_sheet/water.txt b/resources/sprite_sheet/water.txt new file mode 100644 index 0000000..fc9eecf --- /dev/null +++ b/resources/sprite_sheet/water.txt @@ -0,0 +1 @@ +0*2,1*2,2*2,3*2,4*2,5*2,6*2,7*2,8*2,9*2,10*2,11*2,12*2,13*2,14*2,15*2,16*2,17*2,18*2,19*2,20*2,21*2,22*2,23*2,24*2,25*2,26*2,27*2,28*2,29*2,30*2,31*2 \ No newline at end of file diff --git a/resources/sprite_sheet/water_flow.png b/resources/sprite_sheet/water_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..317e6cb91ba70c14f144f1123ec5895a8e46d161 GIT binary patch literal 10164 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 literal 0 HcmV?d00001 diff --git a/src/net/lax1dude/eaglercraft/SpriteSheetTexture.java b/src/net/lax1dude/eaglercraft/SpriteSheetTexture.java new file mode 100644 index 0000000..991ef20 --- /dev/null +++ b/src/net/lax1dude/eaglercraft/SpriteSheetTexture.java @@ -0,0 +1,156 @@ +package net.lax1dude.eaglercraft; + +import java.nio.IntBuffer; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; + +import org.lwjgl.opengl.GL11; + +import net.PeytonPlayz585.awt.image.BufferedImage; +import net.minecraft.src.GLAllocation; + +public class SpriteSheetTexture { + + public final String name; + public final int iconIndex; + public final int iconTileSize; + private IntBuffer buffer = null; + private int dataFrameCount = 0; + private int[] frameSet = null; + public int ticks = 0; + + private int[] mipmapOffsets = new int[5]; + + public SpriteSheetTexture(String name, int iconIndex, int iconTileSize) { + this.name = name; + this.iconIndex = iconIndex; + this.iconTileSize = iconTileSize; + reloadData(); + } + + public void update() { + ticks = (ticks + 1) % frameSet.length; + } + + public IntBuffer grabFrame(int lvl) { + int offWidth = 16 >> lvl; + int step = offWidth * offWidth * iconTileSize * iconTileSize; + int startIndex = mipmapOffsets[lvl] + step * frameSet[ticks]; + buffer.limit(startIndex + step); + buffer.position(startIndex); + return buffer; + } + + public void reloadData() { + ticks = 0; + buffer = null; + frameSet = null; + + byte[] imgBytes = GL11.EaglerAdapterImpl2.loadResourceBytes("/sprite_sheet/" + name + ".png"); + if(imgBytes == null) { + return; + } + + int dim = iconTileSize * iconTileSize * 256; + BufferedImage img = GL11.EaglerAdapterImpl2.loadPNG(imgBytes); + dataFrameCount = img.getData().length / dim; + + ArrayList loadedFrameSet = new ArrayList(); + byte[] metaBytes = GL11.EaglerAdapterImpl2.loadResourceBytes("/sprite_sheet/" + name + ".txt"); + + if(metaBytes == null) { + for(int i = 0; i < dataFrameCount; ++i) { + loadedFrameSet.add(i); + } + }else { + String str = new String(metaBytes, StandardCharsets.UTF_8); + String[] splitted = str.split("\\s*,\\s*"); + for(int i = 0; i < splitted.length; ++i) { + String idxStr = splitted[i]; + int z = idxStr.indexOf('*'); + if(z != -1) { + int idx = Integer.parseInt(idxStr.substring(0, z)); + int c = Integer.parseInt(idxStr.substring(z + 1)); + for(int j = 0; j < c; ++j) { + loadedFrameSet.add(idx); + } + }else { + loadedFrameSet.add(Integer.parseInt(idxStr)); + } + } + } + + frameSet = new int[loadedFrameSet.size()]; + for(int i = 0; i < frameSet.length; ++i) { + frameSet[i] = loadedFrameSet.get(i).intValue(); + } + + buffer = GLAllocation.createDirectIntBuffer( + 16 * 16 * dataFrameCount * iconTileSize * iconTileSize + + 8 * 8 * dataFrameCount * iconTileSize * iconTileSize + + 4 * 4 * dataFrameCount * iconTileSize * iconTileSize + + 2 * 2 * dataFrameCount * iconTileSize * iconTileSize + + dataFrameCount * iconTileSize * iconTileSize + ); + + int[] texData = swapRB(img.getData()); + mipmapOffsets[0] = 0; + buffer.put(texData); + mipmapOffsets[1] = buffer.position(); + texData = downscale(texData, 16 * iconTileSize, 16 * iconTileSize * dataFrameCount); + buffer.put(texData); + mipmapOffsets[2] = buffer.position(); + texData = downscale(texData, 8 * iconTileSize, 8 * iconTileSize * dataFrameCount); + buffer.put(texData); + mipmapOffsets[3] = buffer.position(); + texData = downscale(texData, 4 * iconTileSize, 4 * iconTileSize * dataFrameCount); + buffer.put(texData); + mipmapOffsets[4] = buffer.position(); + texData = downscale(texData, 2 * iconTileSize, 2 * iconTileSize * dataFrameCount); + buffer.put(texData); + + } + + private static int[] downscale(int[] in, int sw, int sh) { + int dw = sw / 2; + int dh = sh / 2; + int[] ret = new int[dw * dh]; + for(int y = 0; y < dh; ++y) { + for(int x = 0; x < dw; ++x) { + int a = in[((x * 2) + (y * 2) * sw)]; + int b = in[((x * 2 + 1) + (y * 2) * sw)]; + int c = in[((x * 2 + 1) + (y * 2 + 1) * sw)]; + int d = in[((x * 2) + (y * 2 + 1) * sw)]; + int b1= (((a >> 26) & 0x3F)) + + (((b >> 26) & 0x3F)) + + (((c >> 26) & 0x3F)) + + (((d >> 26) & 0x3F)); + int b2= (((a >> 18) & 0x3F)) + + (((b >> 18) & 0x3F)) + + (((c >> 18) & 0x3F)) + + (((d >> 18) & 0x3F)); + int b3= (((a >> 10) & 0x3F)) + + (((b >> 10) & 0x3F)) + + (((c >> 10) & 0x3F)) + + (((d >> 10) & 0x3F)); + int b4= (((a >> 2) & 0x3F)) + + (((b >> 2) & 0x3F)) + + (((c >> 2) & 0x3F)) + + (((d >> 2) & 0x3F)); + ret[y * dw + x] = (b1 << 24) | (b2 << 16) | (b3 << 8) | b4; + } + } + return ret; + } + + private static int[] swapRB(int[] in) { + int[] out = new int[in.length]; + for(int i = 0; i < in.length; ++i) { + int r = (in[i] >> 16) & 0xFF; + int b = in[i] & 0xFF; + out[i] = (in[i] & 0xFF00FF00) | (b << 16) | r; + } + return out; + } + +} \ No newline at end of file diff --git a/src/net/lax1dude/eaglercraft/TextureNewClockFX.java b/src/net/lax1dude/eaglercraft/TextureNewClockFX.java new file mode 100644 index 0000000..ef4bab7 --- /dev/null +++ b/src/net/lax1dude/eaglercraft/TextureNewClockFX.java @@ -0,0 +1,72 @@ +package net.lax1dude.eaglercraft; + +import org.lwjgl.opengl.GL11; + +import net.minecraft.client.Minecraft; +import net.minecraft.src.Item; +import net.minecraft.src.TextureFX; + +public class TextureNewClockFX extends TextureFX { + + private final int[] clockSpriteSheet; + private final int clockSpriteSheetLength; + private float field_94239_h; + private float field_94240_i; + + public TextureNewClockFX() { + super(Item.pocketSundial.getIconFromDamage(0)); + tileImage = 1; + this.clockSpriteSheet = GL11.EaglerAdapterImpl2.loadPNG(GL11.EaglerAdapterImpl2.loadResourceBytes("/sprite_sheet/clock.png")).getData(); + this.clockSpriteSheetLength = clockSpriteSheet.length / 256; + } + + public void onTick() { + Minecraft var1 = Minecraft.getMinecraft(); + double var2 = 0.0D; + + if (var1.theWorld != null && var1.thePlayer != null) { + float var4 = var1.theWorld.getCelestialAngle(1.0F); + var2 = (double) var4; + + if (var1.theWorld.worldProvider.isNether) { + var2 = Math.random(); + } + } + + double var7; + + for (var7 = var2 - this.field_94239_h; var7 < -0.5D; ++var7) { + ; + } + + while (var7 >= 0.5D) { + --var7; + } + + if (var7 < -1.0D) { + var7 = -1.0D; + } + + if (var7 > 1.0D) { + var7 = 1.0D; + } + + this.field_94240_i += var7 * 0.1D; + this.field_94240_i *= 0.8D; + this.field_94239_h += this.field_94240_i; + int var6; + + for (var6 = (int) ((this.field_94239_h + 1.0D) * (double) clockSpriteSheetLength) % clockSpriteSheetLength; var6 < 0; var6 = (var6 + clockSpriteSheetLength) % clockSpriteSheetLength) { + ; + } + + int offset = var6 * 256; + for(int i = 0; i < 256; ++i) { + this.imageData[i * 4] = (byte)((clockSpriteSheet[offset + i] >> 16) & 0xFF); + this.imageData[i * 4 + 1] = (byte)((clockSpriteSheet[offset + i] >> 8) & 0xFF); + this.imageData[i * 4 + 2] = (byte)(clockSpriteSheet[offset + i] & 0xFF); + this.imageData[i * 4 + 3] = (byte)((clockSpriteSheet[offset + i] >> 24) & 0xFF); + } + } + +} \ No newline at end of file diff --git a/src/net/lax1dude/eaglercraft/TextureNewCompassFX.java b/src/net/lax1dude/eaglercraft/TextureNewCompassFX.java new file mode 100644 index 0000000..b0621ba --- /dev/null +++ b/src/net/lax1dude/eaglercraft/TextureNewCompassFX.java @@ -0,0 +1,96 @@ +package net.lax1dude.eaglercraft; + +import org.lwjgl.opengl.GL11; + +import net.minecraft.client.Minecraft; +import net.minecraft.src.ChunkCoordinates; +import net.minecraft.src.Item; +import net.minecraft.src.TextureFX; +import net.minecraft.src.World; + +public class TextureNewCompassFX extends TextureFX { + + private final int[] compassSpriteSheet; + private final int compassSpriteSheetLength; + private float angleDelta = 0.0f; + private float currentAngle = 0.0f; + + public TextureNewCompassFX() { + super(Item.compass.getIconFromDamage(0)); + tileImage = 1; + this.compassSpriteSheet = GL11.EaglerAdapterImpl2.loadPNG(GL11.EaglerAdapterImpl2.loadResourceBytes("/sprite_sheet/compass.png")).getData(); + this.compassSpriteSheetLength = compassSpriteSheet.length / 256; + } + + public void onTick() { + Minecraft var1 = Minecraft.getMinecraft(); + + if (var1.theWorld != null && var1.thePlayer != null) { + this.updateCompass(var1.theWorld, var1.thePlayer.posX, var1.thePlayer.posZ, (double) var1.thePlayer.rotationYaw, false, false); + } else { + this.updateCompass((World) null, 0.0D, 0.0D, 0.0D, true, false); + } + } + + public void updateCompass(World par1World, double par2, double par4, double par6, boolean par8, boolean par9) { + double var10 = 0.0D; + + if (par1World != null && !par8) { + ChunkCoordinates var12 = par1World.getSpawnPoint(); + double var13 = (double) var12.x - par2; + double var15 = (double) var12.z - par4; + par6 %= 360.0D; + var10 = -((par6 - 90.0D) * Math.PI / 180.0D - Math.atan2(var15, var13)); + + if (par1World.worldProvider.isNether) { + var10 = Math.random() * Math.PI * 2.0D; + } + } + + if (par9) { + this.currentAngle = (float) var10; + } else { + double var17; + + for (var17 = var10 - this.currentAngle; var17 < -Math.PI; var17 += (Math.PI * 2D)) { + ; + } + + while (var17 >= Math.PI) { + var17 -= (Math.PI * 2D); + } + + if (var17 < -1.0D) { + var17 = -1.0D; + } + + if (var17 > 1.0D) { + var17 = 1.0D; + } + + this.angleDelta += var17 * 0.1D; + this.angleDelta *= 0.8D; + this.currentAngle += this.angleDelta; + } + + int var18; + + for (var18 = (int) ((this.currentAngle / (Math.PI * 2D) + 1.0D) * (double) compassSpriteSheetLength) % compassSpriteSheetLength; var18 < 0; var18 = (var18 + compassSpriteSheetLength) % compassSpriteSheetLength) { + ; + } + + int offset = var18 * 256; + for(int i = 0; i < 256; ++i) { + this.imageData[i * 4] = (byte)((compassSpriteSheet[offset + i] >> 16) & 0xFF); + this.imageData[i * 4 + 1] = (byte)((compassSpriteSheet[offset + i] >> 8) & 0xFF); + this.imageData[i * 4 + 2] = (byte)((compassSpriteSheet[offset + i]) & 0xFF); + this.imageData[i * 4 + 3] = (byte)((compassSpriteSheet[offset + i] >> 24) & 0xFF); + } + + //if (var18 != this.frameCounter) { + // this.frameCounter = var18; + // this.textureSheet.func_104062_b(this.originX, this.originY, (Texture) this.textureList.get(this.frameCounter)); + //} + } + +} \ No newline at end of file diff --git a/src/net/minecraft/client/Minecraft.java b/src/net/minecraft/client/Minecraft.java index e5e9ae8..7c880d7 100644 --- a/src/net/minecraft/client/Minecraft.java +++ b/src/net/minecraft/client/Minecraft.java @@ -5,6 +5,8 @@ import org.lwjgl.input.Mouse; import org.lwjgl.opengl.Display; import org.lwjgl.opengl.GL11; +import net.lax1dude.eaglercraft.TextureNewClockFX; +import net.lax1dude.eaglercraft.TextureNewCompassFX; import net.minecraft.src.AchievementList; import net.minecraft.src.AxisAlignedBB; import net.minecraft.src.Block; @@ -66,14 +68,6 @@ import net.minecraft.src.StatList; import net.minecraft.src.StatStringFormatKeyInv; import net.minecraft.src.Teleporter; import net.minecraft.src.Tessellator; -import net.minecraft.src.TextureCompassFX; -import net.minecraft.src.TextureFlamesFX; -import net.minecraft.src.TextureLavaFX; -import net.minecraft.src.TextureLavaFlowFX; -import net.minecraft.src.TexturePortalFX; -import net.minecraft.src.TextureWatchFX; -import net.minecraft.src.TextureWaterFX; -import net.minecraft.src.TextureWaterFlowFX; import net.minecraft.src.Timer; import net.minecraft.src.UnexpectedThrowable; import net.minecraft.src.Vec3D; @@ -121,8 +115,6 @@ public class Minecraft implements Runnable { public StatFileWriter statFileWriter; private String serverName; private int serverPort; - private TextureWaterFX textureWaterFX = new TextureWaterFX(); - private TextureLavaFX textureLavaFX = new TextureLavaFX(); private static String minecraftDir = "minecraft"; public volatile boolean running = true; public String debug = ""; @@ -183,15 +175,15 @@ public class Minecraft implements Runnable { GL11.glMatrixMode(GL11.GL_MODELVIEW); this.checkGLError("Startup"); this.sndManager.loadSoundSettings(this.gameSettings); - this.renderEngine.registerTextureFX(this.textureLavaFX); - this.renderEngine.registerTextureFX(this.textureWaterFX); - this.renderEngine.registerTextureFX(new TexturePortalFX()); - this.renderEngine.registerTextureFX(new TextureCompassFX(this)); - this.renderEngine.registerTextureFX(new TextureWatchFX(this)); - this.renderEngine.registerTextureFX(new TextureWaterFlowFX()); - this.renderEngine.registerTextureFX(new TextureLavaFlowFX()); - this.renderEngine.registerTextureFX(new TextureFlamesFX(0)); - this.renderEngine.registerTextureFX(new TextureFlamesFX(1)); + renderEngine.registerTextureFX(new TextureNewCompassFX()); + renderEngine.registerTextureFX(new TextureNewClockFX()); + renderEngine.registerSpriteSheet("portal", Block.portal.blockIndexInTexture, 1); + renderEngine.registerSpriteSheet("water", Block.waterStill.blockIndexInTexture, 1); + renderEngine.registerSpriteSheet("water_flow", Block.waterMoving.blockIndexInTexture + 1, 2); + renderEngine.registerSpriteSheet("lava", Block.lavaStill.blockIndexInTexture, 1); + renderEngine.registerSpriteSheet("lava_flow", Block.lavaMoving.blockIndexInTexture + 1, 2); + renderEngine.registerSpriteSheet("fire_0", Block.fire.blockIndexInTexture, 1); + renderEngine.registerSpriteSheet("fire_1", Block.fire.blockIndexInTexture + 16, 1); this.renderGlobal = new RenderGlobal(this, this.renderEngine); GL11.glViewport(0, 0, this.displayWidth, this.displayHeight); this.effectRenderer = new EffectRenderer(this.theWorld, this.renderEngine); diff --git a/src/net/minecraft/src/RenderEngine.java b/src/net/minecraft/src/RenderEngine.java index ba00c32..8af793b 100644 --- a/src/net/minecraft/src/RenderEngine.java +++ b/src/net/minecraft/src/RenderEngine.java @@ -13,6 +13,7 @@ import java.util.Map; import org.lwjgl.opengl.GL11; import net.PeytonPlayz585.awt.image.BufferedImage; +import net.lax1dude.eaglercraft.SpriteSheetTexture; public class RenderEngine { public static boolean useMipmaps = false; @@ -25,6 +26,7 @@ public class RenderEngine { private GameSettings options; private boolean clampTexture = false; private boolean blurTexture = false; + private List textureSpriteList = new ArrayList(); private BufferedImage missingTextureImage; @@ -284,18 +286,51 @@ public class RenderEngine { var1.onTick(); } +// public void updateDynamicTextures() { +// for (int i = 0; i < textureList.size(); i++) { +// TextureFX texturefx = (TextureFX) textureList.get(i); +// texturefx.anaglyphEnabled = this.options.anaglyph; +// texturefx.onTick(); +// texturefx.bindImage(this); +// int tileSize = 16 * 16 * 4; +// imageData.clear(); +// imageData.put(texturefx.imageData); +// imageData.position(0).limit(tileSize); +// GL11.glTexSubImage2D(3553, 0, (texturefx.iconIndex % 16) * 16, (texturefx.iconIndex / 16) * 16, 16, 16, 6408, 5121, imageData); +// } +// } + public void updateDynamicTextures() { + for (int i = 0; i < textureList.size(); i++) { TextureFX texturefx = (TextureFX) textureList.get(i); - texturefx.anaglyphEnabled = this.options.anaglyph; + texturefx.anaglyphEnabled = options.anaglyph; texturefx.onTick(); - texturefx.bindImage(this); int tileSize = 16 * 16 * 4; imageData.clear(); imageData.put(texturefx.imageData); imageData.position(0).limit(tileSize); - GL11.glTexSubImage2D(3553, 0, (texturefx.iconIndex % 16) * 16, (texturefx.iconIndex / 16) * 16, 16, 16, 6408, 5121, imageData); + texturefx.bindImage(this); + GL11.glTexSubImage2D(3553 /* GL_TEXTURE_2D */, 0, (texturefx.iconIndex % 16) * 16, (texturefx.iconIndex / 16) * 16, 16, 16, + 6408 /* GL_RGBA */, 5121 /* GL_UNSIGNED_BYTE */, imageData); } + + GL11.glBindTexture(GL11.GL_TEXTURE_2D, getTexture("/terrain.png")); + for(int i = 0, l = textureSpriteList.size(); i < l; ++i) { + SpriteSheetTexture sp = textureSpriteList.get(i); + sp.update(); + int w = 16; + for(int j = 0; j < 5; ++j) { + GL11.glTexSubImage2D(3553 /* GL_TEXTURE_2D */, j, (sp.iconIndex % 16) * w, (sp.iconIndex / 16) * w, w * sp.iconTileSize, w * sp.iconTileSize, + 6408 /* GL_RGBA */, 5121 /* GL_UNSIGNED_BYTE */, sp.grabFrame(j)); + w /= 2; + } + } + + } + + public void registerSpriteSheet(String name, int iconIndex, int iconTileSize) { + textureSpriteList.add(new SpriteSheetTexture(name, iconIndex, iconTileSize)); } private int averageColor(int var1, int var2) { @@ -385,6 +420,10 @@ public class RenderEngine { var6.printStackTrace(); } } + + for(int j = 0, l = textureSpriteList.size(); j < l; ++j) { + textureSpriteList.get(j).reloadData(); + } } diff --git a/src/net/minecraft/src/TextureCompassFX.java b/src/net/minecraft/src/TextureCompassFX.java deleted file mode 100644 index d8b4a3f..0000000 --- a/src/net/minecraft/src/TextureCompassFX.java +++ /dev/null @@ -1,145 +0,0 @@ -package net.minecraft.src; - -import java.io.IOException; - -import org.lwjgl.opengl.GL11; - -import net.PeytonPlayz585.awt.image.BufferedImage; -import net.PeytonPlayz585.awt.image.ImageIO; -import net.minecraft.client.Minecraft; - -public class TextureCompassFX extends TextureFX { - private Minecraft mc; - private int[] compassIconImageData = new int[256]; - private double field_4229_i; - private double field_4228_j; - - public TextureCompassFX(Minecraft var1) { - super(Item.compass.getIconFromDamage(0)); - this.mc = var1; - this.tileImage = 1; - - try { - BufferedImage var2 = ImageIO.read(GL11.getResource("/gui/items.png")); - int var3 = this.iconIndex % 16 * 16; - int var4 = this.iconIndex / 16 * 16; - var2.getRGB(var3, var4, 16, 16, this.compassIconImageData, 0, 16); - } catch (Exception var5) { - var5.printStackTrace(); - } - - } - - public void onTick() { - for(int var1 = 0; var1 < 256; ++var1) { - int var2 = this.compassIconImageData[var1] >> 24 & 255; - int var3 = this.compassIconImageData[var1] >> 16 & 255; - int var4 = this.compassIconImageData[var1] >> 8 & 255; - int var5 = this.compassIconImageData[var1] >> 0 & 255; - if(this.anaglyphEnabled) { - int var6 = (var3 * 30 + var4 * 59 + var5 * 11) / 100; - int var7 = (var3 * 30 + var4 * 70) / 100; - int var8 = (var3 * 30 + var5 * 70) / 100; - var3 = var6; - var4 = var7; - var5 = var8; - } - - this.imageData[var1 * 4 + 0] = (byte)var3; - this.imageData[var1 * 4 + 1] = (byte)var4; - this.imageData[var1 * 4 + 2] = (byte)var5; - this.imageData[var1 * 4 + 3] = (byte)var2; - } - - double var20 = 0.0D; - if(this.mc.theWorld != null && this.mc.thePlayer != null) { - ChunkCoordinates var21 = this.mc.theWorld.getSpawnPoint(); - double var23 = (double)var21.x - this.mc.thePlayer.posX; - double var25 = (double)var21.z - this.mc.thePlayer.posZ; - var20 = (double)(this.mc.thePlayer.rotationYaw - 90.0F) * Math.PI / 180.0D - Math.atan2(var25, var23); - if(this.mc.theWorld.worldProvider.isNether) { - var20 = Math.random() * (double)((float)Math.PI) * 2.0D; - } - } - - double var22; - for(var22 = var20 - this.field_4229_i; var22 < -Math.PI; var22 += Math.PI * 2.0D) { - } - - while(var22 >= Math.PI) { - var22 -= Math.PI * 2.0D; - } - - if(var22 < -1.0D) { - var22 = -1.0D; - } - - if(var22 > 1.0D) { - var22 = 1.0D; - } - - this.field_4228_j += var22 * 0.1D; - this.field_4228_j *= 0.8D; - this.field_4229_i += this.field_4228_j; - double var24 = Math.sin(this.field_4229_i); - double var26 = Math.cos(this.field_4229_i); - - int var9; - int var10; - int var11; - int var12; - int var13; - int var14; - int var15; - short var16; - int var17; - int var18; - int var19; - for(var9 = -4; var9 <= 4; ++var9) { - var10 = (int)(8.5D + var26 * (double)var9 * 0.3D); - var11 = (int)(7.5D - var24 * (double)var9 * 0.3D * 0.5D); - var12 = var11 * 16 + var10; - var13 = 100; - var14 = 100; - var15 = 100; - var16 = 255; - if(this.anaglyphEnabled) { - var17 = (var13 * 30 + var14 * 59 + var15 * 11) / 100; - var18 = (var13 * 30 + var14 * 70) / 100; - var19 = (var13 * 30 + var15 * 70) / 100; - var13 = var17; - var14 = var18; - var15 = var19; - } - - this.imageData[var12 * 4 + 0] = (byte)var13; - this.imageData[var12 * 4 + 1] = (byte)var14; - this.imageData[var12 * 4 + 2] = (byte)var15; - this.imageData[var12 * 4 + 3] = (byte)var16; - } - - for(var9 = -8; var9 <= 16; ++var9) { - var10 = (int)(8.5D + var24 * (double)var9 * 0.3D); - var11 = (int)(7.5D + var26 * (double)var9 * 0.3D * 0.5D); - var12 = var11 * 16 + var10; - var13 = var9 >= 0 ? 255 : 100; - var14 = var9 >= 0 ? 20 : 100; - var15 = var9 >= 0 ? 20 : 100; - var16 = 255; - if(this.anaglyphEnabled) { - var17 = (var13 * 30 + var14 * 59 + var15 * 11) / 100; - var18 = (var13 * 30 + var14 * 70) / 100; - var19 = (var13 * 30 + var15 * 70) / 100; - var13 = var17; - var14 = var18; - var15 = var19; - } - - this.imageData[var12 * 4 + 0] = (byte)var13; - this.imageData[var12 * 4 + 1] = (byte)var14; - this.imageData[var12 * 4 + 2] = (byte)var15; - this.imageData[var12 * 4 + 3] = (byte)var16; - } - - } -} diff --git a/src/net/minecraft/src/TextureFlamesFX.java b/src/net/minecraft/src/TextureFlamesFX.java deleted file mode 100644 index 0f68081..0000000 --- a/src/net/minecraft/src/TextureFlamesFX.java +++ /dev/null @@ -1,77 +0,0 @@ -package net.minecraft.src; - -public class TextureFlamesFX extends TextureFX { - protected float[] field_1133_g = new float[320]; - protected float[] field_1132_h = new float[320]; - - public TextureFlamesFX(int var1) { - super(Block.fire.blockIndexInTexture + var1 * 16); - } - - public void onTick() { - int var2; - float var4; - int var5; - int var6; - for(int var1 = 0; var1 < 16; ++var1) { - for(var2 = 0; var2 < 20; ++var2) { - int var3 = 18; - var4 = this.field_1133_g[var1 + (var2 + 1) % 20 * 16] * (float)var3; - - for(var5 = var1 - 1; var5 <= var1 + 1; ++var5) { - for(var6 = var2; var6 <= var2 + 1; ++var6) { - if(var5 >= 0 && var6 >= 0 && var5 < 16 && var6 < 20) { - var4 += this.field_1133_g[var5 + var6 * 16]; - } - - ++var3; - } - } - - this.field_1132_h[var1 + var2 * 16] = var4 / ((float)var3 * 1.06F); - if(var2 >= 19) { - this.field_1132_h[var1 + var2 * 16] = (float)(Math.random() * Math.random() * Math.random() * 4.0D + Math.random() * (double)0.1F + (double)0.2F); - } - } - } - - float[] var12 = this.field_1132_h; - this.field_1132_h = this.field_1133_g; - this.field_1133_g = var12; - - for(var2 = 0; var2 < 256; ++var2) { - float var13 = this.field_1133_g[var2] * 1.8F; - if(var13 > 1.0F) { - var13 = 1.0F; - } - - if(var13 < 0.0F) { - var13 = 0.0F; - } - - var5 = (int)(var13 * 155.0F + 100.0F); - var6 = (int)(var13 * var13 * 255.0F); - int var7 = (int)(var13 * var13 * var13 * var13 * var13 * var13 * var13 * var13 * var13 * var13 * 255.0F); - short var8 = 255; - if(var13 < 0.5F) { - var8 = 0; - } - - var4 = (var13 - 0.5F) * 2.0F; - if(this.anaglyphEnabled) { - int var9 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; - int var10 = (var5 * 30 + var6 * 70) / 100; - int var11 = (var5 * 30 + var7 * 70) / 100; - var5 = var9; - var6 = var10; - var7 = var11; - } - - this.imageData[var2 * 4 + 0] = (byte)var5; - this.imageData[var2 * 4 + 1] = (byte)var6; - this.imageData[var2 * 4 + 2] = (byte)var7; - this.imageData[var2 * 4 + 3] = (byte)var8; - } - - } -} diff --git a/src/net/minecraft/src/TextureLavaFX.java b/src/net/minecraft/src/TextureLavaFX.java deleted file mode 100644 index 001d971..0000000 --- a/src/net/minecraft/src/TextureLavaFX.java +++ /dev/null @@ -1,81 +0,0 @@ -package net.minecraft.src; - -public class TextureLavaFX extends TextureFX { - protected float[] field_1147_g = new float[256]; - protected float[] field_1146_h = new float[256]; - protected float[] field_1145_i = new float[256]; - protected float[] field_1144_j = new float[256]; - - public TextureLavaFX() { - super(Block.lavaMoving.blockIndexInTexture); - } - - public void onTick() { - int var2; - float var3; - int var5; - int var6; - int var7; - int var8; - int var9; - for(int var1 = 0; var1 < 16; ++var1) { - for(var2 = 0; var2 < 16; ++var2) { - var3 = 0.0F; - int var4 = (int)(MathHelper.sin((float)var2 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); - var5 = (int)(MathHelper.sin((float)var1 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); - - for(var6 = var1 - 1; var6 <= var1 + 1; ++var6) { - for(var7 = var2 - 1; var7 <= var2 + 1; ++var7) { - var8 = var6 + var4 & 15; - var9 = var7 + var5 & 15; - var3 += this.field_1147_g[var8 + var9 * 16]; - } - } - - this.field_1146_h[var1 + var2 * 16] = var3 / 10.0F + (this.field_1145_i[(var1 + 0 & 15) + (var2 + 0 & 15) * 16] + this.field_1145_i[(var1 + 1 & 15) + (var2 + 0 & 15) * 16] + this.field_1145_i[(var1 + 1 & 15) + (var2 + 1 & 15) * 16] + this.field_1145_i[(var1 + 0 & 15) + (var2 + 1 & 15) * 16]) / 4.0F * 0.8F; - this.field_1145_i[var1 + var2 * 16] += this.field_1144_j[var1 + var2 * 16] * 0.01F; - if(this.field_1145_i[var1 + var2 * 16] < 0.0F) { - this.field_1145_i[var1 + var2 * 16] = 0.0F; - } - - this.field_1144_j[var1 + var2 * 16] -= 0.06F; - if(Math.random() < 0.005D) { - this.field_1144_j[var1 + var2 * 16] = 1.5F; - } - } - } - - float[] var11 = this.field_1146_h; - this.field_1146_h = this.field_1147_g; - this.field_1147_g = var11; - - for(var2 = 0; var2 < 256; ++var2) { - var3 = this.field_1147_g[var2] * 2.0F; - if(var3 > 1.0F) { - var3 = 1.0F; - } - - if(var3 < 0.0F) { - var3 = 0.0F; - } - - var5 = (int)(var3 * 100.0F + 155.0F); - var6 = (int)(var3 * var3 * 255.0F); - var7 = (int)(var3 * var3 * var3 * var3 * 128.0F); - if(this.anaglyphEnabled) { - var8 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; - var9 = (var5 * 30 + var6 * 70) / 100; - int var10 = (var5 * 30 + var7 * 70) / 100; - var5 = var8; - var6 = var9; - var7 = var10; - } - - this.imageData[var2 * 4 + 0] = (byte)var5; - this.imageData[var2 * 4 + 1] = (byte)var6; - this.imageData[var2 * 4 + 2] = (byte)var7; - this.imageData[var2 * 4 + 3] = -1; - } - - } -} diff --git a/src/net/minecraft/src/TextureLavaFlowFX.java b/src/net/minecraft/src/TextureLavaFlowFX.java deleted file mode 100644 index a678260..0000000 --- a/src/net/minecraft/src/TextureLavaFlowFX.java +++ /dev/null @@ -1,85 +0,0 @@ -package net.minecraft.src; - -public class TextureLavaFlowFX extends TextureFX { - protected float[] field_1143_g = new float[256]; - protected float[] field_1142_h = new float[256]; - protected float[] field_1141_i = new float[256]; - protected float[] field_1140_j = new float[256]; - int field_1139_k = 0; - - public TextureLavaFlowFX() { - super(Block.lavaMoving.blockIndexInTexture + 1); - this.tileSize = 2; - } - - public void onTick() { - ++this.field_1139_k; - - int var2; - float var3; - int var5; - int var6; - int var7; - int var8; - int var9; - for(int var1 = 0; var1 < 16; ++var1) { - for(var2 = 0; var2 < 16; ++var2) { - var3 = 0.0F; - int var4 = (int)(MathHelper.sin((float)var2 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); - var5 = (int)(MathHelper.sin((float)var1 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); - - for(var6 = var1 - 1; var6 <= var1 + 1; ++var6) { - for(var7 = var2 - 1; var7 <= var2 + 1; ++var7) { - var8 = var6 + var4 & 15; - var9 = var7 + var5 & 15; - var3 += this.field_1143_g[var8 + var9 * 16]; - } - } - - this.field_1142_h[var1 + var2 * 16] = var3 / 10.0F + (this.field_1141_i[(var1 + 0 & 15) + (var2 + 0 & 15) * 16] + this.field_1141_i[(var1 + 1 & 15) + (var2 + 0 & 15) * 16] + this.field_1141_i[(var1 + 1 & 15) + (var2 + 1 & 15) * 16] + this.field_1141_i[(var1 + 0 & 15) + (var2 + 1 & 15) * 16]) / 4.0F * 0.8F; - this.field_1141_i[var1 + var2 * 16] += this.field_1140_j[var1 + var2 * 16] * 0.01F; - if(this.field_1141_i[var1 + var2 * 16] < 0.0F) { - this.field_1141_i[var1 + var2 * 16] = 0.0F; - } - - this.field_1140_j[var1 + var2 * 16] -= 0.06F; - if(Math.random() < 0.005D) { - this.field_1140_j[var1 + var2 * 16] = 1.5F; - } - } - } - - float[] var11 = this.field_1142_h; - this.field_1142_h = this.field_1143_g; - this.field_1143_g = var11; - - for(var2 = 0; var2 < 256; ++var2) { - var3 = this.field_1143_g[var2 - this.field_1139_k / 3 * 16 & 255] * 2.0F; - if(var3 > 1.0F) { - var3 = 1.0F; - } - - if(var3 < 0.0F) { - var3 = 0.0F; - } - - var5 = (int)(var3 * 100.0F + 155.0F); - var6 = (int)(var3 * var3 * 255.0F); - var7 = (int)(var3 * var3 * var3 * var3 * 128.0F); - if(this.anaglyphEnabled) { - var8 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; - var9 = (var5 * 30 + var6 * 70) / 100; - int var10 = (var5 * 30 + var7 * 70) / 100; - var5 = var8; - var6 = var9; - var7 = var10; - } - - this.imageData[var2 * 4 + 0] = (byte)var5; - this.imageData[var2 * 4 + 1] = (byte)var6; - this.imageData[var2 * 4 + 2] = (byte)var7; - this.imageData[var2 * 4 + 3] = -1; - } - - } -} diff --git a/src/net/minecraft/src/TexturePortalFX.java b/src/net/minecraft/src/TexturePortalFX.java deleted file mode 100644 index f525dc4..0000000 --- a/src/net/minecraft/src/TexturePortalFX.java +++ /dev/null @@ -1,86 +0,0 @@ -package net.minecraft.src; - -public class TexturePortalFX extends TextureFX { - private int portalTickCounter = 0; - private byte[][] portalTextureData = new byte[32][1024]; - - public TexturePortalFX() { - super(Block.portal.blockIndexInTexture); - Random var1 = new Random(100L); - - for(int var2 = 0; var2 < 32; ++var2) { - for(int var3 = 0; var3 < 16; ++var3) { - for(int var4 = 0; var4 < 16; ++var4) { - float var5 = 0.0F; - - int var6; - for(var6 = 0; var6 < 2; ++var6) { - float var7 = (float)(var6 * 8); - float var8 = (float)(var6 * 8); - float var9 = ((float)var3 - var7) / 16.0F * 2.0F; - float var10 = ((float)var4 - var8) / 16.0F * 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 * 16 + 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 < 256; ++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; - } - - } -} diff --git a/src/net/minecraft/src/TextureWatchFX.java b/src/net/minecraft/src/TextureWatchFX.java deleted file mode 100644 index 09720bc..0000000 --- a/src/net/minecraft/src/TextureWatchFX.java +++ /dev/null @@ -1,100 +0,0 @@ -package net.minecraft.src; - -import org.lwjgl.opengl.GL11; - -import net.lax1dude.eaglercraft.BufferedImage; -import net.lax1dude.eaglercraft.ImageIO; -import net.minecraft.client.Minecraft; - -public class TextureWatchFX extends TextureFX { - private Minecraft mc; - private int[] watchIconImageData = new int[256]; - private int[] dialImageData = new int[256]; - private double field_4222_j; - private double field_4221_k; - - public TextureWatchFX(Minecraft var1) { - super(Item.pocketSundial.getIconFromDamage(0)); - this.mc = var1; - this.tileImage = 1; - - try { - BufferedImage var2 = ImageIO.read(GL11.getResource("/gui/items.png")); - int var3 = this.iconIndex % 16 * 16; - int var4 = this.iconIndex / 16 * 16; - var2.getRGB(var3, var4, 16, 16, this.watchIconImageData, 0, 16); - var2 = ImageIO.read(GL11.getResource("/misc/dial.png")); - var2.getRGB(0, 0, 16, 16, this.dialImageData, 0, 16); - } catch (Exception var5) { - var5.printStackTrace(); - } - - } - - public void onTick() { - double var1 = 0.0D; - if(this.mc.theWorld != null && this.mc.thePlayer != null) { - float var3 = this.mc.theWorld.getCelestialAngle(1.0F); - var1 = (double)(-var3 * (float)Math.PI * 2.0F); - if(this.mc.theWorld.worldProvider.isNether) { - var1 = Math.random() * (double)((float)Math.PI) * 2.0D; - } - } - - double var22; - for(var22 = var1 - this.field_4222_j; var22 < -Math.PI; var22 += Math.PI * 2.0D) { - } - - while(var22 >= Math.PI) { - var22 -= Math.PI * 2.0D; - } - - if(var22 < -1.0D) { - var22 = -1.0D; - } - - if(var22 > 1.0D) { - var22 = 1.0D; - } - - this.field_4221_k += var22 * 0.1D; - this.field_4221_k *= 0.8D; - this.field_4222_j += this.field_4221_k; - double var5 = Math.sin(this.field_4222_j); - double var7 = Math.cos(this.field_4222_j); - - for(int var9 = 0; var9 < 256; ++var9) { - int var10 = this.watchIconImageData[var9] >> 24 & 255; - int var11 = this.watchIconImageData[var9] >> 16 & 255; - int var12 = this.watchIconImageData[var9] >> 8 & 255; - int var13 = this.watchIconImageData[var9] >> 0 & 255; - if(var11 == var13 && var12 == 0 && var13 > 0) { - double var14 = -((double)(var9 % 16) / 15.0D - 0.5D); - double var16 = (double)(var9 / 16) / 15.0D - 0.5D; - int var18 = var11; - int var19 = (int)((var14 * var7 + var16 * var5 + 0.5D) * 16.0D); - int var20 = (int)((var16 * var7 - var14 * var5 + 0.5D) * 16.0D); - int var21 = (var19 & 15) + (var20 & 15) * 16; - var10 = this.dialImageData[var21] >> 24 & 255; - var11 = (this.dialImageData[var21] >> 16 & 255) * var11 / 255; - var12 = (this.dialImageData[var21] >> 8 & 255) * var18 / 255; - var13 = (this.dialImageData[var21] >> 0 & 255) * var18 / 255; - } - - if(this.anaglyphEnabled) { - int var23 = (var11 * 30 + var12 * 59 + var13 * 11) / 100; - int var15 = (var11 * 30 + var12 * 70) / 100; - int var24 = (var11 * 30 + var13 * 70) / 100; - var11 = var23; - var12 = var15; - var13 = var24; - } - - this.imageData[var9 * 4 + 0] = (byte)var11; - this.imageData[var9 * 4 + 1] = (byte)var12; - this.imageData[var9 * 4 + 2] = (byte)var13; - this.imageData[var9 * 4 + 3] = (byte)var10; - } - - } -} diff --git a/src/net/minecraft/src/TextureWaterFX.java b/src/net/minecraft/src/TextureWaterFX.java deleted file mode 100644 index 5548bf0..0000000 --- a/src/net/minecraft/src/TextureWaterFX.java +++ /dev/null @@ -1,85 +0,0 @@ -package net.minecraft.src; - -public class TextureWaterFX extends TextureFX { - protected float[] field_1158_g = new float[256]; - protected float[] field_1157_h = new float[256]; - protected float[] field_1156_i = new float[256]; - protected float[] field_1155_j = new float[256]; - private int tickCounter = 0; - - public TextureWaterFX() { - super(Block.waterMoving.blockIndexInTexture); - } - - public void onTick() { - ++this.tickCounter; - - int var1; - int var2; - float var3; - int var5; - int var6; - for(var1 = 0; var1 < 16; ++var1) { - for(var2 = 0; var2 < 16; ++var2) { - var3 = 0.0F; - - for(int var4 = var1 - 1; var4 <= var1 + 1; ++var4) { - var5 = var4 & 15; - var6 = var2 & 15; - var3 += this.field_1158_g[var5 + var6 * 16]; - } - - this.field_1157_h[var1 + var2 * 16] = var3 / 3.3F + this.field_1156_i[var1 + var2 * 16] * 0.8F; - } - } - - for(var1 = 0; var1 < 16; ++var1) { - for(var2 = 0; var2 < 16; ++var2) { - this.field_1156_i[var1 + var2 * 16] += this.field_1155_j[var1 + var2 * 16] * 0.05F; - if(this.field_1156_i[var1 + var2 * 16] < 0.0F) { - this.field_1156_i[var1 + var2 * 16] = 0.0F; - } - - this.field_1155_j[var1 + var2 * 16] -= 0.1F; - if(Math.random() < 0.05D) { - this.field_1155_j[var1 + var2 * 16] = 0.5F; - } - } - } - - float[] var12 = this.field_1157_h; - this.field_1157_h = this.field_1158_g; - this.field_1158_g = var12; - - for(var2 = 0; var2 < 256; ++var2) { - var3 = this.field_1158_g[var2]; - if(var3 > 1.0F) { - var3 = 1.0F; - } - - if(var3 < 0.0F) { - var3 = 0.0F; - } - - float var13 = var3 * var3; - var5 = (int)(32.0F + var13 * 32.0F); - var6 = (int)(50.0F + var13 * 64.0F); - int var7 = 255; - int var8 = (int)(146.0F + var13 * 50.0F); - if(this.anaglyphEnabled) { - int var9 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; - int var10 = (var5 * 30 + var6 * 70) / 100; - int var11 = (var5 * 30 + var7 * 70) / 100; - var5 = var9; - var6 = var10; - var7 = var11; - } - - this.imageData[var2 * 4 + 0] = (byte)var5; - this.imageData[var2 * 4 + 1] = (byte)var6; - this.imageData[var2 * 4 + 2] = (byte)var7; - this.imageData[var2 * 4 + 3] = (byte)var8; - } - - } -} diff --git a/src/net/minecraft/src/TextureWaterFlowFX.java b/src/net/minecraft/src/TextureWaterFlowFX.java deleted file mode 100644 index 88b8d16..0000000 --- a/src/net/minecraft/src/TextureWaterFlowFX.java +++ /dev/null @@ -1,86 +0,0 @@ -package net.minecraft.src; - -public class TextureWaterFlowFX extends TextureFX { - protected float[] field_1138_g = new float[256]; - protected float[] field_1137_h = new float[256]; - protected float[] field_1136_i = new float[256]; - protected float[] field_1135_j = new float[256]; - private int field_1134_k = 0; - - public TextureWaterFlowFX() { - super(Block.waterMoving.blockIndexInTexture + 1); - this.tileSize = 2; - } - - public void onTick() { - ++this.field_1134_k; - - int var1; - int var2; - float var3; - int var5; - int var6; - for(var1 = 0; var1 < 16; ++var1) { - for(var2 = 0; var2 < 16; ++var2) { - var3 = 0.0F; - - for(int var4 = var2 - 2; var4 <= var2; ++var4) { - var5 = var1 & 15; - var6 = var4 & 15; - var3 += this.field_1138_g[var5 + var6 * 16]; - } - - this.field_1137_h[var1 + var2 * 16] = var3 / 3.2F + this.field_1136_i[var1 + var2 * 16] * 0.8F; - } - } - - for(var1 = 0; var1 < 16; ++var1) { - for(var2 = 0; var2 < 16; ++var2) { - this.field_1136_i[var1 + var2 * 16] += this.field_1135_j[var1 + var2 * 16] * 0.05F; - if(this.field_1136_i[var1 + var2 * 16] < 0.0F) { - this.field_1136_i[var1 + var2 * 16] = 0.0F; - } - - this.field_1135_j[var1 + var2 * 16] -= 0.3F; - if(Math.random() < 0.2D) { - this.field_1135_j[var1 + var2 * 16] = 0.5F; - } - } - } - - float[] var12 = this.field_1137_h; - this.field_1137_h = this.field_1138_g; - this.field_1138_g = var12; - - for(var2 = 0; var2 < 256; ++var2) { - var3 = this.field_1138_g[var2 - this.field_1134_k * 16 & 255]; - if(var3 > 1.0F) { - var3 = 1.0F; - } - - if(var3 < 0.0F) { - var3 = 0.0F; - } - - float var13 = var3 * var3; - var5 = (int)(32.0F + var13 * 32.0F); - var6 = (int)(50.0F + var13 * 64.0F); - int var7 = 255; - int var8 = (int)(146.0F + var13 * 50.0F); - if(this.anaglyphEnabled) { - int var9 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; - int var10 = (var5 * 30 + var6 * 70) / 100; - int var11 = (var5 * 30 + var7 * 70) / 100; - var5 = var9; - var6 = var10; - var7 = var11; - } - - this.imageData[var2 * 4 + 0] = (byte)var5; - this.imageData[var2 * 4 + 1] = (byte)var6; - this.imageData[var2 * 4 + 2] = (byte)var7; - this.imageData[var2 * 4 + 3] = (byte)var8; - } - - } -}