diff --git a/desktopRuntime/eclipseProject/.classpath b/desktopRuntime/eclipseProject/.classpath
index f1336b46..903bad32 100644
--- a/desktopRuntime/eclipseProject/.classpath
+++ b/desktopRuntime/eclipseProject/.classpath
@@ -7,17 +7,17 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/desktopRuntime/eclipseProject/.project b/desktopRuntime/eclipseProject/.project
index ad0a82ff..03fb7290 100644
--- a/desktopRuntime/eclipseProject/.project
+++ b/desktopRuntime/eclipseProject/.project
@@ -18,12 +18,12 @@
src_lwjgl_java
2
- /workspace/Resent-1.8/eaglercraftx-1.8/../eaglercraft_1.8_workspace/src/lwjgl/java
+ C:/Users/suvan/Downloads/bafybeiakklgbdjufhlcbsf2hksxbmxgyilobmvtcogt6ltdtweh5nyvbvi/../eaglercraft_1.8_workspace/src/lwjgl/java
src_main_java
2
- /workspace/Resent-1.8/eaglercraftx-1.8/../eaglercraft_1.8_workspace/src/main/java
+ C:/Users/suvan/Downloads/bafybeiakklgbdjufhlcbsf2hksxbmxgyilobmvtcogt6ltdtweh5nyvbvi/../eaglercraft_1.8_workspace/src/main/java
diff --git a/desktopRuntime/eclipseProject/eaglercraftDebugRuntime.launch b/desktopRuntime/eclipseProject/eaglercraftDebugRuntime.launch
index 3fb0b74f..9bc6b247 100644
--- a/desktopRuntime/eclipseProject/eaglercraftDebugRuntime.launch
+++ b/desktopRuntime/eclipseProject/eaglercraftDebugRuntime.launch
@@ -1,7 +1,7 @@
-
+
@@ -18,5 +18,5 @@
-
+
diff --git a/desktopRuntime/resources/assets/eagler/CREDITS.txt b/desktopRuntime/resources/assets/eagler/CREDITS.txt
index 5a59d443..b2d4d916 100644
--- a/desktopRuntime/resources/assets/eagler/CREDITS.txt
+++ b/desktopRuntime/resources/assets/eagler/CREDITS.txt
@@ -5,9 +5,11 @@
lax1dude:
- Creator of Eaglercraft
- - Wrote HW accelerated OpenGL 1.3 emulator
- - Wrote all desktop emulation code
- Ported the Minecraft 1.8 client src to TeaVM
+ - Wrote HW accelerated OpenGL 1.3 emulator
+ - Wrote the default shader pack
+ - Made the integrated PBR resource pack
+ - Wrote all desktop emulation code
- Wrote EaglercraftXBungee
- Wrote the patch and build system
diff --git a/desktopRuntime/resources/assets/eagler/glsl/accel_font.fsh b/desktopRuntime/resources/assets/eagler/glsl/accel_font.fsh
index 6fe1e212..36e3cf4a 100644
--- a/desktopRuntime/resources/assets/eagler/glsl/accel_font.fsh
+++ b/desktopRuntime/resources/assets/eagler/glsl/accel_font.fsh
@@ -15,8 +15,8 @@
*/
precision lowp int;
-precision lowp float;
-precision lowp sampler2D;
+precision mediump float;
+precision mediump sampler2D;
in vec2 v_texCoord2f;
in vec4 v_color4f;
diff --git a/desktopRuntime/resources/assets/eagler/glsl/accel_font.vsh b/desktopRuntime/resources/assets/eagler/glsl/accel_font.vsh
index 5c31fe71..578e0ccd 100644
--- a/desktopRuntime/resources/assets/eagler/glsl/accel_font.vsh
+++ b/desktopRuntime/resources/assets/eagler/glsl/accel_font.vsh
@@ -15,8 +15,8 @@
*/
precision lowp int;
-precision lowp float;
-precision lowp sampler2D;
+precision highp float;
+precision mediump sampler2D;
layout(location = 0) in vec3 a_position3f;
diff --git a/desktopRuntime/resources/assets/eagler/glsl/accel_particle.fsh b/desktopRuntime/resources/assets/eagler/glsl/accel_particle.fsh
index 3a922666..60d4639b 100644
--- a/desktopRuntime/resources/assets/eagler/glsl/accel_particle.fsh
+++ b/desktopRuntime/resources/assets/eagler/glsl/accel_particle.fsh
@@ -15,8 +15,8 @@
*/
precision lowp int;
-precision lowp float;
-precision lowp sampler2D;
+precision mediump float;
+precision mediump sampler2D;
in vec2 v_texCoord2f;
in vec4 v_color4f;
diff --git a/desktopRuntime/resources/assets/eagler/glsl/accel_particle.vsh b/desktopRuntime/resources/assets/eagler/glsl/accel_particle.vsh
index ce714bbf..6ed01132 100644
--- a/desktopRuntime/resources/assets/eagler/glsl/accel_particle.vsh
+++ b/desktopRuntime/resources/assets/eagler/glsl/accel_particle.vsh
@@ -15,8 +15,8 @@
*/
precision lowp int;
-precision lowp float;
-precision lowp sampler2D;
+precision highp float;
+precision mediump sampler2D;
layout(location = 0) in vec2 a_position2f;
diff --git a/desktopRuntime/resources/assets/eagler/glsl/core.fsh b/desktopRuntime/resources/assets/eagler/glsl/core.fsh
index b491e069..23ce5beb 100644
--- a/desktopRuntime/resources/assets/eagler/glsl/core.fsh
+++ b/desktopRuntime/resources/assets/eagler/glsl/core.fsh
@@ -141,6 +141,10 @@ void main() {
#endif
#endif
+#ifdef COMPILE_BLEND_ADD
+ color = color * u_colorBlendSrc4f + u_colorBlendAdd4f;
+#endif
+
#ifdef COMPILE_ENABLE_ALPHA_TEST
if(color.a < u_alphaTestRef1f) discard;
#endif
@@ -154,24 +158,21 @@ void main() {
vec3 normal = u_uniformNormal3f;
#endif
float diffuse = 0.0;
+ vec4 light;
for(int i = 0; i < u_lightsEnabled1i; ++i) {
- vec4 light = u_lightsDirections4fv[i];
+ light = u_lightsDirections4fv[i];
diffuse += max(dot(light.xyz, normal), 0.0) * light.w;
}
color.rgb *= min(u_lightsAmbient3f + vec3(diffuse), 1.0);
#endif
-#ifdef COMPILE_BLEND_ADD
- color.rgba = color.rgba * u_colorBlendSrc4f + u_colorBlendAdd4f;
-#endif
-
#ifdef COMPILE_ENABLE_FOG
vec3 fogPos = v_position4f.xyz / v_position4f.w;
float dist = sqrt(dot(fogPos, fogPos));
float fogDensity = u_fogParameters4f.y;
float fogStart = u_fogParameters4f.z;
float fogEnd = u_fogParameters4f.w;
- float f = u_fogParameters4f.x > 0.0 ? 1.0 - pow(2.718, -(fogDensity * dist)) :
+ float f = u_fogParameters4f.x > 0.0 ? 1.0 - exp(-fogDensity * dist) :
(dist - fogStart) / (fogEnd - fogStart);
color.rgb = mix(color.rgb, u_fogColor4f.rgb, clamp(f, 0.0, 1.0) * u_fogColor4f.a);
#endif
diff --git a/desktopRuntime/resources/assets/eagler/glsl/core.vsh b/desktopRuntime/resources/assets/eagler/glsl/core.vsh
index a347435c..194ae44e 100644
--- a/desktopRuntime/resources/assets/eagler/glsl/core.vsh
+++ b/desktopRuntime/resources/assets/eagler/glsl/core.vsh
@@ -50,29 +50,29 @@ out vec2 v_lightmap2f;
uniform mat4 u_textureMat4f02;
#endif
+#ifdef _COMPILE_VARYING_POSITION
uniform mat4 u_modelviewMat4f;
uniform mat4 u_projectionMat4f;
+#else
+uniform mat4 u_modelviewProjMat4f;
+#ifdef COMPILE_NORMAL_ATTRIB
+uniform mat4 u_modelviewMat4f;
+#endif
+#endif
+
+#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
void main() {
-
#ifdef COMPILE_ENABLE_TEX_GEN
v_objectPosition3f = a_position3f;
#endif
- vec4 pos = u_modelviewMat4f * vec4(a_position3f, 1.0);
-
#ifdef _COMPILE_VARYING_POSITION
- v_position4f = pos;
+ v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0);
#endif
#ifdef COMPILE_TEXTURE_ATTRIB
- mat4x3 texMat4x3 = mat4x3(
- u_textureMat4f01[0].xyw,
- u_textureMat4f01[1].xyw,
- u_textureMat4f01[2].xyw,
- u_textureMat4f01[3].xyw
- );
- vec3 v_textureTmp3f = texMat4x3 * vec4(a_texture2f, 0.0, 1.0);
+ vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0);
v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z;
#endif
@@ -85,19 +85,13 @@ void main() {
#endif
#ifdef COMPILE_LIGHTMAP_ATTRIB
-#ifdef COMPILE_TEXTURE_ATTRIB
- texMat4x3 = mat4x3(
-#else
- mat4x3 texMat4x3 = mat4x3(
-#endif
- u_textureMat4f02[0].xyw,
- u_textureMat4f02[1].xyw,
- u_textureMat4f02[2].xyw,
- u_textureMat4f02[3].xyw
- );
- vec3 v_lightmapTmp3f = texMat4x3 * vec4(a_lightmap2f, 0.0, 1.0);
+ vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0);
v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z;
#endif
- gl_Position = u_projectionMat4f * pos;
+#ifdef _COMPILE_VARYING_POSITION
+ gl_Position = u_projectionMat4f * v_position4f;
+#else
+ gl_Position = u_modelviewProjMat4f * vec4(a_position3f, 1.0);
+#endif
}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle.vsh
new file mode 100644
index 00000000..370b0aec
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle.vsh
@@ -0,0 +1,72 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision mediump sampler2D;
+
+layout(location = 0) in vec2 a_position2f;
+
+layout(location = 1) in vec3 p_position3f;
+layout(location = 2) in vec2 p_texCoords2i;
+layout(location = 3) in vec2 p_lightMap2f;
+layout(location = 4) in vec2 p_particleSize_texCoordsSize_2i;
+layout(location = 5) in vec4 p_color4f;
+
+out vec2 v_texCoord2f;
+out vec4 v_color4f;
+out vec2 v_lightmap2f;
+
+#ifdef COMPILE_FORWARD_VSH
+out vec4 v_position4f;
+uniform mat4 u_modelViewMatrix4f;
+uniform mat4 u_projectionMatrix4f;
+#endif
+
+#ifdef COMPILE_GBUFFER_VSH
+uniform mat4 u_matrixTransform;
+#endif
+
+uniform vec3 u_texCoordSize2f_particleSize1f;
+uniform vec4 u_transformParam_1_2_3_4_f;
+uniform float u_transformParam_5_f;
+
+void main() {
+ v_color4f = p_color4f.bgra;
+ v_lightmap2f = p_lightMap2f;
+
+ vec2 tex2f = a_position2f * 0.5 + 0.5;
+ tex2f.y = 1.0 - tex2f.y;
+ tex2f = p_texCoords2i + tex2f * p_particleSize_texCoordsSize_2i.y;
+ v_texCoord2f = tex2f * u_texCoordSize2f_particleSize1f.xy;
+
+ float particleSize = u_texCoordSize2f_particleSize1f.z * p_particleSize_texCoordsSize_2i.x;
+
+ vec3 pos3f = p_position3f;
+ pos3f.x += u_transformParam_1_2_3_4_f.x * particleSize * a_position2f.x;
+ pos3f.x += u_transformParam_1_2_3_4_f.w * particleSize * a_position2f.y;
+ pos3f.y += u_transformParam_1_2_3_4_f.y * particleSize * a_position2f.y;
+ pos3f.z += u_transformParam_1_2_3_4_f.z * particleSize * a_position2f.x;
+ pos3f.z += u_transformParam_5_f * particleSize * a_position2f.y;
+
+#ifdef COMPILE_GBUFFER_VSH
+ gl_Position = u_matrixTransform * vec4(pos3f, 1.0);
+#endif
+#ifdef COMPILE_FORWARD_VSH
+ v_position4f = u_modelViewMatrix4f * vec4(pos3f, 1.0);
+ gl_Position = u_projectionMatrix4f * v_position4f;
+#endif
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_forward.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_forward.fsh
new file mode 100644
index 00000000..ba1d8e0d
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_forward.fsh
@@ -0,0 +1,233 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision mediump sampler2D;
+precision highp sampler2DShadow;
+
+in vec4 v_position4f;
+in vec2 v_texCoord2f;
+in vec4 v_color4f;
+in vec2 v_lightmap2f;
+
+layout(location = 0) out vec4 output4f;
+
+uniform sampler2D u_diffuseTexture;
+
+uniform vec2 u_textureYScale2f;
+
+uniform mat4 u_inverseViewMatrix4f;
+
+#ifdef COMPILE_DYNAMIC_LIGHTS
+struct DynamicLight {
+ mediump vec4 u_lightPosition4f;
+ mediump vec4 u_lightColor4f;
+};
+layout(std140) uniform u_chunkLightingData {
+ mediump int u_dynamicLightCount1i;
+ mediump int _paddingA_;
+ mediump int _paddingB_;
+ mediump int _paddingC_;
+ DynamicLight u_dynamicLightArray[12];
+};
+#endif
+
+layout(std140) uniform u_worldLightingData {
+ mediump vec4 u_sunDirection4f;
+ mediump vec4 u_sunColor3f_sky1f;
+ mediump vec4 u_fogParameters4f;
+ mediump vec4 u_fogColorLight4f;
+ mediump vec4 u_fogColorDark4f;
+ mediump vec4 u_fogColorAddSun4f;
+ mediump vec4 u_blockSkySunDynamicLightFac4f;
+#ifdef COMPILE_SUN_SHADOW_LOD0
+ mediump mat4 u_sunShadowMatrixLOD04f;
+#define DO_COMPILE_SUN_SHADOWS
+#define SUN_SHADOW_MAP_FRAC 1.0
+#endif
+#ifdef COMPILE_SUN_SHADOW_LOD1
+ mediump mat4 u_sunShadowMatrixLOD04f;
+ mediump mat4 u_sunShadowMatrixLOD14f;
+#define DO_COMPILE_SUN_SHADOWS
+#define SUN_SHADOW_MAP_FRAC 0.5
+#endif
+#ifdef COMPILE_SUN_SHADOW_LOD2
+ mediump mat4 u_sunShadowMatrixLOD04f;
+ mediump mat4 u_sunShadowMatrixLOD14f;
+ mediump mat4 u_sunShadowMatrixLOD24f;
+#define DO_COMPILE_SUN_SHADOWS
+#define SUN_SHADOW_MAP_FRAC 0.3333333
+#endif
+};
+
+uniform sampler2D u_samplerNormalMaterial;
+
+uniform sampler2D u_metalsLUT;
+
+#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION
+#define LIB_INCLUDE_PBR_LIGHTING_PREFETCH
+#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl"
+
+uniform sampler2D u_irradianceMap;
+
+#ifdef DO_COMPILE_SUN_SHADOWS
+uniform sampler2DShadow u_sunShadowDepthTexture;
+#endif
+
+void main() {
+ vec4 worldPosition4f;
+ vec4 worldDirection4f;
+ vec4 diffuseColor4f;
+ vec3 normalVector3f;
+ vec2 lightmapCoords2f;
+ vec3 materialData3f;
+
+ // =========== RESOLVE CONSTANTS ============ //
+
+ worldPosition4f = u_inverseViewMatrix4f * v_position4f;
+ worldPosition4f.xyz /= worldPosition4f.w;
+ worldPosition4f.w = 1.0;
+ worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0);
+ worldDirection4f.xyz = normalize(worldDirection4f.xyz);
+
+ lightmapCoords2f = v_lightmap2f;
+
+ normalVector3f = normalize(u_inverseViewMatrix4f[2].xyz);
+
+ // ========= CALCULATE DIFFUSE COLOR ========== //
+
+ diffuseColor4f = texture(u_diffuseTexture, v_texCoord2f) * v_color4f;
+
+ // ============= ALPHA TEST ============== //
+
+ if(diffuseColor4f.a < 0.004) discard;
+
+ // ========== RESOLVE MATERIALS =========== //
+
+ materialData3f = texture(u_samplerNormalMaterial, vec2(v_texCoord2f.x, v_texCoord2f.y * u_textureYScale2f.x + u_textureYScale2f.y)).rgb;
+
+ vec3 metalN, metalK;
+ PREFETCH_METALS(diffuseColor4f.rgb, materialData3f.g, metalN, metalK)
+
+ // ============ SUN LIGHTING ============== //
+
+ diffuseColor4f.rgb *= diffuseColor4f.rgb;
+
+ vec3 lightColor3f = vec3(0.0);
+ if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 &&
+ (u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) {
+#ifdef DO_COMPILE_SUN_SHADOWS
+
+ // ========== SUN SHADOW: LOD0 ============ //
+
+ float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
+ float shadowSample = 1.0;
+ vec4 shadowWorldPos4f = worldPosition4f;
+ shadowWorldPos4f.xyz += normalVector3f * 0.05;
+
+ vec4 shadowTexPos4f;
+ vec2 tmpVec2;
+ for(;;) {
+ shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f;
+ if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
+ shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0);
+ break;
+ }
+
+#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2)
+ shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f;
+ if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
+ shadowTexPos4f.y += 1.0;
+ shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
+ shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
+ break;
+ }
+#endif
+
+#ifdef COMPILE_SUN_SHADOW_LOD2
+ shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f;
+ if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
+ shadowTexPos4f.y += 2.0;
+ shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
+ shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
+ }
+#endif
+ break;
+ }
+#endif
+ lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
+#ifdef DO_COMPILE_SUN_SHADOWS
+ lightColor3f *= shadowSample * skyLight;
+#endif
+ vec3 normalWrap3f = normalVector3f * (dot(-worldDirection4f.xyz, normalVector3f) < 0.0 ? -1.0 : 1.0);
+ lightColor3f = eaglercraftLighting(diffuseColor4f.rgb, lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalWrap3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.z;
+ }
+
+ // =========== IRRADIANCE MAP =========== //
+
+ lightmapCoords2f *= lightmapCoords2f;
+
+ vec3 irradianceMapSamplePos2f = normalVector3f;
+ irradianceMapSamplePos2f.xz /= abs(irradianceMapSamplePos2f.y) + 1.0;
+ float dst = 1.0 - dot(irradianceMapSamplePos2f.xz, irradianceMapSamplePos2f.xz);
+ dst *= dst;
+ irradianceMapSamplePos2f.xz *= 0.975;
+ vec3 skyLight = vec3(sqrt(0.01 + max(u_sunDirection4f.w, 0.0)));
+ if(dst < 0.005) {
+ vec4 sample1 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
+ vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
+ skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb;
+ }else {
+ irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25);
+ irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75);
+ skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb;
+ }
+ skyLight *= lightmapCoords2f.g * u_sunColor3f_sky1f.w;
+
+#ifdef COMPILE_DYNAMIC_LIGHTS
+
+ // =========== DYNAMIC LIGHTING =========== //
+
+ vec3 dlightDist3f, dlightDir3f, dlightColor3f;
+ int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this
+ for(int i = 0; i < safeLightCount; ++i) {
+ dlightDist3f = worldPosition4f.xyz - u_dynamicLightArray[i].u_lightPosition4f.xyz;
+ dlightDir3f = normalize(dlightDist3f);
+ dlightDir3f = dlightDir3f * (dot(dlightDir3f, normalVector3f) < 0.0 ? 1.0 : -1.0);
+ dlightDir3f = materialData3f.b == 1.0 ? normalVector3f : -dlightDir3f;
+ if(dot(dlightDir3f, normalVector3f) <= 0.0) {
+ continue;
+ }
+ dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f);
+ if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) {
+ continue;
+ }
+ lightColor3f += eaglercraftLighting(diffuseColor4f.rgb, dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.w;
+ }
+
+#endif
+
+ // ============ OUTPUT COLOR ============== //
+
+ vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0 * u_blockSkySunDynamicLightFac4f.x;
+ skyLight *= u_blockSkySunDynamicLightFac4f.y;
+ float emissive = materialData3f.b == 1.0 ? 0.0 : materialData3f.b;
+ diffuseColor4f.rgb *= max(skyLight + blockLight, vec3(emissive * emissive * 20.0 + 0.075)) * 0.075;
+ diffuseColor4f.rgb += lightColor3f;
+
+ output4f = vec4(diffuseColor4f.rgb * diffuseColor4f.a, diffuseColor4f.a);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_gbuffer.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_gbuffer.fsh
new file mode 100644
index 00000000..db34c778
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_gbuffer.fsh
@@ -0,0 +1,42 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision mediump float;
+precision mediump sampler2D;
+
+in vec2 v_texCoord2f;
+in vec4 v_color4f;
+in vec2 v_lightmap2f;
+
+layout(location = 0) out vec4 gbufferColor4f;
+layout(location = 1) out vec4 gbufferNormal4f;
+layout(location = 2) out vec4 gbufferMaterial4f;
+
+uniform sampler2D u_diffuseTexture;
+uniform sampler2D u_samplerNormalMaterial;
+
+uniform vec2 u_textureYScale2f;
+
+void main() {
+ vec4 diffuseRGBA = texture(u_diffuseTexture, v_texCoord2f) * v_color4f;
+ if(diffuseRGBA.a < 0.004) {
+ discard;
+ }
+ gbufferColor4f = vec4(diffuseRGBA.rgb, v_lightmap2f.r);
+ gbufferNormal4f = vec4(0.5, 0.5, 1.0, v_lightmap2f.g);
+ gbufferMaterial4f = vec4(texture(u_samplerNormalMaterial, vec2(v_texCoord2f.x, v_texCoord2f.y * u_textureYScale2f.x + u_textureYScale2f.y)).rgb, 1.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/readme.txt b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/readme.txt
new file mode 100644
index 00000000..9bd03640
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/readme.txt
@@ -0,0 +1 @@
+these are just low quality fallback material textures for the default vanilla resource pack when no PBR resource pack is loaded, if you would like to make a PBR resource pack put your _n and _s textures in the "/assets/minecraft/textures/" directory of your zip file, do not modify any files within "/assets/eagler/glsl/deferred/assets_pbr/textures/" because they will not be recognized
\ No newline at end of file
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_end_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_end_s.ebp
new file mode 100644
index 00000000..f87d0478
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_end_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_side_s.ebp
new file mode 100644
index 00000000..f87d0478
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_side_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_top_s.ebp
new file mode 100644
index 00000000..94475996
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_end_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_end_s.ebp
new file mode 100644
index 00000000..9ab55d71
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_end_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_side_s.ebp
new file mode 100644
index 00000000..41ad33d0
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_side_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_top_s.ebp
new file mode 100644
index 00000000..4eeb6b06
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bedrock_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bedrock_s.ebp
new file mode 100644
index 00000000..d3ec27b1
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bedrock_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bookshelf_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bookshelf_s.ebp
new file mode 100644
index 00000000..32582985
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bookshelf_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brewing_stand_base_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brewing_stand_base_s.ebp
new file mode 100644
index 00000000..3f4a00b1
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brewing_stand_base_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brewing_stand_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brewing_stand_s.ebp
new file mode 100644
index 00000000..77b85998
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brewing_stand_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brick_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brick_s.ebp
new file mode 100644
index 00000000..907f4281
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brick_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_inner_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_inner_s.ebp
new file mode 100644
index 00000000..3742fd9a
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_inner_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_side_s.ebp
new file mode 100644
index 00000000..1c00111a
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_side_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_top_s.ebp
new file mode 100644
index 00000000..4992148b
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/coal_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/coal_ore_s.ebp
new file mode 100644
index 00000000..9ec792c7
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/coal_ore_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/coarse_dirt_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/coarse_dirt_s.ebp
new file mode 100644
index 00000000..4172a2fd
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/coarse_dirt_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cobblestone_mossy_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cobblestone_mossy_s.ebp
new file mode 100644
index 00000000..d1bde275
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cobblestone_mossy_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cobblestone_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cobblestone_s.ebp
new file mode 100644
index 00000000..6fe1ad3d
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cobblestone_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/comparator_off_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/comparator_off_s.ebp
new file mode 100644
index 00000000..417e829c
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/comparator_off_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/comparator_on_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/comparator_on_s.ebp
new file mode 100644
index 00000000..090f2b37
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/comparator_on_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_front_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_front_s.ebp
new file mode 100644
index 00000000..aecf7553
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_front_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_side_s.ebp
new file mode 100644
index 00000000..1553d92c
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_side_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_top_s.ebp
new file mode 100644
index 00000000..6d0f74f0
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/diamond_block_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/diamond_block_s.ebp
new file mode 100644
index 00000000..86557364
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/diamond_block_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/diamond_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/diamond_ore_s.ebp
new file mode 100644
index 00000000..1f979624
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/diamond_ore_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_podzol_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_podzol_side_s.ebp
new file mode 100644
index 00000000..94cd1a4e
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_podzol_side_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_podzol_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_podzol_top_s.ebp
new file mode 100644
index 00000000..6588620a
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_podzol_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_s.ebp
new file mode 100644
index 00000000..fa624472
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dispenser_front_horizontal_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dispenser_front_horizontal_s.ebp
new file mode 100644
index 00000000..03cb6faa
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dispenser_front_horizontal_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dispenser_front_vertical_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dispenser_front_vertical_s.ebp
new file mode 100644
index 00000000..f4e1ff05
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dispenser_front_vertical_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_acacia_lower_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_acacia_lower_s.ebp
new file mode 100644
index 00000000..d2711511
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_acacia_lower_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_acacia_upper_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_acacia_upper_s.ebp
new file mode 100644
index 00000000..603f97e1
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_acacia_upper_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_birch_lower_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_birch_lower_s.ebp
new file mode 100644
index 00000000..2320e295
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_birch_lower_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_birch_upper_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_birch_upper_s.ebp
new file mode 100644
index 00000000..85495b18
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_birch_upper_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_dark_oak_lower_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_dark_oak_lower_s.ebp
new file mode 100644
index 00000000..ac3b3cf9
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_dark_oak_lower_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_dark_oak_upper_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_dark_oak_upper_s.ebp
new file mode 100644
index 00000000..ecf07ebc
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_dark_oak_upper_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_jungle_lower_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_jungle_lower_s.ebp
new file mode 100644
index 00000000..2320e295
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_jungle_lower_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_jungle_upper_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_jungle_upper_s.ebp
new file mode 100644
index 00000000..5ffd31bf
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_jungle_upper_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_spruce_lower_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_spruce_lower_s.ebp
new file mode 100644
index 00000000..4680cea5
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_spruce_lower_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_spruce_upper_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_spruce_upper_s.ebp
new file mode 100644
index 00000000..ae3ae02a
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_spruce_upper_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_wood_lower_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_wood_lower_s.ebp
new file mode 100644
index 00000000..2320e295
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_wood_lower_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_wood_upper_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_wood_upper_s.ebp
new file mode 100644
index 00000000..5ffd31bf
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_wood_upper_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dropper_front_horizontal_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dropper_front_horizontal_s.ebp
new file mode 100644
index 00000000..51ac891d
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dropper_front_horizontal_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dropper_front_vertical_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dropper_front_vertical_s.ebp
new file mode 100644
index 00000000..b86068b0
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dropper_front_vertical_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/emerald_block_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/emerald_block_s.ebp
new file mode 100644
index 00000000..8ac491e8
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/emerald_block_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/emerald_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/emerald_ore_s.ebp
new file mode 100644
index 00000000..921b4899
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/emerald_ore_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_bottom_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_bottom_s.ebp
new file mode 100644
index 00000000..e4f41424
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_bottom_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_side_s.ebp
new file mode 100644
index 00000000..17905705
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_side_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_top_s.ebp
new file mode 100644
index 00000000..05783e21
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/end_stone_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/end_stone_s.ebp
new file mode 100644
index 00000000..5dac74bc
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/end_stone_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/endframe_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/endframe_side_s.ebp
new file mode 100644
index 00000000..5e064d52
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/endframe_side_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/endframe_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/endframe_top_s.ebp
new file mode 100644
index 00000000..0e706d39
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/endframe_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/farmland_dry_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/farmland_dry_s.ebp
new file mode 100644
index 00000000..e6f8a5d0
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/farmland_dry_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/farmland_wet_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/farmland_wet_s.ebp
new file mode 100644
index 00000000..32b3fc4f
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/farmland_wet_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_front_off_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_front_off_s.ebp
new file mode 100644
index 00000000..2c743ff0
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_front_off_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_front_on_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_front_on_s.ebp
new file mode 100644
index 00000000..0cc7e973
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_front_on_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_side_s.ebp
new file mode 100644
index 00000000..ecfa0dc5
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_side_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_top_s.ebp
new file mode 100644
index 00000000..9a6e99c1
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gold_block_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gold_block_s.ebp
new file mode 100644
index 00000000..5a50649f
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gold_block_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gold_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gold_ore_s.ebp
new file mode 100644
index 00000000..43efaed0
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gold_ore_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_overlay_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_overlay_s.ebp
new file mode 100644
index 00000000..7669983d
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_overlay_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_s.ebp
new file mode 100644
index 00000000..0e0a24c3
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_snowed_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_snowed_s.ebp
new file mode 100644
index 00000000..5fc483fd
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_snowed_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_top_s.ebp
new file mode 100644
index 00000000..ec9cd191
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gravel_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gravel_s.ebp
new file mode 100644
index 00000000..a2b1db95
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gravel_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/iron_block_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/iron_block_s.ebp
new file mode 100644
index 00000000..72ce37e6
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/iron_block_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/iron_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/iron_ore_s.ebp
new file mode 100644
index 00000000..dbcab976
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/iron_ore_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/lapis_block_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/lapis_block_s.ebp
new file mode 100644
index 00000000..0a0eb61e
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/lapis_block_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/lapis_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/lapis_ore_s.ebp
new file mode 100644
index 00000000..29fa1f09
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/lapis_ore_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_acacia_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_acacia_s.ebp
new file mode 100644
index 00000000..564a2cf4
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_acacia_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_acacia_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_acacia_top_s.ebp
new file mode 100644
index 00000000..4a9b8258
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_acacia_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_big_oak_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_big_oak_s.ebp
new file mode 100644
index 00000000..564a2cf4
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_big_oak_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_big_oak_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_big_oak_top_s.ebp
new file mode 100644
index 00000000..4a9b8258
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_big_oak_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_birch_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_birch_s.ebp
new file mode 100644
index 00000000..564a2cf4
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_birch_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_birch_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_birch_top_s.ebp
new file mode 100644
index 00000000..4a9b8258
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_birch_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_jungle_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_jungle_s.ebp
new file mode 100644
index 00000000..aebc8aad
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_jungle_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_jungle_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_jungle_top_s.ebp
new file mode 100644
index 00000000..4a9b8258
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_jungle_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_oak_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_oak_s.ebp
new file mode 100644
index 00000000..564a2cf4
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_oak_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_oak_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_oak_top_s.ebp
new file mode 100644
index 00000000..4a9b8258
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_oak_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_spruce_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_spruce_s.ebp
new file mode 100644
index 00000000..564a2cf4
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_spruce_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_spruce_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_spruce_top_s.ebp
new file mode 100644
index 00000000..4a9b8258
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_spruce_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/netherrack_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/netherrack_s.ebp
new file mode 100644
index 00000000..7f4790ad
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/netherrack_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/obsidian_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/obsidian_s.ebp
new file mode 100644
index 00000000..e4f41424
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/obsidian_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_bottom_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_bottom_s.ebp
new file mode 100644
index 00000000..9a6e99c1
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_bottom_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_inner_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_inner_s.ebp
new file mode 100644
index 00000000..63ded0c6
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_inner_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_side_s.ebp
new file mode 100644
index 00000000..bde3fbb3
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_side_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_top_normal_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_top_normal_s.ebp
new file mode 100644
index 00000000..41271264
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_top_normal_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_top_sticky_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_top_sticky_s.ebp
new file mode 100644
index 00000000..9e8c1f20
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_top_sticky_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_acacia_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_acacia_s.ebp
new file mode 100644
index 00000000..e01979a5
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_acacia_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_big_oak_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_big_oak_s.ebp
new file mode 100644
index 00000000..e01979a5
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_big_oak_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_birch_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_birch_s.ebp
new file mode 100644
index 00000000..e01979a5
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_birch_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_jungle_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_jungle_s.ebp
new file mode 100644
index 00000000..e01979a5
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_jungle_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_oak_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_oak_s.ebp
new file mode 100644
index 00000000..e01979a5
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_oak_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_spruce_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_spruce_s.ebp
new file mode 100644
index 00000000..e01979a5
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_spruce_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_bricks_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_bricks_s.ebp
new file mode 100644
index 00000000..eb9d696c
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_bricks_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_dark_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_dark_s.ebp
new file mode 100644
index 00000000..2a99d360
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_dark_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_rough_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_rough_s.ebp
new file mode 100644
index 00000000..589b79e2
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_rough_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/pumpkin_face_off_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/pumpkin_face_off_s.ebp
new file mode 100644
index 00000000..e3e4a1b9
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/pumpkin_face_off_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/pumpkin_face_on_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/pumpkin_face_on_s.ebp
new file mode 100644
index 00000000..053b9606
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/pumpkin_face_on_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_bottom_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_bottom_s.ebp
new file mode 100644
index 00000000..d0998434
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_bottom_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_chiseled_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_chiseled_s.ebp
new file mode 100644
index 00000000..d838c378
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_chiseled_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_chiseled_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_chiseled_top_s.ebp
new file mode 100644
index 00000000..649ed0f2
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_chiseled_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_lines_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_lines_s.ebp
new file mode 100644
index 00000000..0f72892b
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_lines_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_lines_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_lines_top_s.ebp
new file mode 100644
index 00000000..4d020b2e
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_lines_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_side_s.ebp
new file mode 100644
index 00000000..ce73796f
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_side_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_top_s.ebp
new file mode 100644
index 00000000..ce73796f
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_ore_s.ebp
new file mode 100644
index 00000000..f2ed4896
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_ore_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_activator_powered_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_activator_powered_s.ebp
new file mode 100644
index 00000000..edb43d11
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_activator_powered_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_activator_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_activator_s.ebp
new file mode 100644
index 00000000..0993565e
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_activator_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_detector_powered_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_detector_powered_s.ebp
new file mode 100644
index 00000000..6b915f1a
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_detector_powered_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_detector_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_detector_s.ebp
new file mode 100644
index 00000000..0799d9bb
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_detector_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_golden_powered_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_golden_powered_s.ebp
new file mode 100644
index 00000000..03de3af6
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_golden_powered_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_golden_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_golden_s.ebp
new file mode 100644
index 00000000..a29e96c9
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_golden_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_normal_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_normal_s.ebp
new file mode 100644
index 00000000..87b59b13
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_normal_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_normal_turned_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_normal_turned_s.ebp
new file mode 100644
index 00000000..1e70e815
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_normal_turned_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_lamp_off_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_lamp_off_s.ebp
new file mode 100644
index 00000000..cab76014
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_lamp_off_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_lamp_on_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_lamp_on_s.ebp
new file mode 100644
index 00000000..036a8409
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_lamp_on_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_ore_s.ebp
new file mode 100644
index 00000000..82b1b5c4
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_ore_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_torch_off_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_torch_off_s.ebp
new file mode 100644
index 00000000..b3a8024e
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_torch_off_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_torch_on_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_torch_on_s.ebp
new file mode 100644
index 00000000..a7099c08
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_torch_on_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/repeater_off_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/repeater_off_s.ebp
new file mode 100644
index 00000000..d59493d6
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/repeater_off_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/repeater_on_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/repeater_on_s.ebp
new file mode 100644
index 00000000..a42202a6
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/repeater_on_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sand_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sand_s.ebp
new file mode 100644
index 00000000..6672b3c0
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sand_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_bottom_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_bottom_s.ebp
new file mode 100644
index 00000000..0982a821
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_bottom_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_carved_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_carved_s.ebp
new file mode 100644
index 00000000..b9ca9427
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_carved_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_normal_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_normal_s.ebp
new file mode 100644
index 00000000..2de9bba4
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_normal_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_smooth_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_smooth_s.ebp
new file mode 100644
index 00000000..527dadac
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_smooth_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_top_s.ebp
new file mode 100644
index 00000000..3791fc43
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/soul_sand_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/soul_sand_s.ebp
new file mode 100644
index 00000000..f128bdb3
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/soul_sand_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_andesite_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_andesite_s.ebp
new file mode 100644
index 00000000..7d3463db
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_andesite_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_andesite_smooth_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_andesite_smooth_s.ebp
new file mode 100644
index 00000000..e8269f14
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_andesite_smooth_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_diorite_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_diorite_s.ebp
new file mode 100644
index 00000000..20fea690
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_diorite_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_diorite_smooth_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_diorite_smooth_s.ebp
new file mode 100644
index 00000000..e919c96e
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_diorite_smooth_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_granite_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_granite_s.ebp
new file mode 100644
index 00000000..bb4dcb77
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_granite_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_granite_smooth_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_granite_smooth_s.ebp
new file mode 100644
index 00000000..6d4e8e75
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_granite_smooth_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_s.ebp
new file mode 100644
index 00000000..1651f26b
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_slab_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_slab_side_s.ebp
new file mode 100644
index 00000000..dfcb2043
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_slab_side_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_slab_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_slab_top_s.ebp
new file mode 100644
index 00000000..348db647
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_slab_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_carved_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_carved_s.ebp
new file mode 100644
index 00000000..cb99d688
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_carved_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_cracked_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_cracked_s.ebp
new file mode 100644
index 00000000..ad459374
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_cracked_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_mossy_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_mossy_s.ebp
new file mode 100644
index 00000000..2d78a574
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_mossy_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_s.ebp
new file mode 100644
index 00000000..6868e140
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_bottom_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_bottom_s.ebp
new file mode 100644
index 00000000..661b21fa
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_bottom_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_side_s.ebp
new file mode 100644
index 00000000..1aa8886f
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_side_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_top_s.ebp
new file mode 100644
index 00000000..fb7610e8
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_top_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/torch_on_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/torch_on_s.ebp
new file mode 100644
index 00000000..33adc9b6
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/torch_on_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/trapdoor_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/trapdoor_s.ebp
new file mode 100644
index 00000000..3d590fa1
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/trapdoor_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/trip_wire_source_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/trip_wire_source_s.ebp
new file mode 100644
index 00000000..aca2f5ef
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/trip_wire_source_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_0_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_0_s.ebp
new file mode 100644
index 00000000..f60b3d03
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_0_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_1_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_1_s.ebp
new file mode 100644
index 00000000..be777dd6
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_1_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_2_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_2_s.ebp
new file mode 100644
index 00000000..79a1f9df
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_2_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_standby_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_standby_s.ebp
new file mode 100644
index 00000000..af3c5cf0
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_standby_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/brewing_stand_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/brewing_stand_s.ebp
new file mode 100644
index 00000000..cfff2fc1
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/brewing_stand_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_lava_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_lava_s.ebp
new file mode 100644
index 00000000..56b64eb2
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_lava_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_milk_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_milk_s.ebp
new file mode 100644
index 00000000..a7f7e742
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_milk_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_water_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_water_s.ebp
new file mode 100644
index 00000000..a07b5187
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_water_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/carrot_on_a_stick_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/carrot_on_a_stick_s.ebp
new file mode 100644
index 00000000..339ee070
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/carrot_on_a_stick_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/clock_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/clock_s.ebp
new file mode 100644
index 00000000..d2cd4830
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/clock_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/compass_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/compass_s.ebp
new file mode 100644
index 00000000..d66a293b
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/compass_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_axe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_axe_s.ebp
new file mode 100644
index 00000000..60a45db5
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_axe_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_hoe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_hoe_s.ebp
new file mode 100644
index 00000000..41b89e3b
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_hoe_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_pickaxe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_pickaxe_s.ebp
new file mode 100644
index 00000000..c09e9b35
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_pickaxe_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_shovel_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_shovel_s.ebp
new file mode 100644
index 00000000..fdc6e0e3
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_shovel_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_sword_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_sword_s.ebp
new file mode 100644
index 00000000..969b360d
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_sword_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/fishing_rod_cast_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/fishing_rod_cast_s.ebp
new file mode 100644
index 00000000..5098437b
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/fishing_rod_cast_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/fishing_rod_uncast_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/fishing_rod_uncast_s.ebp
new file mode 100644
index 00000000..0530e40c
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/fishing_rod_uncast_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/flint_and_steel_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/flint_and_steel_s.ebp
new file mode 100644
index 00000000..8e55ba3e
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/flint_and_steel_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_axe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_axe_s.ebp
new file mode 100644
index 00000000..e8c081ed
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_axe_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_hoe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_hoe_s.ebp
new file mode 100644
index 00000000..7ec0ebeb
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_hoe_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_pickaxe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_pickaxe_s.ebp
new file mode 100644
index 00000000..ce0adb6c
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_pickaxe_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_shovel_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_shovel_s.ebp
new file mode 100644
index 00000000..1e3c5752
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_shovel_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_sword_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_sword_s.ebp
new file mode 100644
index 00000000..0023c9ff
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_sword_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_axe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_axe_s.ebp
new file mode 100644
index 00000000..96e75623
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_axe_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_hoe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_hoe_s.ebp
new file mode 100644
index 00000000..aabf4a12
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_hoe_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_pickaxe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_pickaxe_s.ebp
new file mode 100644
index 00000000..e9a82c5d
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_pickaxe_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_shovel_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_shovel_s.ebp
new file mode 100644
index 00000000..aafb70dc
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_shovel_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_sword_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_sword_s.ebp
new file mode 100644
index 00000000..dc31fb66
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_sword_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_chest_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_chest_s.ebp
new file mode 100644
index 00000000..5cce2f98
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_chest_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_command_block_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_command_block_s.ebp
new file mode 100644
index 00000000..5cce2f98
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_command_block_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_furnace_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_furnace_s.ebp
new file mode 100644
index 00000000..5cce2f98
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_furnace_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_tnt_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_tnt_s.ebp
new file mode 100644
index 00000000..5cce2f98
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_tnt_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/shears_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/shears_s.ebp
new file mode 100644
index 00000000..f6ee11cf
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/shears_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_axe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_axe_s.ebp
new file mode 100644
index 00000000..8584d6eb
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_axe_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_hoe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_hoe_s.ebp
new file mode 100644
index 00000000..da948d76
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_hoe_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_pickaxe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_pickaxe_s.ebp
new file mode 100644
index 00000000..56feb845
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_pickaxe_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_shovel_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_shovel_s.ebp
new file mode 100644
index 00000000..818e25af
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_shovel_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_sword_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_sword_s.ebp
new file mode 100644
index 00000000..439f9535
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_sword_s.ebp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/brdf_lut.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/brdf_lut.bmp
new file mode 100644
index 00000000..54b6c70d
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/brdf_lut.bmp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_noise3d.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_noise3d.fsh
new file mode 100644
index 00000000..d2624321
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_noise3d.fsh
@@ -0,0 +1,55 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out float output1f;
+
+uniform sampler2D u_noiseTexture;
+
+uniform float u_textureSlice1f;
+uniform vec2 u_textureSize2f;
+uniform mat4x3 u_sampleOffsetMatrix4f;
+uniform vec3 u_cloudMovement3f;
+
+#define GET_CLOUDS(pos3f, accum, factor, tmp3f)\
+ tmp3f.z = floor(pos3f.z);\
+ tmp3f.xy = pos3f.xy * 0.015625 + (tmp3f.z * 0.265625);\
+ pos3f.x = textureLod(u_noiseTexture, tmp3f.xy, 0.0).x;\
+ pos3f.y = textureLod(u_noiseTexture, tmp3f.xy + 0.265625, 0.0).x;\
+ accum += mix(pos3f.x, pos3f.y, pos3f.z - tmp3f.z) * factor;
+
+void main() {
+ vec3 p = vec3(v_position2f.x, u_textureSlice1f, v_position2f.y) * vec3(u_textureSize2f.x, 1.0, u_textureSize2f.y);
+ p = u_sampleOffsetMatrix4f * vec4(p, 1.0);
+ vec3 sampleCoord3f = p + u_cloudMovement3f;
+ float noise = 0.0;
+
+ vec3 in3f = sampleCoord3f;
+ GET_CLOUDS(in3f, noise, 0.5, p)
+ in3f = sampleCoord3f * 2.0 + u_cloudMovement3f;
+ GET_CLOUDS(in3f, noise, 0.25, p)
+ in3f = sampleCoord3f * 7.0 - u_cloudMovement3f;
+ GET_CLOUDS(in3f, noise, 0.125, p)
+ in3f = (sampleCoord3f + u_cloudMovement3f) * 16.0;
+ GET_CLOUDS(in3f, noise, 0.0625, p)
+
+ output1f = noise;
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sample.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sample.fsh
new file mode 100644
index 00000000..b9430909
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sample.fsh
@@ -0,0 +1,92 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+precision highp sampler3D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out vec4 output4f;
+
+uniform float u_rainStrength1f;
+uniform vec4 u_densityModifier4f;
+uniform float u_sampleStep1f;
+uniform float u_cloudTimer1f;
+uniform vec3 u_cloudOffset3f;
+uniform vec3 u_sunDirection3f;
+uniform vec3 u_sunColor3f;
+
+uniform sampler3D u_noiseTexture3D;
+uniform sampler2D u_skyIrradianceMap;
+#define GET_CLOUDS(pos3f, out1f)\
+ if(pos3f == clamp(pos3f, vec3(0.0), vec3(1.0))) {\
+ out1f = length(pos3f - clamp(pos3f, vec3(0.05), vec3(0.95)));\
+ out1f = smoothstep(0.0, 1.0, max(1.0 - out1f * 15.0, 0.0));\
+ out1f *= textureLod(u_noiseTexture3D, pos3f.xzy, 0.0).r;\
+ out1f += u_densityModifier4f.w;\
+ out1f = max(out1f * out1f * u_densityModifier4f.x + out1f * u_densityModifier4f.y + u_densityModifier4f.z, 0.0);\
+ }else out1f = 0.0;
+
+void main() {
+ vec2 latLong = v_position2f * 2.0 - 1.0;
+ float latLongLen = dot(latLong, latLong);
+ if(latLongLen > 1.025) {
+ output4f = vec4(0.0);
+ return;
+ }
+
+ float mag2 = 2.0 / (latLongLen + 1.0);
+ vec3 dir;
+ dir.y = mag2 - 1.0;
+ dir.xz = latLong * mag2;
+
+ vec3 samplePos = vec3(0.0, -4.5 + u_cloudOffset3f.y * 0.05, 0.0) + dir * u_sampleStep1f * 0.2;
+ samplePos = samplePos * vec3(0.05, 0.1, 0.05) + vec3(0.5, 0.0, 0.5);
+
+ float sample0, sample1;
+ GET_CLOUDS(samplePos, sample0)
+
+ if(sample0 < 0.002) {
+ output4f = vec4(0.0, 0.0, 0.0, 1.0);
+ return;
+ }
+
+ output4f.a = exp2(-sample0 * 5.0);
+
+ vec3 sunDirection = u_sunDirection3f * vec3(1.0, 2.0, 1.0) * 0.025;
+ float sunVisibility = sample0;
+
+ GET_CLOUDS((samplePos + sunDirection), sample1)
+ sunVisibility += sample1;
+ GET_CLOUDS((samplePos + sunDirection * 2.0), sample1)
+ sunVisibility += sample1;
+ GET_CLOUDS((samplePos + sunDirection * 3.0), sample1)
+ sunVisibility += sample1;
+ GET_CLOUDS((samplePos + sunDirection * 4.0), sample1)
+ sunVisibility += sample1;
+ GET_CLOUDS((samplePos + sunDirection * 5.0), sample1)
+ sunVisibility += sample1;
+
+ sunVisibility = exp2(-sunVisibility * 50.0);
+ sunVisibility *= 1.0 - exp2(-sample0 * 1.2);
+
+ vec3 sky = textureLod(u_skyIrradianceMap, v_position2f * vec2(1.0, 0.5) + vec2(0.0, 0.5), 0.0).rgb * 0.05;
+ float intergal = exp2(-7.33 * sample0) * -9.0 + 9.0;
+
+ output4f.rgb = (u_sunColor3f * sunVisibility + sky) * intergal;
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.bmp
new file mode 100644
index 00000000..f4743c8d
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.bmp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.fsh
new file mode 100644
index 00000000..a114c3ca
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.fsh
@@ -0,0 +1,33 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision mediump float;
+precision mediump sampler3D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out vec4 output4f;
+
+uniform sampler3D u_inputTexture;
+uniform float u_textureLevel1f;
+uniform float u_textureLod1f;
+uniform vec2 u_sampleWeights2f;
+
+void main() {
+ float objsample = textureLod(u_inputTexture, vec3(v_position2f, u_textureLevel1f), u_textureLod1f).r;
+ output4f = vec4(objsample * u_sampleWeights2f.x, 0.0, 0.0, objsample * u_sampleWeights2f.y + 1.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.vsh
new file mode 100644
index 00000000..d924262e
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.vsh
@@ -0,0 +1,30 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision mediump sampler2D;
+
+layout(location = 0) in vec2 a_position2f;
+
+out vec2 v_position2f;
+
+uniform mat3x2 u_transformMatrix3x2f;
+
+void main() {
+ v_position2f = a_position2f * 0.5 + 0.5;
+ gl_Position = vec4(u_transformMatrix3x2f * vec3(a_position2f, 1.0), 0.0, 1.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sun_occlusion.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sun_occlusion.fsh
new file mode 100644
index 00000000..69a75dce
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sun_occlusion.fsh
@@ -0,0 +1,48 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+layout(location = 0) out float occlusionOut1f;
+
+uniform mat4x3 u_sampleMatrix4x3f;
+uniform sampler2D u_cloudsTexture;
+
+#define SAMPLE_DENSITY(v, a_, f)\
+ f = u_sampleMatrix4x3f * v;\
+ f.xy = (f.xz / (f.y + 1.0)) * 0.975 * 0.5 + 0.5;\
+ if(f.xy == clamp(f.xy, vec2(0.001), vec2(0.999)))\
+ a_ += textureLod(u_cloudsTexture, f.xy, 0.0).a * 0.125;\
+ else\
+ a_ += 0.125;
+
+void main() {
+ vec3 f;
+ float accum = 0.0;
+
+ SAMPLE_DENSITY(vec4(0.000, 0.000, 1.000, 1.0), accum, f)
+ SAMPLE_DENSITY(vec4(0.844, 0.521, 0.126, 1.0), accum, f)
+ SAMPLE_DENSITY(vec4(-0.187, 0.979, 0.087, 1.0), accum, f)
+ SAMPLE_DENSITY(vec4(0.402, -0.904, 0.145, 1.0), accum, f)
+ SAMPLE_DENSITY(vec4(-0.944, -0.316, 0.098, 1.0), accum, f)
+ SAMPLE_DENSITY(vec4(-0.759, 0.427, 0.491, 1.0), accum, f)
+ SAMPLE_DENSITY(vec4(0.955, -0.285, 0.076, 1.0), accum, f)
+ SAMPLE_DENSITY(vec4(-0.322, -0.664, 0.675, 1.0), accum, f)
+
+ occlusionOut1f = clamp(sqrt(accum) * 3.0 - 1.0, 0.0, 1.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_combine.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_combine.fsh
new file mode 100644
index 00000000..97d71d2d
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_combine.fsh
@@ -0,0 +1,172 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out vec4 output4f;
+
+uniform sampler2D u_gbufferColorTexture;
+uniform sampler2D u_gbufferNormalTexture;
+uniform sampler2D u_gbufferMaterialTexture;
+
+uniform sampler2D u_gbufferDepthTexture;
+
+uniform vec2 u_halfResolutionPixelAlignment2f;
+
+#ifdef COMPILE_GLOBAL_AMBIENT_OCCLUSION
+uniform sampler2D u_ssaoTexture;
+#endif
+
+#ifdef COMPILE_SCREEN_SPACE_REFLECTIONS
+uniform sampler2D u_ssrReflectionTexture;
+#endif
+
+#ifdef COMPILE_ENV_MAP_REFLECTIONS
+uniform sampler2D u_environmentMap;
+#endif
+
+uniform sampler2D u_irradianceMap;
+
+uniform sampler2D u_brdfLUT;
+uniform sampler2D u_metalsLUT;
+
+uniform mat4 u_inverseProjMatrix4f;
+uniform mat4 u_inverseViewMatrix4f;
+
+uniform vec3 u_sunDirection3f;
+uniform float u_skyLightFactor1f;
+
+#if defined(COMPILE_SCREEN_SPACE_REFLECTIONS) || defined(COMPILE_ENV_MAP_REFLECTIONS)
+#define LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_SPECULAR
+#endif
+
+#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_env_map.glsl"
+
+void main() {
+ vec3 diffuseColor3f;
+ vec3 normalVector3f;
+ vec2 lightmapCoords2f;
+ vec4 materialData4f;
+
+ float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r;
+ if(depth < 0.00001) {
+ discard;
+ }
+
+ vec4 sampleVar4f = textureLod(u_gbufferColorTexture, v_position2f, 0.0);
+ diffuseColor3f.rgb = sampleVar4f.rgb * sampleVar4f.rgb;
+ lightmapCoords2f.x = sampleVar4f.a;
+ sampleVar4f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0);
+ normalVector3f.xyz = sampleVar4f.rgb * 2.0 - 1.0;
+ normalVector3f.xyz = mat3(u_inverseViewMatrix4f) * normalVector3f.xyz;
+ normalVector3f.xyz = normalize(normalVector3f.xyz);
+ lightmapCoords2f.y = sampleVar4f.a;
+ materialData4f = textureLod(u_gbufferMaterialTexture, v_position2f, 0.0);
+
+ float shadow = 0.075;
+
+#ifdef COMPILE_GLOBAL_AMBIENT_OCCLUSION
+ vec4 ao = textureLod(u_ssaoTexture, min(v_position2f * u_halfResolutionPixelAlignment2f, 1.0), 0.0);
+ ao.g = ao.b > 0.0 ? ao.g : 1.0;
+ shadow = mix(shadow, shadow * ao.g, 0.9);
+#endif
+
+ lightmapCoords2f *= lightmapCoords2f;
+ vec3 irradianceMapSamplePos2f = normalVector3f;
+ irradianceMapSamplePos2f.xz /= abs(irradianceMapSamplePos2f.y) + 1.0;
+ float dst = 1.0 - dot(irradianceMapSamplePos2f.xz, irradianceMapSamplePos2f.xz);
+ dst *= dst;
+ irradianceMapSamplePos2f.xz *= 0.975;
+ vec3 skyLight = vec3(sqrt(0.01 + max(-u_sunDirection3f.y, 0.0)));
+ if(dst < 0.005) {
+ vec4 sample1 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
+ vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
+ skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb;
+ }else {
+ irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25);
+ irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75);
+ skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb;
+ }
+
+ skyLight *= lightmapCoords2f.g * u_skyLightFactor1f;
+
+ vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0;
+ float emissive = materialData4f.b == 1.0 ? 0.0 : materialData4f.b;
+ vec3 specular = vec3(0.0);
+
+#ifdef COMPILE_ENV_MAP_REFLECTIONS
+ float f = materialData4f.g < 0.06 ? 1.0 : 0.0;
+ f += materialData4f.r < 0.5 ? 1.0 : 0.0;
+ while((materialData4f.a >= 0.5 ? f : -1.0) == 0.0) {
+ vec4 worldPosition4f = vec4(v_position2f, depth, 1.0) * 2.0 - 1.0;
+ worldPosition4f = u_inverseProjMatrix4f * worldPosition4f;
+ worldPosition4f.xyz /= worldPosition4f.w;
+ float posDst = dot(worldPosition4f.xyz, worldPosition4f.xyz);
+ if(posDst > 25.0) {
+ break;
+ }
+ worldPosition4f = u_inverseViewMatrix4f * vec4(worldPosition4f.xyz, 0.0);
+ vec3 viewDir3f = normalize(worldPosition4f.xyz); // need confirmation this should be negative
+ vec3 reflectDir = reflect(viewDir3f, normalVector3f);
+ reflectDir.xz /= abs(reflectDir.y) + 1.0;
+ float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz);
+ dst *= dst;
+ reflectDir.xz = reflectDir.xz * 0.975;
+ vec4 envMapSample4f;
+ if(dst < 0.005) {
+ vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
+ vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
+ envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a));
+ }else {
+ reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25);
+ reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75);
+ envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0);
+ }
+ if(envMapSample4f.a > 0.0) {
+ specular = eaglercraftIBL_Specular(diffuseColor3f.rgb, envMapSample4f.rgb, viewDir3f, normalVector3f, materialData4f.rgb);
+ specular *= 1.0 - sqrt(posDst) * 0.2;
+ }
+ break;
+ }
+#endif
+
+#ifdef COMPILE_SCREEN_SPACE_REFLECTIONS
+#ifndef COMPILE_ENV_MAP_REFLECTIONS
+ float f = materialData4f.g < 0.06 ? 1.0 : 0.0;
+ f += materialData4f.r < 0.5 ? 1.0 : 0.0;
+ if(f == 0.0) {
+#else
+ if((materialData4f.a < 0.5 ? f : -1.0) == 0.0) {
+#endif
+ vec4 ssrSample = textureLod(u_ssrReflectionTexture, min(v_position2f * u_halfResolutionPixelAlignment2f, 1.0), 0.0);
+ if(ssrSample.g > 0.0) {
+ ssrSample.g -= 0.005;
+ vec4 worldPosition4f = vec4(v_position2f, depth, 1.0) * 2.0 - 1.0;
+ worldPosition4f = u_inverseProjMatrix4f * worldPosition4f;
+ worldPosition4f = u_inverseViewMatrix4f * vec4(worldPosition4f.xyz / worldPosition4f.w, 0.0);
+ vec3 viewDir3f = normalize(worldPosition4f.xyz); // need confirmation this should be negative
+ specular = eaglercraftIBL_Specular(diffuseColor3f.rgb, ssrSample.rgb, viewDir3f, normalVector3f.xyz, materialData4f.rgb);
+ }
+ }
+#endif
+
+ output4f = vec4((diffuseColor3f.rgb * max(skyLight + blockLight, vec3(emissive * emissive * 20.0 + 0.075)) + specular * 8.0) * shadow, 1.0);
+
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core.vsh
new file mode 100644
index 00000000..2c55f016
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core.vsh
@@ -0,0 +1,114 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+in vec3 a_position3f;
+
+#ifdef COMPILE_TEXTURE_ATTRIB
+in vec2 a_texture2f;
+out vec2 v_texture2f;
+uniform mat4 u_textureMat4f01;
+#endif
+
+#ifdef COMPILE_COLOR_ATTRIB
+in vec4 a_color4f;
+out vec4 v_color4f;
+#endif
+
+#ifdef COMPILE_NORMAL_ATTRIB
+in vec4 a_normal4f;
+out vec3 v_normal3f;
+out float v_block1f;
+#endif
+
+#ifdef COMPILE_STATE_WAVING_BLOCKS
+uniform mat4 u_modelMatrix4f;
+uniform mat4 u_viewMatrix4f;
+uniform vec3 u_wavingBlockOffset3f;
+uniform vec4 u_wavingBlockParam4f;
+#ifndef COMPILE_NORMAL_ATTRIB
+uniform float u_blockConstant1f;
+#endif
+#define DO_COMPILE_STATE_WAVING_BLOCKS
+#define FAKE_SIN(valueIn, valueOut)\
+ valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\
+ valueOut = valueOut * valueOut * (3.0 - 2.0 * valueOut) * 2.0 - 1.0;
+#define LIB_INCLUDE_WAVING_BLOCKS_FUNCTION
+#endif
+
+#EAGLER INCLUDE (2) "eagler:glsl/deferred/lib/waving_blocks.glsl"
+
+#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
+out vec3 v_viewdir3f;
+#endif
+
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+in vec2 a_lightmap2f;
+out vec2 v_lightmap2f;
+uniform mat4 u_textureMat4f02;
+#endif
+
+uniform mat4 u_modelviewMat4f;
+uniform mat4 u_projectionMat4f;
+
+#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
+
+void main() {
+
+#ifdef COMPILE_TEXTURE_ATTRIB
+ vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0);
+ v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z;
+#endif
+
+#ifdef COMPILE_COLOR_ATTRIB
+ v_color4f = a_color4f;
+#endif
+
+#ifdef COMPILE_NORMAL_ATTRIB
+ v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz);
+ float blockId = v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5);
+#endif
+
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+ vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0);
+ v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z;
+#endif
+
+ vec4 pos = vec4(a_position3f, 1.0);
+
+#ifdef DO_COMPILE_STATE_WAVING_BLOCKS
+#ifndef COMPILE_NORMAL_ATTRIB
+ float blockId = u_blockConstant1f;
+#endif
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+ if(v_lightmap2f.y > 0.33) {
+ COMPUTE_WAVING_BLOCKS(pos, min(v_lightmap2f.y * 3.0 - 1.0, 1.0), 24.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f)
+ }else {
+ pos = u_modelviewMat4f * pos;
+ }
+#else
+ COMPUTE_WAVING_BLOCKS(pos, 1.0, 32.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f)
+#endif
+#else
+ pos = u_modelviewMat4f * pos;
+#endif
+
+#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
+ v_viewdir3f = pos.xyz / pos.w;
+#endif
+
+ gl_Position = u_projectionMat4f * pos;
+
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core_gbuffer.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core_gbuffer.fsh
new file mode 100644
index 00000000..0eb91133
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core_gbuffer.fsh
@@ -0,0 +1,166 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+#ifdef COMPILE_TEXTURE_ATTRIB
+in vec2 v_texture2f;
+#endif
+
+uniform vec4 u_color4f;
+
+#ifdef COMPILE_COLOR_ATTRIB
+in vec4 v_color4f;
+#endif
+
+#ifdef COMPILE_NORMAL_ATTRIB
+in vec3 v_normal3f;
+in float v_block1f;
+#else
+uniform vec3 u_uniformNormal3f;
+uniform float u_blockConstant1f;
+#endif
+
+uniform float u_useEnvMap1f;
+
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+in vec2 v_lightmap2f;
+#endif
+
+#ifdef COMPILE_ENABLE_TEXTURE2D
+uniform sampler2D u_samplerTexture;
+#ifndef COMPILE_TEXTURE_ATTRIB
+uniform vec2 u_textureCoords01;
+#endif
+#endif
+
+#ifdef COMPILE_ENABLE_LIGHTMAP
+#ifndef COMPILE_LIGHTMAP_ATTRIB
+uniform vec2 u_textureCoords02;
+#endif
+#endif
+
+#ifdef COMPILE_ENABLE_ALPHA_TEST
+uniform float u_alphaTestRef1f;
+#endif
+
+#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
+uniform vec2 u_textureAnisotropicFix;
+#endif
+
+#ifdef COMPILE_BLEND_ADD
+uniform vec4 u_colorBlendSrc4f;
+uniform vec4 u_colorBlendAdd4f;
+#endif
+
+#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
+uniform sampler2D u_samplerNormalMaterial;
+in vec3 v_viewdir3f;
+#ifndef COMPILE_TEXTURE_ATTRIB
+uniform vec2 u_textureCoords01;
+#endif
+#else
+uniform vec3 u_materialConstants3f;
+#endif
+
+#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
+mat3 cotangent_frame(in vec3 N, in vec3 p, in vec2 uv) {
+ vec3 dp1 = dFdx(p);
+ vec3 dp2 = dFdy(p);
+ vec2 duv1 = dFdx(uv);
+ vec2 duv2 = dFdy(uv);
+ vec3 dp2perp = cross(dp2, N);
+ vec3 dp1perp = cross(N, dp1);
+ vec3 T = dp2perp * duv1.x + dp1perp * duv2.x;
+ vec3 B = dp2perp * duv1.y + dp1perp * duv2.y;
+ float invmax = inversesqrt(max(dot(T,T), dot(B,B)));
+ return mat3(T * invmax, B * invmax, N);
+}
+#endif
+
+layout(location = 0) out vec4 gbufferColor4f;
+layout(location = 1) out vec4 gbufferNormal4f;
+layout(location = 2) out vec4 gbufferMaterial4f;
+
+void main() {
+#ifdef COMPILE_COLOR_ATTRIB
+ vec4 color = v_color4f * u_color4f;
+#else
+ vec4 color = u_color4f;
+#endif
+
+ vec3 normal;
+#ifdef COMPILE_NORMAL_ATTRIB
+ normal = normalize(v_normal3f);
+#else
+ normal = u_uniformNormal3f;
+#endif
+
+#if defined(COMPILE_ENABLE_TEXTURE2D) || defined(COMPILE_NORMAL_MATERIAL_TEXTURE)
+ vec2 uv;
+#ifdef COMPILE_TEXTURE_ATTRIB
+#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
+ uv = floor(uv * u_textureAnisotropicFix) + 0.5;
+ uv /= u_textureAnisotropicFix;
+#else
+ uv = v_texture2f;
+#endif
+#else
+ uv = u_textureCoords01;
+#endif
+#ifdef COMPILE_ENABLE_TEXTURE2D
+ color *= texture(u_samplerTexture, uv);
+#endif
+#endif
+
+ vec2 lightmap = vec2(0.0, 1.0);
+
+#ifdef COMPILE_ENABLE_LIGHTMAP
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+ lightmap = v_lightmap2f;
+#else
+ lightmap = u_textureCoords02;
+#endif
+#endif
+
+#ifdef COMPILE_BLEND_ADD
+ color = color * u_colorBlendSrc4f + u_colorBlendAdd4f;
+#endif
+
+#ifdef COMPILE_ENABLE_ALPHA_TEST
+ if(color.a < u_alphaTestRef1f) discard;
+#endif
+
+#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
+ vec2 uv2 = vec2(1.0, 0.5) * uv;
+ vec2 normal2 = texture(u_samplerNormalMaterial, uv2).xy;
+ mat3 cf;
+ if(normal2.x + normal2.y > 0.0) {
+ normal2 *= 2.0;
+ normal2 -= 1.0;
+ cf = cotangent_frame(normal, normalize(v_viewdir3f), uv);
+ normal = cf * vec3(normal2, sqrt(1.0 - dot(normal2, normal2)));
+ }
+ uv2.y += 0.5;
+ vec3 material = texture(u_samplerNormalMaterial, uv2).rgb;
+#else
+ vec3 material = u_materialConstants3f;
+#endif
+
+ gbufferColor4f.rgb = color.rgb;
+ gbufferColor4f.a = lightmap.r;
+ gbufferNormal4f.rgb = normal * 0.5 + 0.5;
+ gbufferNormal4f.a = lightmap.g;
+ gbufferMaterial4f = vec4(material.rgb, u_useEnvMap1f);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_fog.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_fog.fsh
new file mode 100644
index 00000000..5de9250b
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_fog.fsh
@@ -0,0 +1,101 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+layout(location = 0) out vec4 output4f;
+
+in vec2 v_position2f;
+
+uniform sampler2D u_gbufferDepthTexture;
+uniform sampler2D u_gbufferNormalTexture;
+uniform sampler2D u_fogDepthTexture;
+
+#ifdef COMPILE_FOG_LIGHT_SHAFTS
+uniform sampler2D u_lightShaftsTexture;
+#endif
+
+#ifdef COMPILE_FOG_ATMOSPHERE
+uniform sampler2D u_environmentMap;
+uniform vec3 u_sunColorAdd3f;
+#endif
+
+uniform mat4 u_inverseViewProjMatrix4f;
+
+#ifdef COMPILE_FOG_LINEAR
+uniform vec2 u_linearFogParam2f;
+#else
+uniform float u_expFogDensity1f;
+#endif
+
+uniform vec4 u_fogColorLight4f;
+uniform vec4 u_fogColorDark4f;
+
+void main() {
+ vec4 fragPos4f = vec4(v_position2f, textureLod(u_fogDepthTexture, v_position2f, 0.0).r, 1.0);
+
+#ifdef COMPILE_FOG_ATMOSPHERE
+ if(fragPos4f.z <= 0.0000001) {
+ discard;
+ }
+#endif
+
+ float solidDepth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r;
+ if(solidDepth != fragPos4f.z) {
+ discard;
+ }
+
+ fragPos4f.xyz *= 2.0;
+ fragPos4f.xyz -= 1.0;
+
+ fragPos4f = u_inverseViewProjMatrix4f * fragPos4f;
+ fragPos4f.xyz /= fragPos4f.w;
+ fragPos4f.w = 1.0;
+
+ float l = sqrt(dot(fragPos4f.xyz, fragPos4f.xyz));
+#ifdef COMPILE_FOG_LINEAR
+ float f = (l - u_linearFogParam2f.x) / (u_linearFogParam2f.y - u_linearFogParam2f.x);
+#else
+ float f = 1.0 - exp(-u_expFogDensity1f * l);
+#endif
+ float f2 = textureLod(u_gbufferNormalTexture, v_position2f, 0.0).a;
+ vec4 fogColor4f = mix(u_fogColorDark4f, u_fogColorLight4f, f2 * f2);
+ f = clamp(f, 0.0, 1.0) * fogColor4f.a;
+
+#ifdef COMPILE_FOG_ATMOSPHERE
+ fragPos4f.xyz /= -l;
+ fragPos4f.xz /= abs(fragPos4f.y) + 1.0;
+ fragPos4f.xz *= 0.75;
+
+ vec3 envMapSample3f;
+
+ fragPos4f.xz *= vec2(-0.5, -0.25);
+ fragPos4f.xz += vec2(0.5, 0.25);
+ envMapSample3f = textureLod(u_environmentMap, fragPos4f.xz, 0.0).rgb + u_sunColorAdd3f;
+
+#ifdef COMPILE_FOG_LIGHT_SHAFTS
+ envMapSample3f *= pow(textureLod(u_lightShaftsTexture, v_position2f, 0.0).r * 0.9 + 0.1, 2.25);
+ f = f * 0.9 + 0.1;
+#endif
+
+ output4f = vec4(envMapSample3f * fogColor4f.rgb, f);
+#else
+ output4f = vec4(fogColor4f.rgb, f);
+#endif
+
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_local.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_local.vsh
new file mode 100644
index 00000000..5eb264a0
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_local.vsh
@@ -0,0 +1,28 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+layout(location = 0) in vec2 a_position2f;
+
+out vec2 v_position2f;
+
+void main() {
+ v_position2f = a_position2f * 0.5 + 0.5;
+ gl_Position = vec4(a_position2f, 0.0, 1.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.fsh
new file mode 100644
index 00000000..bcebefbd
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.fsh
@@ -0,0 +1,59 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+#if !defined(COMPILE_ENABLE_ALPHA_TEST) && !defined(COMPILE_COLORED_SHADOWS)
+#undef COMPILE_ENABLE_TEXTURE2D
+#endif
+
+#ifdef COMPILE_COLORED_SHADOWS
+layout(location = 0) out vec4 output4f;
+uniform vec4 u_color4f;
+#endif
+
+#ifdef COMPILE_ENABLE_TEXTURE2D
+uniform sampler2D u_samplerTexture;
+#ifdef COMPILE_TEXTURE_ATTRIB
+in vec2 v_texture2f;
+#else
+uniform vec2 u_textureCoords01;
+#endif
+#ifdef COMPILE_ENABLE_ALPHA_TEST
+uniform float u_alphaTestRef1f;
+#endif
+#endif
+
+void main() {
+#ifdef COMPILE_COLORED_SHADOWS
+ vec4 color = u_color4f;
+#else
+ vec4 color = vec4(1.0);
+#endif
+
+#ifdef COMPILE_ENABLE_TEXTURE2D
+#ifdef COMPILE_TEXTURE_ATTRIB
+ color *= texture(u_samplerTexture, v_texture2f);
+#else
+ color *= texture(u_samplerTexture, u_textureCoords01);
+#endif
+#ifdef COMPILE_ENABLE_ALPHA_TEST
+ if(color.a < u_alphaTestRef1f) discard;
+#endif
+#endif
+
+#ifdef COMPILE_COLORED_SHADOWS
+ output4f = vec4(mix(vec3(1.0), color.rgb, color.a), color.a);
+#endif
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.vsh
new file mode 100644
index 00000000..e44f3f48
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.vsh
@@ -0,0 +1,101 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+in vec3 a_position3f;
+
+#if defined(COMPILE_ENABLE_ALPHA_TEST) && defined(COMPILE_ENABLE_TEXTURE2D)
+#define DO_SHADOW_ALPHA_TEST
+#endif
+
+#ifdef DO_SHADOW_ALPHA_TEST
+#ifdef COMPILE_TEXTURE_ATTRIB
+in vec2 a_texture2f;
+out vec2 v_texture2f;
+uniform mat4 u_textureMat4f01;
+#endif
+#endif
+
+uniform mat4 u_modelviewProjMat4f;
+
+#ifdef COMPILE_STATE_WAVING_BLOCKS
+#ifdef COMPILE_NORMAL_ATTRIB
+in vec4 a_normal4f;
+#else
+uniform float u_blockConstant1f;
+#endif
+#ifdef COMPILE_ENABLE_LIGHTMAP
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+in vec2 a_lightmap2f;
+uniform mat4 u_textureMat4f02;
+#else
+uniform vec2 u_textureCoords02;
+#endif
+#endif
+uniform mat4 u_modelMatrix4f;
+uniform mat4 u_viewMatrix4f;
+uniform vec3 u_wavingBlockOffset3f;
+uniform vec4 u_wavingBlockParam4f;
+#define DO_COMPILE_STATE_WAVING_BLOCKS
+#define FAKE_SIN(valueIn, valueOut)\
+ valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\
+ valueOut = valueOut * valueOut * (3.0 - 2.0 * valueOut) * 2.0 - 1.0;
+#define LIB_INCLUDE_WAVING_BLOCKS_FUNCTION
+#endif
+
+#EAGLER INCLUDE (2) "eagler:glsl/deferred/lib/waving_blocks.glsl"
+
+#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
+
+void main() {
+#ifdef DO_SHADOW_ALPHA_TEST
+#ifdef COMPILE_TEXTURE_ATTRIB
+ vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0);
+ v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z;
+#endif
+#endif
+#ifdef DO_COMPILE_STATE_WAVING_BLOCKS
+ vec4 pos = vec4(a_position3f, 1.0);
+#ifdef COMPILE_NORMAL_ATTRIB
+ float blockId = floor((a_normal4f.w + 1.0) * 127.0 + 0.5);
+#else
+ float blockId = u_blockConstant1f;
+#endif
+#ifdef COMPILE_ENABLE_LIGHTMAP
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+ mat4x2 texMat4x2 = mat4x2(
+ u_textureMat4f02[0].yw,
+ u_textureMat4f02[1].yw,
+ u_textureMat4f02[2].yw,
+ u_textureMat4f02[3].yw
+ );
+ vec2 v_lightmapTmp2f = texMat4x2 * vec4(a_lightmap2f, 0.0, 1.0);
+ v_lightmapTmp2f.x = v_lightmapTmp2f.x / v_lightmapTmp2f.y;
+#else
+ vec2 v_lightmapTmp2f = vec2(u_textureCoords02.y, 0.0);
+#endif
+ if(v_lightmapTmp2f.x > 0.33) {
+ COMPUTE_WAVING_BLOCKS(pos, min(v_lightmapTmp2f.x * 3.0 - 1.0, 1.0), 24.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewProjMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f)
+ }else {
+ pos = u_modelviewProjMat4f * pos;
+ }
+#else
+ COMPUTE_WAVING_BLOCKS(pos, 1.0, 32.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewProjMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f)
+#endif
+ gl_Position = pos;
+#else
+ gl_Position = u_modelviewProjMat4f * vec4(a_position3f, 1.0);
+#endif
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/dither16.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/dither16.bmp
new file mode 100644
index 00000000..57813a0e
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/dither16.bmp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/eagler_moon.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/eagler_moon.bmp
new file mode 100644
index 00000000..53cabae1
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/eagler_moon.bmp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/emissive_items.csv b/desktopRuntime/resources/assets/eagler/glsl/deferred/emissive_items.csv
new file mode 100644
index 00000000..6056c8b7
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/emissive_items.csv
@@ -0,0 +1,9 @@
+item,damage,red,green,blue,intensity
+minecraft:beacon,0,0.4493,0.6007,1.0000,500.0
+minecraft:glowstone,0,1.0000,0.6636,0.3583,10.0
+minecraft:lit_pumpkin,0,1.0000,0.5447,0.2005,10.0
+minecraft:torch,0,1.0000,0.5983,0.2655,10.0
+minecraft:redstone_torch,0,1.0000,0.1578,0.0000,4.0
+minecraft:sea_lantern,0,0.5530,0.6468,1.0000,10.0,
+minecraft:lava_bucket,0,1.0000,0.4461,0.1054,6.0,
+minecraft:nether_star,0,0.5711,0.6611,1.0000,6.0
\ No newline at end of file
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.fsh
new file mode 100644
index 00000000..107648f3
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.fsh
@@ -0,0 +1,471 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision highp sampler2DShadow;
+
+in vec4 v_position4f;
+
+#ifdef COMPILE_FOG_LIGHT_SHAFTS
+in vec2 v_positionClip2f;
+#endif
+
+#ifdef COMPILE_TEXTURE_ATTRIB
+in vec2 v_texture2f;
+#endif
+
+uniform vec4 u_color4f;
+
+#ifdef COMPILE_BLEND_ADD
+uniform vec4 u_colorBlendSrc4f;
+uniform vec4 u_colorBlendAdd4f;
+#endif
+
+#ifdef COMPILE_COLOR_ATTRIB
+in vec4 v_color4f;
+#endif
+
+#ifdef COMPILE_NORMAL_ATTRIB
+in vec3 v_normal3f;
+in float v_block1f;
+#else
+uniform vec3 u_uniformNormal3f;
+uniform float u_blockConstant1f;
+#endif
+
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+in vec2 v_lightmap2f;
+#else
+uniform vec2 u_textureCoords02;
+#endif
+
+#ifdef COMPILE_ENABLE_TEXTURE2D
+uniform sampler2D u_samplerTexture;
+#ifndef COMPILE_TEXTURE_ATTRIB
+uniform vec2 u_textureCoords01;
+#endif
+#else
+#undef COMPILE_NORMAL_MATERIAL_TEXTURE
+#endif
+
+#ifdef COMPILE_ENABLE_TEX_GEN
+in vec3 v_objectPosition3f;
+uniform ivec4 u_texGenPlane4i;
+uniform vec4 u_texGenS4f;
+uniform vec4 u_texGenT4f;
+uniform vec4 u_texGenR4f;
+uniform vec4 u_texGenQ4f;
+uniform mat4 u_textureMat4f01;
+#endif
+
+#ifdef COMPILE_ENABLE_ALPHA_TEST
+uniform float u_alphaTestRef1f;
+#endif
+
+#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
+uniform vec2 u_textureAnisotropicFix;
+#endif
+
+uniform mat4 u_inverseViewMatrix4f;
+
+layout(location = 0) out vec4 output4f;
+
+#ifdef COMPILE_DYNAMIC_LIGHTS
+struct DynamicLight {
+ mediump vec4 u_lightPosition4f;
+ mediump vec4 u_lightColor4f;
+};
+layout(std140) uniform u_chunkLightingData {
+ mediump int u_dynamicLightCount1i;
+ mediump int _paddingA_;
+ mediump int _paddingB_;
+ mediump int _paddingC_;
+ DynamicLight u_dynamicLightArray[12];
+};
+#endif
+
+layout(std140) uniform u_worldLightingData {
+ mediump vec4 u_sunDirection4f;
+ mediump vec4 u_sunColor3f_sky1f;
+ mediump vec4 u_fogParameters4f;
+ mediump vec4 u_fogColorLight4f;
+ mediump vec4 u_fogColorDark4f;
+ mediump vec4 u_fogColorAddSun4f;
+ mediump vec4 u_blockSkySunDynamicLightFac4f;
+#ifdef COMPILE_SUN_SHADOW_LOD0
+ mediump mat4 u_sunShadowMatrixLOD04f;
+#define DO_COMPILE_SUN_SHADOWS
+#define SUN_SHADOW_MAP_FRAC 1.0
+#endif
+#ifdef COMPILE_SUN_SHADOW_LOD1
+ mediump mat4 u_sunShadowMatrixLOD04f;
+ mediump mat4 u_sunShadowMatrixLOD14f;
+#define DO_COMPILE_SUN_SHADOWS
+#define SUN_SHADOW_MAP_FRAC 0.5
+#endif
+#ifdef COMPILE_SUN_SHADOW_LOD2
+ mediump mat4 u_sunShadowMatrixLOD04f;
+ mediump mat4 u_sunShadowMatrixLOD14f;
+ mediump mat4 u_sunShadowMatrixLOD24f;
+#define DO_COMPILE_SUN_SHADOWS
+#define SUN_SHADOW_MAP_FRAC 0.3333333
+#endif
+};
+
+#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
+uniform sampler2D u_samplerNormalMaterial;
+#else
+uniform vec3 u_materialConstants3f;
+#endif
+
+uniform sampler2D u_metalsLUT;
+
+#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION
+#define LIB_INCLUDE_PBR_LIGHTING_PREFETCH
+#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl"
+
+#ifdef COMPILE_PARABOLOID
+#undef COMPILE_SUN_SHADOW_SMOOTH
+#undef COMPILE_SUN_SHADOW_LOD1
+#undef COMPILE_SUN_SHADOW_LOD2
+#endif
+
+#ifdef COMPILE_PARABOLOID_ENV_MAP
+uniform sampler2D u_environmentMap;
+uniform sampler2D u_brdfLUT;
+#define LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_SPECULAR
+#define LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_PREFETCH
+#endif
+
+uniform sampler2D u_irradianceMap;
+
+#ifdef COMPILE_FOG_LIGHT_SHAFTS
+uniform sampler2D u_lightShaftsTexture;
+#endif
+
+#EAGLER INCLUDE (4) "eagler:glsl/deferred/lib/pbr_env_map.glsl"
+
+#ifdef DO_COMPILE_SUN_SHADOWS
+uniform sampler2DShadow u_sunShadowDepthTexture;
+#ifdef COMPILE_SUN_SHADOW_SMOOTH
+const vec2 POISSON_DISK[7] = vec2[](
+vec2(-0.077, 0.995), vec2(0.998, 0.015),
+vec2(-0.116, -0.987), vec2(-0.916, 0.359),
+vec2(-0.697, -0.511), vec2(0.740, -0.612),
+vec2(0.675, 0.682));
+#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0
+#define SMOOTH_SHADOW_RADIUS 0.00075
+#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\
+ tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\
+ tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\
+ tmpVec2.y += lod;\
+ tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\
+ accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES;
+#endif
+#endif
+
+void main() {
+ vec4 worldPosition4f;
+ vec4 worldDirection4f;
+ vec4 diffuseColor4f;
+ vec3 normalVector3f;
+ vec2 lightmapCoords2f;
+ vec3 materialData3f;
+ float block1f;
+
+ // =========== RESOLVE CONSTANTS ============ //
+
+ worldPosition4f = u_inverseViewMatrix4f * v_position4f;
+ worldPosition4f.xyz /= worldPosition4f.w;
+ worldPosition4f.w = 1.0;
+ worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0);
+ worldDirection4f.xyz = normalize(worldDirection4f.xyz);
+
+#ifdef COMPILE_ENABLE_LIGHTMAP
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+ lightmapCoords2f = v_lightmap2f;
+#else
+ lightmapCoords2f = u_textureCoords02;
+#endif
+#else
+ lightmapCoords2f = vec2(0.0, 1.0);
+#endif
+
+#ifdef COMPILE_NORMAL_ATTRIB
+ normalVector3f = normalize(v_normal3f);
+ block1f = v_block1f;
+#else
+ normalVector3f = u_uniformNormal3f;
+ block1f = u_blockConstant1f;
+#endif
+
+ normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f);
+
+ // ========= CALCULATE DIFFUSE COLOR ========== //
+
+#ifdef COMPILE_COLOR_ATTRIB
+ diffuseColor4f = v_color4f * u_color4f;
+#else
+ diffuseColor4f = u_color4f;
+#endif
+
+#ifdef COMPILE_ENABLE_TEXTURE2D
+ vec2 texCoords2f;
+#ifdef COMPILE_ENABLE_TEX_GEN
+ vec4 texGenVector;
+ vec4 texGenPosSrc[2];
+ texGenPosSrc[0] = vec4(v_objectPosition3f, 1.0);
+ texGenPosSrc[1] = v_position4f;
+ texGenVector.x = dot(texGenPosSrc[u_texGenPlane4i.x], u_texGenS4f);
+ texGenVector.y = dot(texGenPosSrc[u_texGenPlane4i.y], u_texGenT4f);
+ texGenVector.z = dot(texGenPosSrc[u_texGenPlane4i.z], u_texGenR4f);
+ texGenVector.w = dot(texGenPosSrc[u_texGenPlane4i.w], u_texGenQ4f);
+ texGenVector = vec4(mat4x3(
+ u_textureMat4f01[0].xyw,
+ u_textureMat4f01[1].xyw,
+ u_textureMat4f01[2].xyw,
+ u_textureMat4f01[3].xyw
+ ) * texGenVector, 0.0);
+ texCoords2f = texGenVector.xy / texGenVector.z;
+#else
+
+#ifdef COMPILE_TEXTURE_ATTRIB
+#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
+ texCoords2f = floor(v_texture2f * u_textureAnisotropicFix) + 0.5;
+ texCoords2f /= u_textureAnisotropicFix;
+#else
+ texCoords2f = v_texture2f;
+#endif
+#else
+ texCoords2f = u_textureCoords01;
+#endif
+#endif
+ diffuseColor4f *= texture(u_samplerTexture, texCoords2f);
+#endif
+
+#ifdef COMPILE_BLEND_ADD
+ diffuseColor4f = diffuseColor4f * u_colorBlendSrc4f + u_colorBlendAdd4f;
+#endif
+
+ // ============= ALPHA TEST ============== //
+
+#ifdef COMPILE_ENABLE_ALPHA_TEST
+ if(diffuseColor4f.a < u_alphaTestRef1f) discard;
+#endif
+
+ // ========== RESOLVE MATERIALS =========== //
+
+#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
+ vec2 uv2 = vec2(1.0, 0.5) * texCoords2f;
+ uv2.y += 0.5;
+ materialData3f = texture(u_samplerNormalMaterial, uv2).rgb;
+#else
+ materialData3f = u_materialConstants3f;
+#endif
+
+ vec3 metalN, metalK;
+ PREFETCH_METALS(diffuseColor4f.rgb, materialData3f.g, metalN, metalK)
+
+ // ============ SUN LIGHTING ============== //
+
+ diffuseColor4f.rgb *= diffuseColor4f.rgb;
+
+ vec3 lightColor3f = vec3(0.0);
+ if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 &&
+ (u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) {
+#ifdef DO_COMPILE_SUN_SHADOWS
+
+ // ========== SUN SHADOW: LOD0 ============ //
+
+ float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
+ float shadowSample = 1.0;
+ vec4 shadowWorldPos4f = worldPosition4f;
+ shadowWorldPos4f.xyz += normalVector3f * 0.05;
+
+ vec4 shadowTexPos4f;
+ vec2 tmpVec2;
+ for(;;) {
+ shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f;
+ if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
+ shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0);
+#ifdef COMPILE_SUN_SHADOW_SMOOTH
+ shadowSample *= SMOOTH_SHADOW_SAMPLES;
+ SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ shadowSample = max(shadowSample * 2.0 - 1.0, 0.0);
+#endif
+ break;
+ }
+
+#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2)
+ shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f;
+ if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
+ shadowTexPos4f.y += 1.0;
+ shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
+ shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
+ break;
+ }
+#endif
+
+#ifdef COMPILE_SUN_SHADOW_LOD2
+ shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f;
+ if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
+ shadowTexPos4f.y += 2.0;
+ shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
+ shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
+ }
+#endif
+ break;
+ }
+#endif
+ lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
+#ifdef DO_COMPILE_SUN_SHADOWS
+ lightColor3f *= shadowSample * skyLight;
+#endif
+ lightColor3f = eaglercraftLighting(diffuseColor4f.rgb, lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalVector3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.z;
+ }
+
+ float f;
+#ifdef COMPILE_PARABOLOID_ENV_MAP
+
+ // =========== ENVIRONMENT MAP =========== //
+
+ f = materialData3f.g < 0.06 ? 1.0 : 0.0;
+ f += materialData3f.r < 0.5 ? 1.0 : 0.0;
+ while(f == 0.0) {
+ float dst2 = dot(worldPosition4f.xyz, worldPosition4f.xyz);
+ if(dst2 > 16.0) {
+ break;
+ }
+ vec3 reflectDir = reflect(worldDirection4f.xyz, normalVector3f);
+ reflectDir.xz /= abs(reflectDir.y) + 1.0;
+ float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz);
+ dst *= dst;
+ reflectDir.xz = reflectDir.xz * 0.975;
+ vec4 envMapSample4f;
+ if(dst < 0.005) {
+ vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
+ vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
+ envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a));
+ }else {
+ reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25);
+ reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75);
+ envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0);
+ }
+ if(envMapSample4f.a > 0.0) {
+ lightColor3f += eaglercraftIBL_Specular(diffuseColor4f.rgb, envMapSample4f.rgb, worldDirection4f.xyz, normalVector3f, materialData3f, metalN, metalK) * (1.0 - sqrt(dst2) * 0.25);
+ }
+ break;
+ }
+
+#endif
+
+ // =========== IRRADIANCE MAP =========== //
+
+ lightmapCoords2f *= lightmapCoords2f;
+
+ vec3 irradianceMapSamplePos2f = normalVector3f;
+ irradianceMapSamplePos2f.xz /= abs(irradianceMapSamplePos2f.y) + 1.0;
+ float dst = 1.0 - dot(irradianceMapSamplePos2f.xz, irradianceMapSamplePos2f.xz);
+ dst *= dst;
+ irradianceMapSamplePos2f.xz *= 0.975;
+ vec3 skyLight = vec3(sqrt(0.01 + max(u_sunDirection4f.w, 0.0)));
+ if(dst < 0.005) {
+ vec4 sample1 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
+ vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
+ skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb;
+ }else {
+ irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25);
+ irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75);
+ skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb;
+ }
+ skyLight *= lightmapCoords2f.g * u_sunColor3f_sky1f.w;
+
+#ifdef COMPILE_DYNAMIC_LIGHTS
+
+ // =========== DYNAMIC LIGHTING =========== //
+
+ vec3 dlightDist3f, dlightDir3f, dlightColor3f;
+ int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this
+ for(int i = 0; i < safeLightCount; ++i) {
+ dlightDist3f = worldPosition4f.xyz - u_dynamicLightArray[i].u_lightPosition4f.xyz;
+ dlightDir3f = normalize(dlightDist3f);
+ dlightDir3f = materialData3f.b == 1.0 ? normalVector3f : -dlightDir3f;
+ if(dot(dlightDir3f, normalVector3f) <= 0.0) {
+ continue;
+ }
+ dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f);
+ if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) {
+ continue;
+ }
+ lightColor3f += eaglercraftLighting(diffuseColor4f.rgb, dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.w;
+ }
+
+#endif
+
+ // ============ CACLULATE FOG ============= //
+
+ vec4 fogBlend4f = vec4(0.0);
+#ifndef COMPILE_ENABLE_TEX_GEN
+ while(u_fogParameters4f.x > 0.0) {
+ float atmos = u_fogParameters4f.x >= 4.0 ? 4.0 : 0.0;
+ float type = u_fogParameters4f.x - atmos;
+ fogBlend4f = mix(u_fogColorLight4f, u_fogColorDark4f, lightmapCoords2f.g);
+
+ float l = sqrt(dot(v_position4f.xyz, v_position4f.xyz));
+ if(type == 1.0) {
+ f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z);
+ }else {
+ f = 1.0 - exp(-u_fogParameters4f.y * l);
+ }
+
+ fogBlend4f.a *= clamp(f, 0.0, 1.0);
+
+ if(atmos == 0.0) {
+ break;
+ }
+
+ vec3 atmosSamplePos = v_position4f.xyz / -l;
+ atmosSamplePos.xz /= abs(atmosSamplePos.y) + 1.0;
+ atmosSamplePos.xz *= vec2(-0.5, -0.25) * 0.75;
+ atmosSamplePos.xz += vec2(0.5, 0.25);
+
+ fogBlend4f.rgb *= textureLod(u_irradianceMap, atmosSamplePos.xz, 0.0).rgb;
+
+#ifdef COMPILE_FOG_LIGHT_SHAFTS
+ fogBlend4f.rgb *= pow(textureLod(u_lightShaftsTexture, v_positionClip2f * 0.5 + 0.5, 0.0).r * 0.9 + 0.1, 2.25);
+ fogBlend4f.a = fogBlend4f.a * 0.9 + 0.1;
+#endif
+ break;
+ }
+#endif
+
+ // ============ OUTPUT COLOR ============== //
+
+ vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0 * u_blockSkySunDynamicLightFac4f.x;
+ skyLight *= u_blockSkySunDynamicLightFac4f.y;
+ float emissive = materialData3f.b == 1.0 ? 0.0 : materialData3f.b;
+ diffuseColor4f.rgb *= max(skyLight + blockLight, vec3(emissive * emissive * 20.0 + 0.075)) * 0.075;
+ diffuseColor4f.rgb += lightColor3f;
+
+ diffuseColor4f.rgb = mix(diffuseColor4f.rgb, fogBlend4f.rgb, fogBlend4f.a);
+
+ output4f = vec4(diffuseColor4f.rgb * diffuseColor4f.a, diffuseColor4f.a);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.vsh
new file mode 100644
index 00000000..0ce8b143
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.vsh
@@ -0,0 +1,101 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+in vec3 a_position3f;
+
+out vec4 v_position4f;
+
+#ifdef COMPILE_FOG_LIGHT_SHAFTS
+out vec2 v_positionClip2f;
+#endif
+
+#ifdef COMPILE_TEXTURE_ATTRIB
+in vec2 a_texture2f;
+out vec2 v_texture2f;
+uniform mat4 u_textureMat4f01;
+#endif
+
+#ifdef COMPILE_ENABLE_TEX_GEN
+out vec3 v_objectPosition3f;
+#endif
+
+#ifdef COMPILE_COLOR_ATTRIB
+in vec4 a_color4f;
+out vec4 v_color4f;
+#endif
+
+#ifdef COMPILE_NORMAL_ATTRIB
+in vec4 a_normal4f;
+out vec3 v_normal3f;
+out float v_block1f;
+#endif
+
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+in vec2 a_lightmap2f;
+out vec2 v_lightmap2f;
+uniform mat4 u_textureMat4f02;
+#endif
+
+uniform mat4 u_modelviewMat4f;
+
+#ifdef COMPILE_PARABOLOID
+uniform float u_farPlane1f;
+#else
+uniform mat4 u_projectionMat4f;
+#endif
+
+#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
+
+void main() {
+#ifdef COMPILE_ENABLE_TEX_GEN
+ v_objectPosition3f = a_position3f;
+#endif
+ v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0);
+
+#ifdef COMPILE_TEXTURE_ATTRIB
+ vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0);
+ v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z;
+#endif
+
+#ifdef COMPILE_COLOR_ATTRIB
+ v_color4f = a_color4f;
+#endif
+
+#ifdef COMPILE_NORMAL_ATTRIB
+ v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz);
+ v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5);
+#endif
+
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+ vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0);
+ v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z;
+#endif
+
+#ifdef COMPILE_PARABOLOID
+ vec3 pos = v_position4f.xyz / v_position4f.w;
+ float dist = pos.z;
+ pos.xyz = normalize(pos.xyz);
+ pos.xy /= 1.0 - pos.z;
+ pos.z = dist / u_farPlane1f + 1.00005;
+ gl_Position = vec4(pos.xyz, 1.0);
+#else
+ gl_Position = u_projectionMat4f * v_position4f;
+#endif
+
+#ifdef COMPILE_FOG_LIGHT_SHAFTS
+ v_positionClip2f = gl_Position.xy / gl_Position.w;
+#endif
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.fsh
new file mode 100644
index 00000000..25a55c1e
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.fsh
@@ -0,0 +1,306 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision highp sampler2DShadow;
+
+in vec4 v_position4f;
+
+uniform vec4 u_color4f;
+
+#ifdef COMPILE_NORMAL_ATTRIB
+in vec3 v_normal3f;
+in float v_block1f;
+#else
+uniform vec3 u_uniformNormal3f;
+uniform float u_blockConstant1f;
+#endif
+
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+in vec2 v_lightmap2f;
+#else
+uniform vec2 u_textureCoords02;
+#endif
+
+uniform mat4 u_inverseViewMatrix4f;
+
+layout(location = 0) out vec4 output4f;
+
+#ifdef COMPILE_DYNAMIC_LIGHTS
+struct DynamicLight {
+ mediump vec4 u_lightPosition4f;
+ mediump vec4 u_lightColor4f;
+};
+layout(std140) uniform u_chunkLightingData {
+ mediump int u_dynamicLightCount1i;
+ mediump int _paddingA_;
+ mediump int _paddingB_;
+ mediump int _paddingC_;
+ DynamicLight u_dynamicLightArray[12];
+};
+#endif
+
+layout(std140) uniform u_worldLightingData {
+ mediump vec4 u_sunDirection4f;
+ mediump vec4 u_sunColor3f_sky1f;
+ mediump vec4 u_fogParameters4f;
+ mediump vec4 u_fogColorLight4f;
+ mediump vec4 u_fogColorDark4f;
+ mediump vec4 u_fogColorAddSun4f;
+ mediump vec4 u_blockSkySunDynamicLightFac4f;
+#ifdef COMPILE_SUN_SHADOW_LOD0
+ mediump mat4 u_sunShadowMatrixLOD04f;
+#define DO_COMPILE_SUN_SHADOWS
+#define SUN_SHADOW_MAP_FRAC 1.0
+#endif
+#ifdef COMPILE_SUN_SHADOW_LOD1
+ mediump mat4 u_sunShadowMatrixLOD04f;
+ mediump mat4 u_sunShadowMatrixLOD14f;
+#define DO_COMPILE_SUN_SHADOWS
+#define SUN_SHADOW_MAP_FRAC 0.5
+#endif
+#ifdef COMPILE_SUN_SHADOW_LOD2
+ mediump mat4 u_sunShadowMatrixLOD04f;
+ mediump mat4 u_sunShadowMatrixLOD14f;
+ mediump mat4 u_sunShadowMatrixLOD24f;
+#define DO_COMPILE_SUN_SHADOWS
+#define SUN_SHADOW_MAP_FRAC 0.3333333
+#endif
+};
+
+uniform sampler2D u_environmentMap;
+uniform sampler2D u_brdfLUT;
+
+#define GLASS_ROUGHNESS 0.15
+#define GLASS_F0 0.4
+
+vec3 eaglercraftLighting_Glass(in vec3 radiance, in vec3 viewDir, in vec3 lightDir, in vec3 normalVec) {
+ float roughness = 1.0 - GLASS_ROUGHNESS * 0.85;
+ vec3 H = normalize(viewDir + lightDir);
+ vec3 NdotHVL = max(normalVec * mat3(H, viewDir, lightDir), vec3(0.0));
+ float NDF = (GLASS_ROUGHNESS * GLASS_ROUGHNESS * GLASS_ROUGHNESS * GLASS_ROUGHNESS);
+ float denom = NdotHVL.x * NdotHVL.x * (NDF - 1.0) + 1.0;
+ NDF /= denom * denom * 3.141592;
+ float gs = GLASS_ROUGHNESS + 1.0;
+ gs *= gs * 0.125;
+ vec2 Ndot = NdotHVL.yz;
+ Ndot /= Ndot * (1.0 - gs) + gs;
+ NDF *= Ndot.x * Ndot.y;
+ float fresnel = pow(max(1.0 - NdotHVL.x, 0.0), 5.0);
+ vec3 F = vec3(GLASS_F0 + (1.0 - GLASS_F0) * fresnel);
+ denom = 4.0 * NdotHVL.y * NdotHVL.z + 0.0001;
+ return (NDF * F / denom) * radiance * NdotHVL.z;
+}
+
+vec3 eaglercraftIBL_Specular_Glass(in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec) {
+ float NdotV = dot(normalVec, -viewDir);
+ float fresnel = pow(max(1.0 - NdotV, 0.0), 5.0);
+ vec3 F = vec3(GLASS_F0 + (max(1.0 - GLASS_ROUGHNESS, GLASS_F0) - GLASS_F0) * fresnel);
+ vec2 brdf2f = vec2(max(NdotV, 0.0), GLASS_ROUGHNESS);
+ brdf2f = 1.0 - brdf2f;
+ brdf2f *= brdf2f;
+ brdf2f = 1.0 - brdf2f;
+ brdf2f = textureLod(u_brdfLUT, brdf2f, 0.0).rg;
+ return envMapSample * (F * brdf2f.r + brdf2f.g);
+}
+
+#ifdef DO_COMPILE_SUN_SHADOWS
+uniform sampler2DShadow u_sunShadowDepthTexture;
+#ifdef COMPILE_SUN_SHADOW_SMOOTH
+const vec2 POISSON_DISK[7] = vec2[](
+vec2(-0.077, 0.995), vec2(0.998, 0.015),
+vec2(-0.116, -0.987), vec2(-0.916, 0.359),
+vec2(-0.697, -0.511), vec2(0.740, -0.612),
+vec2(0.675, 0.682));
+#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0
+#define SMOOTH_SHADOW_RADIUS 0.00075
+#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\
+ tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\
+ tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\
+ tmpVec2.y += lod;\
+ tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\
+ accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES;
+#endif
+#endif
+
+void main() {
+ vec4 worldPosition4f;
+ vec4 worldDirection4f;
+ vec3 normalVector3f;
+ vec2 lightmapCoords2f;
+ float block1f;
+
+ // =========== RESOLVE CONSTANTS ============ //
+
+ worldPosition4f = u_inverseViewMatrix4f * v_position4f;
+ worldPosition4f.xyz /= worldPosition4f.w;
+ worldPosition4f.w = 1.0;
+ worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0);
+ worldDirection4f.xyz = normalize(worldDirection4f.xyz);
+
+#ifdef COMPILE_ENABLE_LIGHTMAP
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+ lightmapCoords2f = v_lightmap2f;
+#else
+ lightmapCoords2f = u_textureCoords02;
+#endif
+#else
+ lightmapCoords2f = vec2(0.0, 1.0);
+#endif
+
+#ifdef COMPILE_NORMAL_ATTRIB
+ normalVector3f = normalize(v_normal3f);
+ block1f = v_block1f;
+#else
+ normalVector3f = u_uniformNormal3f;
+ block1f = u_blockConstant1f;
+#endif
+
+ normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f);
+
+ // ============ SUN LIGHTING ============== //
+
+ vec3 lightColor3f = vec3(0.0);
+ if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 &&
+ (u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) {
+#ifdef DO_COMPILE_SUN_SHADOWS
+
+ // ========== SUN SHADOW: LOD0 ============ //
+
+ float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
+ float shadowSample = 1.0;
+ vec4 shadowWorldPos4f = worldPosition4f;
+ shadowWorldPos4f.xyz += normalVector3f * 0.05;
+
+ vec4 shadowTexPos4f;
+ vec2 tmpVec2;
+ for(;;) {
+ shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f;
+ if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
+ shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0);
+#ifdef COMPILE_SUN_SHADOW_SMOOTH
+ shadowSample *= SMOOTH_SHADOW_SAMPLES;
+ SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ shadowSample = max(shadowSample * 2.0 - 1.0, 0.0);
+#endif
+ break;
+ }
+
+#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2)
+ shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f;
+ if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
+ shadowTexPos4f.y += 1.0;
+ shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
+ shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
+ break;
+ }
+#endif
+
+#ifdef COMPILE_SUN_SHADOW_LOD2
+ shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f;
+ if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
+ shadowTexPos4f.y += 2.0;
+ shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
+ shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
+ }
+#endif
+ break;
+ }
+#endif
+ lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
+#ifdef DO_COMPILE_SUN_SHADOWS
+ lightColor3f *= shadowSample * skyLight;
+#endif
+ lightColor3f = eaglercraftLighting_Glass(lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalVector3f) * u_blockSkySunDynamicLightFac4f.z;
+ }
+
+ // =========== ENVIRONMENT MAP =========== //
+
+ for(;;) {
+ float dst2 = dot(worldPosition4f.xyz, worldPosition4f.xyz);
+ if(dst2 > 16.0) {
+ break;
+ }
+ vec3 reflectDir = reflect(worldDirection4f.xyz, normalVector3f);
+ reflectDir.xz /= abs(reflectDir.y) + 1.0;
+ float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz);
+ dst *= dst;
+ reflectDir.xz = reflectDir.xz * 0.975;
+ vec4 envMapSample4f;
+ if(dst < 0.005) {
+ vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
+ vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
+ envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a));
+ }else {
+ reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25);
+ reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75);
+ envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0);
+ }
+ if(envMapSample4f.a > 0.0) {
+ lightColor3f += eaglercraftIBL_Specular_Glass(envMapSample4f.rgb, worldDirection4f.xyz, normalVector3f) * (1.0 - sqrt(dst2) * 0.25);
+ }
+ break;
+ }
+
+#ifdef COMPILE_DYNAMIC_LIGHTS
+
+ // =========== DYNAMIC LIGHTING =========== //
+
+ vec3 dlightDist3f, dlightDir3f, dlightColor3f;
+ int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this
+ for(int i = 0; i < safeLightCount; ++i) {
+ dlightDist3f = u_dynamicLightArray[i].u_lightPosition4f.xyz - worldPosition4f.xyz;
+ dlightDir3f = normalize(dlightDist3f);
+ if(dot(dlightDir3f, normalVector3f) <= 0.0) {
+ continue;
+ }
+ dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f);
+ if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) {
+ continue;
+ }
+ lightColor3f += eaglercraftLighting_Glass(dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f) * u_blockSkySunDynamicLightFac4f.w;
+ }
+
+#endif
+
+ // ============ CACLULATE FOG ============= //
+
+ float fogFade = 0.0;
+ if(u_fogParameters4f.x > 0.0) {
+ float atmos = u_fogParameters4f.x >= 4.0 ? 4.0 : 0.0;
+ float type = u_fogParameters4f.x - atmos;
+ fogFade = mix(u_fogColorDark4f.a, u_fogColorLight4f.a, lightmapCoords2f.g);
+
+ float f;
+ float l = sqrt(dot(v_position4f.xyz, v_position4f.xyz));
+ if(type == 1.0) {
+ f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z);
+ }else {
+ f = 1.0 - exp(-u_fogParameters4f.y * l);
+ }
+
+ fogFade *= clamp(f, 0.0, 1.0);
+ }
+
+ // ============ OUTPUT COLOR ============== //
+
+ output4f = vec4(lightColor3f * (1.0 - fogFade), 0.1);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.vsh
new file mode 100644
index 00000000..d98b2456
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.vsh
@@ -0,0 +1,52 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+in vec3 a_position3f;
+
+out vec4 v_position4f;
+
+#ifdef COMPILE_NORMAL_ATTRIB
+in vec4 a_normal4f;
+out vec3 v_normal3f;
+out float v_block1f;
+#endif
+
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+in vec2 a_lightmap2f;
+out vec2 v_lightmap2f;
+uniform mat4 u_textureMat4f02;
+#endif
+
+uniform mat4 u_modelviewMat4f;
+uniform mat4 u_projectionMat4f;
+
+#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
+
+void main() {
+ v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0);
+
+#ifdef COMPILE_NORMAL_ATTRIB
+ v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz);
+ v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5);
+#endif
+
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+ vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0);
+ v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z;
+#endif
+
+ gl_Position = u_projectionMat4f * v_position4f;
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/gbuffer_debug_view.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/gbuffer_debug_view.fsh
new file mode 100644
index 00000000..1135edc8
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/gbuffer_debug_view.fsh
@@ -0,0 +1,109 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out vec4 output4f;
+
+uniform sampler2D u_texture0;
+uniform sampler2D u_texture1;
+
+#ifdef DEBUG_VIEW_18
+precision highp sampler3D;
+uniform sampler3D u_texture3D0;
+uniform float u_fuckU1f;
+#endif
+
+uniform mat4 u_inverseViewMatrix;
+uniform vec2 u_depthSliceStartEnd2f;
+
+void main() {
+#ifdef DEBUG_VIEW_0
+ output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).rgb, 1.0);
+#endif
+#ifdef DEBUG_VIEW_1
+ vec3 color3f = textureLod(u_texture0, v_position2f, 0.0).rgb;
+ if(color3f.x == 0.0 && color3f.y == 0.0 && color3f.z == 0.0) {
+ output4f = vec4(0.0, 0.0, 0.0, 1.0);
+ }else {
+ output4f = vec4(normalize(mat3(u_inverseViewMatrix) * (color3f * 2.0 - 1.0)), 1.0);
+ }
+#endif
+#ifdef DEBUG_VIEW_2
+ output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).a, textureLod(u_texture1, v_position2f, 0.0).a, 0.0, 1.0);
+#endif
+#ifdef DEBUG_VIEW_3
+ vec4 color4f = textureLod(u_texture0, v_position2f, 0.0);
+ output4f = vec4(color4f.b > 0.99 ? 1.0 : 0.0, color4f.a, 0.0, 1.0);
+#endif
+#ifdef DEBUG_VIEW_4
+ output4f = vec4(vec3(clamp((textureLod(u_texture0, v_position2f, 0.0).r - u_depthSliceStartEnd2f.x) * u_depthSliceStartEnd2f.y, 0.0, 1.0)), 1.0);
+#endif
+#ifdef DEBUG_VIEW_5
+ output4f = vec4(vec3(textureLod(u_texture0, (v_position2f + vec2(0.0, u_depthSliceStartEnd2f.y)) * vec2(1.0, u_depthSliceStartEnd2f.x), 0.0).r), 1.0);
+#endif
+#ifdef DEBUG_VIEW_6
+ output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).r), 1.0);
+#endif
+#ifdef DEBUG_VIEW_7
+ output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).a > 0.0 ? 1.0 : 0.0), 1.0);
+#endif
+#ifdef DEBUG_VIEW_8
+ output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).rgb * 10.0, 1.0);
+ output4f.xyz /= (output4f.xyz + 1.0);
+ output4f.xyz = sqrt(output4f.xyz);
+#endif
+#ifdef DEBUG_VIEW_9
+ output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).g), 1.0);
+#endif
+#ifdef DEBUG_VIEW_10
+ vec2 coord = (v_position2f + vec2(0.0, u_depthSliceStartEnd2f.y)) * vec2(1.0, u_depthSliceStartEnd2f.x);
+ vec4 color2 = textureLod(u_texture1, coord, 0.0);
+ output4f = vec4(mix(color2.rgb, vec3(textureLod(u_texture0, coord, 0.0).r), color2.a), 1.0);
+#endif
+#ifdef DEBUG_VIEW_11
+ output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).a * 0.017), 1.0);
+#endif
+#ifdef DEBUG_VIEW_12
+ output4f = vec4(abs(textureLod(u_texture0, v_position2f, 0.0).rgb) * 0.1, 1.0);
+#endif
+#ifdef DEBUG_VIEW_13
+ output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).g > 0.0 ? 1.0 : 0.0), 1.0);
+#endif
+#ifdef DEBUG_VIEW_14
+ output4f = vec4(textureLod(u_texture0, v_position2f.yx, 0.0).rgb * 2.5, 1.0);
+ output4f.xyz /= (output4f.xyz + 1.0);
+ output4f.xyz = sqrt(output4f.xyz);
+#endif
+#ifdef DEBUG_VIEW_15
+ output4f = vec4(vec3(textureLod(u_texture0, v_position2f.yx, 0.0).a > 0.0 ? 1.0 : 0.0), 1.0);
+#endif
+#ifdef DEBUG_VIEW_16
+ output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).rg, 0.0, 1.0);
+#endif
+#ifdef DEBUG_VIEW_17
+ output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).r) * 10.0, 1.0);
+ output4f.xyz /= (output4f.xyz + 1.0);
+ output4f.xyz = sqrt(output4f.xyz);
+#endif
+#ifdef DEBUG_VIEW_18
+ output4f = vec4(vec3(textureLod(u_texture3D0, vec3(v_position2f, u_fuckU1f), 0.0).r), 1.0);
+#endif
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/hand_depth_mask.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/hand_depth_mask.fsh
new file mode 100644
index 00000000..5c25e67a
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/hand_depth_mask.fsh
@@ -0,0 +1,27 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision mediump float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+uniform sampler2D u_depthTexture;
+
+void main() {
+ gl_FragDepth = textureLod(u_depthTexture, v_position2f, 0.0).r <= 0.0000001 ? 0.0 : 1.0;
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_ghosts.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_ghosts.bmp
new file mode 100644
index 00000000..29fd027e
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_ghosts.bmp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_streaks.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_streaks.bmp
new file mode 100644
index 00000000..1f470c23
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_streaks.bmp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_sun_occlusion.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_sun_occlusion.fsh
new file mode 100644
index 00000000..83c27a29
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_sun_occlusion.fsh
@@ -0,0 +1,68 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+layout(location = 0) out float occlusionOut1f;
+
+uniform mat3 u_sampleMatrix3f;
+uniform sampler2D u_depthBufferTexture;
+uniform sampler2D u_cloudsSunOcclusion;
+
+#define SAMPLE_DEPTH(v, a, f)\
+ f = u_sampleMatrix3f * v;\
+ f.xy /= f.z;\
+ if(f.xy == clamp(f.xy, vec2(0.001), vec2(0.999)))\
+ a += textureLod(u_depthBufferTexture, f.xy, 0.0).r > 0.000001 ? 0.0 : 0.0417;
+
+void main() {
+ vec3 f;
+ float accum = 0.0;
+ float cloud = textureLod(u_cloudsSunOcclusion, vec2(0.5, 0.5), 0.0).r;
+ if(cloud < 0.01) {
+ occlusionOut1f = 0.0;
+ return;
+ }
+
+ SAMPLE_DEPTH(vec3(0.0, 0.0, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(-0.235, -0.962, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(0.029, 0.996, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(0.834, -0.509, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(-0.981, -0.086, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(0.821, 0.478, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(-0.614, 0.563, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(0.251, -0.578, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(-0.571, -0.491, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(0.142, 0.494, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(0.533, -0.036, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(0.970, -0.035, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(-0.388, 0.918, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(-0.521, 0.067, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(-0.140, -0.471, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(0.487, 0.692, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(-0.157, 0.331, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(0.559, -0.760, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(0.156, -0.956, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(0.181, -0.267, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(-0.773, 0.272, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(0.329, 0.228, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(-0.341, -0.187, 1.0), accum, f)
+ SAMPLE_DEPTH(vec3(-0.121, 0.689, 1.0), accum, f)
+
+ occlusionOut1f = min(accum * cloud, 1.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_env_map.glsl b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_env_map.glsl
new file mode 100644
index 00000000..7eb62fc1
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_env_map.glsl
@@ -0,0 +1,120 @@
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+#ifdef LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING
+#ifndef _HAS_PBR_IMAGE_BASED_LIGHTING_FUNCTION
+#define _HAS_PBR_IMAGE_BASED_LIGHTING_FUNCTION
+
+vec3 eaglercraftIBL_NoBlur(in vec3 albedo, in vec3 irradiance, in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec, in vec3 materials) {
+ if(materials.g < 0.25) {
+ return albedo * irradiance * 0.1;
+ }else {
+ float roughness = 1.0 - materials.r * 0.85;
+ float NdotV = dot(normalVec, -viewDir);
+ float fresnel = pow(max(1.0 - NdotV, 0.0), 5.0);
+ vec3 kD = vec3(0.05);
+ vec3 F;
+ if(materials.g < 0.9) {
+ F = vec3(materials.g + (max(1.0 - roughness, materials.g) - materials.g) * fresnel);
+ kD = (1.0 - F) * albedo / 3.141592;
+ }else if(materials.g < 0.964) {
+ vec2 lutUV = vec2(0.25, (materials.g - 0.9) * 15.625);
+ vec3 mN = textureLod(u_metalsLUT, lutUV, 0.0).rgb;
+ lutUV.x += 0.5;
+ vec3 mK = textureLod(u_metalsLUT, lutUV, 0.0).rgb;
+ fresnel = 1.0 - fresnel;
+ mK *= mK;
+ mK += mN * mN;
+ vec3 nv = mN * fresnel * 2.0;
+ fresnel *= fresnel;
+ vec3 num = mK - nv + fresnel;
+ vec3 den = mK + nv + fresnel;
+ vec3 r = num / den;
+ mK *= fresnel;
+ mK += 1.0;
+ num = mK - nv;
+ den = mK + nv;
+ r += num / den;
+ r = clamp(r * 0.5, vec3(0.0), vec3(1.0));
+ F = r * r;
+ }else {
+ F = (1.0 - albedo) + albedo * fresnel;
+ kD = vec3(0.05);
+ }
+ vec2 brdf2f = vec2(max(NdotV, 0.0), roughness);
+ brdf2f = 1.0 - brdf2f;
+ brdf2f *= brdf2f;
+ brdf2f = 1.0 - brdf2f;
+ brdf2f = textureLod(u_brdfLUT, brdf2f, 0.0).rg;
+ return kD * albedo * irradiance + envMapSample * (F * brdf2f.r + brdf2f.g);
+ }
+}
+
+#endif
+#endif
+
+#ifdef LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_SPECULAR
+#ifndef _HAS_PBR_IMAGE_BASED_LIGHTING_SPECULAR_FUNCTION
+#define _HAS_PBR_IMAGE_BASED_LIGHTING_SPECULAR_FUNCTION
+
+#ifdef LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_PREFETCH
+vec3 eaglercraftIBL_Specular(in vec3 albedo, in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec, in vec3 materials, vec3 metalN, vec3 metalK) {
+#else
+vec3 eaglercraftIBL_Specular(in vec3 albedo, in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec, in vec3 materials) {
+#endif
+ float NdotV = dot(normalVec, -viewDir);
+ float roughness = 1.0 - materials.r * 0.85;
+ float fresnel = pow(max(1.0 - NdotV, 0.0), 5.0);
+ vec3 F;
+ if(materials.g < 0.9) {
+ F = vec3(materials.g + (max(1.0 - roughness, materials.g) - materials.g) * fresnel);
+ }else if(materials.g < 0.964) {
+#ifdef LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_PREFETCH
+ vec3 mN = metalN;
+ vec3 mK = metalK;
+#else
+ vec2 lutUV = vec2(0.25, (materials.g - 0.9) * 15.625);
+ vec3 mN = textureLod(u_metalsLUT, lutUV, 0.0).rgb;
+ lutUV.x += 0.5;
+ vec3 mK = textureLod(u_metalsLUT, lutUV, 0.0).rgb;
+#endif
+ fresnel = 1.0 - fresnel;
+ mK *= mK;
+ mK += mN * mN;
+ vec3 nv = mN * fresnel * 2.0;
+ fresnel *= fresnel;
+ vec3 num = mK - nv + fresnel;
+ vec3 den = mK + nv + fresnel;
+ vec3 r = num / den;
+ mK *= fresnel;
+ mK += 1.0;
+ num = mK - nv;
+ den = mK + nv;
+ r += num / den;
+ r = clamp(r * 0.5, vec3(0.0), vec3(1.0));
+ F = r * r;
+ }else {
+ F = (1.0 - albedo) + albedo * fresnel;
+ }
+ vec2 brdf2f = vec2(max(NdotV, 0.0), roughness);
+ brdf2f = 1.0 - brdf2f;
+ brdf2f *= brdf2f;
+ brdf2f = 1.0 - brdf2f;
+ brdf2f = textureLod(u_brdfLUT, brdf2f, 0.0).rg;
+ return envMapSample * (F * brdf2f.r + brdf2f.g);
+}
+
+#endif
+#endif
\ No newline at end of file
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_lighting.glsl b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_lighting.glsl
new file mode 100644
index 00000000..87f90729
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_lighting.glsl
@@ -0,0 +1,86 @@
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+#ifdef LIB_INCLUDE_PBR_LIGHTING_FUNCTION
+#ifndef _HAS_PBR_LIGHTING_FUNCTION
+#define _HAS_PBR_LIGHTING_FUNCTION
+
+#ifdef LIB_INCLUDE_PBR_LIGHTING_PREFETCH
+#define PREFETCH_METALS(albedo, materialG1f, metalN3f, metalK3f)\
+ if(materialG1f >= 0.9 && materialG1f < 0.964) {\
+ metalK3f.xy = vec2(0.25, (materialG1f - 0.9) * 15.625);\
+ metalN3f = textureLod(u_metalsLUT, metalK3f.xy, 0.0).rgb;\
+ metalK3f.x += 0.5;\
+ metalK3f = textureLod(u_metalsLUT, metalK3f.xy, 0.0).rgb;\
+ }
+#endif
+
+#ifdef LIB_INCLUDE_PBR_LIGHTING_PREFETCH
+vec3 eaglercraftLighting(in vec3 albedo, in vec3 radiance, in vec3 viewDir, in vec3 lightDir, in vec3 normalVec, in vec3 materials, in vec3 metalN, in vec3 metalK) {
+#else
+vec3 eaglercraftLighting(in vec3 albedo, in vec3 radiance, in vec3 viewDir, in vec3 lightDir, in vec3 normalVec, in vec3 materials) {
+#endif
+ float roughness = 1.0 - materials.r * 0.85;
+ vec3 H = normalize(viewDir + lightDir);
+ vec3 NdotHVL = max(normalVec * mat3(H, viewDir, lightDir), vec3(0.0));
+ float NDF = roughness * roughness;
+ NDF *= NDF;
+ float denom = NdotHVL.x * NdotHVL.x * (NDF - 1.0) + 1.0;
+ NDF /= denom * denom * 3.141592;
+ float gs = roughness + 1.0;
+ gs *= gs * 0.125;
+ vec2 Ndot = NdotHVL.yz;
+ Ndot /= Ndot * (1.0 - gs) + gs;
+ NDF *= Ndot.x * Ndot.y;
+ float fresnel = pow(max(1.0 - NdotHVL.x, 0.0), 5.0);
+ vec3 kD = vec3(0.03);
+ vec3 F;
+ if(materials.g < 0.9) {
+ F = vec3(materials.g + (1.0 - materials.g) * fresnel);
+ kD = (1.0 - F) * albedo / 3.141592;
+ }else if(materials.g < 0.964) {
+#ifdef LIB_INCLUDE_PBR_LIGHTING_PREFETCH
+ vec3 mN = metalN;
+ vec3 mK = metalK;
+#else
+ vec2 lutUV = vec2(0.25, (materials.g - 0.9) * 15.625);
+ vec3 mN = textureLod(u_metalsLUT, lutUV, 0.0).rgb;
+ lutUV.x += 0.5;
+ vec3 mK = textureLod(u_metalsLUT, lutUV, 0.0).rgb * length(albedo);
+#endif
+ fresnel = 1.0 - fresnel;
+ mK *= mK;
+ mK += mN * mN;
+ vec3 nv = mN * fresnel * 2.0;
+ fresnel *= fresnel;
+ vec3 num = mK - nv + fresnel;
+ vec3 den = mK + nv + fresnel;
+ vec3 r = num / den;
+ mK *= fresnel;
+ mK += 1.0;
+ num = mK - nv;
+ den = mK + nv;
+ r += num / den;
+ r = clamp(r * 0.5, vec3(0.0), vec3(1.0));
+ F = r * r;
+ }else {
+ F = albedo + (1.0 - albedo) * fresnel;
+ }
+ denom = 4.0 * NdotHVL.y * NdotHVL.z + 0.0001;
+ return (kD + (NDF * F / denom)) * radiance * NdotHVL.z;
+}
+
+#endif
+#endif
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/waving_blocks.glsl b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/waving_blocks.glsl
new file mode 100644
index 00000000..8d9d61f2
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/waving_blocks.glsl
@@ -0,0 +1,218 @@
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+#ifdef LIB_INCLUDE_WAVING_BLOCKS_FUNCTION
+#ifndef _HAS_INCLUDED_WAVING_BLOCKS
+#define _HAS_INCLUDED_WAVING_BLOCKS
+
+#define _WAVING_BLOCK_TYPE_LEAF_BLOCK 1
+#define _WAVING_BLOCK_TYPE_LEAF_BLOCK_F 1.0
+#define _WAVING_BLOCK_TYPE_TALL_GRASS 2
+#define _WAVING_BLOCK_TYPE_TALL_GRASS_F 2.0
+#define _WAVING_BLOCK_TYPE_CROPS 3
+#define _WAVING_BLOCK_TYPE_CROPS_F 3.0
+#define _WAVING_BLOCK_TYPE_DOUBLE_PLANT_BOTTOM 4
+#define _WAVING_BLOCK_TYPE_DOUBLE_PLANT_BOTTOM_F 4.0
+#define _WAVING_BLOCK_TYPE_DOUBLE_PLANT_TOP 5
+#define _WAVING_BLOCK_TYPE_DOUBLE_PLANT_TOP_F 5.0
+#define _WAVING_BLOCK_TYPE_PLANT 6
+#define _WAVING_BLOCK_TYPE_PLANT_F 6.0
+#define _WAVING_BLOCK_TYPE_SUGARCANE 7
+#define _WAVING_BLOCK_TYPE_SUGARCANE_F 7.0
+#define _WAVING_BLOCK_TYPE_VINES 8
+#define _WAVING_BLOCK_TYPE_VINES_F 8.0
+#define _WAVING_BLOCK_TYPE_WATER_STILL 9
+#define _WAVING_BLOCK_TYPE_WATER_STILL_F 9.0
+#define _WAVING_BLOCK_TYPE_WATER_FLOW 10
+#define _WAVING_BLOCK_TYPE_WATER_FLOW_F 10.0
+#define _WAVING_BLOCK_TYPE_LILYPAD 11
+#define _WAVING_BLOCK_TYPE_LILYPAD_F 11.0
+#define _WAVING_BLOCK_TYPE_FIRE_FLOOR 12
+#define _WAVING_BLOCK_TYPE_FIRE_FLOOR_F 12.0
+#define _WAVING_BLOCK_TYPE_FIRE_WALL 13
+#define _WAVING_BLOCK_TYPE_FIRE_WALL_F 13.0
+
+// ignore wall fire for now, they clip
+#define _WAVING_BLOCK_MIN _WAVING_BLOCK_TYPE_LEAF_BLOCK_F
+#define _WAVING_BLOCK_MAX _WAVING_BLOCK_TYPE_FIRE_FLOOR_F
+
+#ifndef FAKE_SIN
+#error the FAKE_SIN function must be defined to use waving blocks
+#endif
+
+#define _WAVING_BLOCK_COORD_DERIVE_HACK 0.001
+#define _WAVING_BLOCK_COORD_DERIVE_HACK_05 0.0005
+#define _WAVING_BLOCK_COORD_DERIVE_HACK_INV 1000.0
+
+vec3 _computeWavingBlockNoise(in vec3 pos, in vec3 amp1, in float timer) {
+ float fac, fac2;
+ fac = dot(vec4(pos, timer), vec4(0.5, 0.5, 0.5, 0.0027));
+ FAKE_SIN(fac, fac2)
+ fac2 *= 0.04;
+ fac2 += 0.04;
+ vec3 vf0, d0;
+ vf0 = timer * vec3(0.0127, 0.0089, 0.0114);
+ FAKE_SIN(vf0, d0);
+ d0.xyz += d0.yzx;
+ d0.xyz += timer * vec3(0.0063, 0.0224, 0.0015);
+ d0.y += pos.z;
+ d0.xz += pos.y;
+ d0.xz += pos.zx;
+ d0.xz -= pos.xz;
+ vec3 ret;
+ FAKE_SIN(d0, ret)
+ ret *= fac2;
+ return ret * amp1;
+}
+
+vec3 _computeWavingBlockNoise(in vec3 pos, in vec3 vf_a, in vec3 vf_b, in vec3 amp1, in vec3 amp2, in float timer) {
+ float fac, fac2;
+ fac = dot(vec4(pos, timer), vec4(0.5, 0.5, 0.5, 0.0027));
+ FAKE_SIN(fac, fac2)
+ fac2 *= 0.04;
+ fac2 += 0.04;
+ vec3 vf0, d0;
+ vf0 = timer * vec3(0.0127, 0.0089, 0.0114);
+ FAKE_SIN(vf0, d0);
+ d0.xyz += d0.yzx;
+ d0.xyz += timer * vec3(0.0063, 0.0224, 0.0015);
+ d0.y += pos.z;
+ d0.xz += pos.y;
+ d0.xz += pos.zx;
+ d0.xz -= pos.xz;
+ vec3 ret;
+ FAKE_SIN(d0, ret)
+ ret *= fac2;
+ vec3 move = ret * amp1;
+ vec3 pos2 = move + pos;
+ fac = dot(vec4(pos2, timer), vec4(0.5, 0.5, 0.5, 0.0027));
+ FAKE_SIN(fac, fac2)
+ fac2 *= 0.04;
+ fac2 += 0.04;
+ vf0 = timer * vf_a;
+ FAKE_SIN(vf0, d0);
+ d0.xyz += d0.yzx;
+ d0.xyz += timer * vf_b;
+ d0.y += pos2.z;
+ d0.xz += pos2.y;
+ d0.xz += pos2.zx;
+ d0.xz -= pos2.xz;
+ FAKE_SIN(d0, ret)
+ ret *= fac2;
+ move += ret * amp2;
+ return move;
+}
+
+vec3 _computeWavingBlockById(in vec3 realPos, in vec3 referencePos, in vec4 wavingBlockParam, in float type) {
+ int typeInt = int(type);
+ highp float refY, fractY1, fractY2;
+ refY = referencePos.y;
+ switch(typeInt) {
+ case _WAVING_BLOCK_TYPE_CROPS:
+ refY += 0.0625625;
+ case _WAVING_BLOCK_TYPE_TALL_GRASS:
+ case _WAVING_BLOCK_TYPE_PLANT:
+ case _WAVING_BLOCK_TYPE_DOUBLE_PLANT_BOTTOM:
+ case _WAVING_BLOCK_TYPE_FIRE_FLOOR:
+ // check if it is the bottom half of the block,
+ // if vertex is at Y = 0.0 then don't offset
+ fractY1 = fract(refY + _WAVING_BLOCK_COORD_DERIVE_HACK_05);
+ fractY2 = fract(refY - _WAVING_BLOCK_COORD_DERIVE_HACK_05);
+ if(fractY2 > fractY1) {
+ return vec3(0.0);
+ }
+ default:
+ break;
+ }
+ vec3 ret = vec3(0.0);
+ switch(typeInt) {
+ case _WAVING_BLOCK_TYPE_LEAF_BLOCK:
+ ret = _computeWavingBlockNoise(
+ referencePos,
+ vec3(0.0040, 0.0064, 0.0043),
+ vec3(0.0035, 0.0037, 0.0041),
+ vec3(1.0, 0.2, 1.0),
+ vec3(0.5, 0.1, 0.5),
+ wavingBlockParam.y);
+ break;
+ case _WAVING_BLOCK_TYPE_TALL_GRASS:
+ case _WAVING_BLOCK_TYPE_CROPS:
+ ret = _computeWavingBlockNoise(
+ referencePos,
+ vec3(1.0, 0.2, 1.0),
+ wavingBlockParam.y);
+ break;
+ case _WAVING_BLOCK_TYPE_PLANT:
+ case _WAVING_BLOCK_TYPE_DOUBLE_PLANT_BOTTOM:
+ case _WAVING_BLOCK_TYPE_DOUBLE_PLANT_TOP:
+ ret = _computeWavingBlockNoise(
+ referencePos,
+ vec3(0.0041, 0.007, 0.0044),
+ vec3(0.0038, 0.024, 0.0),
+ vec3(0.8, 0.0, 0.8),
+ vec3(0.4, 0.0, 0.4),
+ wavingBlockParam.y);
+ break;
+ case _WAVING_BLOCK_TYPE_SUGARCANE:
+ ret = _computeWavingBlockNoise(
+ referencePos,
+ vec3(0.3, 0.0, 0.3),
+ wavingBlockParam.y);
+ break;
+ case _WAVING_BLOCK_TYPE_VINES:
+ ret = _computeWavingBlockNoise(
+ referencePos,
+ vec3(0.0040, 0.0064, 0.0043),
+ vec3(0.0035, 0.0037, 0.0041),
+ vec3(0.5, 0.3, 0.5),
+ vec3(0.25, 0.2, 0.25),
+ wavingBlockParam.y);
+ break;
+ case _WAVING_BLOCK_TYPE_WATER_STILL:
+
+ break;
+ case _WAVING_BLOCK_TYPE_WATER_FLOW:
+
+ break;
+ case _WAVING_BLOCK_TYPE_FIRE_FLOOR:
+ ret = _computeWavingBlockNoise(
+ referencePos,
+ vec3(0.0105, 0.0096, 0.0087),
+ vec3(0.0063, 0.0097, 0.0156),
+ vec3(1.2, 0.4, 1.2),
+ vec3(0.8, 0.8, 0.8),
+ wavingBlockParam.y);
+ break;
+ default:
+ break;
+ }
+ return ret;
+}
+
+#define COMPUTE_WAVING_BLOCKS(pos4f, amount, range, block1f, modelMatrix, viewMatrix, modelViewMatrix, wavingBlockOffset, wavingBlockParam)\
+ if(block1f >= _WAVING_BLOCK_MIN && block1f <= _WAVING_BLOCK_MAX) {\
+ pos4f = modelMatrix * pos4f;\
+ pos4f.xyz /= pos4f.w;\
+ pos4f.w = 1.0;\
+ if(dot(pos4f.xyz, pos4f.xyz) < range * range) {\
+ pos4f.xyz += _computeWavingBlockById(pos4f.xyz, pos4f.xyz + wavingBlockOffset, wavingBlockParam, block1f) * amount;\
+ }\
+ pos4f = viewMatrix * pos4f;\
+ }else {\
+ pos4f = modelViewMatrix * pos4f;\
+ }
+
+#endif
+#endif
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/light_point_mesh.dat b/desktopRuntime/resources/assets/eagler/glsl/deferred/light_point_mesh.dat
new file mode 100644
index 00000000..0ff3f494
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/light_point_mesh.dat differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/light_shafts_sample.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/light_shafts_sample.fsh
new file mode 100644
index 00000000..ee2a1c39
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/light_shafts_sample.fsh
@@ -0,0 +1,158 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+precision highp sampler2DShadow;
+
+in vec2 v_position2f;
+
+layout(location = 0) out float output1f;
+
+uniform sampler2D u_gbufferDepthTexture;
+uniform sampler2DShadow u_sunShadowDepthTexture;
+uniform sampler2D u_ditherTexture;
+
+uniform mat4 u_inverseViewProjMatrix4f;
+
+uniform vec2 u_ditherScale2f;
+uniform vec3 u_eyePosition3f;
+uniform float u_sampleStep1f;
+
+#define SAMPLES_PER_STEP 8.0
+#define SAMPLES_PER_STEP_1 0.125
+
+#ifdef COMPILE_SUN_SHADOW_LOD0
+uniform mat4 u_sunShadowMatrixLOD04f;
+#define SUN_SHADOW_MAP_FRAC 1.0
+#endif
+#ifdef COMPILE_SUN_SHADOW_LOD1
+uniform mat4 u_sunShadowMatrixLOD04f;
+uniform mat4 u_sunShadowMatrixLOD14f;
+#define SUN_SHADOW_MAP_FRAC 0.5
+#endif
+#ifdef COMPILE_SUN_SHADOW_LOD2
+uniform mat4 u_sunShadowMatrixLOD04f;
+uniform mat4 u_sunShadowMatrixLOD14f;
+uniform mat4 u_sunShadowMatrixLOD24f;
+#define SUN_SHADOW_MAP_FRAC 0.3333333
+#endif
+
+float shadow(in vec3 coords) {
+ vec4 shadowSpacePosition = u_sunShadowMatrixLOD04f * vec4(coords, 1.0);
+ if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) {
+ shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC;
+ return textureLod(u_sunShadowDepthTexture, shadowSpacePosition.xyz, 0.0);
+ }
+#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2)
+ shadowSpacePosition = u_sunShadowMatrixLOD14f * vec4(coords, 1.0);
+ if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) {
+ shadowSpacePosition.y += 1.0;
+ shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC;
+ return textureLod(u_sunShadowDepthTexture, shadowSpacePosition.xyz, 0.0);
+ }
+#endif
+#ifdef COMPILE_SUN_SHADOW_LOD2
+ shadowSpacePosition = u_sunShadowMatrixLOD24f * vec4(coords, 1.0);
+ if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) {
+ shadowSpacePosition.y += 2.0;
+ shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC;
+ return textureLod(u_sunShadowDepthTexture, shadowSpacePosition.xyz, 0.0);
+ }
+#endif
+ return -1.0;
+}
+
+#define STEP2DST(stepNum) (stepNum * stepNum * 0.06 + stepNum * 0.05)
+
+void main() {
+ output1f = 1.0;
+ float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r;
+ if(depth < 0.00001) {
+ return;
+ }
+
+ vec4 fragPos4f = vec4(v_position2f, depth, 1.0);
+ fragPos4f.xyz *= 2.0;
+ fragPos4f.xyz -= 1.0;
+
+ fragPos4f = u_inverseViewProjMatrix4f * fragPos4f;
+ fragPos4f.xyz /= fragPos4f.w;
+ fragPos4f.w = 1.0;
+ fragPos4f.xyz -= u_eyePosition3f;
+
+ float viewDist = length(fragPos4f.xyz);
+ fragPos4f.xyz /= viewDist;
+ float sampleNum = textureLod(u_ditherTexture, u_ditherScale2f * v_position2f, 0.0).r;
+ sampleNum += u_sampleStep1f * SAMPLES_PER_STEP + 1.0;
+
+ float cloudSample = STEP2DST(sampleNum);
+ if(cloudSample > viewDist) return;
+ cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample);
+ if(cloudSample < 0.0) return;
+ output1f -= SAMPLES_PER_STEP_1 - cloudSample * SAMPLES_PER_STEP_1;
+
+ sampleNum += 1.0;
+ cloudSample = STEP2DST(sampleNum);
+ if(cloudSample > viewDist) return;
+ cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample);
+ if(cloudSample < 0.0) return;
+ output1f -= SAMPLES_PER_STEP_1 - cloudSample * SAMPLES_PER_STEP_1;
+
+ sampleNum += 1.0;
+ cloudSample = STEP2DST(sampleNum);
+ if(cloudSample > viewDist) return;
+ cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample);
+ if(cloudSample < 0.0) return;
+ output1f -= SAMPLES_PER_STEP_1 - cloudSample * SAMPLES_PER_STEP_1;
+
+ sampleNum += 1.0;
+ cloudSample = STEP2DST(sampleNum);
+ if(cloudSample > viewDist) return;
+ cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample);
+ if(cloudSample < 0.0) return;
+ output1f -= SAMPLES_PER_STEP_1 - cloudSample * SAMPLES_PER_STEP_1;
+
+ sampleNum += 1.0;
+ cloudSample = STEP2DST(sampleNum);
+ if(cloudSample > viewDist) return;
+ cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample);
+ if(cloudSample < 0.0) return;
+ output1f -= SAMPLES_PER_STEP_1 - cloudSample * SAMPLES_PER_STEP_1;
+
+ sampleNum += 1.0;
+ cloudSample = STEP2DST(sampleNum);
+ if(cloudSample > viewDist) return;
+ cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample);
+ if(cloudSample < 0.0) return;
+ output1f -= SAMPLES_PER_STEP_1 - cloudSample * SAMPLES_PER_STEP_1;
+
+ sampleNum += 1.0;
+ cloudSample = STEP2DST(sampleNum);
+ if(cloudSample > viewDist) return;
+ cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample);
+ if(cloudSample < 0.0) return;
+ output1f -= SAMPLES_PER_STEP_1 - cloudSample * SAMPLES_PER_STEP_1;
+
+ sampleNum += 1.0;
+ cloudSample = STEP2DST(sampleNum);
+ if(cloudSample > viewDist) return;
+ cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample);
+ if(cloudSample < 0.0) return;
+ output1f -= SAMPLES_PER_STEP_1 - cloudSample * SAMPLES_PER_STEP_1;
+
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_mesh.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_mesh.vsh
new file mode 100644
index 00000000..1ee1c2f5
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_mesh.vsh
@@ -0,0 +1,27 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+layout(location = 0) in vec3 a_position3f;
+
+uniform mat4 u_modelViewProjMatrix4f;
+
+void main() {
+ gl_Position = u_modelViewProjMatrix4f * vec4(a_position3f, 1.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_point.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_point.fsh
new file mode 100644
index 00000000..b3b15acf
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_point.fsh
@@ -0,0 +1,86 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+layout(location = 0) out vec4 output4f;
+
+uniform sampler2D u_gbufferColorTexture;
+uniform sampler2D u_gbufferNormalTexture;
+uniform sampler2D u_gbufferMaterialTexture;
+
+uniform sampler2D u_gbufferDepthTexture;
+uniform sampler2D u_metalsLUT;
+
+uniform mat4 u_inverseProjectionMatrix4f;
+uniform mat4 u_inverseViewMatrix4f;
+
+uniform vec2 u_viewportSize2f;
+uniform vec3 u_lightPosition3f;
+uniform vec3 u_lightColor3f;
+
+#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION
+#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl"
+
+void main() {
+ vec2 v_position2f = gl_FragCoord.xy * u_viewportSize2f;
+ vec3 diffuseColor3f;
+ vec3 normalVector3f;
+ vec2 lightmapCoords2f;
+ vec3 materialData3f;
+
+ float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r;
+ if(depth < 0.00001) {
+ discard;
+ }
+
+ vec4 worldSpacePosition = vec4(v_position2f, depth, 1.0);
+ worldSpacePosition.xyz *= 2.0;
+ worldSpacePosition.xyz -= 1.0;
+ worldSpacePosition = u_inverseProjectionMatrix4f * worldSpacePosition;
+ vec4 worldSpacePosition2 = worldSpacePosition;
+ worldSpacePosition = u_inverseViewMatrix4f * worldSpacePosition;
+ vec3 lightDist = (worldSpacePosition.xyz / worldSpacePosition.w) - u_lightPosition3f;
+ vec3 color3f = u_lightColor3f / dot(lightDist, lightDist);
+
+ if(color3f.r + color3f.g + color3f.b < 0.025) {
+ discard;
+ }
+
+ vec4 sampleVar4f = textureLod(u_gbufferColorTexture, v_position2f, 0.0);
+ diffuseColor3f.rgb = sampleVar4f.rgb;
+ lightmapCoords2f.x = sampleVar4f.a;
+ sampleVar4f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0);
+ normalVector3f.xyz = sampleVar4f.rgb * 2.0 - 1.0;
+ lightmapCoords2f.y = sampleVar4f.a;
+ materialData3f = textureLod(u_gbufferMaterialTexture, v_position2f, 0.0).rgb;
+
+ vec3 worldSpaceNormal = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f);
+
+ vec3 lightDir3f = normalize(lightDist);
+ lightDir3f = materialData3f.b == 1.0 ? worldSpaceNormal : -lightDir3f;
+
+ if(dot(lightDir3f, worldSpaceNormal) <= 0.0) {
+ discard;
+ }
+
+ diffuseColor3f *= diffuseColor3f;
+ worldSpacePosition2 = u_inverseViewMatrix4f * vec4(worldSpacePosition2.xyz / worldSpacePosition2.w, 0.0);
+ worldSpacePosition2.xyz = normalize(worldSpacePosition2.xyz);
+ output4f = vec4(eaglercraftLighting(diffuseColor3f, color3f, -worldSpacePosition2.xyz, lightDir3f, worldSpaceNormal, materialData3f), 0.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_sun.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_sun.fsh
new file mode 100644
index 00000000..d74cb595
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_sun.fsh
@@ -0,0 +1,100 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out vec4 output4f;
+
+uniform sampler2D u_gbufferColorTexture;
+uniform sampler2D u_gbufferNormalTexture;
+uniform sampler2D u_gbufferMaterialTexture;
+
+uniform sampler2D u_gbufferDepthTexture;
+uniform sampler2D u_metalsLUT;
+
+uniform mat4 u_inverseViewMatrix4f;
+uniform mat4 u_inverseProjectionMatrix4f;
+
+#ifdef COMPILE_SUN_SHADOW
+uniform sampler2D u_sunShadowTexture;
+#endif
+
+uniform vec3 u_sunDirection3f;
+uniform vec3 u_sunColor3f;
+
+#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION
+#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl"
+
+void main() {
+ vec3 diffuseColor3f;
+ vec3 normalVector3f;
+ vec2 lightmapCoords2f;
+ vec3 materialData3f;
+
+#ifdef COMPILE_SUN_SHADOW
+#ifdef COMPILE_COLORED_SHADOW
+ vec4 shadow = textureLod(u_sunShadowTexture, v_position2f, 0.0);
+ if(shadow.a < 0.05) {
+ discard;
+ }
+#else
+ vec3 shadow = vec3(textureLod(u_sunShadowTexture, v_position2f, 0.0).r);
+ if(shadow.r < 0.05) {
+ discard;
+ }
+#endif
+#endif
+
+ vec4 sampleVar4f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0);
+
+#ifndef COMPILE_SUN_SHADOW
+ vec3 shadow = vec3(sampleVar4f.a, 0.0, 0.0);
+ if(shadow.r < 0.5) {
+ discard;
+ }
+ shadow = vec3(max(shadow.r * 2.0 - 1.0, 0.0));
+#endif
+
+ normalVector3f.xyz = sampleVar4f.rgb * 2.0 - 1.0;
+ lightmapCoords2f.y = sampleVar4f.a;
+
+ float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r;
+
+#ifndef COMPILE_SUN_SHADOW
+ if(depth < 0.00001) {
+ discard;
+ }
+#endif
+
+ sampleVar4f = textureLod(u_gbufferColorTexture, v_position2f, 0.0);
+ diffuseColor3f.rgb = sampleVar4f.rgb;
+ lightmapCoords2f.x = sampleVar4f.a;
+ materialData3f = textureLod(u_gbufferMaterialTexture, v_position2f, 0.0).rgb;
+
+ vec3 worldSpaceNormal = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f);
+ vec4 worldSpacePosition = vec4(v_position2f, depth, 1.0);
+ worldSpacePosition.xyz *= 2.0;
+ worldSpacePosition.xyz -= 1.0;
+ worldSpacePosition = u_inverseProjectionMatrix4f * worldSpacePosition;
+ worldSpacePosition = u_inverseViewMatrix4f * vec4(worldSpacePosition.xyz / worldSpacePosition.w, 0.0);
+
+ diffuseColor3f *= diffuseColor3f;
+ output4f = vec4(eaglercraftLighting(diffuseColor3f, u_sunColor3f * shadow.rgb, normalize(-worldSpacePosition.xyz), u_sunDirection3f, worldSpaceNormal, materialData3f), 0.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/material_block_constants.csv b/desktopRuntime/resources/assets/eagler/glsl/deferred/material_block_constants.csv
new file mode 100644
index 00000000..1c4f7a26
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/material_block_constants.csv
@@ -0,0 +1,583 @@
+textureId,smoothness,reflectance,emission
+blocks/anvil_base,158,230,0
+blocks/anvil_top_damaged_0,150,230,0
+blocks/anvil_top_damaged_1,143,230,0
+blocks/anvil_top_damaged_2,158,230,0
+blocks/beacon,158,16,200
+blocks/bed_feet_end,31,10,0
+blocks/bed_feet_side,28,9,0
+blocks/bed_feet_top,61,13,0
+blocks/bed_head_end,31,10,0
+blocks/bed_head_side,31,9,0
+blocks/bed_head_top,80,13,0
+blocks/bedrock,46,5,0
+blocks/bookshelf,64,13,0
+blocks/brewing_stand,130,47,0
+blocks/brewing_stand_base,149,10,0
+blocks/brick,37,8,0
+blocks/cactus_bottom,60,7,0
+blocks/cactus_side,71,7,0
+blocks/cactus_top,71,7,0
+blocks/cake_bottom,64,4,0
+blocks/cake_inner,29,3,0
+blocks/cake_side,43,3,0
+blocks/cake_top,127,10,0
+blocks/carrots_stage_0,71,7,0
+blocks/carrots_stage_1,71,7,0
+blocks/carrots_stage_2,71,7,0
+blocks/carrots_stage_3,71,7,0
+blocks/cauldron_bottom,38,230,0
+blocks/cauldron_inner,122,230,0
+blocks/cauldron_side,110,230,0
+blocks/cauldron_top,76,230,0
+blocks/clay,133,13,0
+blocks/coal_block,155,20,0
+blocks/coal_ore,84,10,0
+blocks/coarse_dirt,50,4,0
+blocks/cobblestone,83,10,0
+blocks/cobblestone_mossy,117,8,0
+blocks/cocoa_stage_0,133,8,0
+blocks/cocoa_stage_1,146,8,0
+blocks/cocoa_stage_2,156,8,0
+blocks/command_block,136,99,8
+blocks/comparator_off,115,5,0
+blocks/comparator_on,115,5,14
+blocks/crafting_table_front,113,29,0
+blocks/crafting_table_side,104,20,0
+blocks/crafting_table_top,97,14,0
+blocks/daylight_detector_inverted_top,95,6,0
+blocks/daylight_detector_side,70,5,0
+blocks/daylight_detector_top,95,6,0
+blocks/deadbush,18,10,0
+blocks/diamond_block,235,150,0
+blocks/diamond_ore,90,25,0
+blocks/dirt,50,4,0
+blocks/dirt_podzol_side,27,1,0
+blocks/dirt_podzol_top,47,15,0
+blocks/dispenser_front_horizontal,138,9,0
+blocks/dispenser_front_vertical,114,9,0
+blocks/door_acacia_lower,92,2,0
+blocks/door_acacia_upper,91,5,0
+blocks/door_birch_lower,79,14,0
+blocks/door_birch_upper,110,14,0
+blocks/door_dark_oak_lower,88,3,0
+blocks/door_dark_oak_upper,87,4,0
+blocks/door_iron_lower,214,230,0
+blocks/door_iron_upper,214,230,0
+blocks/door_jungle_lower,56,2,0
+blocks/door_jungle_upper,58,5,0
+blocks/door_spruce_lower,57,16,0
+blocks/door_spruce_upper,58,17,0
+blocks/door_wood_lower,70,2,0
+blocks/door_wood_upper,74,6,0
+blocks/double_plant_fern_bottom,71,7,0
+blocks/double_plant_fern_top,71,7,0
+blocks/double_plant_grass_bottom,71,7,0
+blocks/double_plant_grass_top,71,7,0
+blocks/double_plant_paeonia_bottom,71,7,0
+blocks/double_plant_paeonia_top,71,7,0
+blocks/double_plant_rose_bottom,71,7,0
+blocks/double_plant_rose_top,71,7,0
+blocks/double_plant_sunflower_back,71,7,0
+blocks/double_plant_sunflower_bottom,71,7,0
+blocks/double_plant_sunflower_front,71,7,0
+blocks/double_plant_sunflower_top,71,7,0
+blocks/double_plant_syringa_bottom,71,7,0
+blocks/double_plant_syringa_top,71,7,0
+blocks/dragon_egg,45,15,16
+blocks/dropper_front_horizontal,138,9,0
+blocks/dropper_front_vertical,112,9,0
+blocks/emerald_block,228,130,0
+blocks/emerald_ore,93,26,0
+blocks/enchanting_table_bottom,210,120,0
+blocks/enchanting_table_side,199,8,0
+blocks/enchanting_table_top,118,16,0
+blocks/end_stone,107,15,0
+blocks/endframe_eye,144,37,46
+blocks/endframe_side,141,19,0
+blocks/endframe_top,144,13,0
+blocks/farmland_dry,60,5,0
+blocks/farmland_wet,41,40,0
+blocks/fern,71,7,0
+blocks/fire_layer_0,30,5,162
+blocks/fire_layer_1,30,5,159
+blocks/flower_allium,71,7,0
+blocks/flower_blue_orchid,71,7,0
+blocks/flower_dandelion,71,7,0
+blocks/flower_houstonia,71,7,0
+blocks/flower_oxeye_daisy,71,7,0
+blocks/flower_pot,59,5,0
+blocks/flower_rose,71,7,0
+blocks/flower_tulip_orange,71,7,0
+blocks/flower_tulip_pink,71,7,0
+blocks/flower_tulip_red,71,7,0
+blocks/flower_tulip_white,71,7,0
+blocks/furnace_front_off,102,6,0
+blocks/furnace_front_on,102,7,25
+blocks/furnace_side,140,10,0
+blocks/furnace_top,114,10,0
+blocks/glass,210,100,0
+blocks/glass_black,230,100,0
+blocks/glass_blue,230,100,0
+blocks/glass_brown,230,100,0
+blocks/glass_cyan,230,100,0
+blocks/glass_gray,230,100,0
+blocks/glass_green,230,100,0
+blocks/glass_light_blue,230,100,0
+blocks/glass_lime,230,100,0
+blocks/glass_magenta,230,100,0
+blocks/glass_orange,230,100,0
+blocks/glass_pane_top,230,100,0
+blocks/glass_pane_top_black,230,100,0
+blocks/glass_pane_top_blue,230,100,0
+blocks/glass_pane_top_brown,230,100,0
+blocks/glass_pane_top_cyan,230,100,0
+blocks/glass_pane_top_gray,230,100,0
+blocks/glass_pane_top_green,230,100,0
+blocks/glass_pane_top_light_blue,230,100,0
+blocks/glass_pane_top_lime,230,100,0
+blocks/glass_pane_top_magenta,230,100,0
+blocks/glass_pane_top_orange,230,100,0
+blocks/glass_pane_top_pink,230,100,0
+blocks/glass_pane_top_purple,230,100,0
+blocks/glass_pane_top_red,230,100,0
+blocks/glass_pane_top_silver,230,100,0
+blocks/glass_pane_top_white,230,100,0
+blocks/glass_pane_top_yellow,230,100,0
+blocks/glass_pink,230,100,0
+blocks/glass_purple,230,100,0
+blocks/glass_red,230,100,0
+blocks/glass_silver,230,100,0
+blocks/glass_white,230,100,0
+blocks/glass_yellow,230,100,0
+blocks/glowstone,194,60,150
+blocks/gold_block,218,231,0
+blocks/gold_ore,96,37,0
+blocks/grass_side,50,4,0
+blocks/grass_side_overlay,12,5,0
+blocks/grass_side_snowed,146,15,0
+blocks/grass_top,12,5,0
+blocks/gravel,68,5,0
+blocks/hardened_clay,59,5,0
+blocks/hardened_clay_stained_black,59,5,0
+blocks/hardened_clay_stained_blue,59,5,0
+blocks/hardened_clay_stained_brown,59,5,0
+blocks/hardened_clay_stained_cyan,59,5,0
+blocks/hardened_clay_stained_gray,59,5,0
+blocks/hardened_clay_stained_green,59,5,0
+blocks/hardened_clay_stained_light_blue,59,5,0
+blocks/hardened_clay_stained_lime,59,5,0
+blocks/hardened_clay_stained_magenta,59,5,0
+blocks/hardened_clay_stained_orange,59,5,0
+blocks/hardened_clay_stained_pink,59,5,0
+blocks/hardened_clay_stained_purple,59,5,0
+blocks/hardened_clay_stained_red,59,5,0
+blocks/hardened_clay_stained_silver,59,5,0
+blocks/hardened_clay_stained_white,59,5,0
+blocks/hardened_clay_stained_yellow,59,5,0
+blocks/hay_block_side,112,12,0
+blocks/hay_block_top,114,13,0
+blocks/hopper_inside,71,230,0
+blocks/hopper_outside,173,230,0
+blocks/hopper_top,105,230,0
+blocks/ice,180,70,0
+blocks/ice_packed,168,40,0
+blocks/iron_bars,64,230,0
+blocks/iron_block,232,230,0
+blocks/iron_ore,95,15,0
+blocks/iron_trapdoor,214,230,0
+blocks/itemframe_background,0,0,0
+blocks/jukebox_side,89,13,0
+blocks/jukebox_top,83,13,0
+blocks/ladder,30,6,0
+blocks/lapis_block,222,20,0
+blocks/lapis_ore,96,10,0
+blocks/lava_flow,30,15,200
+blocks/lava_still,30,15,200
+blocks/leaves_acacia,60,10,0
+blocks/leaves_big_oak,105,4,0
+blocks/leaves_birch,73,5,0
+blocks/leaves_jungle,71,7,0
+blocks/leaves_oak,77,6,0
+blocks/leaves_spruce,59,6,0
+blocks/lever,97,10,0
+blocks/log_acacia,15,10,0
+blocks/log_acacia_top,9,10,0
+blocks/log_big_oak,26,10,0
+blocks/log_big_oak_top,20,10,0
+blocks/log_birch,24,5,0
+blocks/log_birch_top,20,10,0
+blocks/log_jungle,14,10,0
+blocks/log_jungle_top,20,10,0
+blocks/log_oak,18,10,0
+blocks/log_oak_top,20,10,0
+blocks/log_spruce,23,10,0
+blocks/log_spruce_top,21,10,0
+blocks/melon_side,156,14,0
+blocks/melon_stem_connected,18,10,0
+blocks/melon_stem_disconnected,18,10,0
+blocks/melon_top,153,14,0
+blocks/mob_spawner,71,230,0
+blocks/mushroom_block_inside,151,10,0
+blocks/mushroom_block_skin_brown,96,10,0
+blocks/mushroom_block_skin_red,148,10,0
+blocks/mushroom_block_skin_stem,142,10,0
+blocks/mushroom_brown,96,10,0
+blocks/mushroom_red,148,10,0
+blocks/mycelium_side,63,15,0
+blocks/mycelium_top,70,15,0
+blocks/nether_brick,37,15,0
+blocks/nether_wart_stage_0,11,5,0
+blocks/nether_wart_stage_1,30,5,0
+blocks/nether_wart_stage_2,39,5,0
+blocks/netherrack,20,10,0
+blocks/noteblock,89,13,0
+blocks/obsidian,210,120,0
+blocks/piston_bottom,80,4,0
+blocks/piston_inner,87,4,0
+blocks/piston_side,104,22,0
+blocks/piston_top_normal,109,25,0
+blocks/piston_top_sticky,116,28,0
+blocks/planks_acacia,92,11,0
+blocks/planks_big_oak,92,11,0
+blocks/planks_birch,92,11,0
+blocks/planks_jungle,92,11,0
+blocks/planks_oak,92,11,0
+blocks/planks_spruce,92,11,0
+blocks/portal,71,7,120
+blocks/potatoes_stage_0,71,7,0
+blocks/potatoes_stage_1,71,7,0
+blocks/potatoes_stage_2,71,7,0
+blocks/potatoes_stage_3,71,7,0
+blocks/prismarine_bricks,230,20,0
+blocks/prismarine_dark,194,26,0
+blocks/prismarine_rough,115,33,0
+blocks/pumpkin_face_off,56,15,0
+blocks/pumpkin_face_on,56,15,74
+blocks/pumpkin_side,52,15,0
+blocks/pumpkin_stem_connected,18,10,0
+blocks/pumpkin_stem_disconnected,18,10,0
+blocks/pumpkin_top,130,15,0
+blocks/quartz_block_bottom,220,60,0
+blocks/quartz_block_chiseled,220,60,0
+blocks/quartz_block_chiseled_top,220,60,0
+blocks/quartz_block_lines,220,60,0
+blocks/quartz_block_lines_top,220,60,0
+blocks/quartz_block_side,220,60,0
+blocks/quartz_block_top,220,60,0
+blocks/quartz_ore,45,10,0
+blocks/rail_activator,84,50,0
+blocks/rail_activator_powered,84,50,32
+blocks/rail_detector,102,62,0
+blocks/rail_detector_powered,102,62,32
+blocks/rail_golden,112,75,0
+blocks/rail_golden_powered,112,75,48
+blocks/rail_normal,85,50,0
+blocks/rail_normal_turned,85,50,0
+blocks/red_sand,32,2,0
+blocks/red_sandstone_bottom,52,10,0
+blocks/red_sandstone_carved,90,10,0
+blocks/red_sandstone_normal,43,10,0
+blocks/red_sandstone_smooth,90,10,0
+blocks/red_sandstone_top,128,15,0
+blocks/redstone_block,184,15,0
+blocks/redstone_dust_cross,100,5,0
+blocks/redstone_dust_cross_overlay,100,5,0
+blocks/redstone_dust_line,100,5,0
+blocks/redstone_dust_line_overlay,100,5,0
+blocks/redstone_lamp_off,191,20,0
+blocks/redstone_lamp_on,191,20,132
+blocks/redstone_ore,88,10,0
+blocks/redstone_torch_off,135,9,0
+blocks/redstone_torch_on,135,9,64
+blocks/reeds,71,7,0
+blocks/repeater_off,151,5,0
+blocks/repeater_on,151,5,32
+blocks/sand,46,8,0
+blocks/sandstone_bottom,52,8,0
+blocks/sandstone_carved,113,10,0
+blocks/sandstone_normal,43,10,0
+blocks/sandstone_smooth,90,10,0
+blocks/sandstone_top,128,15,0
+blocks/sapling_acacia,71,7,0
+blocks/sapling_birch,71,7,0
+blocks/sapling_jungle,71,7,0
+blocks/sapling_oak,71,7,0
+blocks/sapling_roofed_oak,71,7,0
+blocks/sapling_spruce,71,7,0
+blocks/sea_lantern,194,60,80
+blocks/slime,209,0,0
+blocks/snow,146,15,0
+blocks/soul_sand,35,15,0
+blocks/sponge,38,11,0
+blocks/sponge_wet,240,16,0
+blocks/stone,77,10,0
+blocks/stone_andesite,50,9,0
+blocks/stone_andesite_smooth,230,20,0
+blocks/stone_diorite,54,9,0
+blocks/stone_diorite_smooth,230,20,0
+blocks/stone_granite,38,9,0
+blocks/stone_granite_smooth,230,20,0
+blocks/stone_slab_side,120,20,0
+blocks/stone_slab_top,120,20,0
+blocks/stonebrick,70,10,0
+blocks/stonebrick_carved,58,10,0
+blocks/stonebrick_cracked,37,10,0
+blocks/stonebrick_mossy,53,9,0
+blocks/tallgrass,71,7,0
+blocks/tnt_bottom,78,5,0
+blocks/tnt_side,94,15,0
+blocks/tnt_top,61,5,0
+blocks/torch_on,135,9,128
+blocks/trapdoor,43,5,0
+blocks/trip_wire,230,20,0
+blocks/trip_wire_source,132,142,0
+blocks/vine,116,13,0
+blocks/water_flow,220,40,0
+blocks/water_still,220,40,0
+blocks/waterlily,78,15,0
+blocks/web,230,20,0
+blocks/wheat_stage_0,71,7,0
+blocks/wheat_stage_1,71,7,0
+blocks/wheat_stage_2,71,7,0
+blocks/wheat_stage_3,71,7,0
+blocks/wheat_stage_4,71,7,0
+blocks/wheat_stage_5,71,7,0
+blocks/wheat_stage_6,71,7,0
+blocks/wheat_stage_7,71,7,0
+blocks/wool_colored_black,50,10,0
+blocks/wool_colored_blue,50,10,0
+blocks/wool_colored_brown,50,10,0
+blocks/wool_colored_cyan,50,10,0
+blocks/wool_colored_gray,50,10,0
+blocks/wool_colored_green,50,10,0
+blocks/wool_colored_light_blue,50,10,0
+blocks/wool_colored_lime,50,10,0
+blocks/wool_colored_magenta,50,10,0
+blocks/wool_colored_orange,50,10,0
+blocks/wool_colored_pink,50,10,0
+blocks/wool_colored_purple,50,10,0
+blocks/wool_colored_red,50,10,0
+blocks/wool_colored_silver,50,10,0
+blocks/wool_colored_white,50,10,0
+blocks/wool_colored_yellow,50,10,0
+default,64,2,0
+items/apple,90,25,0
+items/apple_golden,150,231,0
+items/arrow,64,2,0
+items/barrier,64,2,0
+items/bed,80,15,0
+items/beef_cooked,70,10,0
+items/beef_raw,50,20,0
+items/blaze_powder,64,15,30
+items/blaze_rod,75,20,30
+items/boat,90,11,0
+items/bone,110,40,0
+items/book_enchanted,64,10,0
+items/book_normal,64,10,0
+items/book_writable,64,10,0
+items/book_written,64,10,0
+items/bow_pulling_0,80,15,0
+items/bow_pulling_1,80,15,0
+items/bow_pulling_2,80,15,0
+items/bow_standby,80,15,0
+items/bowl,90,10,0
+items/bread,75,5,0
+items/brewing_stand,64,10,0
+items/brick,40,8,0
+items/bucket_empty,110,230,0
+items/bucket_lava,110,230,0
+items/bucket_milk,110,230,0
+items/bucket_water,110,230,32
+items/cake,70,10,0
+items/carrot,64,5,0
+items/carrot_golden,90,231,0
+items/carrot_on_a_stick,80,10,0
+items/cauldron,75,230,0
+items/chainmail_boots,100,230,0
+items/chainmail_chestplate,100,230,0
+items/chainmail_helmet,100,230,0
+items/chainmail_leggings,100,230,0
+items/charcoal,130,20,0
+items/chicken_cooked,64,20,0
+items/chicken_raw,50,20,0
+items/clay_ball,120,13,0
+items/clock,90,230,0
+items/coal,130,20,0
+items/comparator,115,5,0
+items/compass,80,230,0
+items/cookie,64,5,0
+items/diamond,200,120,0
+items/diamond_axe,80,10,0
+items/diamond_boots,200,120,0
+items/diamond_chestplate,200,120,0
+items/diamond_helmet,200,120,0
+items/diamond_hoe,80,10,0
+items/diamond_horse_armor,200,120,0
+items/diamond_leggings,200,120,0
+items/diamond_pickaxe,80,10,0
+items/diamond_shovel,80,10,0
+items/diamond_sword,80,10,0
+items/door_acacia,66,25,0
+items/door_birch,66,25,0
+items/door_dark_oak,66,25,0
+items/door_iron,200,230,0
+items/door_jungle,66,25,0
+items/door_spruce,66,25,0
+items/door_wood,66,25,0
+items/dye_powder_black,64,5,0
+items/dye_powder_blue,64,5,0
+items/dye_powder_brown,64,5,0
+items/dye_powder_cyan,64,5,0
+items/dye_powder_gray,64,5,0
+items/dye_powder_green,64,5,0
+items/dye_powder_light_blue,64,5,0
+items/dye_powder_lime,64,5,0
+items/dye_powder_magenta,64,5,0
+items/dye_powder_orange,64,5,0
+items/dye_powder_pink,64,5,0
+items/dye_powder_purple,64,5,0
+items/dye_powder_red,64,5,0
+items/dye_powder_silver,64,5,0
+items/dye_powder_white,64,5,0
+items/dye_powder_yellow,64,5,0
+items/egg,75,15,0
+items/emerald,228,130,0
+items/ender_eye,80,10,40
+items/ender_pearl,80,10,0
+items/experience_bottle,210,100,0
+items/feather,64,10,0
+items/fireball,64,5,40
+items/fireworks,80,20,0
+items/fireworks_charge,70,15,0
+items/fireworks_charge_overlay,70,15,0
+items/fish_clownfish_raw,90,25,0
+items/fish_cod_cooked,70,10,0
+items/fish_cod_raw,90,25,0
+items/fish_pufferfish_raw,90,25,0
+items/fish_salmon_cooked,70,10,0
+items/fish_salmon_raw,90,25,0
+items/fishing_rod_cast,80,10,0
+items/fishing_rod_uncast,80,10,0
+items/flint,110,30,0
+items/flint_and_steel,90,230,0
+items/flower_pot,80,5,0
+items/ghast_tear,120,50,0
+items/glowstone_dust,120,20,70
+items/gold_axe,80,10,0
+items/gold_boots,200,231,0
+items/gold_chestplate,200,231,0
+items/gold_helmet,200,231,0
+items/gold_hoe,80,10,0
+items/gold_horse_armor,200,231,0
+items/gold_ingot,200,231,0
+items/gold_leggings,200,231,0
+items/gold_nugget,200,231,0
+items/gold_pickaxe,80,10,0
+items/gold_shovel,80,10,0
+items/gold_sword,80,10,0
+items/gunpowder,64,15,0
+items/hopper,90,230,0
+items/iron_axe,80,10,0
+items/iron_boots,200,230,0
+items/iron_chestplate,200,230,0
+items/iron_helmet,200,230,0
+items/iron_hoe,80,10,0
+items/iron_horse_armor,200,230,0
+items/iron_ingot,200,230,0
+items/iron_leggings,200,230,0
+items/iron_pickaxe,80,10,0
+items/iron_shovel,80,10,0
+items/iron_sword,80,10,0
+items/item_frame,70,20,0
+items/lead,64,5,0
+items/leather,70,15,0
+items/leather_boots,70,15,0
+items/leather_boots_overlay,70,15,0
+items/leather_chestplate,70,15,0
+items/leather_chestplate_overlay,70,15,0
+items/leather_helmet,70,15,0
+items/leather_helmet_overlay,70,15,0
+items/leather_leggings,70,15,0
+items/leather_leggings_overlay,70,15,0
+items/magma_cream,90,20,32
+items/map_empty,64,10,0
+items/map_filled,64,10,0
+items/melon,90,15,0
+items/melon_speckled,90,25,20
+items/minecart_chest,110,230,0
+items/minecart_command_block,110,230,0
+items/minecart_furnace,110,230,0
+items/minecart_hopper,110,230,0
+items/minecart_normal,110,230,0
+items/minecart_tnt,110,230,0
+items/mushroom_stew,90,10,0
+items/mutton_cooked,70,10,0
+items/mutton_raw,50,20,0
+items/name_tag,64,5,0
+items/nether_star,90,20,50
+items/nether_wart,45,20,0
+items/netherbrick,37,15,0
+items/painting,70,20,0
+items/paper,64,10,0
+items/porkchop_cooked,70,10,0
+items/porkchop_raw,50,20,0
+items/potato,60,10,0
+items/potato_baked,60,10,0
+items/potato_poisonous,60,5,0
+items/potion_bottle_drinkable,210,100,0
+items/potion_bottle_empty,210,100,0
+items/potion_bottle_splash,210,100,0
+items/potion_overlay,210,100,0
+items/prismarine_crystals,230,90,0
+items/prismarine_shard,230,20,0
+items/pumpkin_pie,90,25,0
+items/quartz,220,60,0
+items/rabbit_cooked,70,10,0
+items/rabbit_foot,64,5,0
+items/rabbit_hide,70,15,0
+items/rabbit_raw,50,20,0
+items/rabbit_stew,90,10,0
+items/record_11,135,40,0
+items/record_13,135,40,0
+items/record_blocks,135,40,0
+items/record_cat,135,40,0
+items/record_chirp,135,40,0
+items/record_far,135,40,0
+items/record_mall,135,40,0
+items/record_mellohi,135,40,0
+items/record_stal,135,40,0
+items/record_strad,135,40,0
+items/record_wait,135,40,0
+items/record_ward,135,40,0
+items/redstone_dust,70,10,0
+items/reeds,70,7,0
+items/repeater,115,5,0
+items/rotten_flesh,70,15,0
+items/saddle,70,15,0
+items/seeds_melon,64,5,0
+items/seeds_pumpkin,64,5,0
+items/seeds_wheat,64,5,0
+items/shears,90,230,0
+items/sign,90,15,0
+items/slimeball,150,50,0
+items/snowball,130,20,0
+items/spawn_egg,75,15,0
+items/spawn_egg_overlay,75,15,0
+items/spider_eye,100,30,0
+items/spider_eye_fermented,100,40,0
+items/stick,80,10,0
+items/stone_axe,80,10,0
+items/stone_hoe,80,10,0
+items/stone_pickaxe,80,10,0
+items/stone_shovel,80,10,0
+items/stone_sword,80,10,0
+items/string,80,25,0
+items/sugar,100,30,0
+items/wheat,110,15,0
+items/wood_axe,80,10,0
+items/wood_hoe,80,10,0
+items/wood_pickaxe,80,10,0
+items/wood_shovel,80,10,0
+items/wood_sword,80,10,0
+items/wooden_armorstand,80,10,0
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/metals.csv b/desktopRuntime/resources/assets/eagler/glsl/deferred/metals.csv
new file mode 100644
index 00000000..80c2dbb3
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/metals.csv
@@ -0,0 +1,9 @@
+Metal,ID,Nr,Ng,Nb,Kr,Kg,Kb
+Iron,230,2.9114,2.9497,2.5845,3.0893,2.9318,2.7670
+Gold,231,0.18299,0.42108,1.3734,3.4242,2.3459,1.7704
+Aluminum,232,1.3456,0.96521,0.61722,7.4746,6.3995,5.3031
+Chrome,233,3.1071,3.1812,2.3230,3.3314,3.3291,3.1350
+Copper,234,0.27105,0.67693,1.3164,3.6092,2.6248,2.2921
+Lead,235,1.9100,1.8300,1.4400,3.5100,3.4000,3.1800
+Platinum,236,2.3757,2.0847,1.8453,4.2655,3.7153,3.1365
+Silver,237,0.15943,0.14512,0.13547,3.9291,3.1900,2.3808
\ No newline at end of file
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.fsh
new file mode 100644
index 00000000..f2c234be
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.fsh
@@ -0,0 +1,50 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+in vec3 v_position3f;
+
+layout(location = 0) out vec4 output4f;
+
+uniform vec3 u_moonColor3f;
+uniform vec3 u_lightDir3f;
+
+uniform sampler2D u_moonTextures;
+uniform sampler2D u_cloudsTexture;
+
+void main() {
+ gl_FragDepth = 0.0;
+ vec4 color4f = texture(u_moonTextures, v_position2f);
+ if(color4f.a < 0.99) {
+ discard;
+ }
+ vec3 moonNormal3f;
+ moonNormal3f.xy = color4f.rg * 2.0 - 1.0;
+ moonNormal3f.z = sqrt(1.0 - dot(moonNormal3f.xy, moonNormal3f.xy));
+ float NdotV = dot(moonNormal3f, u_lightDir3f);
+ output4f = vec4(u_moonColor3f * (color4f.b * color4f.b * mix(max(NdotV, 0.0), max(NdotV + 0.45, 0.0) * 0.5f, max(u_lightDir3f.z * u_lightDir3f.z * -u_lightDir3f.z, 0.0))), 0.0);
+ vec3 viewDir = normalize(v_position3f);
+ if(viewDir.y < 0.01) {
+ return;
+ }
+ vec2 cloudSampleCoord2f = (viewDir.xz / (viewDir.y + 1.0)) * 0.975 * 0.5 + 0.5;
+ vec4 cloudSample = textureLod(u_cloudsTexture, cloudSampleCoord2f, 0.0);
+ output4f.rgb = mix(output4f.rgb, output4f.rgb * max(cloudSample.a * 1.25 - 0.25, 0.0), smoothstep(0.0, 1.0, min(viewDir.y * 8.0, 1.0)));
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.vsh
new file mode 100644
index 00000000..015bceb7
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.vsh
@@ -0,0 +1,35 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+layout(location = 0) in vec2 a_position2f;
+
+out vec2 v_position2f;
+out vec3 v_position3f;
+
+uniform mat4 u_modelMatrix4f;
+uniform mat4 u_viewMatrix4f;
+uniform mat4 u_projMatrix4f;
+
+void main() {
+ v_position2f = a_position2f * 0.5 + 0.5;
+ v_position3f = (u_modelMatrix4f * vec4(a_position2f, -13.0, 1.0)).xyz;
+ gl_Position = u_viewMatrix4f * vec4(v_position3f, 0.0);
+ gl_Position = u_projMatrix4f * vec4(gl_Position.xyz, 1.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/particles_s.png b/desktopRuntime/resources/assets/eagler/glsl/deferred/particles_s.png
new file mode 100644
index 00000000..8382136f
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/particles_s.png differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_blur.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_blur.fsh
new file mode 100644
index 00000000..203ac6de
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_blur.fsh
@@ -0,0 +1,48 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out vec4 output4f;
+
+uniform sampler2D u_inputTexture;
+
+uniform vec2 u_sampleOffset2f;
+uniform vec4 u_outputSize4f;
+
+void main() {
+ vec2 alignedUV = (floor(v_position2f * u_outputSize4f.xy) + 0.5) * u_outputSize4f.zw;
+ vec4 accum = textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 7.0, 0.0) * 0.0005;
+ accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 6.0, 0.0) * 0.0024;
+ accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 5.0, 0.0) * 0.0092;
+ accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 4.0, 0.0) * 0.0278;
+ accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 3.0, 0.0) * 0.0656;
+ accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 2.0, 0.0) * 0.1210;
+ accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f, 0.0) * 0.1747;
+ accum += textureLod(u_inputTexture, alignedUV, 0.0) * 0.1974;
+ accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f, 0.0) * 0.1747;
+ accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 2.0, 0.0) * 0.1210;
+ accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 3.0, 0.0) * 0.0656;
+ accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 4.0, 0.0) * 0.0278;
+ accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 5.0, 0.0) * 0.0092;
+ accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 6.0, 0.0) * 0.0024;
+ accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 7.0, 0.0) * 0.0005;
+ output4f = accum;
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_bright.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_bright.fsh
new file mode 100644
index 00000000..e187942a
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_bright.fsh
@@ -0,0 +1,48 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out vec4 output4f;
+
+uniform sampler2D u_lightingHDRFramebufferTexture;
+uniform sampler2D u_framebufferLumaAvgInput;
+uniform sampler2D u_gbufferMaterialTexture;
+uniform sampler2D u_gbufferDepthTexture;
+
+uniform vec4 u_outputSize4f;
+
+void main() {
+ float exposure = textureLod(u_framebufferLumaAvgInput, vec2(0.5), 0.0).r;
+ float emission = 0.0;
+ vec2 alignedUV = (floor(v_position2f * u_outputSize4f.xy) + 0.5) * u_outputSize4f.zw;
+ vec4 inputColor = textureLod(u_lightingHDRFramebufferTexture, alignedUV, 0.0);
+ if(inputColor.a > 0.0) {
+ emission = textureLod(u_gbufferMaterialTexture, alignedUV, 0.0).b;
+ }else {
+ emission = textureLod(u_gbufferDepthTexture, alignedUV, 0.0).r <= 0.0000001 ? 10.0 : 0.0;
+ }
+ float f = dot(inputColor.rgb, vec3(0.2126, 0.7152, 0.0722)) * (5.0 + emission * 15.0);
+ if(f > 2.0 + exposure) {
+ output4f = vec4(min(inputColor.rgb, vec3(5.0)) * (0.75 + exposure * 1.5) * min(f - 2.0 - exposure, 1.0), 1.0);
+ }else {
+ output4f = vec4(0.0);
+ }
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_avg.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_avg.fsh
new file mode 100644
index 00000000..473e3cf0
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_avg.fsh
@@ -0,0 +1,44 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out float exposureOut1f;
+
+uniform sampler2D u_inputTexture;
+uniform vec4 u_sampleOffset4f;
+
+#ifdef CALCULATE_LUMINANCE
+#define TAKE_SAMPLE(samplerIn, posIn) dot(textureLod(samplerIn, posIn, 0.0).rgb, vec3(0.299, 0.587, 0.114))
+#else
+#define TAKE_SAMPLE(samplerIn, posIn) textureLod(samplerIn, posIn, 0.0).r
+#endif
+
+void main() {
+
+ vec2 pixelPos = floor(v_position2f / u_sampleOffset4f.xy);
+
+ float a = min(TAKE_SAMPLE(u_inputTexture, (pixelPos + vec2(0.25, 0.25)) * u_sampleOffset4f.zw), 250.0);
+ a += min(TAKE_SAMPLE(u_inputTexture, (pixelPos + vec2(0.75, 0.25)) * u_sampleOffset4f.zw), 250.0);
+ a += min(TAKE_SAMPLE(u_inputTexture, (pixelPos + vec2(0.75, 0.75)) * u_sampleOffset4f.zw), 250.0);
+ a += min(TAKE_SAMPLE(u_inputTexture, (pixelPos + vec2(0.25, 0.75)) * u_sampleOffset4f.zw), 250.0);
+
+ exposureOut1f = a * 0.25;
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_final.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_final.fsh
new file mode 100644
index 00000000..0f250c04
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_final.fsh
@@ -0,0 +1,40 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out float exposureOut1f;
+
+uniform sampler2D u_inputTexture;
+uniform vec2 u_inputSize2f;
+
+void main() {
+
+ float a = 0.0;
+ float b = 0.0;
+ for(vec2 v = vec2(0.0, u_inputSize2f * 0.5); v.y < 1.0; v.y += u_inputSize2f.y) {
+ for(v.x = u_inputSize2f.x * 0.5; v.x < 1.0; v.x += u_inputSize2f.x) {
+ a += textureLod(u_inputTexture, v, 0.0).r * (1.0 - length(v - 0.5));
+ b += 1.0;
+ }
+ }
+
+ exposureOut1f = a / b;
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_fxaa.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_fxaa.fsh
new file mode 100644
index 00000000..7abf36e4
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_fxaa.fsh
@@ -0,0 +1,273 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+/*
+ * This file was modified by lax1dude to remove dead code
+ *
+ * Original: https://gist.github.com/kosua20/0c506b81b3812ac900048059d2383126
+ *
+ */
+
+/*
+ * ============================================================================
+ *
+ *
+ * NVIDIA FXAA 3.11 by TIMOTHY LOTTES
+ *
+ *
+ * ------------------------------------------------------------------------------
+ * COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED.
+ * ------------------------------------------------------------------------------
+ * TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
+ * *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
+ * OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA
+ * OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR
+ * CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR
+ * LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION,
+ * OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE
+ * THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGES.
+ *
+ */
+
+
+precision lowp int;
+precision mediump float;
+precision mediump sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out vec4 output4f;
+
+uniform sampler2D u_screenTexture;
+uniform vec2 u_screenSize2f;
+
+#ifndef FXAA_GREEN_AS_LUMA
+ // For those using non-linear color,
+ // and either not able to get luma in alpha, or not wanting to,
+ // this enables FXAA to run using green as a proxy for luma.
+ // So with this enabled, no need to pack luma in alpha.
+ //
+ // This will turn off AA on anything which lacks some amount of green.
+ // Pure red and blue or combination of only R and B, will get no AA.
+ //
+ // Might want to lower the settings for both,
+ // fxaaConsoleEdgeThresholdMin
+ // fxaaQualityEdgeThresholdMin
+ // In order to insure AA does not get turned off on colors
+ // which contain a minor amount of green.
+ //
+ // 1 = On.
+ // 0 = Off.
+ //
+ #define FXAA_GREEN_AS_LUMA 0
+#endif
+
+#ifndef FXAA_DISCARD
+ // 1 = Use discard on pixels which don't need AA.
+ // 0 = Return unchanged color on pixels which don't need AA.
+ #define FXAA_DISCARD 0
+#endif
+
+/*============================================================================
+ API PORTING
+============================================================================*/
+ #define FxaaBool bool
+ #define FxaaDiscard discard
+ #define FxaaFloat float
+ #define FxaaFloat2 vec2
+ #define FxaaFloat3 vec3
+ #define FxaaFloat4 vec4
+ #define FxaaHalf float
+ #define FxaaHalf2 vec2
+ #define FxaaHalf3 vec3
+ #define FxaaHalf4 vec4
+ #define FxaaInt2 ivec2
+ #define FxaaSat(x) clamp(x, 0.0, 1.0)
+ #define FxaaTex sampler2D
+/*--------------------------------------------------------------------------*/
+
+ #define FxaaTexTop(t, p) textureLod(t, p, 0.0)
+ #define FxaaLuma(rgba) rgba.a
+
+/*============================================================================
+ FXAA3 CONSOLE - PC VERSION
+============================================================================*/
+/*--------------------------------------------------------------------------*/
+FxaaFloat4 FxaaPixelShader(
+ // See FXAA Quality FxaaPixelShader() source for docs on Inputs!
+ //
+ // Use noperspective interpolation here (turn off perspective interpolation).
+ // {xy} = center of pixel
+ FxaaFloat2 pos,
+ //
+ // Used only for FXAA Console, and not used on the 360 version.
+ // Use noperspective interpolation here (turn off perspective interpolation).
+ // {xy__} = upper left of pixel
+ // {__zw} = lower right of pixel
+ FxaaFloat4 fxaaConsolePosPos,
+ //
+ // Input color texture.
+ // {rgb_} = color in linear or perceptual color space
+ // if (FXAA_GREEN_AS_LUMA == 0)
+ // {___a} = luma in perceptual color space (not linear)
+ FxaaTex tex,
+ //
+ // Only used on FXAA Console.
+ // This must be from a constant/uniform.
+ // This effects sub-pixel AA quality and inversely sharpness.
+ // Where N ranges between,
+ // N = 0.50 (default)
+ // N = 0.33 (sharper)
+ // {x___} = -N/screenWidthInPixels
+ // {_y__} = -N/screenHeightInPixels
+ // {__z_} = N/screenWidthInPixels
+ // {___w} = N/screenHeightInPixels
+ FxaaFloat4 fxaaConsoleRcpFrameOpt,
+ //
+ // Only used on FXAA Console.
+ // Not used on 360, but used on PS3 and PC.
+ // This must be from a constant/uniform.
+ // {x___} = -2.0/screenWidthInPixels
+ // {_y__} = -2.0/screenHeightInPixels
+ // {__z_} = 2.0/screenWidthInPixels
+ // {___w} = 2.0/screenHeightInPixels
+ FxaaFloat4 fxaaConsoleRcpFrameOpt2,
+ //
+ // Only used on FXAA Console.
+ // This used to be the FXAA_CONSOLE__EDGE_SHARPNESS define.
+ // It is here now to allow easier tuning.
+ // This does not effect PS3, as this needs to be compiled in.
+ // Use FXAA_CONSOLE__PS3_EDGE_SHARPNESS for PS3.
+ // Due to the PS3 being ALU bound,
+ // there are only three safe values here: 2 and 4 and 8.
+ // These options use the shaders ability to a free *|/ by 2|4|8.
+ // For all other platforms can be a non-power of two.
+ // 8.0 is sharper (default!!!)
+ // 4.0 is softer
+ // 2.0 is really soft (good only for vector graphics inputs)
+ FxaaFloat fxaaConsoleEdgeSharpness,
+ //
+ // Only used on FXAA Console.
+ // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD define.
+ // It is here now to allow easier tuning.
+ // This does not effect PS3, as this needs to be compiled in.
+ // Use FXAA_CONSOLE__PS3_EDGE_THRESHOLD for PS3.
+ // Due to the PS3 being ALU bound,
+ // there are only two safe values here: 1/4 and 1/8.
+ // These options use the shaders ability to a free *|/ by 2|4|8.
+ // The console setting has a different mapping than the quality setting.
+ // Other platforms can use other values.
+ // 0.125 leaves less aliasing, but is softer (default!!!)
+ // 0.25 leaves more aliasing, and is sharper
+ FxaaFloat fxaaConsoleEdgeThreshold,
+ //
+ // Only used on FXAA Console.
+ // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD_MIN define.
+ // It is here now to allow easier tuning.
+ // Trims the algorithm from processing darks.
+ // The console setting has a different mapping than the quality setting.
+ // This does not apply to PS3,
+ // PS3 was simplified to avoid more shader instructions.
+ // 0.06 - faster but more aliasing in darks
+ // 0.05 - default
+ // 0.04 - slower and less aliasing in darks
+ // Special notes when using FXAA_GREEN_AS_LUMA,
+ // Likely want to set this to zero.
+ // As colors that are mostly not-green
+ // will appear very dark in the green channel!
+ // Tune by looking at mostly non-green content,
+ // then start at zero and increase until aliasing is a problem.
+ FxaaFloat fxaaConsoleEdgeThresholdMin
+) {
+/*--------------------------------------------------------------------------*/
+ FxaaFloat lumaNw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xy));
+ FxaaFloat lumaSw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xw));
+ FxaaFloat lumaNe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zy));
+ FxaaFloat lumaSe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zw));
+/*--------------------------------------------------------------------------*/
+ FxaaFloat4 rgbyM = FxaaTexTop(tex, pos.xy);
+ FxaaFloat lumaM = FxaaLuma(rgbyM);
+/*--------------------------------------------------------------------------*/
+ FxaaFloat lumaMaxNwSw = max(lumaNw, lumaSw);
+ lumaNe += 1.0/384.0;
+ FxaaFloat lumaMinNwSw = min(lumaNw, lumaSw);
+/*--------------------------------------------------------------------------*/
+ FxaaFloat lumaMaxNeSe = max(lumaNe, lumaSe);
+ FxaaFloat lumaMinNeSe = min(lumaNe, lumaSe);
+/*--------------------------------------------------------------------------*/
+ FxaaFloat lumaMax = max(lumaMaxNeSe, lumaMaxNwSw);
+ FxaaFloat lumaMin = min(lumaMinNeSe, lumaMinNwSw);
+/*--------------------------------------------------------------------------*/
+ FxaaFloat lumaMaxScaled = lumaMax * fxaaConsoleEdgeThreshold;
+/*--------------------------------------------------------------------------*/
+ FxaaFloat lumaMinM = min(lumaMin, lumaM);
+ FxaaFloat lumaMaxScaledClamped = max(fxaaConsoleEdgeThresholdMin, lumaMaxScaled);
+ FxaaFloat lumaMaxM = max(lumaMax, lumaM);
+ FxaaFloat dirSwMinusNe = lumaSw - lumaNe;
+ FxaaFloat lumaMaxSubMinM = lumaMaxM - lumaMinM;
+ FxaaFloat dirSeMinusNw = lumaSe - lumaNw;
+ if(lumaMaxSubMinM < lumaMaxScaledClamped)
+ {
+ #if (FXAA_DISCARD == 1)
+ FxaaDiscard;
+ #else
+ return rgbyM;
+ #endif
+ }
+/*--------------------------------------------------------------------------*/
+ FxaaFloat2 dir;
+ dir.x = dirSwMinusNe + dirSeMinusNw;
+ dir.y = dirSwMinusNe - dirSeMinusNw;
+/*--------------------------------------------------------------------------*/
+ FxaaFloat2 dir1 = normalize(dir.xy);
+ FxaaFloat4 rgbyN1 = FxaaTexTop(tex, pos.xy - dir1 * fxaaConsoleRcpFrameOpt.zw);
+ FxaaFloat4 rgbyP1 = FxaaTexTop(tex, pos.xy + dir1 * fxaaConsoleRcpFrameOpt.zw);
+/*--------------------------------------------------------------------------*/
+ FxaaFloat dirAbsMinTimesC = min(abs(dir1.x), abs(dir1.y)) * fxaaConsoleEdgeSharpness;
+ FxaaFloat2 dir2 = clamp(dir1.xy / dirAbsMinTimesC, -2.0, 2.0);
+/*--------------------------------------------------------------------------*/
+ FxaaFloat2 dir2x = dir2 * fxaaConsoleRcpFrameOpt2.zw;
+ FxaaFloat4 rgbyN2 = FxaaTexTop(tex, pos.xy - dir2x);
+ FxaaFloat4 rgbyP2 = FxaaTexTop(tex, pos.xy + dir2x);
+/*--------------------------------------------------------------------------*/
+ FxaaFloat4 rgbyA = rgbyN1 + rgbyP1;
+ FxaaFloat4 rgbyB = ((rgbyN2 + rgbyP2) * 0.25) + (rgbyA * 0.25);
+/*--------------------------------------------------------------------------*/
+ float lumaB = FxaaLuma(rgbyB);
+ if((lumaB < lumaMin) || (lumaB > lumaMax)) rgbyB.xyz = rgbyA.xyz * 0.5;
+ return rgbyB;
+}
+/*==========================================================================*/
+
+#define edgeSharpness 3.0
+#define edgeThreshold 0.15
+#define edgeThresholdMin 0.05
+
+void main(){
+ vec2 screenSize05 = 0.5 * u_screenSize2f;
+
+ vec4 posPos;
+ posPos.xy = v_position2f;
+ posPos.zw = v_position2f + u_screenSize2f;
+
+ vec4 rcpFrameOpt;
+ rcpFrameOpt.xy = -screenSize05;
+ rcpFrameOpt.zw = screenSize05;
+
+ output4f = vec4(FxaaPixelShader(v_position2f + screenSize05, posPos, u_screenTexture, rcpFrameOpt, rcpFrameOpt * 4.0, edgeSharpness, edgeThreshold, edgeThresholdMin).rgb, 1.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_distort.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_distort.fsh
new file mode 100644
index 00000000..d2d6922f
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_distort.fsh
@@ -0,0 +1,38 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out vec4 output4f;
+
+uniform sampler2D u_inputTexture;
+
+vec2 distortUV(in vec2 uv, in float k){
+ vec2 t = uv - 0.5;
+ return dot(t, t) * k * t + t + 0.5;
+}
+
+#define DISTORT_AMOUNT -0.05
+
+void main() {
+ output4f = vec4(textureLod(u_inputTexture, distortUV(v_position2f, DISTORT_AMOUNT + 0.01), 0.0).r,
+ textureLod(u_inputTexture, distortUV(v_position2f, DISTORT_AMOUNT), 0.0).ga,
+ textureLod(u_inputTexture, distortUV(v_position2f, DISTORT_AMOUNT - 0.01), 0.0).b).rgab;
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.fsh
new file mode 100644
index 00000000..80a949a1
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.fsh
@@ -0,0 +1,34 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision mediump float;
+precision mediump sampler2D;
+
+layout(location = 0) out vec4 output4f;
+
+in vec2 v_texcoord2f;
+in vec3 v_color3f;
+in float v_occlusion1f;
+
+uniform sampler2D u_flareTexture;
+
+uniform vec3 u_flareColor3f;
+
+void main() {
+ vec3 color3f = vec3(texture(u_flareTexture, v_texcoord2f).r);
+ output4f = vec4(color3f * color3f * v_color3f * v_occlusion1f * u_flareColor3f, 0.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.vsh
new file mode 100644
index 00000000..65584f9d
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.vsh
@@ -0,0 +1,65 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+layout(location = 0) in vec2 a_position2f;
+
+layout(location = 1) in vec2 e_elementOffsetScale;
+layout(location = 2) in vec4 e_elementTexture4f;
+layout(location = 3) in vec3 e_elementColor3f;
+
+out vec2 v_texcoord2f;
+out vec3 v_color3f;
+out float v_occlusion1f;
+
+uniform sampler2D u_exposureValue;
+uniform sampler2D u_sunOcclusionValue;
+
+uniform vec2 u_sunPosition2f;
+uniform float u_aspectRatio1f;
+uniform float u_baseScale1f;
+
+#define FAKE_SIN(valueIn, valueOut)\
+ valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\
+ valueOut = valueOut * valueOut * (3.0 - 2.0 * valueOut) * 2.0 - 1.0;
+
+void main() {
+ v_occlusion1f = max(textureLod(u_sunOcclusionValue, vec2(0.5, 0.5), 0.0).r * 1.5 - 0.5, 0.0);
+ if(v_occlusion1f == 0.0) {
+ gl_Position = vec4(-10.0, -10.0, -10.0, 1.0);
+ return;
+ }
+
+ v_texcoord2f = e_elementTexture4f.xy + (a_position2f * 0.5 + 0.5) * e_elementTexture4f.zw;
+
+ float r = textureLod(u_exposureValue, vec2(0.5, 0.5), 0.0).r * 7.5;
+
+ mat2 rotationMatrix;
+ FAKE_SIN(vec2(r + 1.570795, r), rotationMatrix[0])
+ rotationMatrix[1].x = -rotationMatrix[0].y;
+ rotationMatrix[1].y = rotationMatrix[0].x;
+
+ vec2 transformedVertex = rotationMatrix * (a_position2f * u_baseScale1f * e_elementOffsetScale.y / (4.0 + r * 0.75));
+ transformedVertex.x *= u_aspectRatio1f;
+ transformedVertex += u_sunPosition2f * (1.0 - e_elementOffsetScale.x);
+
+ v_color3f = e_elementColor3f * (0.05 + dot(u_sunPosition2f, u_sunPosition2f));
+
+ gl_Position = vec4(transformedVertex, 0.0, 1.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.fsh
new file mode 100644
index 00000000..2eeeb632
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.fsh
@@ -0,0 +1,34 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision mediump float;
+precision mediump sampler2D;
+
+layout(location = 0) out vec4 output4f;
+
+in vec2 v_texcoord2f;
+in float v_occlusion1f;
+
+uniform sampler2D u_flareTexture;
+
+uniform vec3 u_flareColor3f;
+
+void main() {
+ vec3 color = vec3(texture(u_flareTexture, v_texcoord2f).r);
+ color = length(u_flareColor3f * color) * vec3(0.0, 0.05, 0.3) + u_flareColor3f * color * color * color;
+ output4f = vec4(color * v_occlusion1f, 0.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.vsh
new file mode 100644
index 00000000..2436095a
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.vsh
@@ -0,0 +1,40 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+layout(location = 0) in vec2 a_position2f;
+layout(location = 1) in vec2 a_texcoord2f;
+
+out vec2 v_texcoord2f;
+out float v_occlusion1f;
+
+uniform sampler2D u_sunOcclusionValue;
+
+uniform mat3 u_sunFlareMatrix3f;
+
+void main() {
+ v_occlusion1f = max(textureLod(u_sunOcclusionValue, vec2(0.5, 0.5), 0.0).r * 1.5 - 0.5, 0.0);
+ if(v_occlusion1f == 0.0) {
+ gl_Position = vec4(-10.0, -10.0, -10.0, 1.0);
+ return;
+ }
+ v_texcoord2f = a_texcoord2f;
+ vec3 pos3f = u_sunFlareMatrix3f * vec3(a_position2f, 1.0);
+ gl_Position = vec4(pos3f.x, pos3f.y, 0.0, pos3f.z);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_tonemap.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_tonemap.fsh
new file mode 100644
index 00000000..27798fe6
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_tonemap.fsh
@@ -0,0 +1,55 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out vec4 output4f;
+
+uniform sampler2D u_lightingHDRFramebufferTexture;
+uniform sampler2D u_framebufferLumaAvgInput;
+uniform sampler2D u_ditherTexture;
+uniform vec3 u_exposure3f;
+uniform vec2 u_ditherScale2f;
+
+void main() {
+ float lumaHDR = textureLod(u_framebufferLumaAvgInput, vec2(0.5), 0.0).r;
+ vec3 input3f = textureLod(u_lightingHDRFramebufferTexture, v_position2f, 0.0).rgb;
+
+ input3f /= (0.1 + min(lumaHDR * 6.0, 4.0));
+
+ input3f *= u_exposure3f;
+
+ // ACES, modified to approximate gamma correction
+ const float a = 1.22;
+ const float b = 1.78;
+ const float c = 1.22;
+ const float d = 1.79;
+ const float e = 0.29;
+
+ input3f = clamp((input3f * (a * input3f + b)) / (input3f * (c * input3f + d) + e), 0.0, 1.0);
+
+ // desaturate a bit, makes it look like less of a cartoon
+ float sat = 0.8;
+ float luma = dot(input3f, vec3(0.299, 0.587, 0.114));
+ input3f = (input3f - luma) * sat + luma;
+ input3f += textureLod(u_ditherTexture, v_position2f * u_ditherScale2f, 0.0).r / 255.0;
+
+ output4f = vec4(clamp(input3f, 0.0, 1.0), luma);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/rain.png b/desktopRuntime/resources/assets/eagler/glsl/deferred/rain.png
new file mode 100644
index 00000000..fe8d59c2
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/rain.png differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_control.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_control.fsh
new file mode 100644
index 00000000..e914e716
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_control.fsh
@@ -0,0 +1,194 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out vec4 realisticWaterReflectionOutput4f;
+layout(location = 1) out vec4 realisticWaterHitVectorOutput4f;
+layout(location = 2) out vec4 realisticWaterRefraction4f;
+
+uniform sampler2D u_gbufferColorTexture4f;
+uniform sampler2D u_gbufferDepthTexture;
+uniform sampler2D u_realisticWaterMaskNormal;
+uniform sampler2D u_realisticWaterDepthTexture;
+uniform sampler2D u_lastFrameReflectionInput4f;
+uniform sampler2D u_lastFrameHitVectorInput4f;
+uniform sampler2D u_lastFrameColorTexture;
+uniform sampler2D u_lastFrameDepthTexture;
+
+uniform mat4 u_inverseProjectionMatrix4f;
+uniform mat4 u_inverseViewProjMatrix4f;
+uniform mat4 u_reprojectionMatrix4f;
+uniform mat4 u_lastInverseProjMatrix4f;
+uniform mat4 u_reprojectionInverseViewMatrix4f;
+uniform mat4 u_projectionMatrix4f;
+uniform mat4 u_viewToPreviousProjMatrix4f;
+
+// x = near plane
+// y = far plane
+// z = near plane * 2
+// w = far plane - near plane
+uniform vec4 u_nearFarPlane4f;
+
+uniform vec4 u_pixelAlignment4f;
+
+uniform vec4 u_refractFogColor4f;
+
+#define reprojDepthLimit 0.25
+
+#define GET_LINEAR_DEPTH_FROM_VALUE(depthSample) (u_nearFarPlane4f.z / (u_nearFarPlane4f.y + u_nearFarPlane4f.x + (depthSample * 2.0 - 1.0) * u_nearFarPlane4f.w))
+
+#define CREATE_DEPTH_MATRIX(matrix4fInput) mat4x2(matrix4fInput[0].zw,matrix4fInput[1].zw,matrix4fInput[2].zw,matrix4fInput[3].zw)
+
+void main() {
+ vec2 v_position2f2 = (floor(v_position2f * u_pixelAlignment4f.xy) + 0.25) * (2.0 / u_pixelAlignment4f.zw);
+ realisticWaterReflectionOutput4f = vec4(0.0, 0.0, 0.0, 0.0);
+ realisticWaterHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0);
+ realisticWaterRefraction4f = vec4(0.0, 0.0, 0.0, 0.0);
+ vec4 waterSurfaceNormal4f = textureLod(u_realisticWaterMaskNormal, v_position2f2, 0.0);
+
+ if(waterSurfaceNormal4f.a <= 0.0) {
+ return;
+ }
+
+ float gbufferDepth = textureLod(u_gbufferDepthTexture, v_position2f2, 0.0).r;
+ vec4 gbufferDepthClipSpace4f = vec4(v_position2f2, gbufferDepth, 1.0);
+ gbufferDepthClipSpace4f.xyz *= 2.0;
+ gbufferDepthClipSpace4f.xyz -= 1.0;
+ vec2 gbufferDepthView = CREATE_DEPTH_MATRIX(u_inverseProjectionMatrix4f) * gbufferDepthClipSpace4f;
+ gbufferDepthView.x /= gbufferDepthView.y;
+
+ float waterSurfaceDepth = textureLod(u_realisticWaterDepthTexture, v_position2f2, 0.0).r;
+ vec4 waterSurfaceDepthClipSpace4f = vec4(gbufferDepthClipSpace4f.xy, waterSurfaceDepth * 2.0 - 1.0, 1.0);
+ vec2 waterDepthView = CREATE_DEPTH_MATRIX(u_inverseProjectionMatrix4f) * waterSurfaceDepthClipSpace4f;
+ waterDepthView.x /= waterDepthView.y;
+
+ float fog = clamp(1.25 - 1.0 / exp((waterDepthView.x - gbufferDepthView.x) * 0.05), 0.0, 1.0);
+
+ vec3 refractColor3f = textureLod(u_gbufferColorTexture4f, v_position2f2, 0.0).rgb;
+ refractColor3f *= mix(vec3(1.0), vec3(0.02, 0.025, 0.12), min(fog + 0.1, 1.0));
+ vec3 fogColor3f = u_refractFogColor4f.rgb * (waterSurfaceNormal4f.a * u_refractFogColor4f.a * 0.95 + 0.05);
+ realisticWaterRefraction4f = vec4(mix(refractColor3f, fogColor3f, fog), 1.0);
+
+ vec4 fragPos4f = u_inverseViewProjMatrix4f * waterSurfaceDepthClipSpace4f;
+ fragPos4f.xyz /= fragPos4f.w;
+ fragPos4f.w = 1.0;
+ vec4 reprojPos4f = u_reprojectionMatrix4f * fragPos4f;
+ vec4 reprojClipPos4f = vec4(reprojPos4f.xyz / reprojPos4f.w, 1.0);
+ reprojPos4f = reprojClipPos4f;
+ reprojPos4f.xyz *= 0.5;
+ reprojPos4f.xyz += 0.5;
+ reprojPos4f.xy = (floor(reprojPos4f.xy * u_pixelAlignment4f.zw) + 0.5) * (0.5 / u_pixelAlignment4f.xy);
+ if(reprojPos4f.xy != clamp(reprojPos4f.xy, vec2(0.001), vec2(0.999)) || abs(GET_LINEAR_DEPTH_FROM_VALUE(textureLod(u_lastFrameDepthTexture, reprojPos4f.xy, 0.0).r) - GET_LINEAR_DEPTH_FROM_VALUE(reprojPos4f.z)) > reprojDepthLimit) {
+ realisticWaterHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 50.0);
+ return;
+ }
+
+ vec4 lastFrameHitVector4f = textureLod(u_lastFrameHitVectorInput4f, reprojPos4f.xy, 0.0);
+ if(lastFrameHitVector4f.g <= 0.0) {
+ realisticWaterReflectionOutput4f = textureLod(u_lastFrameReflectionInput4f, reprojPos4f.xy, 0.0);
+ realisticWaterHitVectorOutput4f = vec4(0.0, 0.0, 0.0, lastFrameHitVector4f.a);
+ return;
+ }
+
+ realisticWaterReflectionOutput4f = vec4(0.0, 0.0, 0.0, 1.0);
+
+ lastFrameHitVector4f.g -= 0.004;
+
+ vec4 lastFrameFragPosView4f = u_lastInverseProjMatrix4f * vec4(reprojClipPos4f.xyz, 1.0);
+ lastFrameFragPosView4f.xyz /= lastFrameFragPosView4f.w;
+ lastFrameFragPosView4f.w = 1.0;
+ vec4 lastFrameHitPos4f = vec4(lastFrameFragPosView4f.xyz + lastFrameHitVector4f.xyz, 1.0);
+
+ vec4 thisFrameHitPos4f = u_reprojectionInverseViewMatrix4f * lastFrameHitPos4f;
+ thisFrameHitPos4f.xyz /= thisFrameHitPos4f.w;
+ thisFrameHitPos4f.w = 1.0;
+
+ vec4 thisFrameHitPosProj4f = u_projectionMatrix4f * thisFrameHitPos4f;
+ thisFrameHitPosProj4f.xyz /= thisFrameHitPosProj4f.w;
+ thisFrameHitPosProj4f.w = 1.0;
+ vec3 thisFrameHitPosProjTex3f = thisFrameHitPosProj4f.xyz * 0.5 + 0.5;
+
+ if(thisFrameHitPosProjTex3f.xy != clamp(thisFrameHitPosProjTex3f.xy, vec2(0.001), vec2(0.999))) {
+ return;
+ }
+
+ float fragDepthSample = textureLod(u_gbufferDepthTexture, thisFrameHitPosProjTex3f.xy, 0.0).r * 2.0 - 1.0;
+ vec2 thisFrameHitPosProjDepthPos = CREATE_DEPTH_MATRIX(u_inverseProjectionMatrix4f) * vec4(thisFrameHitPosProj4f.xy, fragDepthSample, 1.0);
+ thisFrameHitPosProjDepthPos.x /= thisFrameHitPosProjDepthPos.y;
+
+ if(thisFrameHitPosProjDepthPos.x - thisFrameHitPos4f.z - 0.125 < 0.0) {
+ return;
+ }
+
+ waterSurfaceNormal4f.xyz *= 2.0;
+ waterSurfaceNormal4f.xyz -= 1.0;
+
+ vec3 lastFrameHitPosNormal3f = textureLod(u_realisticWaterMaskNormal, thisFrameHitPosProjTex3f.xy, 0.0).rgb;
+ lastFrameHitPosNormal3f *= 2.0;
+ lastFrameHitPosNormal3f -= 1.0;
+
+ vec4 fragPosView4f = u_inverseProjectionMatrix4f * waterSurfaceDepthClipSpace4f;
+ fragPosView4f.xyz /= fragPosView4f.w;
+ fragPosView4f.w = 1.0;
+
+ vec3 rayOrigin = fragPosView4f.xyz;
+ vec3 planePos = thisFrameHitPos4f.xyz;
+ vec3 planeNormal = lastFrameHitPosNormal3f;
+
+ vec3 newRayDirection = reflect(normalize(rayOrigin), waterSurfaceNormal4f.xyz);
+
+ float dist = dot(planeNormal, newRayDirection);
+ if(dist > 0.9) {
+ return;
+ }
+
+ dist = dot(planeNormal, planePos - rayOrigin) / dist;
+ if(dist < 0.0) {
+ return;
+ }
+
+ realisticWaterHitVectorOutput4f = vec4(newRayDirection * dist, 1.0);
+ realisticWaterHitVectorOutput4f.y += 0.004;
+
+ thisFrameHitPosProj4f = u_viewToPreviousProjMatrix4f * vec4(rayOrigin + newRayDirection * dist, 1.0);
+ thisFrameHitPosProj4f.xyz /= thisFrameHitPosProj4f.w;
+ thisFrameHitPosProj4f.w = 1.0;
+ thisFrameHitPosProjTex3f = thisFrameHitPosProj4f.xyz * 0.5 + 0.5;
+
+ if(thisFrameHitPosProjTex3f.xy != clamp(thisFrameHitPosProjTex3f.xy, vec2(0.001), vec2(0.999))) {
+ return;
+ }
+
+ fragDepthSample = textureLod(u_lastFrameDepthTexture, thisFrameHitPosProjTex3f.xy, 0.0).r * 2.0 - 1.0;
+
+ vec2 thisFrameHitPosProjPos = CREATE_DEPTH_MATRIX(u_lastInverseProjMatrix4f) * thisFrameHitPosProj4f;
+ thisFrameHitPosProjPos.x /= thisFrameHitPosProjPos.y;
+
+ thisFrameHitPosProjDepthPos = CREATE_DEPTH_MATRIX(u_lastInverseProjMatrix4f) * vec4(thisFrameHitPosProj4f.xy, fragDepthSample, 1.0);
+ thisFrameHitPosProjDepthPos.x /= thisFrameHitPosProjDepthPos.y;
+
+ if(thisFrameHitPosProjDepthPos.x - thisFrameHitPosProjPos.x - 0.125 < 0.0) {
+ realisticWaterHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0);
+ return;
+ }
+
+ realisticWaterReflectionOutput4f = vec4(textureLod(u_lastFrameColorTexture, thisFrameHitPosProjTex3f.xy, 0.0).rgb, 0.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.fsh
new file mode 100644
index 00000000..bf50e7a5
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.fsh
@@ -0,0 +1,40 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+layout(location = 0) out vec4 output4f;
+
+#ifdef COMPILE_NORMAL_ATTRIB
+in vec3 v_normal3f;
+#endif
+
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+in vec2 v_lightmap2f;
+#else
+uniform vec2 u_textureCoords02;
+#endif
+
+void main() {
+#ifdef COMPILE_NORMAL_ATTRIB
+ output4f = vec4(v_normal3f * 0.5 + 0.5,
+#else
+ output4f = vec4(0.0, 1.0, 0.0,
+#endif
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+ v_lightmap2f.y * v_lightmap2f.y * 0.99 + 0.01);
+#else
+ u_textureCoords02.y * u_textureCoords02.y * 0.99 + 0.01);
+#endif
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.vsh
new file mode 100644
index 00000000..ffb94276
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.vsh
@@ -0,0 +1,44 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+in vec3 a_position3f;
+
+#ifdef COMPILE_NORMAL_ATTRIB
+in vec4 a_normal4f;
+out vec3 v_normal3f;
+#endif
+
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+in vec2 a_lightmap2f;
+out vec2 v_lightmap2f;
+uniform mat4 u_textureMat4f02;
+#endif
+
+uniform mat4 u_modelviewMat4f;
+uniform mat4 u_modelviewProjMat4f;
+
+#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
+
+void main() {
+#ifdef COMPILE_NORMAL_ATTRIB
+ v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz);
+#endif
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+ vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0);
+ v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z;
+#endif
+ gl_Position = u_modelviewProjMat4f * vec4(a_position3f, 1.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.bmp
new file mode 100644
index 00000000..324756b7
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.bmp
@@ -0,0 +1 @@
+_[_]a_gaqa|b†cŽf“j”p’w‡†}q—ežZ¡S PšQ‘U…\xcngihggjfpexf‚iŒn•v››•™Š¡~¦s¥lŸi•kˆq||sˆo“mšmœp™u’{‡zˆmŒb^Š^„\|[tZmYfYbY_[_]a_gajtpnslwo|t€z„‡‚‡‚„€z{qvhr_qVqQrNtPvTw[wdukqpout~|ˆ†’™—œ™š“‘Š‡€z{uxrvpuptqrrnqgobjbdfan`vaf†nŠwŠ„‰{Žq‘i‘cŽa‰aƒe{jtpnslwomkonqpvrqˆo‘n–m™o˜r”wŽ~††|o™d¡[¥V¥U Y—a‹jsvwpwmtmqomtk{k‚nˆt~‹ˆ˜~£t©jªd¥b›elwwƒqn—mœoœs˜x†„|ˆs‰p†on|lvkrjoimjmkonqpvrkzruvtzx„‡ˆ‹‘‹’ˆ„‰~€xuskqbq[sXuXw\yczjyqvutyxŠ‡’˜”›—š––‘‡‡~yywvwuzv|w~yz|yuvnongqaw]~^…b‹is‹~„‡yn‘e’_^`‡e€kzruvtzxyz|}€€„€‹~’y˜u›q›o—p‘rˆx€€vŠj•`ŸZ¥X§Z¤ak“v‰€€„yƒtqzpurquoyp}v€€{›r§i¯a°\¬\£`—hŠs€€yŒt–qœpŸržu™y’}‰‚€€}z~w|uztytxvyyz|}€€„€sƒ{€€€ƒ„ˆ‹“’š”ž“ž‘›Œ”†Š€€{uylyezb}bf‚mƒuƒ|€€~ƒ€‰…‹•™“™“–‘‰‰€€wxsuttwu|y}†ˆƒ†ƒ€€ywwnye}_‚]‡^‹d‹mˆw€€t‡jŒb^_cŒj‡sƒ{€€€ƒ„ƒ†ˆˆŒŠ‘Š–†š€œz›t—om‡n}styk„aZœV¥W©\ªe¥qž}•†ŒŠ…‰~…yuystsrtsvyw‚vržjªb²[´W±X©\ep†|€ˆy’ušržqŸrs˜u’wv‹u‹sŠrˆs‡u†y…~…ƒ†ˆˆŒŠ‘Š€ŠŽŽ’’—˜›žŸ£ ¦ ¥ ˜™“…ˆ{‡r‡mˆjŠlqx€ˆ‹Œˆ‰”Œ˜Ž›œ™Ž“‰‹wwoplnnpstzz‚ˆ‡ŒŒŒŽ†Š‚}w}ld‚_„^…a„h€pwym€e‡a`‘d“k“u’€ŠŽŽ’’”‘™’œŸ‹ …ž}™v‘r†ozoosfy_ƒYTœS§V®]±g¯rª~¢‡š‹’‰Š„ƒ~}xysvrustytƒsožh©a±[³X°X¨\c‘mˆw‚|Šw’t—ršršr˜s–t“t“r”q”r”t“y“~’…‘”‘™’œ‘Ÿ›ž ž£ ¦¤©§«©¬©«¦© ¤™ ›‡˜~—w˜s™r›tœy€œ‰™‘•–‘™žŽ¡¢‹ ˆ›„’}‡u{kqdjcifllsu|~…‡Ž”–‹“…Š~€sjdb}dziupmwfa‡aŽe•mšx„ž‘Ÿ›ž ž£ ”˜œ–¢•¦“§¥†Ÿ–yŠu|sntbw[|V…R‘PžQªV³]·g¸r´}®„¦‡ž„•Œy…so{nxqwwvuŽq›k¦e¬`®]ª]¢_˜dk†rz|y‡vŒut’t”u”v•u—tšsœtžwž|žƒœ‹š”˜œ–¢•¦“¡¬«¬°¬±¬³¬´¬´ª´§³¢°›”ª§†¥€¦{¨xªw«y«©†¦¡—›œ•¡‘¦Œ©ˆ©ƒ¦}žw“p†hx`lZfYf]kdsm}xˆ‚“ŠšŽ™ˆ…„‚xo|iyguipmjtdz__‰c’k›w¢…§“ª¡¬«¬°¬±¬–Ÿ˜§•«‘«Œ¦…ž’{ƒxsxezY}SPˆO“P S¬Xµ`»h½q»y¶®€¦}œw“q‹l…i€j}m|u{y‹v—r m¥i¦f¢eše‘g‡ko~s{vyzx~x‚x†y‹zz“z˜xx¢x¥z§§…¥¢–Ÿ˜§•«‘¶¶¶ºµº²º¯¹ª¸¥¶Ÿ´™³“±°ˆ¯„°€²}µ{·{¸}·‚³ˆ¦˜žŸ—¥«‡¯€°y¬r£k–d‡^xWkReReUj\sfq‹|•…‹ ›Š‘‡†ƒ{~synsmmogtbz]\…`h–t ‚¨‘¯ ³¶¶¶ºµº²•Ÿž˜§’¬«‡¥‚›~Ž{~{n}_€TƒP†PŒR–U¡Y¬^µd¼j¾p½v¸y±y¨uŸo–ie‰c…d‚ir}ˆ}“zšwžtq˜o‘nˆm€m{mzmzmzmzo{s}x~~†€Ž€•~œ}¤|ª|®„¬Œ¦•Ÿž˜§’¬´º»º¾·¼³º¬·¤´›±“°¯‡¯ƒ¯±´€¹~¾}Á}Á~¿‚¹‡°Ž§–”¦Š®€´wµn±g¨a›\‹WzRmOfNfQkWu_€iŒt–~‡ŸŠšŠˆ…„|~uwrpsivb{][…]‰d‘oš}£Œ¬›³©¸´º»º¾·¼³Ÿ™•¢¨†¨€¢|˜zŠz{}k€^…U‰S‹VZ–^ cªg²k¸nºq¹sµt®s¥nœg”aŽ^Š]‡`†f†o†z…†„‚”—•}{ˆx€uyqvnwjye{a}ac‚hƒq…{†††„™£~¬}±}³°‡©Ÿ™•¢¨†µ¸¹·º³·¬³£®˜©¦„¤~¤z¦y©z}³»Á~Æ}Æ~»ƒ°‰¤™˜Ž£‚wµm¹e¶_®[¡XVSpQiOhPmTvZcŒm•w›œ‡–Š‹‰…zuwtovg{`\‡\Šak“x›†¤”¬¡²·µ¸¹·º³·¬†ž‘š†¡¢yv”vˆxz|l‚aˆZ[Ž`f•ko¥r¬t°t²s±r¬q¥oœi•bŽ\ŠX‡X‡\ˆd‰n‹yŠ„‰Œ‰Š‘ŠŽ‰‰†ƒz}twsqvhy_}X€TƒU†Zˆc‰pŠ~Š‰ˆ•„¡¬{³yµz²ª†ž‘š†¡°±±®¯ª«¡¥•Ÿˆ™|•s”n•m™ožt¥{·ÀÅ}Æ|Â|¹~¬‚žˆ’‘†yªnµd»]ºZ³X§Y–Z„ZuWmUlTpUxX^Šg’p—z—ƒˆ„‰{†u€sytqxi~c…`‹bju“‚š¢›¨¤«°°±±®¯ª«¡|œ…Ž˜xšr—pp†t{zp‚hˆdgnu‘{—~€¢¦|§x¥t q™ng‰_„Y‚VVƒ[†c‰nŒyŒƒ‹‹ŽŽ’‹’…‘~w†s~suwj{]RƒK†I‰NŠX‹f‹vŒƒŠ„Ÿ}«w´s·r³uª|œ…Ž˜x¦¥£¢ ››‘”„Œv…kc`ƒb‰hp˜y¢¯¹€Á}Âz¾xµw§z—Š‰}—p¦e³]¼Y½X¸Z¬^œbŠd{cr_p[sYyY\‰ck’u€ˆ‡}‰uˆpƒo|rtwmh†gŒkt€‘Œ––œŸ¡¤¥¦¦¦¥£¢ ››‘qœzŒ†~t“n’kŽl‡pww~q…p‰t‰|ˆ„ŠŠŽ“Ž—‹š†š€˜z“v‹qƒj}ay[xWyX|\e…oˆ{‰…‰Œ’Ž–‹˜…˜•yŽu…wz{m€]ƒO‡F‰CŠGŠQ‰`‰p‰†€x«pµk¸i´kªqœzŒ†~t™˜““Œ‰tyfr\nVnVqZxdo‹{–‚¤„±‚º~¼y¹u¯s¡t‘xƒ‚v‘j¢`±Z¼X¿[»`°g nŽrpvkseu`z]€^‡bŒiŽs‹~‚‡w‹oŠj‡jmztt{pƒpˆv‰€ˆ‹‹•œ“ —¡™žš™˜““Œ‰jŸtŽ€€‰uŽnjj‰lƒq~wz}z€€€ˆ~‘€—„šˆšŒ—Ž‘ŽŠŒ„‡€€{wrqinbm^n]rawi|t€€Š€†””“‘˜Œš†˜“~‹€€„q‡`‰QŠG‰D‡G…Q‚`€q€€}ŽwŸo®g¸c»a·djŸtŽ€€‰uŒ…‡€€zurhi\cS_P`RdZleus€€Œ‡›ˆ©†³·{µu¬ržrŽv€€sh¡_±\»\¿a»i±r¡{€€~vxspuizd€c†eŠkŒt‰€€‰tŽkŽf‹e‡hm|ty{y€€Š~“›„Ÿˆ ŒœŽ–ŽŒ…‡€€zud¤n•z‡…|‹sŽlihŠj†m„p…rŠq“o›r w¤|¤ …›†”…Ž€‰y„q|ksgkfggfjjnqs{v†vx–~™†™—–“›Žœ‰˜†‘ˆ‡‹yhŒY‰N…J€LzUucqrq€oi b¯]¹Y¾Y»]²d¤n•z‡…|€„w€qyloed^ZYTWSYW^`fnp|y‰…”‘¢Ž«‰°‚®|¦wšv‹y}‚q‘g¡`°^¹`¼g¸p{ž„‰~‡vszurzm€k…l‰qŠy‡„~r’h“b’_Ž`‰d…iƒo„sŠs“sšužzŸ›ƒ•…‹†€„w€qylo]«gs~„‡yp‘i’e’c‘b‘b’b–`_£b¨iªp©w¦} ™“~Žw‰o‚izesdpephslzp‚sŒs”t™{›„›™˜•ž¡Œ Š›‹’…Œtˆe‚Y{SsSkYecap`}_Š[›V«Q·O½P½U¶]«gs~„p€f}`w]oXfU^S[S\Wb]lfzo‰w•œŽ™›¡•¤Ž¢‡›~‚€v‡l“d¡_¬^³bµi°s¦~™‡ŠŒ}‹v†u€w{|wu…vˆz‡‚Šy’m—b™[˜W–V“Y‘^c‘h–iœj mŸs›x”}‰€}p€f}`w]oV°a¤l˜xŒƒ€t”j™b›]œYœVT Q¥P©U¬]g«q§y¡~š”xŠpƒj~gyfwgyj|nƒrŠt‘t–u™{š…™—š“¢Ž§‹¨‰¥‰žŠ‘‡€rxeo]eZ]\VcRmRwRƒO“K£H±G¹I¼N¸V°a¤l˜xŒa€W}RyQsPlPgQfUh[obzj‡r•y¡€¨ˆª§•¢—›””ƒˆxˆnŒf•`ž]¦^ªb©j¥sœ}‘††‹|‹xˆx…{‚€€„††„ƒ‰}s–gš\œSNLœN›S›Y_¡b¤d£ižo•uŠ{|~n€a€W}RyQsR³\©gžt’…x˜lŸa¤Y¦S¦N¦J¦G¨FªL«V«a¨m¤wž˜ƒ‘‚Œ|‡tƒnk}j~l€o…sŠvy”x–x—~–‡”’‘œ¥Š«‡®…¬…¦„›w~mqcgYaQ`KdHiIpJ{HŠEšC¨C³E¸J¸R³\©gžt’UL€I}JyLuPrUr\uc|j†q’xŸ|©°„³‡²‰®ˆ¨„ ™w’og‘b•^š\œ^b›i–rz‰‚†|ˆ{ˆ}ˆˆ…ˆˆ‰‰‹†x”n˜b›VLŸF¡D¢F£K¤S¥Z¨_¨c£i™pv{paUL€I}JyQ²Z«e¡r•ˆzœm¥b«YQ¬KªG¨C§C§I¦T¥`¢mžy™“††‡€‚ys~qp‚r†u‹y}”•~”}’‚‰Œ“‰œ†¥ƒ¬¯€¯«}¢v•m‡c{XpPiIeEeDgFkHsGE‘DŸD«E²JµQ²Z«e¡r•M„GƒF‚IOV}^~go‡v{™¤€€´€¸¹}·z²v«q£l›g•c“`”^“^‘`ŽcŠi‡oƒv|}€|ƒ~†ƒŠ‰’”ˆ•€–u–j—^™R›Gž@¡>¤@§F¨OªYª`§fžm’tƒzte‚W„M„GƒF‚IS®[©e s•ƒˆ“{¡o«d°[±T¯OªK¥G¢GŸMW›d™q–}’…Š‡Š…}}{x}v€v…xŠ|€“ƒ•…“„‚Š…†‹ƒ’€š~¢|¨{¬{zªv£n™dŽ[‚RxKpFkEhFgJiMnMzLˆJ–I¢J«M¯S®[©e s•K‡H‡J‡OˆX‡b‡lˆv‹}ƒ•…œ†¤„¬³|¸w»r»n¸j²g©d c™b”aaŠb„c~fyjvnusvwyz}~‚„Š‹‘‘–––™“›Œš˜u•i“]”P–Eš>ž;¢>¦E¨P©[¨e¡l–tˆ{x€i„\†R‡K‡H‡J‡OˆY§`£i›w‡…˜z¥p¯h³a²\X¥UžQ˜Q”V’`lŽwŒ‚ŠŠ‡Ž‚Ž|ˆxw|zz€{†}Œ‘…”‰”Šˆˆ†‚‡|Šyw•v›v¡w¥w¦u¤pŸh˜_V‡OKwIqKmOjTiXmXvW‚USšS¢T§Y§`£i›wO‰P‰TŠ[eŽqŽ}†Œ’•™ŒŸ‡¥€¬x³p¸i»d¹a´`a£c™e’fŠh€iujmkhlfnhpnsvv}{†ƒ‘Œš”Ÿ›Ÿž›Ÿ‘…˜w’k_ŒRŽF’>—<œ? G£S¤` l˜u‹}|ƒnˆaŠW‹QŠO‰P‰TŠ[aŸg›o“}‰€wªq²l´h°f¨ežc”`Œ_ˆd…l„u„„ˆ„Ž‚y‰t‚u~y|}‡ƒ‘ˆ“‹‘ŒŠŠ€‡y†s‡p‰op‘r–t™v›tšn—f“]ŽV‰QƒO}QxUt[pcmgnhufc‰`“^š^žaŸg›o“}‰W‰\ˆb‹jv‘ƒ‘Ž‘–šš–’•ˆš¡tªj±b¶]·[³]¬a¢f—ko‚qurhr^rXqXq^qgrst~zŠƒ—Ž¡—§ž¨¡£¡™œ‹•|Œp†dƒV…JˆB?“B˜K›X›g–uŒ~‡pŒdŽ[UT‹W‰\ˆb‹jj•o‘w‰…€”y£t®q´p³pq¢s•s‰q€o{szxz|†~Œy†uu{zz€{‡~‚‘†‘‰Š„ˆy„ql€jkƒn†r‰vŒxwqŒiŠa‰[‡W…Xƒ[b|jxruwtxyu€q‡mŽj“i–j•o‘w‰…€a†j„rˆ{Œ‡“œŽ¢Œ£‰ ˆ™‡ˆ†Œ{”pže§]®Z°Z®^¨ežm’u‡yz|j}\}Q{LyNwVubuqw}‡œ’¨›¯¡°£«¡¡š’‘ƒ†w~kz]{P~GƒD‰GŽP‘^nŠ|‡rŽf’\“W‘WZ‰a†j„rˆ{Œswˆ€€Œw›r¨p±p´r±v¨{›€€w~ss‚u†zŠƒ†‹…‡€€zx{t~s„t‰vŽz~‰‚€€u{mxivivlwqyw|}~€€€yq€i‚d„a†b‡g†n…wƒ€€„~…‚…}ŠyŽusswˆ€€Œwk~w|€€ˆ…“‡ž‡¥…¨‚¦ }–{Š|€€u‡j’aœ[¤Y§\¦c m—w‹€€„r‡b‰TˆI†E„HR`~p€€†Žž˜« ´¤¶¤²Ÿ¨—š‹Œ€€wssesWvM{I€K…T‡a†q€€uŠi‘_“Y“WZ‰aƒk~w|€€ˆ…|‰€‚ˆz”s¡o¬o³q´v¯|¥ƒ˜ˆ‰‹|‰t‡q†r‡vˆ|ˆ‚ˆˆ…ŒŒ{ˆsƒl‚i„g‡i‹lpuŠx„zzwpskojmlkrkzlƒnŠoqŽp‡qtwxp}mƒm‡qŠwŒ‹‡‰Œ‡Œˆ‰‹…~||‰€‚ˆz”ssx~u‡x}˜~ }¥{¥w¡s˜pŒn€nurkza…ZW™Yž^h™t…‡yŒl\’O’E‘BEŽOŒ]Œn}’‹š›¡ª¦´¨¸¥¶ž¯“£‡–{‹rmpmapUtOyO~Ua€oz}pˆfŽ^YZŠ_„g}sx~u‡x}‡†Š€‘yšs¥qs²w±}¬„¢Š–ˆ‘}v‹s‰t‡x…~‚„~Šztmeˆ^‡[ˆ\ˆ_‰c‰i†o‚t{wrukpikkgqc{a…__™_ž``—aŽf…l~ty|wƒyˆ~Œ„ŽŠŽ‹ŒŽ‹ˆ†Ž…‹‡†Š€‘yšswvt‰vz—ywŸrl—gb€_s_hb^kWwR„QŽU•]–i“u‹€ŠuŽh“Y–K™Bš?›CšLšYšh›vžƒ¤“¨£«¯ª¶¥¸´‘„£w™nŽi~hnj`nWtTyV}_}jywp‚hˆb‹_‹`‡e‚m|wvt‰vz†”€˜{Ÿw¦w«{€¬†§ŒŸ‘””‰•€‘{Œyˆyƒ|€z…tŠng‘_XŒRŠP‰RˆW†^ƒf~nytrxjwfrglnex_„Y‘UžS§Q¬Q«Q¤T›Y’a‰jƒs€|€ƒ‚‰…ŒŠŒŒŽŽŽŽŽŽŽŠ†”€˜{Ÿwzy‚w‡yz’x•s–k“c‹\VtRgR\US_MlJzL†QŽ[‘gtˆ€~ˆsŒf’W—KœB ?£B¥J¥U¦c¦n§zª‰˜®¦«°¥µ›¶³‚u¦lœfŒd{eki_oYvX{\}e{puzn‚j†h‡h†l‚r~zy‚w‡yz˜†š‚ ~£€¥„¦Š¤ “š–“—Œ•†Š„~~wq„kˆdŒ]ŽVŽNIŒIŠL†R‚[}ewopwj|d|cwhorf^ŽVœO©J²H¶G´HK¤Q›Y’b‹l†u„}„ƒ…‡‡‰ˆ‰Š‹ŒŒŽŒ’‹•‰˜†š‚ ~{€|ƒ}†}ŠyŒq‹gˆ]€TvMjI^HTLLVGeEtH‚O‹YeŽrˆ}~ƒs‡fX•LœD£A¨C¬IS^¬g¬p~®Œšª¦£¯š´µ‚´u°k§d˜a†auegk^sYzZ`j{tw|t‚r†r†t…w‚{€|ƒ}†}œ†ž…žƒž…‰œ›”™˜–›“š˜“‹Œˆ……~ƒwpj‚d„^†X‰QŒKFŒF‰K…R\xgqrj{da‚c}ltxj‡`—V¥M°G·DºC·E°I§OŸV–^gŠo†v„|ƒ‚„ƒ……‡ˆ‰ŒŠŠ•‰™ˆœ†ž…žƒž…|…}ƒ~ƒ‚{‚q‚e~ZxPoIeEZEQJITEcDtG‚NŒX‘doŠy€}thˆ[PšH¢E©G®L°T°\b«iªsª€©¦š ¥™Ž²ƒ´w´kcŸ^^~anhcq\zZ^„f‚py€~†}‰|‰|ˆ|…}ƒ~ƒ‚†ž‡œˆ˜‹“’˜Œ‹ Š ‹Œ—Ž‡Šw†p‚je~`~\€XƒS‡M‹I‹JˆNƒV}`ukmvg€b†aˆgƒrz€odžYªP³J¸F¸F³I¬M¥RX–^e‹k‡pƒv€z}~|~ƒƒ…‰†‡•‡š††ž‡œˆ˜‹}Œz‰x‰x…y}zrzfxZsQmJeG\HSMLXHhHxK‡Q‘Z–d•mŽuƒxwzk_‹U•OŸL§NR¯X®^©a¥e£l£u¢ œ˜—¢ª…¯y±mc¡]“[ƒ^tehn`y\ƒ^ˆe‰nŠxŠ‰ˆ‡Œ„ŽŽ}Œz‰x‰x…›…›‡–Š‡˜ }¥{§}¥Ÿ†–Œ‹xŒq‡k‚f}cyax_y]}ZƒVˆRŠRˆVƒ]|ftpm{g„dŠeŒm‡z‰t—i£_¬W²Q³O°OªS£W\—_’cŽfŠj†m‚q~uyyw}y€~‚…ƒŒ„“„˜„›…›‡–Š‘yŽuŒsˆtusugu\sToOjNcQ[VTbPqO‚RW™^f›m“rˆt{vo|d†\‘W›U¢V§Z©_¦c dšd˜g˜m˜u˜—Š””ž‡¥|©o§dž\’Y…Zxalkdx`ƒa‹gp’z“„“‹‘Œ“†“‘yŽuŒsˆ—ƒ•†ŽŠ„’zœr¥mªl¬o¨v ~•‡‰Ž}tŒm†hfyeterfsgwfc†_‰^ˆ`„e}mvup~k†i‹mŒv‰ƒ‘xžn§f¬_[©[£]œb–f‘iŽkŒkŠlˆl†m‚o~rxwt|uz€‰•—ƒ•†ŽŠ„’ƒ“ztq‡r~ssuiw`wZvXrYm]fd_o[~ZŽ[›_£d¥j¡p˜sŒs~tsziƒc_–_a e iœk”kh‹gŒiŽms’{’…‰—~œqœd—[ŽV„Wz]qgjtgg‹m‘u–šˆ›˜•“—‹–ƒ“ztq‡’~Ž†‡z‘nœd¦^¬^®bªj¢u–€ˆ‰|‹sˆl‚i{hujpmnqottu}r†mŠkŠl†nr{xu~q„qˆv‰€†€™x£q¨k©g¦fžh•lr‡v„x„x„v†t†r†q„q€syxt~u€y€†}‘}’~Ž†‡z‘ˆ’~w‰tƒt{vryi|c~`a~ezktsm~hŒg›g¦j¬m¬r¦uœxŽv€vu{mƒh‹f’g—k™o—t’vˆtok€h„hˆjowŽŠ‡€rdŒY‡SRzWtbpon}p‡u}—†œŽŸ”ž˜™˜‘–ˆ’~w‰tƒw‰z€€sŠe–[¢TªS®W¬`¤k™wŒ€€‚v€q|nvoqrnwm|o€v‚€€‰{wŽt‹s‡tv}yy|z€€Š}–y t¦p¨m¦mžo”s‰y€€z„z†{„‚ƒ~‡{‰y‰x†z€€z…y†|…‚‡~‹zŽxw‰z€€sŠ‹‡„€€|{|sl‚g…dˆeŠh‰o†w€€yŠt˜s¥s®u²x°|©œŽ€€uƒnˆjŽj“n•s•y‘Š‚€€xyvrxl}hƒgˆhŒms‰z€€q‚c‚V€O}MzQwZvgwuz€€ˆ‡’Žš”Ÿ˜ ™ž–˜‘‹‡„€€|{Œr‡s~xq‚dXœQ¦N«Q«X¦al’t†w~vysxpzn}nƒp‰uŽ}‡Žˆ•ƒ–~“yvŠt…ssr†rpšm¢k¦j¥l o—t‹{‚u‰ppsŽyŒ‰††‹„„Œ††Š€Ž‚‹††ŠzŽuŒr‡s~xq‚™ƒ’{‹v‡r‡mˆh‹eŽei‘oxŽ‚ˆ‹‚•~¡|¬}³€µƒ±ˆ§‹˜ˆŒz‹pŽj’i–k˜q˜y•ˆ‡Œ}Šuƒszuqyid„bˆc‰g…l}qot`uTvLvIvLwSy_|kt‡}ˆ““—›˜ –¡’ž‹™ƒ’{‹v‡rrŠrvuhŠ]–TŸP¥P§T¤[žb–hk†kƒjƒk†l‹p‘u˜}‡Ÿ’ž›™Ÿ’ ‹ƒ˜|’uŒo‡k†gŠe‘c™bŸb¡eŸj˜pŽytŠje“e•h”o“w‘†‹Œ‘ˆ•„—„–†‘ŠŠŽƒ|‘vrŠrvu ~›w•soŽlŽiŽhj’p“x“‚‘–ˆ …«„³…¸ˆ¶®‘¢•‘˜€˜q˜h›ežf k¡sŸ}š‡“‰“‘w‰t~trwg{_Z‚XƒX€[y`mc`fUiMlJoKsPwX}b‚iˆrŽ}’Š•••’¢Œ£… ~›w•so”vu‡w|~p‡e\˜VT UŸXœ]—`‘aaŒcŽe’j˜qŸ{¥†ª’¬¥¨©¡©˜¦Ž¡„™y’o‹fˆ_ŠZX•Y™[ša—ir…|y†lb“\•Z—]—c—l—u—~˜…˜‰š‡„†š‰•ŽŽ’†•–y”vu‡w|~¦{£vs–q’omnqŽw€‹–Ž ‹©Š³Š¹‹º¶“«—œœ‰Ÿw¡i¢a¦_©b«jªt§¡‹˜“Ž˜„•|ŒwuqudwYyQ{L{KzMuPlTcXZ]SbPgOmRtVz\€a†gŠsŽ€Ž™Œ¡‡¥¦{£vs–q™{•zŽ{„z„pŠha“]–[—Z—[•[“Z’Z”\—aœh¢s©®³š¶¥¶³±±¤®š¨Ÿ€–rŽfˆ[‡TŠRŽS‘W‘_Žhˆts‰g‘]”V”S•T–X˜`šjœt}Ÿƒ ƒ¡ƒŸ†›Œ–‘–‰™ƒš~™{•zŽ{„¨{¦x w˜v‘t‹t‡t…x†~ˆ†Š›¥Œ¯Œ·¼Ž»‘´•¨š–žƒ£p¦a©[[±`³i²u®§ž•”™Š–‚‹|}wnt_sSsJsDtBtCrFmIhNbT^Z[aYhXoYvZ|[`„k†x‡†‡”…ž‚¥~¨{¦x w˜v™€“€Œ€„|ƒu…n‡iŠdŒa^‘[“X•W™X^£g©s®³‘¶Ÿ¹ªº°¸´´µ²£¬–£ˆ™yj‡]ƒT„P†QˆV‰_‡j‚v{q‹g‘\‘TNM’O•U™^œi s¢|¢¡†™“”Ž™Š†žƒ™€“€Œ€§{¦{ |–}Œ|ƒ{}{z}z‚}‰’†œŠ§‹°Œ¸¼º‘²”¤˜’œ~¡k¦]«X±Y¶`¹j¸v³ƒ¬Ž¢•˜˜“ˆˆyxjr[nOmFmAn?p@pBpEoJnPlVj^gedl`r]wZ{]}e~r€~Ž~š}£|§{¦{ |–}ž‡›†–…‘‚Œ~‡{‚z|zw|q€k…e‹_Z•V›W [¦dªq®€±³Ÿµ©¶¯·´¶µ²³ª®Ÿ¥‘›‚r…cX~S~T€Ybmxzƒs‹j`V‰N‰IŒIM•Uš_žk¡u¡{—†’ŽŽ•‹›ˆŸ‡ ‡ž‡›†–…‘‚£|¢›‚ƒƒ‚xp€llƒp‰w™…£‰‹µŒ¹·Ž°¢’–}›j¡]©Y±[·bºmºy¶„®Ž¥“›”“Ž‹‚‚txepXjNgFgCiBmCqEuHyL|Q}X|^yesjlpds^u]vdvov|w‰w•xžz£|¢›‚ƒ‹š‹–ˆ“‚‘{tnŠl…nrwzoƒfŒ_“YšW Z¥b¨m©|ªŒªšª£¬©°®²±±±®¦¥š›Œ|„m{ax[x[z_|g~q~{}„xŠqŒg‡[‚QI„F‰GM•Wšdœoœw–~†‰†—…œ…Ÿ‡Ÿ‰‹š‹–ˆ“‚}œ‚”‡‡‰xˆk…aƒ]]‚c…mŠw’œ†§‰¯‰´‰´ˆˆ¡Š‘Œ‘n™b£^`´h¹q¹|µ†®¤‘›”ˆŒ|‚nwamWfObKcJfKlNsP{Q„U‹Y^cŒh„lzooqerbrfqnpyp…rt˜x}œ‚”‡‡‰™Œ–’Š‘“v•k–c•_’`Œf„oz{p‡f^˜YY¡_¡h uŸ„‘œ™žŸ£¥©ª¬®ªª¤¢›—ˆ„yzltesdvgzn}v€~…‰z‰p‚c{VyL|FEˆJS”`–m”v~…ˆ}—~œ€„œ‰™Œ–’Š‘–|”ƒ‹‰}ŒmŠ^‡TƒOQ}X~drˆ}’„‡¨‡®…°‚¬€¢€”‚„†uj›f¦i¯o´xµ±ˆª¡Ž—‹‘‚Švjs_iWbS^R`TeXm]w_‚`bše¡h£lŸn–q‰r{roripjnplxl‚n‹q’v–|”ƒ‹‰}Œ“ŠŽ‹‹‡‹}p•c™Y›TšU–\g…uy‚mc•[™Y›[™b–m’yŽ…ŒŒŽ“•šž¡¦¦«¦¬£¨œŸ‘“……zxtpsmvpzu€|„‚‡‡‡‰ƒ‡ykv]tPwH|F‚J‰SŽ`ny…‚{‹v’t˜všzš€—…“ŠŽ‹‹‡‹}y€„‡uŠd‰T„JFzIwRv_xo~|‡„”† …¨‚~«z¥xšxŒ|~…t’qžs¨y€®†«Œ£ŽšˆŠƒsyhm_d[]Y\\^aehpm{p‰q™r¦t¯v²w¯x¥y–x†wxvqsppsmykkˆnsy€„‡uŠ‰ƒƒ„€€u‡gZ–Q›MœOšV”b‹q€€s‹f’]•W•W’[d†ny~€€†ˆ“˜ž ¦£ª£©ž£•™ŠŒ€€ywwtzv{„€‰†ŠŒ‰ˆ€€qwbtVvNzK€O†YŠfŒt‰€€ˆuo–n™o™s–y~‰ƒƒ„€€uŒs‰y€€pƒ_Q}GxDsHoRnapqv€€‡Œ‰š‡¥‚«}w©s¡s•v‰€€Œ|˜~¢‚¦ˆ§¢‘š’†Š€€ytpjfc^`YaYf^mgvs}€€Ž€Ÿ®‚¸ƒ»„¸„®„ŸƒŽ€€w|uwwr|m‚k‡k‹nŒs‰y€€pƒ}y}vyxobˆW‘O˜LœOœX˜e‘t†‚yŒl’a”Z“WY†_~hwqswt}|‡ˆ‘”šžŸ¥¡¦ž¢—šŽ„ƒ~z|w~x‚|‡‚Œ‡Ž‹ŽŠŠ‚tzfw[yU}TƒYˆcŒqŒ€‰‹€“v™pmœn™q’uŠy}y}vyxo‰j„n{tmw]vOsGoDkIiTjdmtt‚}ŠŠ‹˜‰£ƒ«}®v¬q¥p›r{ˆ‡…’‡™‹œ•–˜™‚–xq…kycp\iWgViYoawl€zˆ‡‹•Œ¥³½‘À’¼“²“¤’”†~Š{ƒ|{tƒn‡j‰i‰j„n{tmw||t|qwtn|c†Z‘TšS W¡`Ÿm™{ˆ„‘w–l–d“_Œ_‚bxhooitizp‚|Œ‰””™œ› šž”˜„ƒz}vv‚y†~‰ƒ‹ˆ‹Šˆ‰€‚u|j{a}]‚_ˆeq‘Ž™… {¤u¥r¢r›t’w‡z||t|qwtn‚d|eshfkXjLhEfDeIfTicosw€€‡Œ‰˜†¢ª{¬tªo¥lœm“tŒ~Š‡’˜‡ }¡rh–aŒ\€VvRoQmTo\tg}u†„‘“ž•™¹œÁ ⿤¶¤©£š¡ŽŸ‡šƒ’ƒ‡ƒ|„s…k„f‚d|eshfk{s~pztr}iˆa“]^¤c§l¦x¢…š—…›z™q”lŒjkvnkrduazg€q‡}‰‘’“˜’˜Ž”ˆŒ‚}x|r}qr‚v„{†€…„ƒ…}u~m~hƒg‰jr”~—Œ—š”¦Œ¬ƒ®}¬z§yz’|†~{s~pztryar^i_^`R`I_C`CbHfSl`so|{†‚„™ƒ¡¦y¨r¥m i™i‘mŒuŒ|‘€˜Ÿ~¥x¨o¨e¤[T’O†K|JtMpTq_vn‰’œ˜§œ³¡½§Ã¬Ä°À³·´¬³Ÿ±–®¨ŒžŠ’ˆ††yƒofyar^i_^`{…tƒrwxqŒl—j k§p«y«„¨¢—š‘žˆœ€—zŽwƒvwvkxbz]|`€i„t‡‰‰‰ˆ‘…‰}zuymyizi|l}q~w~}}€z€uq‚oˆpu–~›‰ž—¤š®“´‹µ†±ƒ©‚Ÿ‚“ƒ†„{…tƒrwxraj\bZYZOYHYD[D`IgRo^yjƒuŒ{”~šŸ|¡x rm˜h’fŒhŠmŒq“tœt¥q«l¯d®[ªR¢K—G‹DEvKqUpcuu}‡ˆ˜’¤™®Ÿ·§½¯Á¶À»¼¿´¿«¾¢»›·˜±”§‘›ŒŽ‡€tziraj\bZYZ}Šw‰w…}†zwšv£x©}¬…¬ª–§œ¡ ›¡”žŽ™ˆ‘„†z€n€d€^€^€dmw€ˆ~‹|‹z†x|wqvhvbv_v`vewlwtw{v~u€t†uŽx–~œ†¡‘£œ¢¨ž±˜¶’¶Ž²‹©ŠŸŠ“Š‡‹}Šw‰w…}led^]ZWWPUJVGYG`LhSs]g‰o‘v—zš|›|šy—u’pŽj‰f†e…gŠi“jžj¨h°d³^²WO¥IšDB€DuKnWlgpyxŒ‚Ž©–°ž¶©¹³º¼¸Â´ÅƧá¿žº´š«– “‰‡€zvoled^]ZWW{}Šƒ…Œ‚•€£ƒ§ˆªŽª”¨š¦ž¤Ÿ œŸ˜›””‹Œ‰u‡j†b„_c~jzrx{u‚t†s†tƒtzuntcsZrVqVpZpbqlrut|vxŠ{“›…¢Œ¥”¦¤¦ ¯š³–³’®‘¦œ‘‡{}Šƒ…kmbd\^XYTVPVNYN`QjVv]ƒeŽl•r—w—{•}‘}Œz‡u‚oj~f€e‡d“eŸeªd²aµ^´Y®S¤L™GŒE}HqOh[ejh|oŽzž‡¨‘›°§±³¯½¬Ä§Ç£ÆŸÂœ¼·ž±©™ “–‹Œ€uvkmbd\^XY€’‚‰Š‘‡˜‡ˆ¡‹£Ž¤“£—¢š¡›¢›¡œ ž›œ—˜‘”ˆ~sŠi†de{iuppwm~lƒm„orxult_sTpNnLlPlYmeoqt{yƒ}—„ ‰¥§“¦™£Ÿž§™«–«”¦“Ÿ“–“Ž“†“€’‚‰Šlvdn`e^^[YYXX[XbYl]xa„fk•q–x’~‚‡ƒ€‚{}wwvpwi|e…d’c d¬d³dµc³a«\¡V•PˆMxNjT`^\l^|eŒqš£Š¦–¦¤¤± »œÁ˜Ã•À“»”³˜¬œ§¢›œ•–‚ˆwlvdn`e^^€’€†Š”‰˜Šœ‹œ›“™•˜–˜•›”–Ÿ˜Ÿ™Ÿ™œ–˜”‡}‹r†kiwkopjwg}giƒnsyvkw]tPqHnFkJjSk`oou{|…‚‘…›ˆ¢Š¦Œ§Ž¤ž”˜š”Ÿ’Ÿ‘›‘•‘’ˆ’ƒ’€’€†Šrkyhohfg_e\d^dcdlewhƒkn’t‘{‹ƒ„‰}Œv‹q‡ooxspyj„g’f¡g¬i³k´m°m§j›d]XqWbZWaRlTy\†h’w™„›‘™Ÿ”¬¶‹»‡»†·‡¯Š¦‘ž—™š–š•–“‘†|ˆrkyhohf}Œ…‰‡’†–‡—‰–‹“ŒŽŒŽ‹ŽŒ‹Š•™’›–œ˜š˜—•’†ˆ{ƒrznroksfxd~eƒj…pƒw{|m|]yPuFqCnGlPm^qny|‚ˆ‡”ŠŠ£Š¥ˆ£†ž†—‡Œ‹‘Š‘ŠŠŠ‹…~Ž}Œ…‰‡zŠtƒsytntes`r`qcpjptq~r†uŠzˆ‚ƒ‹{’t–n–j’i‹l‚rwzp†l”l¢nr²u±y«z¡y“s‡kydi`Z`OcJjLsU}b‡qŠ›…¨±z´w²w«z¡–ˆ‰–‰˜‹–Ž‘Š‚zŠtƒsytnv„y‚€€‡}Œ}Ž~Ž€Œ‚ˆƒ„„€„~ƒ€€„‰ƒŽ‰‘’•‘˜Ž—‰“„‹€€zvsrlsfvd|e‚i‡o‰w‡€€„r„bS|IxFtIrRsawq€€ˆŒŒ—ŸŒ£ˆ¢ƒž–|{„€€„~…ƒ€{ƒx„v„v„y‚€€‡}„€Š€€tj€c_~`}e|l|u}|€€…~x•rœm i hœj”oŠv€€x‹t™t¦v¯{²¯„§†›…Œ€€wrnbgTdJcFfIlRsazq€€€|›w¦qm®kªl¡o•v‰€€‰|~•‚–ˆ”‘Š’„€Š€€tjtmssp{o€oƒpƒru~wzywzuyvvzv{‚‚…Š…ƒ”€•{‘uŠqmvgsctayb€f‡mv‘€‰‰{kŠ\…R€M|PyYyf|v„„Œ™Ÿ‹ †€•z‹vuuxp}o}ozpvrqsmtjujtmssp{o‹‰Š‰€ŠtŠjŠa‰]ˆ[‡^†c†i‡o‰qŽp•lh£e¦d¥f¡k™rŽ{„…|yz©}°ƒ²ˆ®¤—ˆŠ{nv_mQfHbEbIdShbmrq€ro™k£g¨d¨c£e™jqzwƒu‹w‘}”ƒ”Š’‘‹‰Š‰€Št]b_ae_l^r_wayeyixmupsrqsrrtrwxxx‡vs‘o‘je…az^r[pYsZz^ƒeo•zš…›•”ˆ”x’h]ˆX‚Y~`|m~|„Š‹•œŒŸ‰„–~‹x~tptdw^z]y]u^o`iacb_b]b_ae_l^ŒŠ‹…Œ|qŽgŽ_ŽYWŒW‹Z‹^‹aca—^[¢[¥\£aŸh—q{ƒ„|{œ}¦‚®‰°‘¬—£›–›ˆ•{‹n_sSjJbG^K]T^a`pc}cˆa“_›]Ÿ]Ÿ_šb’h‡o|wtr†uŒz†ŠŽŒŒŠ‹…Œ|qQRRQWP_OfQlUqYt_uetjsnrqrqrsryp€m‡iŒdŽ_ŒZ‡VStRmQlQqTzZ…c‘oœ{£‡¦’¡˜•™…˜u”iŽcˆb‚h~s}€Ž†˜ˆž‡Ÿ…š}‚yrwbvUzO|NyNsNkObP[QURQRRQWP_O‰ƒ‰~ŠvŒmdŽ]ŽXŽTŽTTŒVŒWŒWT”Q™PPžTZ™c’m‰w€zŠz–~¡†©Ž¬—ªŸ¢¤—¤‰ž}“q‡cyWmOcL\NXUV`VmWwV€V‰UW“Y“]cŠj‚q{wu}t‚w†{ˆ€Š„Š†Š†‰ƒ‰~ŠvŒmJFIFMEUF]HfLmRrYv`wgwmurttswo}j„dŠ^XR‰N‚KyJnJgKhMnQxX…b“mŸz©‡’ª™Ÿœœ€™s“kŒj…nw|„}‘€›Ÿž€—~‹}{{j{X|JDC{CsCiD_DVENFJFIFMEUFƒ|„v…oˆhŠbŒ]YVTŒSŠS‰RˆO‰LH‘G”H•L”S]Šh‚sz{u„w~›‡£’¨œ§¤¡©˜ªŒ¤™u‹h~]qUfQ]SWXS`PjOqNwN~PƒT†Y‡`†gƒou{yy|y~{~€‚‚‚‚€ƒ|„v…oˆhGAFAIBQBZEdJnPuWz_}g}o|uyyu}o„fŠ^ŽVOŽJˆGGuHjIdJeMkQvX„a’l x«„°®—¤–Ÿ‡z˜q‘nˆq€yz…x‘y›zŸzž{–|‰}y~f€T‚F„@„?~?u?j?_?U@L@GAFAIBQB{v}pj‚e…bˆ_Š]Š\ŠZ‰X‡V…RƒNƒI„D‡B‰C‹HŠO‡Y‚c|nuuq}t‰|”‡“£ž¤§¡¬š«¥…šzn€dt]iY`YY\TbPhMmKpLsPwUy]{e}n}u}z}|~{zyƒxƒx‚x€y|{v}pj‚eJCIDLESG]IhMsS{Ya…i…qƒy~y„o‹e‘[”R”LH‰G~HsKhNcPcRiUtZajœt§€®Š”¤œ— ˆ |œs•pŒr‚yyƒttšsžtv–yŠ|z€h„WˆJŠDˆCBxBmAbAXBPBJCIDLESGsrwlyg|e€eƒe†fˆeˆd†bƒ^€X}R{K|F}CC€G€MW|awjqqnxr‚{Ž†˜’Ÿ¢¥ ª›©’¢‰—~‹t€kvdmaf``b[eVhQjNkOkTl[ndqmtvx}|€€ƒ|…w‡sˆp‡o„oqysrwlyg|eSLRNTP[QeSpV{Z„_ŠemŒu‰|„ƒ|Šq’e˜Z›QšL•JŒL€PtUjYdZd[i\q_}c‰i•q z¦…¦Ÿš“¡…£z¡qšno„vy€rŒp—oœpœr—w|‚o‡_‹SNŠN„M{LqKgK^KWKSLRNTP[Qmqrkuhxh|kn„q†s†r„oj|cx[uSuLuHwGxIyOyWwatioomur~{Š†”‘››Ÿ¢Ÿ¥›£”›Š‡x~qwlrimhiiej`lZkVhWf\edemhvl~s„z†ƒ‡|‹tmi‹f†g€iymqrkuhxh_[_]a_gaqa|b†cŽf“j”p’w‡†}q—ežZ¡S PšQ‘U…\xcngihggjfpexf‚iŒn•v››•™Š¡~¦s¥lŸi•kˆq||sˆo“mšmœp™u’{‡zˆmŒb^Š^„\|[tZmYfYbY_[_]a_gajtpnslwo|t€z„‡‚‡‚„€z{qvhr_qVqQrNtPvTw[wdukqpout~|ˆ†’™—œ™š“‘Š‡€z{uxrvpuptqrrnqgobjbdfan`vaf†nŠwŠ„‰{Žq‘i‘cŽa‰aƒe{jtpnslwomkonqpvrqˆo‘n–m™o˜r”wŽ~††|o™d¡[¥V¥U Y—a‹jsvwpwmtmqomtk{k‚nˆt~‹ˆ˜~£t©jªd¥b›elwwƒqn—mœoœs˜x†„|ˆs‰p†on|lvkrjoimjmkonqpvrkzruvtzx„‡ˆ‹‘‹’ˆ„‰~€xuskqbq[sXuXw\yczjyqvutyxŠ‡’˜”›—š––‘‡‡~yywvwuzv|w~yz|yuvnongqaw]~^…b‹is‹~„‡yn‘e’_^`‡e€kzruvtzxyz|}€€„€‹~’y˜u›q›o—p‘rˆx€€vŠj•`ŸZ¥X§Z¤ak“v‰€€„yƒtqzpurquoyp}v€€{›r§i¯a°\¬\£`—hŠs€€yŒt–qœpŸržu™y’}‰‚€€}z~w|uztytxvyyz|}€€„€s€{„€€ƒ„ˆ‹“’š”ž“ž‘›Œ”†Š€€{uylyezb}bf‚mƒuƒ|€€~ƒ€‰…‹•™“™“–‘‰‰€€wxsuttwu|y}†ˆƒ†ƒ€€ywwnye}_‚]‡^‹d‹mˆw€€t‡jŒb^_cŒj‡sƒ{€€€ƒ„ƒ†ˆˆŒŠ‘Š–†š€œz›t—om‡n}styk„aZœV¥W©\ªe¥qž}•†ŒŠ…‰~…yuystsrtsvyw‚vržjªb²[´W±X©\ep†|€ˆy’ušržqŸrs˜u’wv‹u‹sŠrˆs‡u†y…~…ƒ†ˆˆŒŠ‘Š€ŽŠ’Ž’’—˜›žŸ£ ¦ ¥ ˜™“…ˆ{‡r‡mˆjŠlqx€ˆ‹Œˆ‰”Œ˜Ž›œ™Ž“‰‹wwoplnnpstzz‚ˆ‡ŒŒŒŽ†Š‚}w}ld‚_„^…a„h€pwym€e‡a`‘d“k“u’€ŠŽŽ’’bklSuKƒR—Y¤]¥]™Y…TvXpfswz„ˆzh|T„EŽA•F“P…Xs_jgholyoƒkŠ`ŠWˆS‡S‰V’X™[–gŒy}Žp£l¯p¹pÂlÇdÃZ¹SU˜azocz[c|u{…†”œ‘œ”Ÿ|¦i`‡bklSuKƒRg”\OhlMœP›hhea`q°Œ¥œ¦zº©|vzB…>ƒl‰v¥_ªV”q~ovPmI]jL|hn“dŒŽj©n‘ˆf”Z h¦« œ±¨_‹]r~‰œ|›{wtaejvk l³€³ˆ·j¨OŒMrKkQvfkwarrg”\OhlM`}jktei”m¡o¡m•jgsmsz{†„‹‰‡‚{nuZ{O‡Q[g‚jtgrewg}o}vŠg_Ž^Šcˆii•f•iŽr‚€vp™q p©nkªi¢g—l…vl\ƒZ€gw|uŠ~ŒŠˆ”ƒ•‚‹w›f›^`}jkteimciN`un¢zŸmvZq[–f©f{Ž “”±w{FoAzc”c§RY°€Ÿ’~‰WwJ\bLel`”o‰¢gµh˜v„Š}¦q¢f†Ž°ºv¦dƒpv…”Ÿ~ZqUw}‰‰¿³…_šR}ThKrT‰d€nk}fmciN`ungŽuƒ€€Œƒœ†¦†¤„•€€s…s{—…—‰Ž€€lx\}X‡aŽq€€€txuolˆq‹€€o‘il„v}€€‰wpo‹r„y€€†~Ž~“~‘‰€€…o\“R’V‹h€€{ŒŠ‡Œx‹u€€n‘a™_˜gŽuƒ€€Œƒ–z‹w€€–žš¥€€]g]s€€Œa‚[€€Š³‡³€€mWd]€€”z‰o€€šŸ—€€_{c~€€u“iž€€e©q€€Œ‘–€€TdXl€€žwŸs€€^¡]§€€€KrK€€“¥‡Ÿ€€~…tŽ€€„fwj€€‚…s„€€–z‹w€€–žwžŒ™™—¤š°œµœ®š—‰”{˜w¡y¦}¤~›u‹f‚\„]‰jŒ}ˆŒzŒoƒsz€uŽy•‡•~–z~‡srŽ{ƒ„w‹ompŒtŒy~ŽŽzŽpŽf‘Y—KšH™S’iˆ‚€Ž…zyun|a^šf wžŒ™™—¤š{´‰®Š¨Œ¶vµT”7w@j’|xvw‹ƒ¨œvwpouŽ‡²€Ÿ]LŠeœn„WlVv†ˆ¯˜¬‚¦„z›kŒ„a”^“z—„‡ib_LgJy_{`²:Â5µS‡WRPDacztqe_Lcls¡†¬Œ‰YN€fc•a³{´‰®Š¨Œ¶ˆ¬¡¬±ªºªÁ¬Á¸«§¨—£Š£¨{¬wªt¡o’f‡a…c†n†~ŒrŽh†o}€x”}¡‹žš“ž–‘…•t—m’q…wx}pƒnˆrŠvy’w•p•d“WMŽD>BT‹n„ˆ}—wšr“kˆd}[~W‹]šo¥ˆ¬¡¬±ªºªdÅvÁy¤qŸf§R›7rCir…•Œ•‰——•vˆpŒŠŽ¥€³a–KuK‚Zb~Tzd‚—~®‹£±™«‹xˆm‚ƒf†I{^Œˆ”x’XpJmeu™d²;¸6°RSeNW^]„U‡LfL]qn¢w®}‘ŠjƒOnWc‡]²dÅvÁy¤qŸ‘¯ª³¹°ÁŮ°¸°ª ¥– ˆ£|§s§n o‘n„k€lq€z{…m‰c‚iz|w“{¦Š¨œ¡¦Ÿ¢Ÿ“~˜qŽmktmosq{y‚€ˆx–k–[‘L‰Cƒ>=}E}X}szŒtžl§d¥\™WŠS‚Vˆc–w¤‘¯ª³¹°Áw ¤€€zqƒ€€\YWW€€—™‹€€pŽh€€Ž˜™€€aljb€€‡‹Šz€€‚…Šu€€³Ž³€€yt‹†€€MhMr€€³|³€€u‚‡†€€Z‰_”€€}msy€€ªno€€n|€€ƒŠ€€pf~g€€w ¤€€zq¦¢¬°¦· ¸¢´¦«¨¢¦ž›˜’‰”z™oœm™t‹z}yzv{s}t{}nb|euur‹wŸ†¥œ£¥°¤£Ÿ”y…mubl_kdto€x‰‚‡Ž}•o”_‹R€MtJlHiOk^pusŒo¡f±^´X©V•Z…aƒn~š¦¢¬°¦· “{¨{®`¥d¡{ |ƒ[d[j„yli\Qgduƒwž–…vthcgup“’¡›«x«d™ou€\ŸhÈrÇ^œ_‡ˆ„˜ykZYK{M°`º‹’§‹šŸoŸLƒ^€vŒh‹X”r¬ŠÊ~Û‘‘Œ‰o|¥¢Ÿ°†ƒ‡Z^“{¨{®`¥d‡•Žš˜’ŸŠ Œœ“•™‘—’‹€ƒu‰mn{ƒ‡u‡t€yxr€xu~gycrkn|r•š™²Ÿº¢°œ˜}nm]dWf\riu‹Šƒ—y•n‰gzekb`]]]bdktsˆq iµc¼`²cœk…u||€‹‡•Žš˜’ŸŠ–w¥i®^£z‘‘™£k…]dzkr_bT[t¤‰ž€wqahu`h~„“–®’¨e™]m{_¥|¾{¼[£Q‰ssœk‰YpIM¯^¸}œ¢”¥žw¦LŸ`‘y}isJŠX®y¾v·r£‚ ¤•¢{~|yœ˜¤²€‰o]€e–w¥i®^£z|†z‰€€‡w‡{„„~Œ|Œ€€€twvm€i‰o‹€€ŽssŠ|€…z‰€€…ndudolqy€€š†³“¼›²›™‘€€km[bW``iqv€€Œš€¢~ž}~€€p{epcgjfvo€€~˜x°r¹p°u™€€‡t‡u‚}|†z‰€€‡wƒ€€yšl–€€¬e¨_€€‚‹‘|€€b©kª€€yQwP€€u‰kw€€ˆ¯y¯€€„]tb€€¨¥€€^t\u€€zqu€€£yœl€€u¡vš€€’Ž—˜€€bVeZ€€‹‡r€€ª–ª€€re}l€€`m\c€€ƒ€€yšqwfzhrolqtn€k‹hkƒlxhyf€j†v…ˆy•p˜u’‰Žƒ”‡‹Šwev[nZo`}d—m®~·®“—npech^vb‰j—p rªv}¨†›Ž•€y‚ys‚lo™}—–†¶‚„•Ž}•oŽmqqwfzhrol†›a¥P¬V°b‰„]«O`—¥Ž°™›«j»P™Y`iD…V¡Ÿu•Y¤]˜‡g—Z…ud‹S¤c»v©xƒp_sH~U‰U“T¢o•“um‚[^¶p–¢µ¯ª }{V€Q¦]¯n¤v¥¶¦«•n„lxoaY`Wƒ{†›a¥P¬V°ifUiQgWg\r^^Ž\“\\…]‚cq„x–l h t™†—ƒžƒ•‚~wdjQcHfHuKU¥g±x¬‚›‚ˆy~m{eƒc‘f¢kªl¬jnªx¤†œ—”£¢”…šz¦y°„®š£°–¸¯™—p”fdifUiQgWg~ž_±O¯V¯g’Šd›WkŽv³u¼‘ ®m³L’__rZ€x™‡¨f¡P¦W—bfmX|{t˜`©l©~r€dˆV~RvE’In¬Ÿ‡¢s{Œ[¸_¼€“©Š½Ÿ«¥Šƒh€R£TÀq½‰¨•Ÿ§–®‘¤”“’‹tXcOxt~ž_±O¯V¯kXR^GcLjTw[†^‘]—Y–U‘W‹c„wyŽn c¦e¤v›Œ€£{˜uhb\KX?_>nA…KœZ©i©ržt’oŽk’l›p§t°u±p©iŸf—m’~’””¦—©™ ž’¦‡¯ƒ¸‹· ª´š¼Ž³Œž–‡ s™b†XkXR^GcLj‘ž†—€€w‘l›€€…qt‚€€ªf¥l€€[“W™€€‡zuŠ€€“a„h€€ƒpxf€€†‰t€€„ƒ€€„’‡Š€€c”\˜€€°[¯Z€€VW¯€€¡hŸu€€}a‡]€€k¥p¢€€~l{p€€ƒ”€š€€rUiT€€‘ž†—€€w‘xP^[PiSu]g‹m’k•b—X—Y’e‡zy‘kŸb£i¡}˜’‹Ÿ}¡t”jz[^QJQB\EmLS•^¡g¢lœm–k—n x©‚¯†®„§z—k…_y_xn†œ—¥¢ ˜¢Ž§‰®¯£¢µ’¼…´ƒ Štž]PxP^[PiSu«™¨Š™uy‹U¦\™mŒm¡u©ˆƒZqY\x\Œ~x‡„—|r˜W´a¢|ƒ Ÿ|ohKl\szb‰\‘n–„™sœvzœRÀC®NweKŽJ¨t‰h{dco|W¦H¯\“€y{mVfMj`vqmqYjVY\Slm«™¨Š™uy‹Ow`guhƒsŒ~ƒ€‹rc•^“e‹uˆs“m–v—ˆ“˜‹Ÿšt‰frW[OPSPaZse„k“pšr™q”pp–y¡ˆ¨”©—¡“‚}lfXYQ][os„‹’™˜›—•“Œ‘‡—Œ™ž°·w°w„‰˜q¢YžKOw`guhƒ³€µ†‡c‘I¦WŸrŽ{™n¬^Še]_x}izn”l–{šŽ£œƒ«YµJ±f–œw¥iweKdRfhgv\„LŒ`|f–vq¡PÁb³s€jQwR—’†en_j}’v°Z±Z«}™}|XgWquˆ‚ucVQ\Xhym”…‹³€µ†‡c‘¡Qg€€€Ž‰’’•„}€€m‰aaŽj‰x‚€€„ˆ‹– Ÿ‰“€€pj`ZXW]amr€€Ž…•†•…‚„€€‡‰”—›Ÿš‘€€hgQOFEONff€€ŽŽ’‘ŒŒƒ‚|{€€ƒ‘|¤s¬m¥q”€€–i§R«I¡Qg€€€Ž´h´u€€Za‡€€šižj€€UuUi€€…œu“€€•t‰n€€œ ‰€€R•Qœ€€¢r›~€€xzŒ€€ŽR”P€€_™_Ž€€¦œ©£€€OsP…€€…SsS€€ž•€€€’¢š¤€€`ufƒ€€t]i^€€†©u€€´h´u€€Z³Q¥l˜†™” –¥Ž¤›v‰vue]–_šf›jšož|£‰¢’™“‡Œt~do]hbnr|†Œ”•–”•Š’|ŽoŒku•…Ÿ’—‰ˆzwcbLLCBLHd\~s€€Šx~muewh{zxŽs˜s”yƒ‰pŸ[±H¸D³Q¥l˜†™”¾¬zsq\_zX©U¿E¼A¤Q„bp}| €¯{¢™}Žfwdz’Š³|©es{NŸc¤Ž›œ¤‹©Œ§¢¨µŸ³†ž‚œg¨b z¡ ¯¥œ~wGk:lahkXeav{…Ÿs©‹¿’¿tžRˆWtpv[m‹£¤‘«™”¾¬zsq\_¾P¶n¯Š²š¸ž»—µŠ§|”x‚m‘a \¬\²Z³^°m©›Ž‰”ue‚_xdus|‡ˆ™“¢’ž‡–wŽhŠ]Š]Žl•€˜–”Œ€}ugfOTEHLHbS{cŒl’ja†U|N{Q~c|x|„€ƒ‰u˜b©N¹>À>¾P¶n¯Š²š¶¤œœi€TXpF¥WµV¬K¦S®q ‡¦‚œ‚…yW™Nn‹š¢±—¬q‡e\ƒ^¦„¤žy§z¨šœµž§†«q¢lŽu‚‹™ª ‚†oOl>b_kh‰a–p‡‰Œˆ£…¨¢¬¤²}œX‹`‹…{Šk‹y §x˜Šžœ¶¤œœi€TX¼N¹m¸Š¾Æ¦È£¿˜ˆ˜…‡u•j¥c³^¼W¼W³d¢vŒ‡wfŠ^czr}††™¤“¤ˆ˜u‰b~V{T\‡o‡Ž˜Šœ‚”z…wnrUfHZMR`RxY‹^˜ZšR“IˆDƒGƒXƒn…|‹|–p¢^I¶:»:¼N¹m¸Š¾ œŸ €€[XXX€€Œˆ~{€€¤¥‡€€{qŠf€€N•Mˆ€€›¢§€€xUqY€€€œt€€o„su€€¢}€€{_vY€€Ÿ£€€TUq€€„¯u€€wƒ…€€£}¨Œ€€VxZ‰€€uu…€€ˆ]{a€€ œŸ €€[X¨Lªj¯‡ºœÅ«È®¿¤«”•‰…Š{”u¡q¬l³a²[¥cryhˆ`axoy…šŠ¥¥Œšyˆ`sOgLfUpf~}„–ƒ¦~§x›vŠ|t[}MsOga]x[]žX¥R M”K‹P‡_…tˆŽ‚˜w d¥N§<¨;¨Lªj¯‡ºœ˜wºŠ®xˆTn\w‰x’hƒa†p‘m‚Uvijše¥pŒQgfMrjcx]buI”X¯{¹p¤U…ZicVW\Ymur’UG~Zx~‹††€aƒO‰vˆª“œ¡‚¥^˜Zn]eT“b§…Š‡XxCr\^b\[xh|p^_Vc^˜wºŠ®xˆT‹Kf˜‚§™¶¬¼²´ª¡™‹Š‡}‹’™r™h‹jwtga„d{ns‚wš©‹«Žžƒ‹jsP]CRIV]guxŽ¦|²urœtŠ€tŽ\“OR€dqzj‘i¤e¬a¦_˜a‹f…t€‡“†’Ž…”r“ZD‹>‹Kf˜‚§™Ÿk¼‡°„¢X“T}u‡swewOŠK‹S‰ov›eª{‰en^LUTO]e[Ž^©v±§vˆUsX]jOadUviwp‚Y™X—vŠ€Žs€s^t[ˆ””®q¬W©^…ga^nQži®–•g†Jr`YjW`iomwmcsieŸk¼‡°„¢XpLve€€‘—£©¬§£•€€vzy{‚~ŠƒŒ„€€srsd{^„bˆp€€w”{©…³˜€€dgJR@KJUdk€€˜…³u©o”r€€k“VžMžS•h‡€€–}¦y«w¡wz€€wŒrœq¥u¢{“€€}fvMqCpLve€€‘—¥ržƒ€€‹U—T€€w‰€€\Žb‡€€‰p‡f€€¡š€€hx_y€€Ÿ•€€€}s|m€€m–c’€€|–€€|—€€‰l’z€€o‚x€€€R†S€€^”XŠ€€¦ŠŸ‰€€bƒ\ˆ€€†yt~€€‰Žv™€€¥ržƒ€€‹U\U_mg‡w›Š¦•£“‘†yufoawc…iq“u‡s{i|`„_Žg’wŠˆ€š„¬Œ±’¥‘Ž„ui`QRGTOef€–’™ ¢•v€tn€_”R£O¨[¥q‡˜˜˜¡•““w•fš^£XW¯\¦d”j€iicS]K\U_mg‡w›£—Œr|r_~gz‡‚‡œ~œ„Ž‹›~«vžt…qv~x”ƒ–‰v‡d™|®—ŸˆntMKŠcŒˆ€«}¼Ž´™¯œ›¦|žrp|R{v}œš“ªy«s¡ojfiu\—B¡Hk“ˆŠhtbZtW‰vw‘ft§·r¸œ£—Œr|r_NdL}O”[¢j¥u™y€ubmNoJ~MW›d›oŽr‚mƒfŒd•j˜v……•ˆ£¤—–—~‹frV]RS^Ywj—z„®ˆ „Žy€j|_‡[šZ©`°n°•°•²Š³v²_±O²Eµ?´>EQ‰[w]fYXSVNdL}O”[¢¨¢§Ÿƒ‰gyf~€}•fŸb¡s²}¹ƒ§ˆ“‡Œ‰v{nqt{vrrcˆx«’¬Ž}†N•@‘R{z~¢º‘´Œ£†©m…\XaU|‡Ž¥›‹¨y½³~uƒu’b’L‹Vd…r]ˆO…lh|\{ib‹Yn¡w½l»{£¨¢§Ÿƒ‰gyPsGŠEžK§S¤\’cvhXkEv@‹CžN¦^¡o‘y…x†rŽm–m™rŽ}„Œ‡——™‰šr]zRjUcffƒp£v·tµm§e•_‡[„\Žcžn©{¯†°¯³Ž¼†ÃxÆfÄT¿F»;·2®1 :ŽI{Xm_c_^YcPsGŠEžK§¬‹©“€€V}SŒ€€“_…f€€¡¤}€€g™oŸ€€rims€€|jne€€” ‡ž€€˜bš`€€‚š•€€l}y€€€bd_\€€¯€€q¤‚¤€€|€€€ns|…€€zN„M€€lp|€€r„it€€„Ÿs—€€¬‹©“€€V}c|UŽNL¤L OWyc_oNƒGœGO¯_£sŽ‚‚…ƒ‹w“p”o‰v~„‹•„˜qŽ_}Ws[qkt„xŸu¯gXŸNN†W†cu‰¢˜£¢—¢©ƒ·xÃmÇcÃYºO±B©6œ3<~Nqbjoetfomc|UŽNL¤™{€‡To4v:šbšjuYsXŒvzfwY•S©N’Sƒzž©´¥ˆ‘VœTž‡z²l±›œ”† … ‰r\`hlŽo›dq[¤z¯Šœzzzput~zt…ttfmnƒ–ˆ£n{\oU‘g˜–¯ƒ ƒ•dž]›nŠhŒ`™{€‡To4v}pˆe’^™T™P’V„esxf’]¬V¹W´cŸu‡†{}Š…€vŽp‚uvƒyƒ’ŽŠ’{ˆm{dxd|l€|Žx™b–MŒCI|]€s‹‹•¤•±‹œ‹†”w¥n´k¹k³l¥g™XHƒBzIs]pso…not}pˆe’^™y˜h¡Sy=yBš[›UnKb[{lŽf‘i‰|o©PJ~rœ¨´«‹™[ŸQ›zz¨x²›±—®vž|‘Š€vcih}Œ}x\•N¤v„Šl„tˆx¥t¥}Ž‘w†ch_kq}“y§UšFVš‚”vv¤ƒ¥lžX–P–Q‹jy˜h¡Sy=y›w‹z€€tˆdZ”]‘kˆ€€šs´f¾^³bšo€€t‰wŠ…ŠŒ{€€stš}Ÿ†šŠ€€uuwm€lˆpŠy€€f}NuEnNmfs€€š‡²…¼}³wšv€€p’k¡o¦yžŽ€€ow\rRqWui|€€”~¢z¤w›w‹z€€tˆl´z³€€mtq…€€qYg\€€…”t‘€€ª§›€€]e\q€€ˆs{s€€€‰qˆ€€¦¢™€€‡y•‹€€rw„‰€€vL„L€€UT€€€‡˜v”€€£qœo€€„‚Œ{€€^ƒ]{€€¤~£s€€}™Œ”€€{dŒ\€€l´z³€€mt±p¤mšqŒ{wˆg’b•j“{Ž”©p±b§_gxuq€x……†„“„ˆ‹{™y¥~©ƒ£‚—wŒmsulj–mruq^jUe^eslŠx €µ}¼t±k˜g~np~p‹zŠ…˜u™gˆatbhkiyxˆŒ‘¡Ž±„¶y±p¤mšqŒ{•—”¦{o”j^wQhd~„‰‡ˆ™v·‚¯••Žyrh\{Nˆ]xŒl¨b–Sq]Sg°ƒ¢všl”|wt\f\wZ}Y^oYwu]u`aˆfwze€O¯Z»~¡¤¢¡±y\’]\¢]¥kŽŠs§r«užn–rˆ„v|•—”¦{oÅo»i²l¢xˆ„pŽc’c’o‘‚ˆ’w—hb€fqsr„…„ „•Œ‰™…¢„¤„ž~”ph…qz„p—k¢k›p†rtnnkuk…q”|¤„³¸v®h˜^€^thwp†q›j]±P£KO„]ƒsŠ˜¯—À‹Ç|Åo»i²l¢xb•e¢€³€¢g~\^hVpqs€‡Œˆ£~Ž…‹•Ž”t‰O¤dš—u£[ŠQpXV~b¦ƒœ|Œi‰pskLOFXWx\‚mvƒi{VmPmŽz`‰Pº`ÁzšŸ¶¦—®b¥]§h¡c€ho’§ˆpvsˆ£›†zb•e¢€³€ÌrÄk»pª|…t‰cŠ^‰f‹qˆy||oxhrjnwx‚Œ†žƒ©©~ž†“‘Ž—Œ–ˆ‰o†g…q}…všq§q¢w‘|…{ƒx‰x“{™…Ÿ©Œ¨p˜_„WxZ{^Š_¡[µR¼G°@¢B—P•hœƒ§–¶˜ÄŽÍ€ÌrÄk»pª|ŠKyK€€ª¨€€^–`‘€€‚u†€€€hpd€€ ž€€©ƒ¬‘€€fuq…€€|™€€vn‡|€€YX^U€€{¤pž€€ƒ_sY€€‹’{ƒ€€¯}±o€€j²x²€€„w‰€€RoR~€€„WsU€€Š²x³€€ŠKyK€€ªÁwºr±z¡„‰‡s„e€`}d‚h†hgugojqq}ƒ‰™‰ª‚°zªwœ~”ˆ’Š’†Ž€„{s~i‚q€‚{–x¢yž€‘ˆŒ‰Ž†”ƒ˜„•‹“–™™ž’ž–m†^yYxZ…[˜\¬Y²Q«F¡A›H™[v¤Œ¯“»ŽÂ‚Áwºr±z¡„eDa?up¤–µ¦¤«‰»y¶„¢†ƒtbmVcJ\Kuf{Œa˜]‰’ˆªˆŒ|||‹“—ˆœ¢t‚{£ƒ¡„ˆb”c™¸tÁj±fŠfh„}—¡ˆ¬ž˜wkm[Šm’u}kxgYwGf[fhˆ`…n‘ˆŠ§i¥bzeDa?up¤–©{¢x™‹Œ{Šo‚ixitm|k„d_z`uivx‚¥Œ±ƒ¯x¡r‘yŒƒ‚“|“u‹rzyn‚qƒ~€Œ|•}†‡ˆ‘Ž”ˆ”†‹‹ƒ˜†¢¢“–’…nuepcvf„k”mšh–X‘JŽHŽS‘j•œŒ¥‹ªƒ©{¢x™‹ŒLAT?}o›¡¡·£¬Ÿ²‚²sš†eŠHuZQ]KXlmm†Y€_y•}®{–„Š’ˆ…’`±[´u—œ‚´z¦sŸZªa«Ž›°‡µo°M•Qoz¥ª¥»Ž®¤…ŠemaY}]…uizWqUmfg„aŽoŽ‘—š˜ƒ…„kŠ]tLAT?}o›¡y‰v€€uŠn‰mqyyv€€z‰n…e}dumt€€—‹ª‹¯„¦|’x€€}‰…‡Ž€“yw€€r‰pˆwz†x€€x‰|Š…†‹‹{€€ux €¨‰£‹“€€ntesexnz„€€}nzZyPzV}i€€…‹Š’‚y‰v€€uŠ[OVO€€§|£€€–‡Ž”€€˜M¡O€€R…Vs€€€’rƒ€€¦£q€€ƒ†t€€N¨M£€€§w¡}€€‚cŒ\€€”‡€€KxKk€€ª§¥¡€€ˆŠ•€€vO‚P€€il€€“}–n€€{µ‡´€€wt†€€[OVO€€§…oivqom…r†{…††‡–{r„qyyuˆ›Š¨‹¨†š‚ƒ‚o‹l•t”Š„‹€€†ts‰x€~wszyrtyv|l{dogfxiŽrž{¡—w‡f|[{W[‹c“h’gƒhqjgmjqxt‹y“‹…}…oivqorvfqt›q²[›Xx€~¦€°g§Q‹qg¡Ož`Ž˜¡wŒ{ƒwpNnfu™w¥ƒ–x™y y•U–_xdrSŽV‰oarRMeK}u››«™“{u~€ŠˆtsVxjzŸq´z¯ˆ®“œ‰~hŠU¿UÂU^‡{ ˆ£rvfqt›q²„b€Zycuuv…{ƒ–Šš ˆ¡™~„†€‘‡œŽ£‹Ÿ†‚y…f‘^bžm—yŒ‚‚‚z†|ƒ‚~†y‡x€xƒs{pmm\fP\OU_Xx`k—r“p†dyXwP~N‹P™UžY—`g‡n‡sŽv™{™€‰„t„b€Zycuu‹„‹~už`¬V˜Uˆr¢®_‰ega¤[—b•€¡ˆ›r‚or{~f‚Mqdq’…ª‰Ÿ{š¢Š‹œa¢X‰pslQšF~SViS`uY”l£œ—‰Œ†Œ„€rhg[urŠ ‹¼€¼v°‡”{qHÀ@ÂU’a†mx§‹„‹~už`¬ˆW†Sƒ]‚s„Š‡›‰¥ˆ§…¦‚¢š…’‹Œ‘Œ•‘˜šˆ–‹|x‚fXŸT¤Yžg‘v~{{‰zz’}‚Šˆ‰w~mlcYZJREMRNiU_ŒiŒn€jq_kTpL€J”O¡Z¤f¥q¤y¡~Ÿ€ ‚—†€ˆhˆW†Sƒ]‚s§e«b€€jŒw€€€•Š•€€ab‹€€}mps€€ƒƒ€€‘Š›€€}t{†€€…^„d€€l›e¢€€¡gœq€€gleh€€…”yŽ€€“sŒn€€ˆ“‹€€lkke€€›–€€‘fœ`€€S®W¯€€†k{w€€§e«b€€jŒŒR‹T‹by”¦Œ…©| y˜~‘ˆ‘Ž–’’•ŽŽŽŽs‰p~ynŠZœL¦J¤W•k‚}t‰q•q›v›–‰‰}ƒptdc[TWNTVQiS{Z†f…rzuhn\b]WmS„Y˜h¦x²ƒ¶‰±‰¦‰Š‹s‹]ŒR‹T‹by¢ae˜}‘¥t±w™’uš]‰W|pl™TœG…Yr“Œ£©±«°¢™Šnxl\‡X‡lfpZb\`n†¦„·q´l¨r–lƒo…‚‘b•O…S_WL]mq›’¯§Œ‰c[cUƒg‘d‰\‰OƒLoidƒˆ®[¬Vl…u¢ae˜}‘‰RŠ^Œp‘‡– –¯®„¡w‘t…|ˆ€’†“‰„‚q‡e‹cˆoy‚`˜J§B©Mœe†}uml¢r}”ˆŽ‰Œ€‡vmuhliefj_v[‚^ˆi…yxƒc€QuMkYfqmŠ ³”»”´¢‹‹|Šd‰T‰RŠ^Œp‘‡{z„ŸŒ¥}y²‰”šg’awjntfTªE–]sƒy¨™»²¦¡ŠtxdimSŒ]”ˆˆ{mdfKŒZª~š„’~¤‚†“xuq‚f”PŒQboFxNaiRp¡•šjklRŽQŒQwcff_[jk€‰›x°V¬eƒt…{z„ŸŒ¥}{W|j€€‡•’ª—±–©Œ•€€{rmŠov~€€usyb‚X‹[Œj€€d—J«@±J§d’€€“užožo•u‡|€€~€{ƒy…y…{„€€|q‰g‘e“n€€ŒhŒQ„GzOvf€€˜š®šµ‘«†•€€l}X{P{W|j€€‡•lxj€€‰iƒi€€s•h•€€†tˆ€€aªa€€l¤r§€€wjtt€€vj„€€²Œ³˜€€iLvL€€`\€€¥’¡‹€€‡t”m€€V¨[ª€€€NvN€€}™n€€£oœd€€h‰bw€€”Ÿ‹–€€ŠŽ€€lxj€€‰i__bvf‹q›§§—™–ƒŽn‰dŠa‹d‰krsrlgsYSˆX‰h}|b’J¦A®K¨d˜}ˆ|–q”k‰j{nspsuv{‰„Ž’–’…•y›sžxšˆ–z˜a“R‹R‡aŽu™‹›Ÿ‘¤šo„eod^aQ_Q__bvf‹q›qlSiNW]Jc[_q^ƒy’£ˆ§‡„‡¦f·T«\”|~”rƒys˜±‰ub~]šr’hqTOd[uY–Hv^oˆ‹ œ‰›}‘xzt¸Â¡n^^Y‚p—‘‰®sºa³w¤‚—p s‘z”]‰h…wŠkqlSiNW]JCjIP‘\—o—Ž~–l–_’\Ž`‡h~prtgqgfsZ€U‰Y‡exs`‚K’DšM˜at„y‡m‰eƒdzgtlsuv…~“‹›š›§•¦š’—„†¡”ž£Ž©x¨e¡[š]›gŸx—‰†oˆZvNbITDOAWCjIP‘\—wa„NZaWttg€[y}}¨wµv¥€…x}k“i¬_°gŸˆƒ‘†€¢{±w¡[‰Otdpzou`fSZge†v•XzZzp“ˆ“v–i~fu˜¬±º¬§|ƒQr[Œ†žŸŒ™v—c£X³o¼~µo g”vxevOl\exuwa„NZaW4u=‰H‘T‹duqƒdŽ\”Y•`Žlƒxthbxjm{b‰^Ž_‡euk`rPzL€S‚blzrrzg€a‚ah}qxw’|Ÿ‰£›œ«‘®†¦‚™†œš¢¬·Ž¹|²k§`¡_œjx|€f~RqF_=S5T1a4u=‰H‘T‹”°’¯€€v™…€€\qd}€€›~¢ˆ€€W\€€›lœx€€vz€€€€‚bŽ[€€p˜zŒ€€hsgg€€„‰zw€€{œl“€€‹nye€€©ž¦—€€[jYd€€¥—£€€goih€€›“ŸŠ€€|ƒ€€€Wn\d€€”°’¯€€v7DŒR‹\zdfmWvRW`’oŒ‚p“ffvv‹n™k™k‹lvjdgYgXj_nhrkrkmqdz`ƒcˆm‡z}t¡s«}¨Ž™¡‡©w¥l›l’xŒ˜œ¬¢»ŸÀ’¹ªl›a‘e„qv{h}[vPfD\7`3m7DŒR‹\z ¬›Ã™¢¥¦Š’j~R›[x°µl®X¢[’j}yp…s|wh„[šV˜wx¥t¥™š¶§°©†{q^{s‰Š…•„€“n…‹›|˜t¢Ž¬¢„YRKI\]†™—~¤[ªY§aži¢x¨ˆ›Š‰¡Ž’žwˆ†e¡p ¬›Ã™¢¥I†XŒiƒpkoSmGnKu\ƒo„Šš¦s¤l—r†ˆ|Ÿx«x¦y‘xzrjge`h`oeumrrlnogxcƒf‹rŠ‚|˜m¬e´j«z–ši™W’SŠ_†wŽŽ£ž¶§½¤µ•¢Žnmyvu€s†o‚htXjInDyI†XŒiƒpkv©pÁŽ¤Ÿ›—Š^–c¬vµn³f¯‰|uqh{y‚ˆu W¨YŒŠk²v§ ¢¾®¹¥“ˆ`ƒNŒs˜Ÿ¥‹Žby]nˆy¤r¥m§‰˜§k‹[U^Obp{‚ŒhŽ^¥Á½t¢d–tŒ}§d²l—”‹Ž›l›nv©pÁŽ¤Ÿ^ŠnŒ€€„e~NuEoPqg€€Œ•Œ¨„¯{§w“€€˜w¯x¹~°…™‡€€rrpivhn…y€€v{tpwg}g‚p€€q—_®V·Z¯j˜€€ŒgP†G}Pxg€€••©¨²ª¥–‘€€s|rƒwŒ‘„Ž€€ou_wX^ŠnŒ€€„eK«K©€€Žk~q€€rql€€‹‚€€ª|s€€]‹d‚€€u¡k¦€€¦V¤[€€¥Œª€€iJsK€€®š«€€LaLc€€—vŠi€€x°n®€€†jwr€€†ivb€€°¬±«€€Wu[ƒ€€ U£R€€}‹x€€K«K©€€Žkr“ƒ”•ˆšp“Z‡QZ~n‰„”–”£¤„—€€‡k›e®j¶w„™‹ƒ‡xzxr€s‹{“‡†‰}zukpckfetYŒM¥J²S¯h~‰Šr‰X€ItKk[opƒ‡˜ž£« ¨š{Šq†tŒ”Œš•™‘Œ€ƒp…kŒr“ƒ”•ˆšpZ¶T©p{|fwa_IzJiŽ}‘wª’bE‘>lKWPrh†‘s£Gƒ9ZN^re‚ZlWOian—zº—©˜uj`Yp|ŠymlP‡]½{Ê•©ˆ|uV‚N—D’CZž‰ayJˆW¨y¨“x‹ibŽY˜p‡zZ¶T©p{|fƒ¢–¡©—°ƒ«o¡d—e‘p–~Š›’”‹‚…l‡X’RœY h›x„‚‚}w€pˆq“zœˆ“•‡wle`V_LkD‚?™D§T§m„‘e…QtJePb`pw…‘”¡˜£˜€‰w„}‰‹“šž¢£Œ–}˜yžƒ¢–¡©—°ƒ…¸t²eŠk€{|g†?{B‘q˜—‚›‡‰—”y¢]˜WƒMpK[JX_i‹h“Ko@]Mg\_dWcrbŠw}œm½±‚‡notz›^}`Q‰b¹‰Ä¬g€YSwPŸU§QŒVog\v[…_©s¼Š§Ÿz‘od”D˜T…}…¸t²eŠk€ˆ«¨±¡»“¼ƒµv«p quŸ{€—~s‡bƒP‚IN€\€l€x€xn„gŠh’qšŸŽ‘€}ne`O]Bi=}=G™[šu–Œ“™‰›t‘^~PiN]Xenvˆ‡˜’›’‘‡‚€{‡~”‰¡˜§¤ ¦¤~¦|©ˆ«¨±¡»“¤©¥€€s†s”€€rJgJ€€‡¦uŸ€€•‹ˆ—€€‹t†…€€llbw€€p{q€€„y€€Ÿ|¢s€€Y¦[§€€}rn€€«X§U€€„£’œ€€PlRh€€Œ¯…€€Yv_l€€ƒ§}¦€€X£W€€MƒLr€€¤©¥€€s†~¨•¥© ¶™¾½…³|¥t›p™q—u•upˆf~XrOeP`Xeepp}qƒh†_‡]‰eŽu˜…ž‰˜ˆppeXbLnHI‰RŒd‹{‰Žž¦‚ o_wWd]cqoˆ•–“ŠŒz†pŒo—x¡ˆ¢™˜£ƒ¥s¨qª~¨•¥© ¶™‹«¡Ÿ£uŒsj{elgBiJƒ€——”~–`¢x˜‘Ž‰•Ž– “pxZƒs˜‘™“§¢¡ž‰·„¡im\MwXŠ|€s}e’zŸ©x¬Zˆp‡†—n’RldcŒª¢³ž²p¬RŠc[ˆV~ofmeW”K´^¢‚l€Ptg†‹«¡Ÿ£uŒsj›–•“¥”²“¶Ž¯†Ÿ|r‹pŒtyŽzˆv|kf`Q\I_Qgfp|r†i‡]‚X~]kŠ}™…€•u„lpkexa…]‡`ƒk}{|Œ†¬Œ®€¡r‰hsljn’z›ˆ—ˆŠw„jŠc“g™t—†Š”sšaž^žj›–•“¥”c³zœ„”qqkpb€H€RŽƒ¯±q™i“„Ž“|®†³€XcLelŽ“¡Œ«›ž¡‰…—x½Š~s_ZWopuŠd‰}™¨‹¢ixpp|†bœU‰‚q©oª‰«²k©M‚X\vSkP]NoV¢l¹…§‘ƒ€dv_Žc³zœ„”qW†l€€… Œ§¡‘‰€€z|€€‰†ŽŠŒ‰€€ftNnDoMve}€€‹vˆh_vatm€€“‰Ÿ… |—sˆs€€y‹o‰ijvrt€€”Ž¨‘²‹«‚—{€€s‘q¢w¨€¢…‘€€zo€bŠ]dŽr€€g‡S‹MŠW†l€€…c§\¥€€ˆpvx€€c€\€€¦ˆ§v€€x‘‡‚€€w©…¬€€XKXK€€“ˆŠv€€p”e‡€€µ¡µ¥€€cXmZ€€f|^n€€¬‰¨w€€fi}€€‡¥ƒ¤€€•|›Š€€alfu€€rmfi€€¦– ’€€zhc€€c§\¥€€ˆpEvWtitz|ŠŠ’—ž~m•it„“’”˜‡w}`zV]ˆsŒ’•‡w‚ntom|uŽˆ—˜’ ‡ }š{–‡Ž‘}Œmcrbllvƒ‡Ž®¯‰¡…Œ‰|˜s¨q°qp¡i’fpm~^‰Y‰]|fcnKt@wEvWtitz|upSpb]lqaŸf³hSxSŽqxmfmp|sšw£”²¦h}InM‚qvddNfPc‰~Š ¤¬µ“¥nQfJiMhik{©«†›ž‰ w†u‡ƒ™}²S¶T¦fjŠyž¡³³˜¡{”‹˜ª˜›ua~E›>¢VupSpb]lq6oCsRuc€v“€¤}¯o°^¨ZŸg™~••‘¤‹¢‚|zo‰t•†›œ£Žœ~Šuuyfˆfœu¤…Ÿ““žˆ¤…¨¡™‹r^lUc[jt|•‡Œ´Š«†™‡†‘ui§`ªZ¨R£S”c|vd„R‡J{M`WEa6i6oCsRuc€lRSR[`d‹e±_³Q—GˆQ˜X[lidzo‡s—…ºŽÃu¦bˆdydtfkj^fO_\l{}€zw~ˆ™œ©ˆ¥_Jrbm‰~˜…o€”¤©—Ÿx†{†’i°R§R‰Z„p¤š··³²”¬¤“±…¨€‡jF¤@šRlRSR[`d‹1q;zHYŠmžy°x¹k¸Z®S¡_–v‘‡§€¬xžwŽ€„Ž†š’¡£œ«Š¥x“q{yfŒ^¢eªo¤~˜ Š•©““w^jQ]Ubpu“„Œ·Š°„Ÿ€Š‚uˆc‘VšN£H¨M `Švn†U‰E|DaMEZ3f1q;zHYŠbmld€€ˆ¢Œ€€lmmm€€s‚g{€€‰}ws€€¬Š©~€€w”ƒ€€y„ƒ‰€€…€“Š€€Wh\m€€‹š†¢€€Žv’‰€€YYT`€€ªx¥n€€ee„€€zvli€€¥§Ÿ¡€€fŠc—€€ v‰€€‡_”i€€bmld€€ˆ¢9yD‚Qˆa”u¦´¹t³b¥W•[ˆl…zw§q s”€Œ‹š“œ ’ª}©jœd†nn…aœ]¥^ g•y‹ˆ£“¤›”“|emX`]dxw˜ˆ¯¶ƒ›x‡rqoatWR’O¡W¡k“€|dŒQ~MdUJa:m9yD‚Qˆa”“‰¡š¤˜¬vŸ]SI±L¡^Œu‘†‰wvW„S¡r†SœV«v²„¦Œ¤¨±°²¯¬¦ƒ¨O’Eyel‹z¬€´g¢fz_vWQaYzx“zyoƒJ‹A]Ÿj ju‘Š¥z•Ws:{;Š_v†n‚xxƒi™‡ŽŸ“‰¡š¤˜LZ…g‹v–‰¦”¯“®…£q’b‚\wcqurŠt–r“uŒƒ…ƒ—ˆ”’…Ÿm¦X¢Q“]~vnŽ`˜U”U‹b‚y€Š—”€ƒptgkno‡‚¢“²š±•¢†Žv|hl\cZafd{fn™€–Š—y‘i€egkRrHyLZ…g‹v––‰£–˜›“r¢U™dŠq ^±LªX¢k’trjlXŽQ r€˜Q–M–a§s …¤ ²³º¦¯ž†¨O´D n{žm¹k´`jeƒev‡XizŠ}’‰‰|vJc=nb—€·}±j˜s˜t•\ƒ4€5…apkž‰uŽpž˜––‰£–˜›“r^}q}€€Ž‹Ÿš¨¢¤Ÿ”’€€lq^k\meut~€€‚yt—r™v‘€€ežN¤EŸOg€€m‰Y†P~Vviu€€‹ŒŠ‚‡y~vy€€–‘«¢³©«¢–‘€€plgYgPoWzj€€‡Ž••ž“ž‹“€€i‚X‚T^}q}€€Ž‹‡s•„€€vO‰N€€jŸx–€€…’ƒ€€R~T€€ž‘šœ€€pur‡€€„aj€€˜q k€€K¨K©€€£nœy€€d‰]•€€´^´f€€s“…™€€OTOQ€€¨£ª€€„y‘…€€P~PŒ€€£zž‹€€~x†Š€€‡s•„€€vOhp{fŠe˜p¨±‰¬ˆœ}‡mrbacZn^}h‹pnf—_ž\ž_”h‚yhP›DžK—^Œs{zfvZn\fje~oŠ|Š„„ˆ}Šzƒ––§¥·§½š·‚§l–`_ggWvU†bv’‡ž’¥—£—–”‚•m•^Œ\hp{fŠe˜p}{˜„p‚J†[s•R®V¦fš}Ÿ”•‰\•^¦|£™˜¥”|„}‡Ž‰‡r{nvv€n…nw}`—j“f§X‹r`ˆO‰f‡šrº`¤fmpj{„Š†‰fgf]‚¤¢¹”±r«j©aœR‚a„€£|±|™šxŸz‹„sy}{˜„p‚JiezQ‡K•V§d±m®mŸeŠXvSf[_la€hŽleX—LžFŸH–Q…alvV‡K‘N“[h„judj\jVuU†\iw†…|”v¡{‰¼’ÊЀÊi»V¬P•Vvd_wW‡^p‘‚œ¤™¥ž› Š¥u¥d–`~iezQ‡K•V‚š™ž™vPŒbqšE Go›žª‹Œvx’«Š›’qšd‡|x‘€™•v–€ˆ‰vˆkŒzŒ“•‹g«K–ZivOujmŸh¬{ŒŠc€kf‰e”|vŠl|„|—›†²~¤€—fžP©eªy¨o¦n—Š¥”Œ—r‚w‚š™ž™vPfbsI~AŒJŸU«\«]W‰NwNl[iolqŒqŠd‡RC—<›?–H†Upd`sXZ‡a‹f‰aY{R{NOŽS–\”l‰€|–q©q·zÃ}ÏxÔkÏZÃLµKžV~fdwY„_…p‡‚’ž—£œž ©z«iœafbsI~AŒJt´€´€€„P’S€€LKq€€¯œ’€€v™‚¡€€€KJ€€s—ƒŠ€€mv€€cƒ[ˆ€€ˆ“”€€˜[¡a€€SWy€€”Ÿ€€~W€W€€‘ƒ›s€€_‹gy€€s•jŠ€€œ‘–“€€zn{p€€p–e€€t´€´€€„PbklSuKƒR—Y¤]¥]™Y…TvXpfswz„ˆzh|T„EŽA•F“P…Xs_jgholyoƒkŠ`ŠWˆS‡S‰V’X™[–gŒy}Žp£l¯p¹pÂlÇdÃZ¹SU˜azocz[c|u{…†”œ‘œ”Ÿ|¦i`‡bklSuKƒRg”\OhlMœP›hhea`q°Œ¥œ¦zº©|vzB…>ƒl‰v¥_ªV”q~ovPmI]jL|hn“dŒŽj©n‘ˆf”Z h¦« œ±¨_‹]r~‰œ|›{wtaejvk l³€³ˆ·j¨OŒMrKkQvfkwarrg”\OhlM`}jktei”m¡o¡m•jgsmsz{†„‹‰‡‚{nuZ{O‡Q[g‚jtgrewg}o}vŠg_Ž^Šcˆii•f•iŽr‚€vp™q p©nkªi¢g—l…vl\ƒZ€gw|uŠ~ŒŠˆ”ƒ•‚‹w›f›^`}jkteimciN`un¢zŸmvZq[–f©f{Ž “”±w{FoAzc”c§RY°€Ÿ’~‰WwJ\bLel`”o‰¢gµh˜v„Š}¦q¢f†Ž°ºv¦dƒpv…”Ÿ~ZqUw}‰‰¿³…_šR}ThKrT‰d€nk}fmciN`ungŽuƒ€€Œƒœ†¦†¤„•€€s…s{—…—‰Ž€€lx\}X‡aŽq€€€txuolˆq‹€€o‘il„v}€€‰wpo‹r„y€€†~Ž~“~‘‰€€…o\“R’V‹h€€{ŒŠ‡Œx‹u€€n‘a™_˜gŽuƒ€€Œƒ–z‹w€€–žš¥€€]g]s€€Œa‚[€€Š³‡³€€mWd]€€”z‰o€€šŸ—€€_{c~€€u“iž€€e©q€€Œ‘–€€TdXl€€žwŸs€€^¡]§€€€KrK€€“¥‡Ÿ€€~…tŽ€€„fwj€€‚…s„€€–z‹w€€–žwžŒ™™—¤š°œµœ®š—‰”{˜w¡y¦}¤~›u‹f‚\„]‰jŒ}ˆŒzŒoƒsz€uŽy•‡•~–z~‡srŽ{ƒ„w‹ompŒtŒy~ŽŽzŽpŽf‘Y—KšH™S’iˆ‚€Ž…zyun|a^šf wžŒ™™—¤š{´‰®Š¨Œ¶vµT”7w@j’|xvw‹ƒ¨œvwpouŽ‡²€Ÿ]LŠeœn„WlVv†ˆ¯˜¬‚¦„z›kŒ„a”^“z—„‡ib_LgJy_{`²:Â5µS‡WRPDacztqe_Lcls¡†¬Œ‰YN€fc•a³{´‰®Š¨Œ¶
\ No newline at end of file
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.fsh
new file mode 100644
index 00000000..b48472d7
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.fsh
@@ -0,0 +1,39 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out float realisticWaterDisplacementOutput1f;
+
+uniform sampler2D u_noiseTexture;
+
+uniform vec4 u_waveTimer4f;
+
+void main() {
+ vec2 sampleA = v_position2f + vec2(-0.093, -0.056) * (u_waveTimer4f.x + 0.12);
+ sampleA = textureLod(u_noiseTexture, fract(sampleA) * 0.46875 + vec2(0.015625, 0.015625), 0.0).rg;
+ vec2 sampleB = v_position2f + vec2(0.075, 0.153) * (u_waveTimer4f.x + 1.33);
+ sampleB = textureLod(u_noiseTexture, fract(sampleB) * 0.46875 + vec2(0.515625, 0.015625), 0.0).rg;
+ vec2 sampleC = v_position2f + vec2(0.075, -0.113) * u_waveTimer4f.x + vec2(sampleA.g, sampleB.g) * 0.15;
+ sampleC = textureLod(u_noiseTexture, fract(sampleC) * 0.46875 + vec2(0.515625, 0.515625), 0.0).rg;
+ vec2 sampleD = v_position2f + vec2(-0.135, 0.092) * u_waveTimer4f.x + sampleC * 0.1;
+ sampleD = textureLod(u_noiseTexture, fract(sampleD) * 0.46875 + vec2(0.015625, 0.515625), 0.0).rg;
+ realisticWaterDisplacementOutput1f = dot(vec4(sampleA.r, sampleB.r, sampleC.r, sampleD.r), vec4(0.63, 0.40, 0.035, 0.035)) + dot(vec2(sampleC.g, sampleD.g), vec2(-0.075 * sampleA.g, 0.053 * sampleA.r));
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_normals.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_normals.fsh
new file mode 100644
index 00000000..f255eb85
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_normals.fsh
@@ -0,0 +1,33 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out vec2 realisticWaterNormalOutput2f;
+
+uniform sampler2D u_displacementTexture;
+uniform vec2 u_sampleOffset2f;
+
+void main() {
+ float A = textureLod(u_displacementTexture, v_position2f, 0.0).r;
+ float B = textureLod(u_displacementTexture, v_position2f + vec2(u_sampleOffset2f.x, 0.0), 0.0).r;
+ float C = textureLod(u_displacementTexture, v_position2f - vec2(0.0, u_sampleOffset2f.y), 0.0).r;
+ realisticWaterNormalOutput2f = clamp((vec2(A * A) - vec2(B, C) * vec2(B, C)) * 10.0 + 0.5, vec2(0.0), vec2(1.0));
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.fsh
new file mode 100644
index 00000000..93b416bb
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.fsh
@@ -0,0 +1,433 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision highp sampler2DShadow;
+
+in vec4 v_position4f;
+in vec2 v_positionClip2f;
+
+#ifdef COMPILE_TEXTURE_ATTRIB
+in vec2 v_texture2f;
+#else
+uniform vec2 u_textureCoords01;
+#endif
+
+uniform vec4 u_color4f;
+
+#ifdef COMPILE_COLOR_ATTRIB
+in vec4 v_color4f;
+#endif
+
+#ifdef COMPILE_NORMAL_ATTRIB
+in vec3 v_normal3f;
+in float v_block1f;
+#else
+uniform vec3 u_uniformNormal3f;
+uniform float u_blockConstant1f;
+#endif
+
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+in vec2 v_lightmap2f;
+#else
+uniform vec2 u_textureCoords02;
+#endif
+
+uniform mat4 u_inverseViewMatrix4f;
+uniform mat4 u_modelViewProjMat4f_;
+
+layout(location = 0) out vec4 output4f;
+
+#ifdef COMPILE_DYNAMIC_LIGHTS
+struct DynamicLight {
+ mediump vec4 u_lightPosition4f;
+ mediump vec4 u_lightColor4f;
+};
+layout(std140) uniform u_chunkLightingData {
+ mediump int u_dynamicLightCount1i;
+ mediump int _paddingA_;
+ mediump int _paddingB_;
+ mediump int _paddingC_;
+ DynamicLight u_dynamicLightArray[12];
+};
+#endif
+
+layout(std140) uniform u_worldLightingData {
+ mediump vec4 u_sunDirection4f;
+ mediump vec4 u_sunColor3f_sky1f;
+ mediump vec4 u_fogParameters4f;
+ mediump vec4 u_fogColorLight4f;
+ mediump vec4 u_fogColorDark4f;
+ mediump vec4 u_fogColorAddSun4f;
+ mediump vec4 u_blockSkySunDynamicLightFac4f;
+#ifdef COMPILE_SUN_SHADOW_LOD0
+ mediump mat4 u_sunShadowMatrixLOD04f;
+#define DO_COMPILE_SUN_SHADOWS
+#define SUN_SHADOW_MAP_FRAC 1.0
+#endif
+#ifdef COMPILE_SUN_SHADOW_LOD1
+ mediump mat4 u_sunShadowMatrixLOD04f;
+ mediump mat4 u_sunShadowMatrixLOD14f;
+#define DO_COMPILE_SUN_SHADOWS
+#define SUN_SHADOW_MAP_FRAC 0.5
+#endif
+#ifdef COMPILE_SUN_SHADOW_LOD2
+ mediump mat4 u_sunShadowMatrixLOD04f;
+ mediump mat4 u_sunShadowMatrixLOD14f;
+ mediump mat4 u_sunShadowMatrixLOD24f;
+#define DO_COMPILE_SUN_SHADOWS
+#define SUN_SHADOW_MAP_FRAC 0.3333333
+#endif
+};
+
+#ifdef DO_COMPILE_SUN_SHADOWS
+uniform sampler2DShadow u_sunShadowDepthTexture;
+#ifdef COMPILE_SUN_SHADOW_SMOOTH
+const vec2 POISSON_DISK[7] = vec2[](
+vec2(-0.077, 0.995), vec2(0.998, 0.015),
+vec2(-0.116, -0.987), vec2(-0.916, 0.359),
+vec2(-0.697, -0.511), vec2(0.740, -0.612),
+vec2(0.675, 0.682));
+#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0
+#define SMOOTH_SHADOW_RADIUS 0.00075
+#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\
+ tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\
+ tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\
+ tmpVec2.y += lod;\
+ tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\
+ accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES;
+#endif
+#endif
+
+uniform sampler2D u_environmentMap;
+uniform sampler2D u_irradianceMap;
+uniform sampler2D u_reflectionMap;
+uniform sampler2D u_refractionMap;
+uniform sampler2D u_brdfLUT;
+uniform sampler2D u_normalMap;
+
+#ifdef COMPILE_FOG_LIGHT_SHAFTS
+uniform sampler2D u_lightShaftsTexture;
+#endif
+
+uniform vec4 u_waterWindOffset4f;
+uniform vec3 u_wavingBlockOffset3f;
+
+#define WATER_ROUGHNESS 0.03
+#define WATER_F0 0.6
+
+vec3 eaglercraftLighting_Water(in vec3 albedo, in vec3 radiance, in vec3 viewDir, in vec3 lightDir, in vec3 normalVec) {
+ float roughness = 1.0 - WATER_ROUGHNESS * 0.85;
+ vec3 H = normalize(viewDir + lightDir);
+ vec3 NdotHVL = max(normalVec * mat3(H, viewDir, lightDir), vec3(0.0));
+ float NDF = (WATER_ROUGHNESS * WATER_ROUGHNESS * WATER_ROUGHNESS * WATER_ROUGHNESS);
+ float denom = NdotHVL.x * NdotHVL.x * (NDF - 1.0) + 1.0;
+ NDF /= denom * denom * 3.141592;
+ float gs = WATER_ROUGHNESS + 1.0;
+ gs *= gs * 0.125;
+ vec2 Ndot = NdotHVL.yz;
+ Ndot /= Ndot * (1.0 - gs) + gs;
+ NDF *= Ndot.x * Ndot.y;
+ float fresnel = pow(max(1.0 - NdotHVL.x, 0.0), 5.0);
+ vec3 F = vec3(WATER_F0 + (1.0 - WATER_F0) * fresnel);
+ vec3 kD = (1.0 - F) * albedo / 3.141592;
+ denom = 4.0 * NdotHVL.y * NdotHVL.z + 0.0001;
+ return (kD + (NDF * F / denom)) * radiance * NdotHVL.z;
+}
+
+vec3 eaglercraftIBL_Specular_Water(in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec) {
+ float NdotV = dot(normalVec, -viewDir);
+ float fresnel = pow(max(1.0 - NdotV, 0.0), 5.0);
+ vec3 F = vec3(WATER_F0 + (max(1.0 - WATER_ROUGHNESS, WATER_F0) - WATER_F0) * fresnel);
+ vec2 brdf2f = vec2(max(NdotV, 0.0), WATER_ROUGHNESS);
+ brdf2f = 1.0 - brdf2f;
+ brdf2f *= brdf2f;
+ brdf2f = 1.0 - brdf2f;
+ brdf2f = textureLod(u_brdfLUT, brdf2f, 0.0).rg;
+ return envMapSample * (F * brdf2f.r + brdf2f.g);
+}
+
+mat3 cotangent_frame(in vec3 N, in vec3 p, in vec2 uv) {
+ vec3 dp1 = dFdx(p);
+ vec3 dp2 = dFdy(p);
+ vec2 duv1 = dFdx(uv);
+ vec2 duv2 = dFdy(uv);
+ vec3 dp2perp = cross(dp2, N);
+ vec3 dp1perp = cross(N, dp1);
+ vec3 T = dp2perp * duv1.x + dp1perp * duv2.x;
+ vec3 B = dp2perp * duv1.y + dp1perp * duv2.y;
+ float invmax = inversesqrt(max(dot(T,T), dot(B,B)));
+ return mat3(T * invmax, B * invmax, N);
+}
+
+void main() {
+ vec4 worldPosition4f;
+ vec4 worldDirection4f;
+ vec4 diffuseColor4f;
+ vec3 normalVector3f;
+ vec2 lightmapCoords2f;
+ float block1f;
+
+ // =========== RESOLVE CONSTANTS ============ //
+
+ worldPosition4f = u_inverseViewMatrix4f * v_position4f;
+ worldPosition4f.xyz /= worldPosition4f.w;
+ worldPosition4f.w = 1.0;
+ worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0);
+ worldDirection4f.xyz = normalize(worldDirection4f.xyz);
+
+#ifdef COMPILE_ENABLE_LIGHTMAP
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+ lightmapCoords2f = v_lightmap2f;
+#else
+ lightmapCoords2f = u_textureCoords02;
+#endif
+#endif
+
+#ifdef COMPILE_NORMAL_ATTRIB
+ normalVector3f = normalize(v_normal3f);
+ block1f = round(v_block1f);
+#else
+ normalVector3f = u_uniformNormal3f;
+ block1f = u_blockConstant1f;
+#endif
+
+ normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f);
+
+ // ========= CALCULATE DIFFUSE COLOR ========== //
+
+#ifdef COMPILE_COLOR_ATTRIB
+ diffuseColor4f = v_color4f * u_color4f;
+#else
+ diffuseColor4f = u_color4f;
+#endif
+
+ diffuseColor4f *= vec4(0.0478, 0.0585, 0.1, 1.0);
+
+ // ======== SAMPLE REFLECT/REFRACT ======== //
+
+#ifdef COMPILE_TEXTURE_ATTRIB
+ vec2 texCoords2f = v_texture2f;
+#else
+ vec2 texCoords2f = u_textureCoords01;
+#endif
+
+ vec4 worldPosition4fOff = worldPosition4f;
+ worldPosition4fOff.xyz += u_wavingBlockOffset3f;
+
+ vec2 rotatedUV2f = worldPosition4fOff.xz + (block1f == 10.0 ? u_waterWindOffset4f.z * texCoords2f : u_waterWindOffset4f.xy);
+ rotatedUV2f *= (block1f == 10.0 ? 0.75 : 0.25);
+ mat3 cf = cotangent_frame(normalVector3f, worldDirection4f.xyz, rotatedUV2f);
+ vec3 surfaceNormalsMap3f = vec3(textureLod(u_normalMap, rotatedUV2f, 0.0).rg, 0.0);
+ surfaceNormalsMap3f.xy *= 2.0;
+ surfaceNormalsMap3f.xy -= 1.0;
+
+ vec3 surfaceNormalsMapFlat3f = cf * surfaceNormalsMap3f;
+ surfaceNormalsMapFlat3f *= 0.1;
+
+ surfaceNormalsMap3f.z = 8.0;
+ surfaceNormalsMap3f = normalize(surfaceNormalsMap3f);
+ normalVector3f = surfaceNormalsMap3f = cf * surfaceNormalsMap3f;
+
+ vec4 worldPosition4fOff2 = worldPosition4f;
+ worldPosition4fOff2.xyz -= surfaceNormalsMapFlat3f * 4.0;
+ vec3 reflectCoordsR = mat4x3(
+ u_modelViewProjMat4f_[0].xyw,
+ u_modelViewProjMat4f_[1].xyw,
+ u_modelViewProjMat4f_[2].xyw,
+ u_modelViewProjMat4f_[3].xyw) * worldPosition4fOff2;
+ reflectCoordsR.xy /= reflectCoordsR.z;
+ reflectCoordsR.xy *= 0.5;
+ reflectCoordsR.xy += 0.5;
+
+ worldPosition4fOff2 = worldPosition4f;
+ worldPosition4fOff2.xyz += surfaceNormalsMapFlat3f;
+ vec3 reflectCoordsL = mat4x3(
+ u_modelViewProjMat4f_[0].xyw,
+ u_modelViewProjMat4f_[1].xyw,
+ u_modelViewProjMat4f_[2].xyw,
+ u_modelViewProjMat4f_[3].xyw) * worldPosition4fOff2;
+ reflectCoordsL.xy /= reflectCoordsL.z;
+ reflectCoordsL.xy *= 0.5;
+ reflectCoordsL.xy += 0.5;
+
+ vec4 envMapSample4f = textureLod(u_reflectionMap, reflectCoordsR.xy, 0.0);
+ vec4 refractionSample = textureLod(u_refractionMap, reflectCoordsL.xy, 0.0);
+
+#ifdef COMPILE_COLOR_ATTRIB
+ refractionSample *= v_color4f * v_color4f * u_color4f * u_color4f;
+#else
+ refractionSample *= u_color4f * u_color4f;
+#endif
+
+ // ============ SUN LIGHTING ============== //
+
+ diffuseColor4f.rgb *= diffuseColor4f.rgb;
+
+ vec3 lightColor3f = vec3(0.0);
+ if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 &&
+ (u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) {
+#ifdef DO_COMPILE_SUN_SHADOWS
+
+ // ========== SUN SHADOW: LOD0 ============ //
+
+ float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
+ float shadowSample = 1.0;
+ vec4 shadowWorldPos4f = worldPosition4f;
+ shadowWorldPos4f.xyz += normalVector3f * 0.05;
+
+ vec4 shadowTexPos4f;
+ vec2 tmpVec2;
+ for(;;) {
+ shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f;
+ if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
+ shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0);
+#ifdef COMPILE_SUN_SHADOW_SMOOTH
+ shadowSample *= SMOOTH_SHADOW_SAMPLES;
+ SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
+ shadowSample = max(shadowSample * 2.0 - 1.0, 0.0);
+#endif
+ break;
+ }
+
+#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2)
+ shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f;
+ if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
+ shadowTexPos4f.y += 1.0;
+ shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
+ shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
+ break;
+ }
+#endif
+
+#ifdef COMPILE_SUN_SHADOW_LOD2
+ shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f;
+ if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
+ shadowTexPos4f.y += 2.0;
+ shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
+ shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
+ }
+#endif
+ break;
+ }
+#endif
+ lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
+#ifdef DO_COMPILE_SUN_SHADOWS
+ lightColor3f *= shadowSample * skyLight;
+#endif
+ lightColor3f = eaglercraftLighting_Water(diffuseColor4f.rgb, lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalVector3f) * u_blockSkySunDynamicLightFac4f.z;
+ }
+
+ // =========== REFLECTION MAP =========== //
+
+ lightmapCoords2f *= lightmapCoords2f;
+
+ float e = 0.0;
+ e += envMapSample4f.g <= 0.0 ? 0.0 : 1.0;
+ e += lightmapCoords2f.y > 0.5 ? 0.0 : 1.0;
+ //e += abs(normalVector3f.y) > 0.1 ? 0.0 : 1.0;
+ if(e == 0.0) {
+ vec3 reflectDir = reflect(worldDirection4f.xyz, normalVector3f);
+ reflectDir.xz /= abs(reflectDir.y) + 1.0;
+ float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz);
+ dst *= dst;
+ reflectDir.xz *= 0.975;
+ if(dst < 0.005) {
+ vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
+ vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
+ envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a));
+ }else {
+ reflectDir.xz *= vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25);
+ reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75);
+ envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0);
+ }
+ envMapSample4f.rgb *= (lightmapCoords2f.y * 2.0 - 1.0);
+ }
+
+ if(envMapSample4f.g > 0.0) {
+ lightColor3f += eaglercraftIBL_Specular_Water(envMapSample4f.rgb, worldDirection4f.xyz, normalVector3f) * 0.5;
+ }
+
+#ifdef COMPILE_DYNAMIC_LIGHTS
+
+ // =========== DYNAMIC LIGHTING =========== //
+
+ vec3 dlightDist3f, dlightDir3f, dlightColor3f;
+ int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this
+ for(int i = 0; i < safeLightCount; ++i) {
+ dlightDist3f = u_dynamicLightArray[i].u_lightPosition4f.xyz - worldPosition4f.xyz;
+ dlightDir3f = normalize(dlightDist3f);
+ if(dot(dlightDir3f, normalVector3f) <= 0.0) {
+ continue;
+ }
+ dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f);
+ if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) {
+ continue;
+ }
+ lightColor3f += eaglercraftLighting_Water(diffuseColor4f.rgb, dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f) * u_blockSkySunDynamicLightFac4f.w;
+ }
+
+#endif
+
+ // ============ CACLULATE FOG ============= //
+
+ vec4 fogBlend4f = vec4(0.0);
+ while(u_fogParameters4f.x > 0.0) {
+ float atmos = u_fogParameters4f.x >= 4.0 ? 4.0 : 0.0;
+ float type = u_fogParameters4f.x - atmos;
+ fogBlend4f = mix(u_fogColorLight4f, u_fogColorDark4f, lightmapCoords2f.g);
+
+ float f, l = sqrt(dot(v_position4f.xyz, v_position4f.xyz));
+ if(type == 1.0) {
+ f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z);
+ }else {
+ f = 1.0 - exp(-u_fogParameters4f.y * l);
+ }
+
+ fogBlend4f.a *= clamp(f, 0.0, 1.0);
+
+ if(atmos == 0.0) {
+ break;
+ }
+
+ vec3 atmosSamplePos = v_position4f.xyz / -l;
+ atmosSamplePos.xz /= abs(atmosSamplePos.y) + 1.0;
+ atmosSamplePos.xz *= vec2(-0.5, -0.25) * 0.75;
+ atmosSamplePos.xz += vec2(0.5, 0.25);
+
+ fogBlend4f.rgb *= textureLod(u_irradianceMap, atmosSamplePos.xz, 0.0).rgb + u_fogColorAddSun4f.rgb;
+
+#ifdef COMPILE_FOG_LIGHT_SHAFTS
+ fogBlend4f.rgb *= pow(textureLod(u_lightShaftsTexture, v_positionClip2f * 0.5 + 0.5, 0.0).r * 0.9 + 0.1, 2.25);
+ fogBlend4f.a = fogBlend4f.a * 0.9 + 0.1;
+#endif
+ break;
+ }
+
+ // ============ OUTPUT COLOR ============== //
+
+ vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0 * u_blockSkySunDynamicLightFac4f.x;
+ vec3 skyLight = (lightmapCoords2f.g + 0.05) * vec3(0.9102, 0.9, 1.0) * u_blockSkySunDynamicLightFac4f.y;
+ diffuseColor4f.rgb *= (skyLight + blockLight) * 0.075;
+ diffuseColor4f.rgb += lightColor3f;
+ diffuseColor4f.rgb = mix(diffuseColor4f.rgb + refractionSample.rgb, fogBlend4f.rgb, fogBlend4f.a);
+ output4f = vec4(diffuseColor4f.rgb, 1.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.vsh
new file mode 100644
index 00000000..cd6e01db
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.vsh
@@ -0,0 +1,80 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+in vec3 a_position3f;
+
+out vec4 v_position4f;
+
+#ifdef COMPILE_FOG_LIGHT_SHAFTS
+out vec2 v_positionClip2f;
+#endif
+
+#ifdef COMPILE_TEXTURE_ATTRIB
+in vec2 a_texture2f;
+out vec2 v_texture2f;
+uniform mat4 u_textureMat4f01;
+#endif
+
+#ifdef COMPILE_COLOR_ATTRIB
+in vec4 a_color4f;
+out vec4 v_color4f;
+#endif
+
+#ifdef COMPILE_NORMAL_ATTRIB
+in vec4 a_normal4f;
+out vec3 v_normal3f;
+out float v_block1f;
+#endif
+
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+in vec2 a_lightmap2f;
+out vec2 v_lightmap2f;
+uniform mat4 u_textureMat4f02;
+#endif
+
+uniform mat4 u_modelviewMat4f;
+uniform mat4 u_projectionMat4f;
+
+#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
+
+void main() {
+ v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0);
+
+#ifdef COMPILE_TEXTURE_ATTRIB
+ vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0);
+ v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z;
+#endif
+
+#ifdef COMPILE_COLOR_ATTRIB
+ v_color4f = a_color4f;
+#endif
+
+#ifdef COMPILE_NORMAL_ATTRIB
+ v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz);
+ v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5);
+#endif
+
+#ifdef COMPILE_LIGHTMAP_ATTRIB
+ vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0);
+ v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z;
+#endif
+
+ gl_Position = u_projectionMat4f * v_position4f;
+
+#ifdef COMPILE_FOG_LIGHT_SHAFTS
+ v_positionClip2f = gl_Position.xy / gl_Position.w;
+#endif
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_control.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_control.fsh
new file mode 100644
index 00000000..8feaccfe
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_control.fsh
@@ -0,0 +1,236 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+#ifdef COMPILE_REPROJECT_SSAO
+layout(location = 0) out vec4 reprojectionSSAOOutput4f;
+#ifdef COMPILE_REPROJECT_SSR
+layout(location = 1) out vec4 reprojectionReflectionOutput4f;
+layout(location = 2) out vec4 reprojectionHitVectorOutput4f;
+#endif
+#else
+layout(location = 0) out vec4 reprojectionReflectionOutput4f;
+layout(location = 1) out vec4 reprojectionHitVectorOutput4f;
+#endif
+
+uniform sampler2D u_gbufferDepthTexture;
+#ifdef COMPILE_REPROJECT_SSAO
+uniform sampler2D u_ssaoSampleTexture;
+// R: ssao history length
+// G: ssao value
+// B: pixel opacity
+// A: padding
+uniform sampler2D u_reprojectionSSAOInput4f;
+#endif
+
+#ifdef COMPILE_REPROJECT_SSR
+uniform sampler2D u_gbufferNormalTexture;
+uniform sampler2D u_gbufferMaterialTexture;
+
+// R: reflection R
+// G: reflection G
+// B: reflection B
+// A: current step
+uniform sampler2D u_reprojectionReflectionInput4f;
+
+// R: relative X of reflected pixel from origin
+// G: relative Y of reflected pixel from origin
+// B: relative Z of reflected pixel from origin
+// A: is reflected flag
+uniform sampler2D u_reprojectionHitVectorInput4f;
+
+uniform sampler2D u_lastFrameColorInput4f;
+
+uniform mat4 u_projectionMatrix4f;
+uniform mat4 u_inverseProjectionMatrix4f;
+uniform mat4 u_lastInverseProjMatrix4f;
+
+// matrix to transform view pos in old frame to view pos in current frame
+uniform mat4 u_reprojectionInverseViewMatrix4f;
+uniform mat4 u_viewToPreviousProjMatrix4f;
+
+#endif
+
+uniform sampler2D u_reprojectionDepthTexture;
+
+uniform mat4 u_inverseViewProjMatrix4f;
+uniform mat4 u_reprojectionMatrix4f;
+
+// x = near plane
+// y = far plane
+// z = near plane * 2
+// w = far plane - near plane
+uniform vec4 u_nearFarPlane4f;
+
+uniform vec4 u_pixelAlignment4f;
+
+#define reprojDepthLimit 0.25
+
+#define GET_LINEAR_DEPTH_FROM_VALUE(depthSample) (u_nearFarPlane4f.z / (u_nearFarPlane4f.y + u_nearFarPlane4f.x + (depthSample * 2.0 - 1.0) * u_nearFarPlane4f.w))
+
+#define CREATE_DEPTH_MATRIX(matrix4fInput) mat4x2(matrix4fInput[0].zw,matrix4fInput[1].zw,matrix4fInput[2].zw,matrix4fInput[3].zw)
+
+void main() {
+ vec2 v_position2f2 = (floor(v_position2f * u_pixelAlignment4f.xy) + 0.25) * (2.0 / u_pixelAlignment4f.zw);
+#ifdef COMPILE_REPROJECT_SSAO
+ reprojectionSSAOOutput4f = vec4(0.0, 1.0, 0.0, 0.0);
+#endif
+#ifdef COMPILE_REPROJECT_SSR
+ reprojectionReflectionOutput4f = vec4(0.0, 0.0, 0.0, 0.0);
+ reprojectionHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0);
+#endif
+ float fragDepth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r;
+
+ if(fragDepth < 0.000001) {
+ return;
+ }
+
+ vec4 fragClipSpacePos4f = vec4(v_position2f, fragDepth, 1.0) * 2.0 - 1.0;
+ vec4 fragPos4f = u_inverseViewProjMatrix4f * fragClipSpacePos4f;
+ fragPos4f.xyz /= fragPos4f.w;
+ fragPos4f.w = 1.0;
+ vec4 reprojPos4f = u_reprojectionMatrix4f * fragPos4f;
+ vec4 reprojClipPos4f = vec4(reprojPos4f.xyz / reprojPos4f.w, 1.0);
+ reprojPos4f = reprojClipPos4f;
+ reprojPos4f.xyz *= 0.5;
+ reprojPos4f.xyz += 0.5;
+ reprojPos4f.xy = (floor(reprojPos4f.xy * u_pixelAlignment4f.zw) + 0.5) * (0.5 / u_pixelAlignment4f.xy);
+ if(reprojPos4f.xy != clamp(reprojPos4f.xy, vec2(0.001), vec2(0.999)) || abs(GET_LINEAR_DEPTH_FROM_VALUE(textureLod(u_reprojectionDepthTexture, reprojPos4f.xy, 0.0).r) - GET_LINEAR_DEPTH_FROM_VALUE(reprojPos4f.z)) > reprojDepthLimit) {
+#ifdef COMPILE_REPROJECT_SSAO
+ reprojectionSSAOOutput4f = vec4(0.01, textureLod(u_ssaoSampleTexture, v_position2f, 0.0).r, 1.0, 0.0);
+#endif
+#ifdef COMPILE_REPROJECT_SSR
+ reprojectionHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 50.0);
+#endif
+ return;
+ }
+
+#ifdef COMPILE_REPROJECT_SSAO
+ vec4 reprojectionSSAOInput4f = textureLod(u_reprojectionSSAOInput4f, reprojPos4f.xy, 0.0);
+ reprojectionSSAOInput4f.g = mix(textureLod(u_ssaoSampleTexture, v_position2f, 0.0).r, reprojectionSSAOInput4f.g, min(reprojectionSSAOInput4f.r * 10.0, 0.85));
+ reprojectionSSAOInput4f.r = min(reprojectionSSAOInput4f.r + 0.01, 1.0);
+ reprojectionSSAOInput4f.b = 1.0;
+ reprojectionSSAOOutput4f = reprojectionSSAOInput4f;
+#endif
+
+#ifdef COMPILE_REPROJECT_SSR
+ vec4 materials = textureLod(u_gbufferMaterialTexture, v_position2f2, 0.0);
+ float f = materials.g < 0.06 ? 1.0 : 0.0;
+ f += materials.r < 0.5 ? 1.0 : 0.0;
+ f += materials.a > 0.5 ? 1.0 : 0.0;
+ if(f > 0.0) {
+ return;
+ }
+
+ vec4 lastFrameHitVector4f = textureLod(u_reprojectionHitVectorInput4f, reprojPos4f.xy, 0.0);
+ if(lastFrameHitVector4f.g <= 0.0) {
+ reprojectionReflectionOutput4f = textureLod(u_reprojectionReflectionInput4f, reprojPos4f.xy, 0.0);
+ reprojectionReflectionOutput4f.a = max(reprojectionReflectionOutput4f.a - 1.0, 1.0);
+ reprojectionHitVectorOutput4f = vec4(0.0, 0.0, 0.0, lastFrameHitVector4f.a);
+ return;
+ }
+
+ reprojectionReflectionOutput4f = vec4(0.0, 0.0, 0.0, 1.0);
+
+ lastFrameHitVector4f.g -= 0.0004;
+
+ vec4 lastFrameFragPosView4f = u_lastInverseProjMatrix4f * vec4(reprojClipPos4f.xyz, 1.0);
+ lastFrameFragPosView4f.xyz /= lastFrameFragPosView4f.w;
+ lastFrameFragPosView4f.w = 1.0;
+ vec4 lastFrameHitPos4f = vec4(lastFrameFragPosView4f.xyz + lastFrameHitVector4f.xyz, 1.0);
+
+ vec4 thisFrameHitPos4f = u_reprojectionInverseViewMatrix4f * lastFrameHitPos4f;
+ thisFrameHitPos4f.xyz /= thisFrameHitPos4f.w;
+ thisFrameHitPos4f.w = 1.0;
+
+ vec4 thisFrameHitPosProj4f = u_projectionMatrix4f * thisFrameHitPos4f;
+ thisFrameHitPosProj4f.xyz /= thisFrameHitPosProj4f.w;
+ thisFrameHitPosProj4f.w = 1.0;
+ vec3 thisFrameHitPosProjTex3f = thisFrameHitPosProj4f.xyz * 0.5 + 0.5;
+
+ if(thisFrameHitPosProjTex3f.xy != clamp(thisFrameHitPosProjTex3f.xy, vec2(0.001), vec2(0.999))) {
+ return;
+ }
+
+ float fragDepthSample = textureLod(u_gbufferDepthTexture, thisFrameHitPosProjTex3f.xy, 0.0).r * 2.0 - 1.0;
+ vec2 thisFrameHitPosProjDepthPos = CREATE_DEPTH_MATRIX(u_inverseProjectionMatrix4f) * vec4(thisFrameHitPosProj4f.xy, fragDepthSample, 1.0);
+ thisFrameHitPosProjDepthPos.x /= thisFrameHitPosProjDepthPos.y;
+
+ if(thisFrameHitPosProjDepthPos.x - thisFrameHitPos4f.z - 0.125 < 0.0) {
+ return;
+ }
+
+ vec3 lastFrameHitPosNormal3f = textureLod(u_gbufferNormalTexture, thisFrameHitPosProjTex3f.xy, 0.0).rgb;
+ lastFrameHitPosNormal3f *= 2.0;
+ lastFrameHitPosNormal3f -= 1.0;
+
+ vec3 currentNormal3f = textureLod(u_gbufferNormalTexture, v_position2f2, 0.0).xyz;
+ currentNormal3f *= 2.0;
+ currentNormal3f -= 1.0;
+
+ vec4 fragPosView4f = u_inverseProjectionMatrix4f * fragClipSpacePos4f;
+ fragPosView4f.xyz /= fragPosView4f.w;
+ fragPosView4f.w = 1.0;
+
+ vec3 rayOrigin = fragPosView4f.xyz;
+ vec3 planePos = thisFrameHitPos4f.xyz;
+ vec3 planeNormal = lastFrameHitPosNormal3f;
+
+ vec3 newRayDirection = reflect(normalize(rayOrigin), currentNormal3f.xyz);
+
+ float dist = dot(planeNormal, newRayDirection);
+ if(dist > 0.9) {
+ return;
+ }
+
+ dist = dot(planeNormal, planePos - rayOrigin) / dist;
+ if(dist < 0.0) {
+ return;
+ }
+
+ reprojectionHitVectorOutput4f = vec4(newRayDirection * dist, 1.0);
+ reprojectionHitVectorOutput4f.y += 0.0004;
+
+ thisFrameHitPosProj4f = u_viewToPreviousProjMatrix4f * vec4(rayOrigin + newRayDirection * dist, 1.0);
+ thisFrameHitPosProj4f.xyz /= thisFrameHitPosProj4f.w;
+ thisFrameHitPosProj4f.w = 1.0;
+ thisFrameHitPosProjTex3f = thisFrameHitPosProj4f.xyz * 0.5 + 0.5;
+
+ if(thisFrameHitPosProjTex3f.xy != clamp(thisFrameHitPosProjTex3f.xy, vec2(0.001), vec2(0.999))) {
+ return;
+ }
+
+ fragDepthSample = textureLod(u_reprojectionDepthTexture, thisFrameHitPosProjTex3f.xy, 0.0).r * 2.0 - 1.0;
+
+ vec2 thisFrameHitPosProjPos = CREATE_DEPTH_MATRIX(u_lastInverseProjMatrix4f) * thisFrameHitPosProj4f;
+ thisFrameHitPosProjPos.x /= thisFrameHitPosProjPos.y;
+
+ thisFrameHitPosProjDepthPos = CREATE_DEPTH_MATRIX(u_lastInverseProjMatrix4f) * vec4(thisFrameHitPosProj4f.xy, fragDepthSample, 1.0);
+ thisFrameHitPosProjDepthPos.x /= thisFrameHitPosProjDepthPos.y;
+
+ if(thisFrameHitPosProjDepthPos.x - thisFrameHitPosProjPos.x - 0.125 < 0.0) {
+ reprojectionHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0);
+ return;
+ }
+
+ reprojectionReflectionOutput4f = vec4(textureLod(u_lastFrameColorInput4f, thisFrameHitPosProjTex3f.xy, 0.0).rgb, 0.0);
+#endif
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_ssr.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_ssr.fsh
new file mode 100644
index 00000000..f6c1e324
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_ssr.fsh
@@ -0,0 +1,110 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out vec4 reflectionOutput4f;
+layout(location = 1) out vec4 hitVectorOutput4f;
+
+uniform sampler2D u_gbufferDepthTexture;
+uniform sampler2D u_gbufferNormalTexture;
+uniform sampler2D u_reprojectionReflectionInput4f;
+uniform sampler2D u_reprojectionHitVectorInput4f;
+uniform sampler2D u_lastFrameColorInput4f;
+uniform sampler2D u_lastFrameDepthInput;
+
+uniform mat4 u_lastProjectionMatrix4f;
+uniform mat4x2 u_lastInverseProjMatrix4x2f;
+
+uniform mat4 u_inverseProjectionMatrix4f;
+
+uniform float u_sampleStep1f;
+
+uniform vec4 u_pixelAlignment4f;
+
+#define maxAge 55.0
+#define maxSamples 50.0
+
+void main() {
+ vec2 v_position2f2 = (floor(v_position2f * u_pixelAlignment4f.xy) + 0.25) * (2.0 / u_pixelAlignment4f.zw);
+ reflectionOutput4f = vec4(0.0, 0.0, 0.0, 0.0);
+ hitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0);
+ float fragDepth = textureLod(u_gbufferDepthTexture, v_position2f2, 0.0).r;
+
+ if(fragDepth < 0.000001) {
+ return;
+ }
+
+ vec4 reflectionInput4f = textureLod(u_reprojectionReflectionInput4f, v_position2f, 0.0);
+ vec4 hitVectorInput4f = textureLod(u_reprojectionHitVectorInput4f, v_position2f, 0.0);
+ hitVectorInput4f.a += 1.0;
+ float f = reflectionInput4f.a < 1.0 ? 1.0 : reflectionInput4f.a;
+ reflectionInput4f.a = hitVectorInput4f.a > maxAge ? f : reflectionInput4f.a;
+ if(reflectionInput4f.a < 1.0) {
+ reflectionOutput4f = reflectionInput4f;
+ hitVectorOutput4f = hitVectorInput4f;
+ return;
+ }
+
+ vec4 fragPos4f = u_inverseProjectionMatrix4f * (vec4(v_position2f2, fragDepth, 1.0) * 2.0 - 1.0);
+ fragPos4f.xyz /= fragPos4f.w;
+ fragPos4f.w = 1.0;
+ vec4 reflectionNormal4f = textureLod(u_gbufferNormalTexture, v_position2f2, 0.0);
+ reflectionNormal4f.xyz *= 2.0;
+ reflectionNormal4f.xyz -= 1.0;
+ reflectionNormal4f.xyz = reflect(normalize(fragPos4f.xyz), reflectionNormal4f.xyz);
+ reflectionNormal4f.w = 1.0;
+ float sampleStepMod = (reflectionInput4f.a * 0.03 + 0.15 + length(fragPos4f.xyz) * 0.03) * u_sampleStep1f;
+ vec3 sampleOffset3f = reflectionNormal4f.xyz * reflectionInput4f.a * sampleStepMod;
+ fragPos4f.xyz += sampleOffset3f;
+ reflectionNormal4f = u_lastProjectionMatrix4f * fragPos4f;
+ reflectionNormal4f.xyz /= reflectionNormal4f.w;
+ reflectionNormal4f.w = 1.0;
+ vec3 reflectionSamplePos3f = reflectionNormal4f.xyz;
+ reflectionSamplePos3f *= 0.5;
+ reflectionSamplePos3f += 0.5;
+ reflectionSamplePos3f.xy = (floor(reflectionSamplePos3f.xy * u_pixelAlignment4f.zw) + 0.5) * (0.5 / u_pixelAlignment4f.xy);
+
+ if(clamp(reflectionSamplePos3f.xy, vec2(0.001), vec2(0.999)) != reflectionSamplePos3f.xy) {
+ return;
+ }
+
+ float reflectDepthSample = textureLod(u_lastFrameDepthInput, reflectionSamplePos3f.xy, 0.0).r;
+ vec2 sampleFragDepth = u_lastInverseProjMatrix4x2f * vec4(reflectionNormal4f.xy, reflectDepthSample * 2.0 - 1.0, 1.0);
+ sampleFragDepth.x /= sampleFragDepth.y;
+
+ reflectDepthSample = sampleFragDepth.x - fragPos4f.z;
+ if(reflectDepthSample < sampleStepMod * 3.0) {
+ reflectionInput4f.a += 1.0;
+ reflectionOutput4f = reflectionInput4f.a >= maxSamples ? vec4(0.0, 0.0, 0.0, 0.0) : reflectionInput4f;
+ hitVectorOutput4f = vec4(0.0, 0.0, 0.0, hitVectorInput4f.a);
+ return;
+ }
+
+ if(abs(reflectDepthSample) > sampleStepMod * 6.0) {
+ return;
+ }
+
+ vec4 colorSample = textureLod(u_lastFrameColorInput4f, reflectionSamplePos3f.xy, 0.0);
+ reflectionOutput4f = vec4(colorSample.rgb, 0.0);
+ reflectionOutput4f.g += 0.0005;
+ hitVectorOutput4f = vec4(colorSample.a > 0.0 ? sampleOffset3f : vec3(0.0), 0.0);
+ hitVectorOutput4f.g += colorSample.a > 0.0 ? 0.0004 : 0.0;
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/shader_pack_icon.png b/desktopRuntime/resources/assets/eagler/glsl/deferred/shader_pack_icon.png
new file mode 100644
index 00000000..1b0f1d18
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/shader_pack_icon.png differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/shader_pack_info.json b/desktopRuntime/resources/assets/eagler/glsl/deferred/shader_pack_info.json
new file mode 100644
index 00000000..75294c2a
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/shader_pack_info.json
@@ -0,0 +1,24 @@
+{
+ "name": "§eHigh Performance PBR",
+ "desc": "Pack made from scratch specifically for this client, designed to give what I call the best balance between quality and performance possible in a browser but obviously that's just my opinion",
+ "vers": "1.0.0",
+ "author": "lax1dude",
+ "api_vers": 1,
+ "features": [
+ "WAVING_BLOCKS",
+ "DYNAMIC_LIGHTS",
+ "GLOBAL_AMBIENT_OCCLUSION",
+ "SHADOWS_SUN",
+ "SHADOWS_COLORED",
+ "SHADOWS_SMOOTHED",
+ "REFLECTIONS_PARABOLOID",
+ "REFLECTIONS_ROUGHNESS",
+ "REALISTIC_WATER",
+ "LIGHT_SHAFTS",
+ "SCREEN_SPACE_REFLECTIONS",
+ "POST_LENS_DISTORION",
+ "POST_LENS_FLARES",
+ "POST_BLOOM",
+ "POST_FXAA"
+ ]
+}
\ No newline at end of file
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/shadows_sun.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/shadows_sun.fsh
new file mode 100644
index 00000000..9b2ef531
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/shadows_sun.fsh
@@ -0,0 +1,168 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+precision highp sampler2DShadow;
+
+in vec2 v_position2f;
+
+#ifdef COMPILE_COLORED_SHADOW
+layout(location = 0) out vec4 output4f;
+#else
+layout(location = 0) out float output1f;
+#endif
+
+uniform sampler2D u_gbufferNormalTexture;
+uniform sampler2D u_gbufferDepthTexture;
+uniform sampler2DShadow u_sunShadowDepthTexture;
+#ifdef COMPILE_COLORED_SHADOW
+uniform sampler2D u_sunShadowColorTexture;
+#endif
+
+uniform mat4 u_inverseViewMatrix4f;
+uniform mat4 u_inverseViewProjMatrix4f;
+
+#ifdef COMPILE_SUN_SHADOW_LOD0
+uniform mat4 u_sunShadowMatrixLOD04f;
+#define SUN_SHADOW_MAP_FRAC 1.0
+#endif
+#ifdef COMPILE_SUN_SHADOW_LOD1
+uniform mat4 u_sunShadowMatrixLOD04f;
+uniform mat4 u_sunShadowMatrixLOD14f;
+#define SUN_SHADOW_MAP_FRAC 0.5
+#endif
+#ifdef COMPILE_SUN_SHADOW_LOD2
+uniform mat4 u_sunShadowMatrixLOD04f;
+uniform mat4 u_sunShadowMatrixLOD14f;
+uniform mat4 u_sunShadowMatrixLOD24f;
+#define SUN_SHADOW_MAP_FRAC 0.3333333
+#endif
+#ifdef COMPILE_SUN_SHADOW_SMOOTH
+const vec2 POISSON_DISK[7] = vec2[](
+vec2(-0.077, 0.995), vec2(0.998, 0.015),
+vec2(-0.116, -0.987), vec2(-0.916, 0.359),
+vec2(-0.697, -0.511), vec2(0.740, -0.612),
+vec2(0.675, 0.682));
+#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0
+#define SMOOTH_SHADOW_RADIUS 0.00075
+#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\
+ tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\
+ tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\
+ tmpVec2.y += lod;\
+ tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\
+ accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES;
+#endif
+
+uniform vec3 u_sunDirection3f;
+
+void main() {
+#ifdef COMPILE_COLORED_SHADOW
+ output4f = vec4(0.0);
+#else
+ output1f = 0.0;
+#endif
+ float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r;
+ if(depth < 0.00001) {
+ return;
+ }
+ vec4 normalVector4f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0);
+ if(normalVector4f.a < 0.5) {
+ return;
+ }
+ normalVector4f.xyz *= 2.0;
+ normalVector4f.xyz -= 1.0;
+ vec3 worldSpaceNormal = normalize(mat3(u_inverseViewMatrix4f) * normalVector4f.xyz);
+ if(dot(u_sunDirection3f, worldSpaceNormal) < 0.0) {
+ return;
+ }
+ vec4 worldSpacePosition = vec4(v_position2f, depth, 1.0);
+ worldSpacePosition.xyz *= 2.0;
+ worldSpacePosition.xyz -= 1.0;
+ worldSpacePosition = u_inverseViewProjMatrix4f * worldSpacePosition;
+ worldSpacePosition.xyz /= worldSpacePosition.w;
+ worldSpacePosition.xyz += worldSpaceNormal * 0.05;
+ worldSpacePosition.w = 1.0;
+ float skyLight = max(normalVector4f.a * 2.0 - 1.0, 0.0);
+ float shadowSample;
+ vec2 tmpVec2;
+ vec4 shadowSpacePosition;
+ for(;;) {
+ shadowSpacePosition = u_sunShadowMatrixLOD04f * worldSpacePosition;
+ if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) {
+ shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowSpacePosition.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowSpacePosition.z), 0.0);
+#ifdef COMPILE_SUN_SHADOW_SMOOTH
+ shadowSample *= SMOOTH_SHADOW_SAMPLES;
+ SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2)
+ SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2)
+ shadowSample = max(shadowSample * 2.0 - 1.0, 0.0);
+#endif
+#ifdef COMPILE_COLORED_SHADOW
+ shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC;
+#endif
+ break;
+ }
+
+#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2)
+ shadowSpacePosition = u_sunShadowMatrixLOD14f * worldSpacePosition;
+ if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) {
+ shadowSpacePosition.y += 1.0;
+ shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC;
+ shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowSpacePosition.xy, shadowSpacePosition.z + 0.00015), 0.0);
+ break;
+ }
+#endif
+
+#ifdef COMPILE_SUN_SHADOW_LOD2
+ shadowSpacePosition = u_sunShadowMatrixLOD24f * worldSpacePosition;
+ if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) {
+ shadowSpacePosition.y += 2.0;
+ shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC;
+ shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowSpacePosition.xy, shadowSpacePosition.z + 0.00015), 0.0);
+ break;
+ }
+#endif
+
+#ifdef COMPILE_COLORED_SHADOW
+ output4f = vec4(normalVector4f.a);
+#else
+ output1f = normalVector4f.a;
+#endif
+ return;
+ }
+
+ shadowSample *= skyLight;
+
+#ifdef COMPILE_COLORED_SHADOW
+ // reuse normalVector4f:
+ normalVector4f = shadowSample > 0.05 ? textureLod(u_sunShadowColorTexture, shadowSpacePosition.xy, 0.0) : vec4(0.0);
+
+ // saturate the colors, looks nice
+ float luma = dot(normalVector4f.rgb, vec3(0.299, 0.587, 0.114));
+ normalVector4f.rgb = clamp((normalVector4f.rgb - luma) * 1.5 + luma, vec3(0.0), vec3(1.0));
+
+ output4f = vec4(mix(normalVector4f.rgb, vec3(1.0), normalVector4f.a) * shadowSample, shadowSample);
+#else
+ output1f = shadowSample;
+#endif
+
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox.dat b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox.dat
new file mode 100644
index 00000000..7d258a94
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox.dat differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_atmosphere.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_atmosphere.fsh
new file mode 100644
index 00000000..6bd4acf6
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_atmosphere.fsh
@@ -0,0 +1,126 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision mediump sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out vec4 output4f;
+
+uniform sampler2D u_skyNormals;
+uniform vec4 u_sunDirectionIntensity4f;
+uniform vec3 u_scatteringCoefficient3f;
+uniform float u_altitude1f;
+uniform vec4 u_blendColor4f;
+
+// Source: https://github.com/wwwtyro/glsl-atmosphere
+
+#define PI 3.141592
+#define iSteps 16
+#define jSteps 4
+
+vec2 rsi(vec3 r0, vec3 rd, float sr) {
+ float a = dot(rd, rd);
+ float b = 2.0 * dot(rd, r0);
+ float c = dot(r0, r0) - (sr * sr);
+ float d = (b*b) - 4.0*a*c;
+ if (d < 0.0) return vec2(1e5,-1e5);
+ a *= 2.0;
+ d = sqrt(d);
+ return vec2(-b - d, -b + d) / a;
+}
+
+vec3 atmosphere(vec3 r, vec3 r0, vec3 pSun, float iSun, float rPlanet, float rAtmos, vec3 kRlh, float kMie, float shRlh, float shMie, float g) {
+ pSun = normalize(pSun);
+ r = normalize(r);
+
+ vec2 p = rsi(r0, r, rAtmos);
+ if (p.x > p.y) return vec3(0.0);
+ p.y = min(p.y, rsi(r0, r, rPlanet).x);
+ float iStepSize = (p.y - p.x) / float(iSteps);
+
+ float iTime = 0.0;
+
+ vec3 totalRlh = vec3(0.0);
+ vec3 totalMie = vec3(0.0);
+
+ float iOdRlh = 0.0;
+ float iOdMie = 0.0;
+
+ float mu = dot(r, pSun);
+ float mumu = mu * mu;
+ float gg = g * g;
+ float pRlh = 3.0 / (16.0 * PI) * (1.0 + mumu);
+ float pMie = 3.0 / (8.0 * PI) * ((1.0 - gg) * (mumu + 1.0)) / (pow(1.0 + gg - 2.0 * mu * g, 1.5) * (2.0 + gg));
+
+ for (int i = 0; i < iSteps; i++) {
+ vec3 iPos = r0 + r * (iTime + iStepSize * 0.5);
+ float iHeight = length(iPos) - rPlanet;
+ float odStepRlh = exp(-iHeight / shRlh) * iStepSize;
+ float odStepMie = exp(-iHeight / shMie) * iStepSize;
+ iOdRlh += odStepRlh;
+ iOdMie += odStepMie;
+ float jStepSize = rsi(iPos, pSun, rAtmos).y / float(jSteps);
+ float jTime = 0.0;
+ float jOdRlh = 0.0;
+ float jOdMie = 0.0;
+ for (int j = 0; j < jSteps; j++) {
+ vec3 jPos = iPos + pSun * (jTime + jStepSize * 0.5);
+ float jHeight = length(jPos) - rPlanet;
+ jOdRlh += exp(-jHeight / shRlh) * jStepSize;
+ jOdMie += exp(-jHeight / shMie) * jStepSize;
+ jTime += jStepSize;
+ }
+ vec3 attn = exp(-(kMie * (iOdMie + jOdMie) + kRlh * (iOdRlh + jOdRlh)));
+ totalRlh += odStepRlh * attn;
+ totalMie += odStepMie * attn;
+ iTime += iStepSize;
+
+ }
+ return iSun * (pRlh * kRlh * totalRlh + pMie * kMie * totalMie);
+}
+
+void main() {
+ if(u_blendColor4f.a >= 1.0) {
+ output4f = vec4(u_blendColor4f.rgb, 0.0);
+ return;
+ }
+ vec4 normalIn = textureLod(u_skyNormals, v_position2f, 0.0);
+ if(normalIn.a != 1.0) {
+ output4f = vec4(0.0);
+ return;
+ }
+ normalIn.xyz *= 2.0;
+ normalIn.xyz -= 1.0;
+ output4f = vec4(atmosphere(
+ normalIn.xyz, // normalized ray direction
+ vec3(0,6373e3 + u_altitude1f * 50.0,0), // ray origin
+ u_sunDirectionIntensity4f.xyz, // position of the sun
+ u_sunDirectionIntensity4f.w, // intensity of the sun
+ 6371e3, // radius of the planet in meters
+ 6471e3, // radius of the atmosphere in meters
+ vec3(5.5e-6, 13.0e-6, 22.4e-6), // Rayleigh scattering coefficient
+ 21e-6, // Mie scattering coefficient
+ 8e3, // Rayleigh scale height
+ 1.2e3, // Mie scale height
+ 0.758 // Mie preferred scattering direction
+ ), 0.0);
+ if(u_blendColor4f.a > 0.0) {
+ output4f.rgb = mix(output4f.rgb, u_blendColor4f.rgb, u_blendColor4f.a);
+ }
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_irradiance.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_irradiance.fsh
new file mode 100644
index 00000000..d6d8f111
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_irradiance.fsh
@@ -0,0 +1,231 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out vec4 output4f;
+
+uniform sampler2D u_paraboloidSkyboxTexture;
+
+#define SAMPLE_IRRADIANCE(tex, tmat3f, st, sm, accum3f, tmp3f)\
+ tmp3f = tmat3f * st;\
+ tmp3f.xz /= abs(tmp3f.y) + 1.0;\
+ tmp3f.xz *= vec2(0.4875, tmp3f.y >= 0.0 ? 0.24375 : -0.24375);\
+ tmp3f.xz += vec2(0.5, tmp3f.y >= 0.0 ? 0.25 : 0.75);\
+ accum3f += textureLod(tex, tmp3f.xz, 0.0).rgb * sm * clamp(1.0 + tmp3f.y * 2.0, 0.0, 1.0);
+
+void main() {
+ vec2 latLong = v_position2f * vec2(2.0, 4.0);
+ latLong -= vec2(1.0, v_position2f.y >= 0.5 ? 3.0 : 1.0);
+ float latLongLen2 = dot(latLong, latLong);
+ if(latLongLen2 > 1.2) {
+ output4f = vec4(0.0);
+ return;
+ }
+
+ vec2 texCoords = v_position2f;
+ texCoords = mod(texCoords, vec2(1.0, 0.5));
+ texCoords = texCoords * vec2(2.0, 4.0) - 1.0;
+ texCoords *= (v_position2f.y < 0.5) ? vec2(1.0, 1.0) : vec2(1.0, -1.0);
+
+ float mag2 = 2.0 / (latLongLen2 + 1.0);
+ vec3 dir;
+ dir.y = ((v_position2f.y < 0.5) ? 1.0 : -1.0) * (mag2 - 1.0);
+ if(dir.y < -0.25) {
+ output4f = vec4(0.0);
+ return;
+ }
+
+ dir.xz = texCoords * mag2;
+
+ vec3 tmp3f = cross(dir, vec3(0.0, 1.0, 0.0));
+ mat3 tmat3f = mat3(tmp3f, cross(dir, tmp3f), dir);
+ vec3 accum3f = vec3(0.0);
+
+ // note: sampling is divided into 3 draw calls to allow better driver multitasking,
+ // shader would otherwise run the full 156 texture samples in only a single thread
+ // per pixel which is not ideal. The resulting values of the 3 draw calls are added
+ // together using GL_ONE, GL_ONE blending on the destination framebuffer
+
+#ifdef PHASE_1
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.247, 0.000, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.479, 0.000, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.682, 0.000, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.841, 0.000, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.949, 0.000, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.997, 0.000, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.240, 0.061, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.465, 0.119, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.660, 0.169, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.815, 0.208, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.919, 0.235, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.966, 0.247, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.217, 0.119, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.421, 0.230, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.598, 0.327, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.738, 0.403, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.833, 0.455, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.875, 0.478, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.181, 0.169, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.351, 0.327, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.499, 0.465, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.616, 0.574, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.694, 0.647, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.730, 0.680, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.134, 0.208, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.259, 0.403, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.368, 0.574, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.455, 0.708, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.513, 0.799, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.539, 0.839, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.078, 0.235, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.151, 0.455, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.215, 0.647, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.265, 0.799, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.299, 0.901, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.315, 0.947, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.018, 0.247, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.034, 0.478, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.048, 0.680, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.060, 0.839, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.067, 0.947, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.071, 0.995, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.044, 0.243, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.085, 0.472, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.121, 0.671, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.150, 0.828, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.169, 0.934, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.178, 0.982, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.103, 0.225, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.200, 0.436, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.284, 0.620, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.350, 0.765, 0.540), 0.0092, accum3f, tmp3f)
+#endif
+#ifdef PHASE_2
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.395, 0.863, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.415, 0.907, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.155, 0.192, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.301, 0.373, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.428, 0.530, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.529, 0.655, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.596, 0.738, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.627, 0.776, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.198, 0.148, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.384, 0.287, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.546, 0.408, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.674, 0.504, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.760, 0.568, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.799, 0.597, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.229, 0.094, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.443, 0.183, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.630, 0.260, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.778, 0.321, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.877, 0.362, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.922, 0.381, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.245, 0.035, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.475, 0.068, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.675, 0.096, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.833, 0.119, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.939, 0.134, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.988, 0.141, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.246, -0.027, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.477, -0.052, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.678, -0.074, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.837, -0.091, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.943, -0.103, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.992, -0.108, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.232, -0.087, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.449, -0.168, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.638, -0.239, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.788, -0.295, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.889, -0.333, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.934, -0.350, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.203, -0.141, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.393, -0.274, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.559, -0.390, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.690, -0.481, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.779, -0.542, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.819, -0.570, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.162, -0.187, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.313, -0.363, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.446, -0.516, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.550, -0.637, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.620, -0.718, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.652, -0.755, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.110, -0.221, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.214, -0.429, 0.878), 0.0085, accum3f, tmp3f)
+#endif
+#ifdef PHASE_3
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.304, -0.610, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.375, -0.753, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.423, -0.849, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.445, -0.893, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.052, -0.242, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.101, -0.469, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.144, -0.666, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.177, -0.823, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.200, -0.928, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.210, -0.975, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.009, -0.247, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.018, -0.479, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.026, -0.681, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.032, -0.841, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.036, -0.948, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.038, -0.997, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.070, -0.237, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.136, -0.460, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.193, -0.654, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.239, -0.807, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.269, -0.910, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.283, -0.957, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.127, -0.213, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.246, -0.412, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.349, -0.585, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.431, -0.723, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.486, -0.815, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.511, -0.857, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.175, -0.175, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.340, -0.338, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.483, -0.481, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.596, -0.594, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.673, -0.670, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.707, -0.704, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.213, -0.126, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.413, -0.244, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.587, -0.346, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.725, -0.428, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.817, -0.482, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.859, -0.507, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.238, -0.069, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.460, -0.134, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.654, -0.190, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.808, -0.235, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.911, -0.265, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.958, -0.279, 0.071), 0.0014, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.247, -0.008, 0.969), 0.0048, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.479, -0.016, 0.878), 0.0085, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.681, -0.023, 0.732), 0.0100, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.841, -0.028, 0.540), 0.0092, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.948, -0.031, 0.315), 0.0060, accum3f, tmp3f)
+ SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.997, -0.033, 0.071), 0.0014, accum3f, tmp3f)
+#endif
+
+ output4f = vec4(accum3f * min(1.0 + dir.y * 4.0, 1.0), 0.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.fsh
new file mode 100644
index 00000000..809ce2a3
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.fsh
@@ -0,0 +1,60 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec3 v_position3f;
+in vec3 v_color3f;
+
+layout(location = 0) out vec4 output4f;
+
+uniform vec3 u_sunDirection3f;
+uniform vec3 u_sunColor3f;
+uniform vec4 u_lightningColor4f;
+
+#ifdef COMPILE_CLOUDS
+uniform sampler2D u_cloudsTexture;
+#endif
+
+uniform sampler2D u_sunOcclusion;
+
+#define SKY_BRIGHTNESS 5.0
+
+void main() {
+ gl_FragDepth = 0.0;
+ vec3 viewDir = normalize(v_position3f);
+#ifdef COMPILE_PARABOLOID_SKY
+ output4f = vec4(v_color3f * SKY_BRIGHTNESS, 0.0);
+#else
+ float f = max(dot(viewDir, u_sunDirection3f) - 0.995, 0.0) * 100.0;
+ float intensity = min(f * 2.0, 1.0);
+ intensity *= intensity * intensity * intensity * textureLod(u_sunOcclusion, vec2(0.5, 0.5), 0.0).r * 2.0;
+ output4f = vec4(v_color3f * SKY_BRIGHTNESS + intensity * u_sunColor3f, 0.0);
+#endif
+#ifdef COMPILE_CLOUDS
+ if(viewDir.y < 0.01) {
+ output4f.rgb = output4f.rgb * u_lightningColor4f.a + u_lightningColor4f.rgb;
+ return;
+ }
+ vec2 cloudSampleCoord2f = (viewDir.xz / (viewDir.y + 1.0)) * 0.975 * 0.5 + 0.5;
+ vec4 cloudSample = textureLod(u_cloudsTexture, cloudSampleCoord2f, 0.0);
+ output4f.rgb = mix(output4f.rgb, output4f.rgb * cloudSample.a + cloudSample.rgb, smoothstep(0.0, 1.0, min(viewDir.y * 8.0, 1.0)));
+#endif
+ output4f.rgb = output4f.rgb * u_lightningColor4f.a + u_lightningColor4f.rgb;
+
+}
\ No newline at end of file
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.vsh
new file mode 100644
index 00000000..d3017a2a
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.vsh
@@ -0,0 +1,49 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+layout(location = 0) in vec3 a_position3f;
+layout(location = 1) in vec2 a_colorIndex2f;
+
+out vec3 v_position3f;
+out vec3 v_color3f;
+
+uniform mat4 u_viewMatrix4f;
+#ifdef COMPILE_PARABOLOID_SKY
+uniform float u_farPlane1f;
+#else
+uniform mat4 u_projMatrix4f;
+#endif
+uniform sampler2D u_renderedAtmosphere;
+
+void main() {
+ v_position3f = a_position3f;
+ v_color3f = textureLod(u_renderedAtmosphere, a_colorIndex2f, 0.0).rgb;
+ vec4 pos = u_viewMatrix4f * vec4(a_position3f, 0.0);
+
+#ifdef COMPILE_PARABOLOID_SKY
+ float dist = pos.z;
+ pos.xyz = normalize(pos.xyz);
+ pos.xy /= 1.0 - pos.z;
+ pos.z = dist / u_farPlane1f;
+ gl_Position = vec4(pos.xyz, 1.0);
+#else
+ gl_Position = u_projMatrix4f * vec4(pos.xyz, 1.0);
+#endif
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.fsh
new file mode 100644
index 00000000..91b8ef0e
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.fsh
@@ -0,0 +1,45 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec3 v_position3f;
+
+layout(location = 0) out vec4 output4f;
+
+#define SKY_BRIGHTNESS 0.015
+
+uniform sampler2D u_skyTexture;
+
+uniform vec2 u_skyTextureScale2f;
+
+void main() {
+ gl_FragDepth = 0.0;
+ vec3 viewDir = normalize(v_position3f);
+
+ vec3 blending = abs(viewDir * viewDir * viewDir);
+ blending = normalize(max(blending, 0.00001));
+ float b = (blending.x + blending.y + blending.z);
+ blending /= b;
+
+ vec3 blendedSkyColor = texture(u_skyTexture, v_position3f.zy * u_skyTextureScale2f).rgb * blending.x;
+ blendedSkyColor += texture(u_skyTexture, v_position3f.xz * u_skyTextureScale2f).rgb * blending.y;
+ blendedSkyColor += texture(u_skyTexture, v_position3f.xy * u_skyTextureScale2f).rgb * blending.z;
+
+ output4f = vec4(blendedSkyColor * blendedSkyColor * blendedSkyColor * SKY_BRIGHTNESS, 0.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.vsh
new file mode 100644
index 00000000..77b5786e
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.vsh
@@ -0,0 +1,33 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision mediump sampler2D;
+
+layout(location = 0) in vec3 a_position3f;
+layout(location = 1) in vec2 a_colorIndex2f;
+
+out vec3 v_position3f;
+
+uniform mat4 u_viewMatrix4f;
+uniform mat4 u_projMatrix4f;
+
+void main() {
+ v_position3f = a_position3f;
+ vec4 pos = u_viewMatrix4f * vec4(a_position3f, 0.0);
+ gl_Position = u_projMatrix4f * vec4(pos.xyz, 1.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/ssao_generate.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/ssao_generate.fsh
new file mode 100644
index 00000000..bb2702bc
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/ssao_generate.fsh
@@ -0,0 +1,96 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_position2f;
+
+layout(location = 0) out float output1f;
+
+uniform sampler2D u_gbufferDepthTexture;
+uniform sampler2D u_gbufferNormalTexture;
+uniform sampler2D u_noiseConstantTexture;
+
+uniform mat4 u_projectionMatrix4f;
+uniform mat4 u_inverseProjectionMatrix4f;
+
+uniform mat2 u_randomizerDataMatrix2f;
+
+const vec3 ssaoKernel[8] = vec3[](
+vec3(0.599,0.721,0.350),vec3(0.114,0.791,0.601),
+vec3(0.067,0.995,0.069),vec3(0.511,-0.510,0.692),
+vec3(0.626,-0.667,0.404),vec3(0.896,-0.169,0.411),
+vec3(0.716,-0.439,0.543),vec3(-0.400,0.733,0.550));
+#define radius 1.5
+#define SAMPLE_SSAO(idx, pos, matTBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2)\
+ tmpVec4_1.xyz = pos + (matTBN * ssaoKernel[idx]) * radius;\
+ tmpVec4_1.w = 1.0;\
+ tmpVec4_2 = u_projectionMatrix4f * tmpVec4_1;\
+ tmpVec4_2.xyz /= tmpVec4_2.w;\
+ tmpVec4_2.xyz = clamp(tmpVec4_2.xyz, -0.99, 0.99);\
+ tmpVec4_2.zw = matProjInv2f * vec4(tmpVec4_2.xy, textureLod(u_gbufferDepthTexture, tmpVec4_2.xy * 0.5 + 0.5, 0.0).r * 2.0 - 1.0, 1.0);\
+ tmpVec4_2.z /= tmpVec4_2.w;\
+ tmpVec4_2.x = smoothstep(0.0, 1.0, radius * 0.5 / abs(pos.z - tmpVec4_2.z));\
+ divisor += tmpVec4_2.x > 0.0 ? 1.0 : 0.0;\
+ occlusion += (tmpVec4_2.z >= tmpVec4_1.z ? 1.0 : 0.0) * tmpVec4_2.x;
+
+void main() {
+ vec3 originalClipSpacePos = vec3(v_position2f, textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r);
+
+ if(originalClipSpacePos.z <= 0.0000001) {
+ output1f = 1.0;
+ return;
+ }
+
+ originalClipSpacePos *= 2.0;
+ originalClipSpacePos -= 1.0;
+
+ vec3 normal3f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0).rgb;
+ normal3f *= 2.0;
+ normal3f -= 1.0;
+
+ vec4 originalViewSpacePos = u_inverseProjectionMatrix4f * vec4(originalClipSpacePos, 1.0);
+ originalViewSpacePos.xyz /= originalViewSpacePos.w;
+ originalViewSpacePos.w = 1.0;
+
+ vec4 noiseVec = textureLod(u_noiseConstantTexture, u_randomizerDataMatrix2f * (v_position2f + originalViewSpacePos.xy + normal3f.xz), 0.0);
+ noiseVec.xyz *= 2.0;
+ noiseVec.xyz -= 1.0;
+
+ vec3 tangent = normalize(noiseVec.xyz - normal3f * dot(noiseVec.xyz, normal3f));
+ vec3 bitangent = cross(normal3f, tangent);
+ mat3 TBN = mat3(tangent, bitangent, normal3f) * noiseVec.w;
+
+ float divisor = 0.0;
+ float occlusion = 0.0;
+ vec4 tmpVec4_1;
+ vec4 tmpVec4_2;
+
+ mat4x2 matProjInv2f = mat4x2(u_inverseProjectionMatrix4f[0].zw, u_inverseProjectionMatrix4f[1].zw, u_inverseProjectionMatrix4f[2].zw, u_inverseProjectionMatrix4f[3].zw);
+
+ SAMPLE_SSAO(0, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2)
+ SAMPLE_SSAO(1, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2)
+ SAMPLE_SSAO(2, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2)
+ SAMPLE_SSAO(3, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2)
+ SAMPLE_SSAO(4, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2)
+ SAMPLE_SSAO(5, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2)
+ SAMPLE_SSAO(6, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2)
+ SAMPLE_SSAO(7, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2)
+
+ output1f = max(1.0 - (occlusion / max(divisor, 0.001)), 0.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/ssao_noise.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/ssao_noise.bmp
new file mode 100644
index 00000000..22acc009
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/ssao_noise.bmp differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/temperatures.lut b/desktopRuntime/resources/assets/eagler/glsl/deferred/temperatures.lut
new file mode 100644
index 00000000..eb2ec870
Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/temperatures.lut differ
diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/vertex_ids.csv b/desktopRuntime/resources/assets/eagler/glsl/deferred/vertex_ids.csv
new file mode 100644
index 00000000..ad3d472b
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/vertex_ids.csv
@@ -0,0 +1,120 @@
+model,value
+minecraft:block/leaves,1
+minecraft:block/web,1
+minecraft:block/tallgrass,2
+minecraft:block/crop,3
+minecraft:block/double_fern_bottom,4
+minecraft:block/double_grass_bottom,4
+minecraft:block/double_paeonia_bottom,4
+minecraft:block/double_rose_bottom,4
+minecraft:block/double_sunflower_bottom,4
+minecraft:block/double_syringa_bottom,4
+minecraft:block/double_fern_top,5
+minecraft:block/double_grass_top,5
+minecraft:block/double_paeonia_top,5
+minecraft:block/double_rose_top,5
+minecraft:block/double_sunflower_top,5
+minecraft:block/double_syringa_top,5
+minecraft:block/acacia_sapling,6
+minecraft:block/birch_sapling,6
+minecraft:block/daisy,6
+minecraft:block/dandelion,6
+minecraft:block/dead_bush,6
+minecraft:block/houstonia,6
+minecraft:block/jungle_sapling,6
+minecraft:block/oak_sapling,6
+minecraft:block/orchid,6
+minecraft:block/poppy,6
+minecraft:block/red_tulip,6
+minecraft:block/spruce_sapling,6
+minecraft:block/white_tulip,6
+minecraft:block/pink_tulip,6
+minecraft:block/orange_tulip,6
+minecraft:block/allium,6
+minecraft:block/reeds,7
+minecraft:block/vine_1,8
+minecraft:block/vine_1u,8
+minecraft:block/vine_2,8
+minecraft:block/vine_2_opposite,8
+minecraft:block/vine_2u,8
+minecraft:block/vine_2u_opposite,8
+minecraft:block/vine_3,8
+minecraft:block/vine_3u,8
+minecraft:block/vine_4,8
+minecraft:block/vine_4u,8
+minecraft:block/vine_u,8
+eagler:builtin/water_still_vertex_id,9
+eagler:builtin/water_flow_vertex_id,10
+minecraft:block/waterlily,11
+minecraft:block/fire_floor_main,12
+minecraft:block/fire_n_main,13
+minecraft:block/fire_ne_main,13
+minecraft:block/fire_ns_main,13
+minecraft:block/fire_nse_main,13
+minecraft:block/fire_nsew_main,13
+minecraft:block/fire_u1_main,13
+minecraft:block/fire_nu1_main,13
+minecraft:block/fire_neu1_main,13
+minecraft:block/fire_nsu1_main,13
+minecraft:block/fire_nseu1_main,13
+minecraft:block/fire_nsewu1_main,13
+minecraft:block/fire_u2_main,13
+minecraft:block/fire_nu2_main,13
+minecraft:block/fire_neu2_main,13
+minecraft:block/fire_nsu2_main,13
+minecraft:block/fire_nseu2_main,13
+minecraft:block/fire_nsewu2_main,13
+minecraft:block/fire_n_alt,13
+minecraft:block/fire_ne_alt,13
+minecraft:block/fire_ns_alt,13
+minecraft:block/fire_nse_alt,13
+minecraft:block/fire_nsew_alt,13
+minecraft:block/fire_nu2_alt,13
+minecraft:block/fire_neu2_alt,13
+minecraft:block/fire_nsu2_alt,13
+minecraft:block/fire_nseu2_alt,13
+minecraft:block/fire_nsewu2_alt,13
+minecraft:block/fire_n_flip_main,13
+minecraft:block/fire_ne_flip_main,13
+minecraft:block/fire_ns_flip_main,13
+minecraft:block/fire_nse_flip_main,13
+minecraft:block/fire_nsew_flip_main,13
+minecraft:block/fire_nu1_flip_main,13
+minecraft:block/fire_neu1_flip_main,13
+minecraft:block/fire_nsu1_flip_main,13
+minecraft:block/fire_nseu1_flip_main,13
+minecraft:block/fire_nsewu1_flip_main,13
+minecraft:block/fire_nu2_flip_main,13
+minecraft:block/fire_neu2_flip_main,13
+minecraft:block/fire_nsu2_flip_main,13
+minecraft:block/fire_nseu2_flip_main,13
+minecraft:block/fire_nsewu2_flip_main,13
+minecraft:block/fire_n_alt_flip,13
+minecraft:block/fire_ne_alt_flip,13
+minecraft:block/fire_ns_alt_flip,13
+minecraft:block/fire_nse_alt_flip,13
+minecraft:block/fire_nsew_alt_flip,13
+minecraft:block/fire_nu1_alt_flip,13
+minecraft:block/fire_neu1_alt_flip,13
+minecraft:block/fire_nsu1_alt_flip,13
+minecraft:block/fire_nseu1_alt_flip,13
+minecraft:block/fire_nsewu1_alt_flip,13
+minecraft:block/fire_nu2_alt_flip,13
+minecraft:block/fire_neu2_alt_flip,13
+minecraft:block/fire_nsu2_alt_flip,13
+minecraft:block/fire_nseu2_alt_flip,13
+minecraft:block/fire_nsewu2_alt_flip,13
+minecraft:block/fire_nsewu2_alt_flip,13
+minecraft:block/glass,14
+minecraft:block/glass_pane_n,14
+minecraft:block/glass_pane_ne,14
+minecraft:block/glass_pane_new,14
+minecraft:block/glass_pane_ns,14
+minecraft:block/glass_pane_nse,14
+minecraft:block/glass_pane_nsew,14
+minecraft:block/glass_pane_nsw,14
+minecraft:block/glass_pane_nw,14
+minecraft:block/glass_pane_s,14
+minecraft:block/glass_pane_se,14
+minecraft:block/glass_pane_sew,14
+minecraft:block/glass_pane_sw,14
\ No newline at end of file
diff --git a/desktopRuntime/resources/assets/eagler/glsl/local.vsh b/desktopRuntime/resources/assets/eagler/glsl/local.vsh
index 6cb7523f..05e350e3 100644
--- a/desktopRuntime/resources/assets/eagler/glsl/local.vsh
+++ b/desktopRuntime/resources/assets/eagler/glsl/local.vsh
@@ -15,7 +15,7 @@
*/
precision lowp int;
-precision lowp float;
+precision highp float;
precision lowp sampler2D;
layout(location = 0) in vec2 a_position2f;
@@ -23,6 +23,6 @@ layout(location = 0) in vec2 a_position2f;
out vec2 v_position2f;
void main() {
- v_position2f = a_position2f;
- gl_Position = vec4(a_position2f * 2.0 - 1.0, 0.0, 1.0);
+ v_position2f = a_position2f * 0.5 + 0.5;
+ gl_Position = vec4(a_position2f, 0.0, 1.0);
}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/post_fxaa.fsh b/desktopRuntime/resources/assets/eagler/glsl/post_fxaa.fsh
index a3628a9f..be208445 100644
--- a/desktopRuntime/resources/assets/eagler/glsl/post_fxaa.fsh
+++ b/desktopRuntime/resources/assets/eagler/glsl/post_fxaa.fsh
@@ -1,5 +1,9 @@
#line 2
+// Remove this line below if you plan to modify this file
+#define USE_OPTIMIZED
+
+
/*
* Copyright (c) 2022-2023 LAX1DUDE. All Rights Reserved.
*
@@ -48,7 +52,8 @@
precision lowp int;
precision mediump float;
-precision lowp sampler2D;
+precision mediump sampler2D;
+
in vec2 v_position2f;
@@ -57,6 +62,7 @@ layout(location = 0) out vec4 output4f;
uniform sampler2D u_screenTexture;
uniform vec2 u_screenSize2f;
+#ifndef USE_OPTIMIZED
#ifndef FXAA_GREEN_AS_LUMA
// For those using non-linear color,
// and either not able to get luma in alpha, or not wanting to,
@@ -102,7 +108,7 @@ uniform vec2 u_screenSize2f;
#define FxaaTex sampler2D
/*--------------------------------------------------------------------------*/
- #define FxaaTexTop(t, p) texture(t, p)
+ #define FxaaTexTop(t, p) textureLod(t, p, 0.0)
/*============================================================================
GREEN AS LUMA OPTION SUPPORT FUNCTION
@@ -292,3 +298,74 @@ void main(){
output4f = vec4(FxaaPixelShader(v_position2f + screenSize05, posPos, u_screenTexture, rcpFrameOpt, rcpFrameOpt * 4.0, edgeSharpness, edgeThreshold, edgeThresholdMin).rgb, 1.0);
}
+#else
+
+// This 'optimized' code was generated using glslangValidator + spirv-cross + spirv-opt on the source code above
+// Is it faster? Idfk, probably compiles faster at least, what matters it I tried
+
+float _616;
+vec4 _617;
+
+void main()
+{
+ mediump vec2 _257 = u_screenSize2f * 0.5;
+ mediump vec4 _611 = vec4(v_position2f, v_position2f + u_screenSize2f);
+ mediump vec4 _612 = vec4(_616, _616, _257);
+ mediump vec2 _290 = v_position2f + _257;
+ mediump vec4 _608;
+ for(;;)
+ {
+ mediump vec3 _532 = textureLod(u_screenTexture, _611.xy, 0.0).xyz;
+ mediump float _536 = dot(_532 * _532, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625));
+ mediump vec3 _540 = textureLod(u_screenTexture, _611.xw, 0.0).xyz;
+ mediump float _544 = dot(_540 * _540, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625));
+ mediump vec3 _548 = textureLod(u_screenTexture, _611.zy, 0.0).xyz;
+ mediump vec3 _556 = textureLod(u_screenTexture, _611.zw, 0.0).xyz;
+ mediump float _560 = dot(_556 * _556, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625));
+ mediump vec4 _390 = textureLod(u_screenTexture, _290, 0.0);
+ mediump vec3 _564 = _390.xyz;
+ mediump float _568 = dot(_564 * _564, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625));
+ mediump float _397 = dot(_548 * _548, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)) + 0.00260416674427688121795654296875;
+ mediump float _409 = max(max(_397, _560), max(_536, _544));
+ mediump float _412 = min(min(_397, _560), min(_536, _544));
+ mediump float _427 = _544 - _397;
+ mediump float _433 = _560 - _536;
+ if ((max(_409, _568) - min(_412, _568)) < max(0.0500000007450580596923828125, _409 * 0.1500000059604644775390625))
+ {
+ _608 = _390;
+ break;
+ }
+ mediump vec2 _449 = normalize(vec2(_427 + _433, _427 - _433));
+ vec2 hp_copy_449 = _449;
+ mediump vec2 _454 = _612.zw;
+ vec2 _614 = -hp_copy_449;
+ mediump vec2 mp_copy_614 = _614;
+ mediump vec2 _481 = clamp(_449 / vec2(min(abs(_449.x), abs(_449.y)) * 3.0), vec2(-2.0), vec2(2.0));
+ vec2 hp_copy_481 = _481;
+ mediump vec2 _484 = (_612 * 4.0).zw;
+ vec2 _615 = -hp_copy_481;
+ mediump vec2 mp_copy_615 = _615;
+ mediump vec4 _498 = textureLod(u_screenTexture, mp_copy_614 * _454 + _290, 0.0) + textureLod(u_screenTexture, _449 * _454 + _290, 0.0);
+ mediump vec4 _505 = ((textureLod(u_screenTexture, mp_copy_615 * _484 + _290, 0.0) + textureLod(u_screenTexture, _481 * _484 + _290, 0.0)) * 0.25) + (_498 * 0.25);
+ mediump float _576 = dot(_505.xyz * _505.xyz, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625));
+ mediump vec4 _607;
+ if ((_576 < _412) || (_576 > _409))
+ {
+ mediump vec3 _518 = _498.xyz * 0.5;
+ mediump vec4 _600;
+ _600.x = _518.x;
+ _600.y = _518.y;
+ _600.z = _518.z;
+ _607 = _600;
+ }
+ else
+ {
+ _607 = _505;
+ }
+ _608 = _607;
+ break;
+ }
+ output4f = vec4(_608.xyz, 1.0);
+}
+
+#endif
\ No newline at end of file
diff --git a/desktopRuntime/resources/assets/eagler/glsl/texture_blit.fsh b/desktopRuntime/resources/assets/eagler/glsl/texture_blit.fsh
new file mode 100644
index 00000000..9f82680e
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/texture_blit.fsh
@@ -0,0 +1,45 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision highp float;
+precision highp sampler2D;
+
+in vec2 v_texCoords2f;
+
+#ifndef COMPILE_BLIT_DEPTH
+layout(location = 0) out vec4 output4f;
+#endif
+
+uniform sampler2D u_inputTexture;
+uniform float u_textureLod1f;
+
+#ifdef COMPILE_PIXEL_ALIGNMENT
+uniform vec4 u_pixelAlignmentSizes4f;
+uniform vec2 u_pixelAlignmentOffset2f;
+#endif
+
+void main() {
+ vec2 uv2f = v_texCoords2f;
+#ifdef COMPILE_PIXEL_ALIGNMENT
+ uv2f = (floor(uv2f * u_pixelAlignmentSizes4f.xy) + u_pixelAlignmentOffset2f) * u_pixelAlignmentSizes4f.zw;
+#endif
+#ifndef COMPILE_BLIT_DEPTH
+ output4f = textureLod(u_inputTexture, uv2f, u_textureLod1f);
+#else
+ gl_FragDepth = textureLod(u_inputTexture, uv2f, u_textureLod1f).r;
+#endif
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/texture_blit.vsh b/desktopRuntime/resources/assets/eagler/glsl/texture_blit.vsh
new file mode 100644
index 00000000..fd5f9bf1
--- /dev/null
+++ b/desktopRuntime/resources/assets/eagler/glsl/texture_blit.vsh
@@ -0,0 +1,32 @@
+#line 2
+
+/*
+ * Copyright (c) 2023 LAX1DUDE. All Rights Reserved.
+ *
+ * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES
+ * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED
+ * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE
+ * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR.
+ *
+ * NOT FOR COMMERCIAL OR MALICIOUS USE
+ *
+ * (please read the 'LICENSE' file this repo's root directory for more info)
+ *
+ */
+
+precision lowp int;
+precision lowp float;
+precision lowp sampler2D;
+
+layout(location = 0) in vec2 a_position2f;
+
+out vec2 v_texCoords2f;
+
+uniform vec4 u_srcCoords4f;
+uniform vec4 u_dstCoords4f;
+
+void main() {
+ vec2 uv = a_position2f * 0.5 + 0.5;
+ v_texCoords2f = u_srcCoords4f.xy + u_srcCoords4f.zw * uv;
+ gl_Position = vec4(u_dstCoords4f.xy + u_dstCoords4f.zw * uv, 0.0, 1.0);
+}
diff --git a/desktopRuntime/resources/assets/eagler/glsl/texture_mix.fsh b/desktopRuntime/resources/assets/eagler/glsl/texture_mix.fsh
index 523bc6b3..bbe93fe8 100644
--- a/desktopRuntime/resources/assets/eagler/glsl/texture_mix.fsh
+++ b/desktopRuntime/resources/assets/eagler/glsl/texture_mix.fsh
@@ -15,8 +15,8 @@
*/
precision lowp int;
-precision lowp float;
-precision lowp sampler2D;
+precision highp float;
+precision highp sampler2D;
in vec2 v_position2f;
diff --git a/desktopRuntime/resources/assets/minecraft/lang/en_US.lang b/desktopRuntime/resources/assets/minecraft/lang/en_US.lang
index 5ec5b39d..df88031d 100644
--- a/desktopRuntime/resources/assets/minecraft/lang/en_US.lang
+++ b/desktopRuntime/resources/assets/minecraft/lang/en_US.lang
@@ -77,6 +77,10 @@ eaglercraft.options.chunkFix=Chunk Lag Fix
eaglercraft.options.fog=Fog
eaglercraft.options.fxaa=FXAA Antialiasing
eaglercraft.options.fxaa.auto=Auto
+eaglercraft.options.fastMath=Fast Math
+eaglercraft.options.fastMath.0=OFF
+eaglercraft.options.fastMath.1=Low
+eaglercraft.options.fastMath.2=High
eaglercraft.key.function=Function
eaglercraft.key.zoomCamera=Zoom Camera
@@ -87,6 +91,113 @@ eaglercraft.disconnect.tooManyRequests=Too Many Requests!
eaglercraft.auth.required=Authentication Required
eaglercraft.auth.continue=Join Server
+eaglercraft.shaders.gui.optionsButton=Shaders
+eaglercraft.shaders.gui.title=Shaders
+eaglercraft.shaders.gui.enable=Enable Shaders
+eaglercraft.shaders.gui.headerTier1=Simple Effects (fast)
+eaglercraft.shaders.gui.headerTier2=Intermediate Effects (not as fast)
+
+
+eaglercraft.shaders.gui.option.WAVING_BLOCKS.label=Waving Grass
+
+eaglercraft.shaders.gui.option.WAVING_BLOCKS.desc.0=The classic vanilla shader that make grass and leaf blocks move with the wind
+eaglercraft.shaders.gui.option.WAVING_BLOCKS.desc.2=ON: slower, complex control flow
+eaglercraft.shaders.gui.option.WAVING_BLOCKS.desc.3=OFF: faster, simple control flow
+
+eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.label=Dynamic Lights
+
+eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.0=Items like torches, glowstone, jack o'lanterns, etc. light up the area around them when they are held or dropped
+eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.2=This feature usually does not affect FPS unless there is a large number of dynamic light sources close to the player
+eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.4=ON: enable dynamic lights
+eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.5=OFF: disable dynamic lights
+
+eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.label=Global SSAO
+
+eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.0=Applies realistic screenspace ambient occlusion (SSAO) to areas of the screen that vanilla Minecraft's default "Smooth Lighting" feature cannot
+eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.2=This effect can greatly reduce lag spikes caused by chunk updates in exchange for a decreased maximum FPS when standing still
+eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.4=ON: use SSAO
+eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.5=OFF: use vanilla
+
+eaglercraft.shaders.gui.option.SHADOWS_SUN.label=Sun Shadow Dist
+
+eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.0=Makes the sun and moon cast shadows on the world, you almost definitely want to enable this
+eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.2=0: off
+eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.3=1: 16 blocks
+eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.4=2: 32 blocks
+eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.5=3: 64 blocks
+eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.6=4: 128 blocks
+
+eaglercraft.shaders.gui.option.SHADOWS_COLORED.label=Color Shadow
+
+eaglercraft.shaders.gui.option.SHADOWS_COLORED.desc.0=Makes blocks like stained glass cast colored shadows
+eaglercraft.shaders.gui.option.SHADOWS_COLORED.desc.2=ON: colored shadows (slower)
+eaglercraft.shaders.gui.option.SHADOWS_COLORED.desc.3=OFF: grayscale shadows (faster)
+
+eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.label=Smooth Shadow
+
+eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.desc.0=Smooths out the edges of sun and dynamic light shadows to get rid of aliasing
+eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.desc.2=ON: smooth shadows (slower)
+eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.desc.3=OFF: aliased shadows (faster)
+
+eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.label=Env. Mapping
+
+eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.0=Renders an environment map, allows transparent blocks and moving entities to reflect their surroundings
+eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.2=Uses dual paraboloid mapping, only 2 render passes are required to render all reflections, instead of a full 6 render passes like a conventional cube map
+eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.4=ON: render env. map (slower)
+eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.5=OFF: disable env. map (faster)
+
+eaglercraft.shaders.gui.option.REALISTIC_WATER.label=Realistic Water
+
+eaglercraft.shaders.gui.option.REALISTIC_WATER.desc.0=Makes water realistic, adds reflection and refraction effects, uses raytracing
+eaglercraft.shaders.gui.option.REALISTIC_WATER.desc.2=ON: render realistic water (slower)
+eaglercraft.shaders.gui.option.REALISTIC_WATER.desc.3=OFF: render vanilla water (faster)
+
+eaglercraft.shaders.gui.option.LIGHT_SHAFTS.label=God Rays
+
+eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.0=Render god rays (light shafts) for sunlight and moonlight shadows
+eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.2=ON: render god rays (slower)
+eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.3=OFF: disable god rays (faster)
+
+eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.label=Raytracing
+
+eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.0=Renders raytraced reflections off of blocks
+eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.2=Thanks to some advanced optimizations, this feature only has a small impact on FPS and is compatible with old hardware
+eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.4=Both raymarching and raytracing are employed, raymarching is initially used to locate and track groups of pixels on the screen to reflect, then raytracing is used to reproject that data between multiple frames so the raymarching process only has to be repeated once or twice every few seconds
+eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.6=ON: enable raytracing (slower)
+eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.7=OFF: disable raytracing (faster)
+
+eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.0=Render god rays (light shafts) for sunlight and moonlight shadows
+eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.2=ON: render god rays (slower)
+eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.3=OFF: disable god rays (faster)
+
+eaglercraft.shaders.gui.option.POST_LENS_DISTORION.label=Lens Distort
+
+eaglercraft.shaders.gui.option.POST_LENS_DISTORION.desc.0=Renders chromatic abberation and lens distorion
+eaglercraft.shaders.gui.option.POST_LENS_DISTORION.desc.2=ON: render lens distortion (slower)
+eaglercraft.shaders.gui.option.POST_LENS_DISTORION.desc.3=OFF: disable lens distortion (faster)
+
+eaglercraft.shaders.gui.option.POST_LENS_FLARES.label=Lens Flares
+
+eaglercraft.shaders.gui.option.POST_LENS_FLARES.desc.0=Renders filmic lens flares for the sun
+eaglercraft.shaders.gui.option.POST_LENS_FLARES.desc.2=ON: render lens flares (slower)
+eaglercraft.shaders.gui.option.POST_LENS_FLARES.desc.3=OFF: disable lens flares (faster)
+
+eaglercraft.shaders.gui.option.POST_BLOOM.label=Bloom
+
+eaglercraft.shaders.gui.option.POST_BLOOM.desc.0=Renders bloom for emissive textures and sunlight
+eaglercraft.shaders.gui.option.POST_BLOOM.desc.2=ON: render bloom (slower)
+eaglercraft.shaders.gui.option.POST_BLOOM.desc.3=OFF: disable bloom (faster)
+
+eaglercraft.shaders.gui.option.POST_FXAA.label=FXAA
+
+eaglercraft.shaders.gui.option.POST_FXAA.desc.0=Applies FXAA antialiasing in post processing
+eaglercraft.shaders.gui.option.POST_FXAA.desc.2=This is the preferred antialiasing method for minecraft, as classical MSAA cannot antialias the pixels of upscaled textures
+eaglercraft.shaders.gui.option.POST_FXAA.desc.4=ON: enable fxaa (slower)
+eaglercraft.shaders.gui.option.POST_FXAA.desc.5=OFF: disable fxaa (faster)
+
+eaglercraft.shaders.gui.unsupported.title=Shaders are unavailable on this device!
+eaglercraft.shaders.gui.unsupported.reason.hdrFramebuffer=Reason: No HDR render target support
+
menu.game=Game menu
menu.singleplayer=Singleplayer
menu.multiplayer=Multiplayer
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave1.ogg
index e6bc7c2f..d9144a24 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave10.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave10.ogg
index 96247fa6..edb46db4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave10.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave10.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave11.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave11.ogg
index 31c1f0c9..ae711f54 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave11.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave11.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave12.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave12.ogg
index f2e1c222..5de6918b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave12.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave12.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave13.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave13.ogg
index 8ecc00e5..1355c953 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave13.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave13.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave2.ogg
index be10bfbf..20e9f0a1 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave3.ogg
index 8740056e..112fc2f9 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave4.ogg
index dbce37fe..f35703d3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave5.ogg
index 2a132e83..c735d3a0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave6.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave6.ogg
index 56e0b726..1f7e3aec 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave6.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave6.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave7.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave7.ogg
index f4f7f0a5..941edfe7 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave7.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave7.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave8.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave8.ogg
index f2e98094..10f98508 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave8.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave8.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave9.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave9.ogg
index 2a07c2b3..fbfaa0c3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave9.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/cave/cave9.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain1.ogg
index c58eaa5b..1383b03b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain2.ogg
index 130515d9..5abf6f98 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain3.ogg
index ca041822..7712fdd4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain4.ogg
index 220f23ae..228d8cbe 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/rain4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/thunder1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/thunder1.ogg
index 9344ec64..b17786fe 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/thunder1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/thunder1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/thunder2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/thunder2.ogg
index a8f0c9d3..229d6780 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/thunder2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/thunder2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/thunder3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/thunder3.ogg
index 9ea0ceb5..dce987d3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/thunder3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/ambient/weather/thunder3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/damage/fallbig.ogg b/desktopRuntime/resources/assets/minecraft/sounds/damage/fallbig.ogg
index 3a9212d4..85bad019 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/damage/fallbig.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/damage/fallbig.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/damage/fallsmall.ogg b/desktopRuntime/resources/assets/minecraft/sounds/damage/fallsmall.ogg
index 55daa201..11f9e3e5 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/damage/fallsmall.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/damage/fallsmall.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/damage/hit1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/damage/hit1.ogg
index 707f5edb..3929ff39 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/damage/hit1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/damage/hit1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/damage/hit2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/damage/hit2.ogg
index 6154f211..deef105e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/damage/hit2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/damage/hit2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/damage/hit3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/damage/hit3.ogg
index 21632f12..dd89c202 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/damage/hit3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/damage/hit3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth1.ogg
index 2c6273d9..095ff8ee 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth2.ogg
index 312123fd..97b66cae 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth3.ogg
index bbee4440..ffdf4e1d 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth4.ogg
index 798a2bdd..aa8f10b4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/cloth4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/grass1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/grass1.ogg
index e2e6332c..6461bc16 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/grass1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/grass1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/grass2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/grass2.ogg
index bdd42c0c..68a49d83 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/grass2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/grass2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/grass3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/grass3.ogg
index 204d4f8a..c8c10942 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/grass3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/grass3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/grass4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/grass4.ogg
index 7cddcce2..777de3b9 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/grass4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/grass4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel1.ogg
index b8337ed5..a45d7b47 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel2.ogg
index 50307e96..5273912c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel3.ogg
index 3204831b..e20f3983 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel4.ogg
index cc2de318..47f5222f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/gravel4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/sand1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/sand1.ogg
index a6588ade..4142bf46 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/sand1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/sand1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/sand2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/sand2.ogg
index e73f59c3..8098ed34 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/sand2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/sand2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/sand3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/sand3.ogg
index 77eb30be..05ebec83 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/sand3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/sand3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/sand4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/sand4.ogg
index fb8e05a9..eb8fe8a3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/sand4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/sand4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/snow1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/snow1.ogg
index 3385a9fb..f4b1a76f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/snow1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/snow1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/snow2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/snow2.ogg
index 6a444a20..4948d763 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/snow2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/snow2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/snow3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/snow3.ogg
index 8aa7ae48..472c23b9 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/snow3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/snow3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/snow4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/snow4.ogg
index d231e2d4..9abe72d7 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/snow4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/snow4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/stone1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/stone1.ogg
index 4877dea8..0df318f2 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/stone1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/stone1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/stone2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/stone2.ogg
index 023f98e3..c1f9fd59 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/stone2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/stone2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/stone3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/stone3.ogg
index 61c270c3..9f9e59eb 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/stone3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/stone3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/stone4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/stone4.ogg
index 7f80d740..b90ddabb 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/stone4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/stone4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/wood1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/wood1.ogg
index 4a7dbf62..db9e4b97 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/wood1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/wood1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/wood2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/wood2.ogg
index 1975ef55..146c0664 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/wood2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/wood2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/wood3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/wood3.ogg
index a49b4c75..8186bdb8 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/wood3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/wood3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/dig/wood4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/dig/wood4.ogg
index 1cb12592..6968c06e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/dig/wood4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/dig/wood4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/fire/fire.ogg b/desktopRuntime/resources/assets/minecraft/sounds/fire/fire.ogg
index 39920e0c..42f5ef9f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/fire/fire.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/fire/fire.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/fire/ignite.ogg b/desktopRuntime/resources/assets/minecraft/sounds/fire/ignite.ogg
index 0ddd95f8..5d9822fd 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/fire/ignite.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/fire/ignite.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/fireworks/blast1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/fireworks/blast1.ogg
index 40b0f5fb..c16061ec 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/fireworks/blast1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/fireworks/blast1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/fireworks/blast_far1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/fireworks/blast_far1.ogg
index 3d93d7d3..f7f3d903 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/fireworks/blast_far1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/fireworks/blast_far1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/fireworks/largeBlast1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/fireworks/largeBlast1.ogg
index 5a300cd0..ca31ad8c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/fireworks/largeBlast1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/fireworks/largeBlast1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/fireworks/largeBlast_far1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/fireworks/largeBlast_far1.ogg
index aded5776..eda289f7 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/fireworks/largeBlast_far1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/fireworks/largeBlast_far1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/fireworks/launch1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/fireworks/launch1.ogg
index 38028dd1..7f4b44af 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/fireworks/launch1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/fireworks/launch1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/fireworks/twinkle1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/fireworks/twinkle1.ogg
index 24d7d29f..6bbad351 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/fireworks/twinkle1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/fireworks/twinkle1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/fireworks/twinkle_far1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/fireworks/twinkle_far1.ogg
index da28bb44..17002b44 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/fireworks/twinkle_far1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/fireworks/twinkle_far1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/liquid/lava.ogg b/desktopRuntime/resources/assets/minecraft/sounds/liquid/lava.ogg
index 0e03e037..b4421cf4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/liquid/lava.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/liquid/lava.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/liquid/lavapop.ogg b/desktopRuntime/resources/assets/minecraft/sounds/liquid/lavapop.ogg
index a23fa514..bdf88b78 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/liquid/lavapop.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/liquid/lavapop.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/liquid/splash.ogg b/desktopRuntime/resources/assets/minecraft/sounds/liquid/splash.ogg
index 2f60469c..9394745f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/liquid/splash.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/liquid/splash.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/liquid/splash2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/liquid/splash2.ogg
index 8422ab8d..da2e9af6 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/liquid/splash2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/liquid/splash2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim1.ogg
index 6af59e6f..af6fa30a 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim2.ogg
index 0febcff1..6a98ecca 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim3.ogg
index 76ce277c..8c8a3578 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim4.ogg
index 65ca27b2..1479bbf4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/liquid/swim4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/liquid/water.ogg b/desktopRuntime/resources/assets/minecraft/sounds/liquid/water.ogg
index 12ff5c0b..4f820c93 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/liquid/water.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/liquid/water.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/minecart/base.ogg b/desktopRuntime/resources/assets/minecraft/sounds/minecart/base.ogg
index f1b2d4b2..97b0ad37 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/minecart/base.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/minecart/base.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/minecart/inside.ogg b/desktopRuntime/resources/assets/minecraft/sounds/minecart/inside.ogg
index 11bb7c1a..c5280a88 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/minecart/inside.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/minecart/inside.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/death.ogg
index ffcf7a7b..ab2b06ee 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt1.ogg
index da7cb9cb..853c900c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt2.ogg
index 3ac2fc93..d1d8097f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt3.ogg
index 7bdd7a4e..ecc19658 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt4.ogg
index 9d17ade6..178b62b7 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/hurt4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle1.ogg
index db35a7d1..74203011 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle2.ogg
index 65890f94..eea16636 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle3.ogg
index 8ac4b760..3e4515db 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle4.ogg
index c8bb1f44..2b94055a 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/idle4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/loop.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/loop.ogg
index 6f9ade17..ecfdea89 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/loop.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/loop.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/takeoff.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/takeoff.ogg
index 2a61a29c..99377c34 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/takeoff.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/bat/takeoff.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe1.ogg
index 76156347..ea438441 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe2.ogg
index 23f7712b..7d48cb88 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe3.ogg
index f7243055..32b8afd0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe4.ogg
index 4046b333..46d4465f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/breathe4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/death.ogg
index 3276e01f..73483cb9 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit1.ogg
index d7278783..deaf310b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit2.ogg
index 4b42f57f..71355415 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit3.ogg
index 631536d5..b76c6e7e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit4.ogg
index c8bbe9f9..6dab481f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/blaze/hit4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hiss1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hiss1.ogg
index 20fdbb4f..b11a20d0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hiss1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hiss1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hiss2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hiss2.ogg
index 44db85b3..6d5ed6d8 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hiss2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hiss2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hiss3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hiss3.ogg
index c861ae84..f0f89901 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hiss3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hiss3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hitt1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hitt1.ogg
index 3193b2c3..ec6763fe 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hitt1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hitt1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hitt2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hitt2.ogg
index 46ee6b72..6c424d29 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hitt2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hitt2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hitt3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hitt3.ogg
index a5872dfe..a1533743 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hitt3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/hitt3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow1.ogg
index 8ce1299c..62ac1afa 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow2.ogg
index b609e502..42135be0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow3.ogg
index 56845efa..0e2c6379 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow4.ogg
index 7db25f99..d591fa3e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/meow4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purr1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purr1.ogg
index 1adc5e59..cdfd193b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purr1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purr1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purr2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purr2.ogg
index 157e8c2c..4e289cab 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purr2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purr2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purr3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purr3.ogg
index 39bbb834..65411eec 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purr3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purr3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purreow1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purreow1.ogg
index 7c81ac0c..7521001f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purreow1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purreow1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purreow2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purreow2.ogg
index b10042c6..397bece9 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purreow2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cat/purreow2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/hurt1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/hurt1.ogg
index fa22ab96..ddc909e3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/hurt1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/hurt1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/hurt2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/hurt2.ogg
index d71aa5f9..31328302 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/hurt2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/hurt2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/plop.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/plop.ogg
index eee6c286..27225744 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/plop.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/plop.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/say1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/say1.ogg
index a865f479..0f4e7c3b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/say1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/say1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/say2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/say2.ogg
index 9aa2ae4b..035b11a0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/say2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/say2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/say3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/say3.ogg
index 00cd6dc3..0f173fd2 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/say3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/say3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/step1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/step1.ogg
index 879e4332..6d29681b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/step1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/step1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/step2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/step2.ogg
index bf007524..84df92e2 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/step2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/chicken/step2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/hurt1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/hurt1.ogg
index 10102da0..e7513144 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/hurt1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/hurt1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/hurt2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/hurt2.ogg
index 8ecd552a..f3550592 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/hurt2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/hurt2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/hurt3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/hurt3.ogg
index a36f54cf..d66fb72c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/hurt3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/hurt3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say1.ogg
index d2462c0a..73a35d3c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say2.ogg
index 66e2c328..c1f5c193 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say3.ogg
index 41881c79..ca7ac07a 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say4.ogg
index e93c5291..a7e702da 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/say4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step1.ogg
index a549b901..c4def7f3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step2.ogg
index dab9714f..4a28b35f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step3.ogg
index 9acb538d..b0acc134 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step4.ogg
index 6788e7e6..a0a45c22 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/cow/step4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/death.ogg
index eea2481d..2a2b4cf1 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say1.ogg
index 5e3063d7..6b65d3d7 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say2.ogg
index b045566e..ff6122d2 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say3.ogg
index 34c5cf31..bb3a3d0d 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say4.ogg
index cefd59ec..f8aba7e4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/creeper/say4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/end.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/end.ogg
index a7d72f65..941f6dfd 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/end.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/end.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl1.ogg
index 6365c639..536b9362 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl2.ogg
index 95d7412b..be961c6b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl3.ogg
index 26786678..221e2a33 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl4.ogg
index 01aae916..492449e4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/growl4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit1.ogg
index 3597340a..fdad3b11 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit2.ogg
index 41b5e29e..31f47a24 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit3.ogg
index 2790bd55..8e128791 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit4.ogg
index 0697d58d..5027f1dd 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/hit4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings1.ogg
index fa8ef1c8..26fc9ea7 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings2.ogg
index 425f7d92..498cece5 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings3.ogg
index bc621513..d1722110 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings4.ogg
index c8b3c7cb..184e739a 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings5.ogg
index 67da5be1..74a0dc39 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings6.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings6.ogg
index 2e780d9d..6f9c1333 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings6.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/enderdragon/wings6.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/death.ogg
index 80ae87ee..72948c91 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit1.ogg
index 6b5bce72..28b9050e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit2.ogg
index ca3d7765..78e32da5 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit3.ogg
index 3d02e290..b8595c3b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit4.ogg
index ecb37a13..ace69d6b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/hit4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle1.ogg
index 193bca6c..16f05c59 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle2.ogg
index 78dbc31d..9b8de956 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle3.ogg
index da8ece08..64381cf0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle4.ogg
index 6452d697..877a2e3c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle5.ogg
index 79bf5e8b..fea97782 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/idle5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/portal.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/portal.ogg
index 40e33c0b..9af728c9 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/portal.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/portal.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/portal2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/portal2.ogg
index 5320d42e..e3eb440c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/portal2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/portal2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream1.ogg
index 1a99ec92..f521af5b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream2.ogg
index 38366369..824bce63 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream3.ogg
index ad6beb81..3889724c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream4.ogg
index 8a120ba2..dbe12df3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/scream4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/stare.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/stare.ogg
index 7e5792d3..d8313e60 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/stare.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/endermen/stare.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/affectionate_scream.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/affectionate_scream.ogg
index 92e5e87e..48ac39bb 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/affectionate_scream.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/affectionate_scream.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/charge.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/charge.ogg
index 3f1fcc99..2ad004d4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/charge.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/charge.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/death.ogg
index a4717bfb..01f9aacc 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/fireball4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/fireball4.ogg
index d57c41d2..72619665 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/fireball4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/fireball4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan1.ogg
index d180d962..609fc03a 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan2.ogg
index 4346245f..e7777558 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan3.ogg
index 0af520f3..78d21180 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan4.ogg
index e63679ad..df8903be 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan5.ogg
index 5ac9dee0..c4f44f86 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan6.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan6.ogg
index 29033693..448c609b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan6.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan6.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan7.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan7.ogg
index d1336627..c7bf8c19 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan7.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/moan7.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream1.ogg
index c0f34fba..a07a2eba 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream2.ogg
index 64ad5c45..ccfc1f91 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream3.ogg
index 02928089..8991433c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream4.ogg
index 344ec632..13460616 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream5.ogg
index 70cd1220..abb444e0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/ghast/scream5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/attack_loop.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/attack_loop.ogg
index 6909c6e7..c7a9c1ec 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/attack_loop.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/attack_loop.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/curse.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/curse.ogg
index 4c2019be..8510284d 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/curse.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/curse.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_death.ogg
index 3ff8a9ec..26cd7a30 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit1.ogg
index 30944f01..2a32d7c8 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit2.ogg
index 9b784336..be9389a3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit3.ogg
index 21174cfd..c60dc30c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit4.ogg
index 5e97a2a3..ecb4717f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_hit4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle1.ogg
index 7faceed7..3a424f05 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle2.ogg
index 0fe5f6e0..3cf26811 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle3.ogg
index 8ec4d8d2..0bfebcb0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle4.ogg
index 3184f245..f80bfa3d 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/elder_idle4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop1.ogg
index 9ec5a915..fe7a4302 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop2.ogg
index eafcace0..cd4d5d36 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop3.ogg
index 26aea0c3..128ad3ec 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop4.ogg
index 7cd0ee31..670e3966 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/flop4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_death.ogg
index da37d1fc..1a7d58c1 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit1.ogg
index 4dbd0fd7..e2ba019d 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit2.ogg
index 01075445..cce34b53 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit3.ogg
index cf2eeeff..80082497 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit4.ogg
index b2bb1e96..23b1e428 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_hit4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle1.ogg
index 22d6ef32..2b26b631 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle2.ogg
index c2ab2d15..c74caf2a 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle3.ogg
index f5e5eced..11bca6d7 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle4.ogg
index 5250557d..5adb2b3e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/guardian_idle4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_death.ogg
index 793c33af..6eea09de 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit1.ogg
index a6d500f1..603663a4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit2.ogg
index 301aa616..d878327c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit3.ogg
index 7a8980e9..9ba70ce5 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit4.ogg
index 08749f43..3d7d9757 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_hit4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle1.ogg
index 9b646196..d16831b0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle2.ogg
index a1a303fd..af569431 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle3.ogg
index 5a4056dc..064b9f48 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle4.ogg
index 7701b6ef..8e585c7e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/guardian/land_idle4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/angry1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/angry1.ogg
index c4ea30d1..45de6b6a 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/angry1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/angry1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/armor.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/armor.ogg
index b4b6c1b1..1828ee89 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/armor.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/armor.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/breathe1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/breathe1.ogg
index ce387dae..86b1b194 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/breathe1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/breathe1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/breathe2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/breathe2.ogg
index 2aa14e9f..f00bab78 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/breathe2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/breathe2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/breathe3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/breathe3.ogg
index f6f1bae5..be9ccdc4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/breathe3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/breathe3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/death.ogg
index f7fb51df..8e7c436d 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/angry1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/angry1.ogg
index 88cba549..e025a0b3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/angry1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/angry1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/angry2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/angry2.ogg
index 0f82f5cb..a7dd7dc2 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/angry2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/angry2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/death.ogg
index f7697f00..073b6f57 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/hit1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/hit1.ogg
index dd656cec..a86bc01b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/hit1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/hit1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/hit2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/hit2.ogg
index 1f842452..59cf3c99 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/hit2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/hit2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/hit3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/hit3.ogg
index 9627c458..33ee6af5 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/hit3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/hit3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/idle1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/idle1.ogg
index 0959d645..29b8dfd9 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/idle1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/idle1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/idle2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/idle2.ogg
index 907971dd..a2ccffca 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/idle2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/idle2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/idle3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/idle3.ogg
index 1b10d5c9..2d28ab00 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/idle3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/donkey/idle3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop1.ogg
index 3c304044..1b8c9107 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop2.ogg
index c38544b0..aa0e2c84 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop3.ogg
index dbacb32c..74f06837 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop4.ogg
index 335b4a32..5b396735 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/gallop4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit1.ogg
index 892329f9..2e291689 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit2.ogg
index 7a2bdf77..c2e7712c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit3.ogg
index 9b5ac1e1..e2613c3e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit4.ogg
index 323ddebd..c49acc92 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/hit4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/idle1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/idle1.ogg
index 696364cf..4f541aa8 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/idle1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/idle1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/idle2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/idle2.ogg
index f57aad17..44bed2ef 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/idle2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/idle2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/idle3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/idle3.ogg
index d2642515..3342c9c5 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/idle3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/idle3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/jump.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/jump.ogg
index ad8b6782..b83b3d4c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/jump.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/jump.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/land.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/land.ogg
index 843bfcf8..0d95c12f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/land.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/land.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/leather.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/leather.ogg
index b671d746..0d6330e3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/leather.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/leather.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/death.ogg
index 2466b739..765aadb6 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit1.ogg
index ce74f4f2..dac54d2f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit2.ogg
index 717af479..f6eb4784 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit3.ogg
index 0aac9ef6..f1af8057 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit4.ogg
index cd861fc0..ad700f62 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/hit4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/idle1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/idle1.ogg
index 6e5d0052..b58b8dd9 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/idle1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/idle1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/idle2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/idle2.ogg
index 7e074fa2..c3455b54 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/idle2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/idle2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/idle3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/idle3.ogg
index 48e8ff12..b9109d38 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/idle3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/skeleton/idle3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft1.ogg
index ab302e87..c0bc3cee 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft2.ogg
index 43285324..4d947d1b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft3.ogg
index 5d44f983..24a6e5e9 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft4.ogg
index 9ae338f9..d2243521 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft5.ogg
index 48988290..c775d0e5 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft6.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft6.ogg
index 1dec6848..4d95ba99 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft6.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/soft6.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood1.ogg
index dfb352dc..39583834 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood2.ogg
index b876d887..19f261d3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood3.ogg
index 7a75b55f..82fd55aa 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood4.ogg
index 1497e05e..8f62626d 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood5.ogg
index 34f06e6f..d097d8fb 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood6.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood6.ogg
index 5d293578..9b776ba0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood6.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/wood6.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/death.ogg
index 5b0a045b..bee3462c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit1.ogg
index 43c63439..b6225ec6 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit2.ogg
index fd686d05..de55570b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit3.ogg
index 1bddeaf0..1e2d3491 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit4.ogg
index a2900b72..55ee8e32 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/hit4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/idle1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/idle1.ogg
index d3739642..0f30902b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/idle1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/idle1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/idle2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/idle2.ogg
index 6bd629e9..38a76d9f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/idle2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/idle2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/idle3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/idle3.ogg
index 4f0a2c29..b438dd70 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/idle3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/horse/zombie/idle3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/death.ogg
index fdb70e41..9d6a0e3d 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit1.ogg
index e448ac9a..b26e8568 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit2.ogg
index b88e7a7b..211c8ea5 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit3.ogg
index 8db9f30f..daea6c33 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit4.ogg
index 172ddde4..3cbbdc02 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/hit4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/throw.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/throw.ogg
index f57c0e61..25965ea4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/throw.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/throw.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk1.ogg
index ad2e6378..f2538a14 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk2.ogg
index ace3f700..0668a888 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk3.ogg
index f0c29e5f..e1d9a503 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk4.ogg
index 0966f51d..58361cdb 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/irongolem/walk4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big1.ogg
index 6830a38d..a9062f4f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big2.ogg
index 72ec6d5d..19e89985 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big3.ogg
index a27c2a4d..e2dbf42b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big4.ogg
index bfb2e468..2ed7951b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/big4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump1.ogg
index e3a45ba3..3d5f5a86 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump2.ogg
index e4a0c039..c0b93a2b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump3.ogg
index 96eb6672..3c8da8ca 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump4.ogg
index f9f10c90..6e0d4326 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/jump4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small1.ogg
index d91b89a1..74549dfb 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small2.ogg
index e17326e8..9d629c61 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small3.ogg
index 2135aec2..6d129754 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small4.ogg
index 44ba1994..0b13a31c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small5.ogg
index 94624766..defdc7da 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/magmacube/small5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/death.ogg
index 0b0b5324..0cf0898d 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/say1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/say1.ogg
index 5952b4af..ebeaeedd 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/say1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/say1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/say2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/say2.ogg
index 870729b7..eec5bb54 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/say2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/say2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/say3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/say3.ogg
index 7bc67dc3..6180f131 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/say3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/say3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step1.ogg
index ca5fd7ef..17132383 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step2.ogg
index 8b40f466..edfb887b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step3.ogg
index 302d834d..a53fd9ec 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step4.ogg
index 7ba84bf3..3b7194ad 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step5.ogg
index 68e0376f..b0baacc3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/pig/step5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/bunnymurder.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/bunnymurder.ogg
index 3bbbe0ac..3da71730 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/bunnymurder.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/bunnymurder.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop1.ogg
index 8a3d45e6..06ddf46a 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop2.ogg
index ec3e5d4a..1d8707a1 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop3.ogg
index b7d22a61..f8489f15 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop4.ogg
index 17d9341c..8fefcc96 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hop4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt1.ogg
index 9f3388ca..ea66d967 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt2.ogg
index c3a26098..7fa7b9d0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt3.ogg
index 866e54f8..490f3113 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt4.ogg
index a9436cbc..8ee2caec 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/hurt4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle1.ogg
index 5c66e5ca..485b3fad 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle2.ogg
index b0cacd72..4ff9704f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle3.ogg
index 9f91fcb6..bfc369d8 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle4.ogg
index fd1ac090..4534b6af 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/rabbit/idle4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/say1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/say1.ogg
index 00535a28..6e9c59fb 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/say1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/say1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/say2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/say2.ogg
index ebb206e4..2ab3b960 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/say2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/say2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/say3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/say3.ogg
index de13af47..ea64ae1e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/say3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/say3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/shear.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/shear.ogg
index 556629f0..5c2ef6fe 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/shear.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/shear.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step1.ogg
index f843f760..b6954fd4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step2.ogg
index 6db3162c..7ad89f17 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step3.ogg
index 693a0329..1f9a476c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step4.ogg
index 53647bb8..591be072 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step5.ogg
index 37555402..7e2dc05b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/sheep/step5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/hit1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/hit1.ogg
index bfe41172..660e424b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/hit1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/hit1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/hit2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/hit2.ogg
index 0b99e49d..9ec3653e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/hit2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/hit2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/hit3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/hit3.ogg
index cc68a7ea..f08704a7 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/hit3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/hit3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/kill.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/kill.ogg
index 8f37d357..0a75a990 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/kill.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/kill.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say1.ogg
index e2f926e5..2f3bce98 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say2.ogg
index ff7502ad..359ac99a 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say3.ogg
index 212ebdf1..f7ad0c48 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say4.ogg
index 8158859e..4f6b5474 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/say4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step1.ogg
index 85fbd037..36eef2be 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step2.ogg
index a3e259ab..a57adb01 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step3.ogg
index cca7978d..cf83b233 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step4.ogg
index f02a5690..201c10f8 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/silverfish/step4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/death.ogg
index d495364d..affe1038 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt1.ogg
index a288bfb2..7b2e5828 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt2.ogg
index 25e6a237..9928dd1a 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt3.ogg
index 11bbe45c..2ce17621 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt4.ogg
index 3abce7fe..b1715700 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/hurt4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/say1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/say1.ogg
index a1ac87f8..e7f2ad23 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/say1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/say1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/say2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/say2.ogg
index 2c2d54fd..c4a1160e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/say2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/say2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/say3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/say3.ogg
index ad5b97c8..d83be2e2 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/say3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/say3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step1.ogg
index 5c36f219..fdfa86eb 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step2.ogg
index 1d99fea4..02668c02 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step3.ogg
index 895631df..95e44144 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step4.ogg
index d41699a4..264379e3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/skeleton/step4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/attack1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/attack1.ogg
index 8a238f85..cda0417a 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/attack1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/attack1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/attack2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/attack2.ogg
index 89c2bb31..4d0736f6 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/attack2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/attack2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big1.ogg
index 19c7e0e3..3f48a6ff 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big2.ogg
index 9bf7541f..df662237 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big3.ogg
index a5019540..c88c824c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big4.ogg
index fd9619e5..16511452 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/big4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small1.ogg
index 69c415b0..6a051aad 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small2.ogg
index dc662b3f..c18c8474 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small3.ogg
index fffc305e..dfff3125 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small4.ogg
index de131ae1..894e5060 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small5.ogg
index 8e861765..54473f31 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/slime/small5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/death.ogg
index daead36c..64a5d58e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say1.ogg
index 0820e675..4f31d753 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say2.ogg
index 995e9599..73064a13 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say3.ogg
index 6e24a56a..0a178679 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say4.ogg
index ff76ad34..2bddba43 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/say4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step1.ogg
index 13be0593..d22f2f02 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step2.ogg
index d15afc86..e882c886 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step3.ogg
index accfa926..86f2595e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step4.ogg
index 42f18eda..6c9e1966 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/spider/step4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/death.ogg
index 593f27f1..15cd7443 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/haggle1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/haggle1.ogg
index e332ca0a..c94c46c9 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/haggle1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/haggle1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/haggle2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/haggle2.ogg
index 7e8d50ed..9cac9c41 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/haggle2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/haggle2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/haggle3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/haggle3.ogg
index 77080758..0b6b1ead 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/haggle3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/haggle3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit1.ogg
index 759e6b92..c61e187f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit2.ogg
index ebfb4728..3dcaf1d1 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit3.ogg
index fccb74c5..7ec5c8dd 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit4.ogg
index a972e17c..0c4ad92f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/hit4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/idle1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/idle1.ogg
index 30fd02d7..2e430ac4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/idle1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/idle1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/idle2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/idle2.ogg
index da19a2ec..440279ad 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/idle2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/idle2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/idle3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/idle3.ogg
index 03047516..d6a0f9c1 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/idle3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/idle3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/no1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/no1.ogg
index 88945059..42a5a49c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/no1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/no1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/no2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/no2.ogg
index 7efb3441..6187fb7c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/no2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/no2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/no3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/no3.ogg
index cfeceb2a..363ed22f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/no3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/no3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/yes1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/yes1.ogg
index f75d16b2..766afb9f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/yes1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/yes1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/yes2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/yes2.ogg
index 91301831..fd6aa1ce 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/yes2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/yes2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/yes3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/yes3.ogg
index 9884b783..87985ea5 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/yes3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/villager/yes3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/death.ogg
index 2835aca0..c1fb42ba 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt1.ogg
index c46e94a8..e08fa0aa 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt2.ogg
index d4675bc2..74455a7b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt3.ogg
index eb7e3f00..c38b5c27 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt4.ogg
index f6f191ab..69f0d0ed 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/hurt4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle1.ogg
index 3d5768c4..410ba4f7 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle2.ogg
index 5c907e1d..6fdc9c6d 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle3.ogg
index 36f94f40..3f38a903 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle4.ogg
index 33f221e1..1713faee 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/idle4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/shoot.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/shoot.ogg
index 5abe93a9..67059c7f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/shoot.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/shoot.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/spawn.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/spawn.ogg
index 51f848d9..252523f4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/spawn.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wither/spawn.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/bark1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/bark1.ogg
index e5cd7c2c..b5e3ec73 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/bark1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/bark1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/bark2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/bark2.ogg
index 3580a978..3a9452a2 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/bark2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/bark2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/bark3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/bark3.ogg
index 1d1fb5f2..8646c51d 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/bark3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/bark3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/death.ogg
index 600862df..7088886f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/growl1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/growl1.ogg
index 0ef50e98..41d35ec2 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/growl1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/growl1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/growl2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/growl2.ogg
index 58b97ee9..c6bdc11b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/growl2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/growl2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/growl3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/growl3.ogg
index 0fff7eb4..a10edf52 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/growl3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/growl3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/howl1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/howl1.ogg
index 584dce05..80b48bed 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/howl1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/howl1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/howl2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/howl2.ogg
index ad9b8283..2a276ada 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/howl2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/howl2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/hurt1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/hurt1.ogg
index b1c43586..4b28d2c0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/hurt1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/hurt1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/hurt2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/hurt2.ogg
index 068e336b..641e9ece 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/hurt2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/hurt2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/hurt3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/hurt3.ogg
index c7a59657..a874ede1 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/hurt3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/hurt3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/panting.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/panting.ogg
index 80d8a57c..114d1f0c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/panting.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/panting.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/shake.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/shake.ogg
index ffd2e0a0..103a2f8f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/shake.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/shake.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step1.ogg
index d4023f9f..306bdae2 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step2.ogg
index b5449cb8..dad12dd0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step3.ogg
index 6ea7c172..a131a8e9 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step4.ogg
index d9997073..ff4dfcd8 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step5.ogg
index 87692960..20b329b2 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/step5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/whine.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/whine.ogg
index 4c34181c..bbde2118 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/whine.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/wolf/whine.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/death.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/death.ogg
index 9aa6a3c6..b0327d62 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/death.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/death.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/hurt1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/hurt1.ogg
index b592aeb2..66b4413e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/hurt1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/hurt1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/hurt2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/hurt2.ogg
index 42aa43c2..19f9c80f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/hurt2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/hurt2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/infect.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/infect.ogg
index 114274f6..3456ebf3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/infect.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/infect.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/metal1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/metal1.ogg
index b0974a9b..10ff3644 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/metal1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/metal1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/metal2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/metal2.ogg
index 9b7d1747..a092bb7c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/metal2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/metal2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/metal3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/metal3.ogg
index b7e03b2f..cfa2e380 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/metal3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/metal3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/remedy.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/remedy.ogg
index 60e1fa31..17c87033 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/remedy.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/remedy.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/say1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/say1.ogg
index f6187782..3fc82adc 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/say1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/say1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/say2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/say2.ogg
index 088b25d3..cda66e65 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/say2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/say2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/say3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/say3.ogg
index 9a732fb1..b58228cd 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/say3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/say3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step1.ogg
index 5b2884c7..58f11ca9 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step2.ogg
index 7d497a08..4f24ecf6 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step3.ogg
index cc82889d..c46f673d 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step4.ogg
index 40559c0a..9efed43f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step5.ogg
index 4e2e32d1..294ad72f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/step5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/unfect.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/unfect.ogg
index f1da3933..b7b296ad 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/unfect.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/unfect.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood1.ogg
index 0842548c..3d0d979b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood2.ogg
index 57e1184d..629f8011 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood3.ogg
index 82568a59..4188edd7 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood4.ogg
index 003fb5b2..03d7d34d 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/wood4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/woodbreak.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/woodbreak.ogg
index 87d8be17..e9e97575 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/woodbreak.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombie/woodbreak.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig1.ogg
index 5917dffb..9dab8ef1 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig2.ogg
index 18da0f1b..64901209 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig3.ogg
index 4b89a325..0ae7badf 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig4.ogg
index 82e2491b..c9c284f5 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpig4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry1.ogg
index ee353df5..715bbf4b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry2.ogg
index 0704d73a..013432fd 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry3.ogg
index 856e6776..c5ac0010 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry4.ogg
index 6db04faa..7a162d68 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigangry4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigdeath.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigdeath.ogg
index cf252d19..61ef2d2b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigdeath.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpigdeath.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpighurt1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpighurt1.ogg
index a49e801a..ec999223 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpighurt1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpighurt1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpighurt2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpighurt2.ogg
index 2b348d63..5d9fecf8 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpighurt2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/mob/zombiepig/zpighurt2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/music/menu/menu2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/music/menu/menu2.ogg
index b0fafc64..bd51b7c5 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/music/menu/menu2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/music/menu/menu2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/note/bass.ogg b/desktopRuntime/resources/assets/minecraft/sounds/note/bass.ogg
index 2236ac46..d8c67600 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/note/bass.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/note/bass.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/note/bassattack.ogg b/desktopRuntime/resources/assets/minecraft/sounds/note/bassattack.ogg
index d968193d..35a48eb9 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/note/bassattack.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/note/bassattack.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/note/bd.ogg b/desktopRuntime/resources/assets/minecraft/sounds/note/bd.ogg
index b36afcf3..ba50dbb6 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/note/bd.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/note/bd.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/note/harp.ogg b/desktopRuntime/resources/assets/minecraft/sounds/note/harp.ogg
index abf7901d..18959c87 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/note/harp.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/note/harp.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/note/hat.ogg b/desktopRuntime/resources/assets/minecraft/sounds/note/hat.ogg
index 5ace387a..17cae8ee 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/note/hat.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/note/hat.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/note/pling.ogg b/desktopRuntime/resources/assets/minecraft/sounds/note/pling.ogg
index e035980d..c278a9c2 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/note/pling.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/note/pling.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/note/snare.ogg b/desktopRuntime/resources/assets/minecraft/sounds/note/snare.ogg
index 37dd1c3f..f1f58785 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/note/snare.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/note/snare.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/portal/portal.ogg b/desktopRuntime/resources/assets/minecraft/sounds/portal/portal.ogg
index 1e0216a7..8b244398 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/portal/portal.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/portal/portal.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/portal/travel.ogg b/desktopRuntime/resources/assets/minecraft/sounds/portal/travel.ogg
index 8c910c9e..31e399aa 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/portal/travel.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/portal/travel.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/portal/trigger.ogg b/desktopRuntime/resources/assets/minecraft/sounds/portal/trigger.ogg
index ff95b7ef..4ade9bfa 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/portal/trigger.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/portal/trigger.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/anvil_break.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/anvil_break.ogg
index 5b17b063..9a382708 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/anvil_break.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/anvil_break.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/anvil_land.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/anvil_land.ogg
index 5ca397fc..0b62b3d5 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/anvil_land.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/anvil_land.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/anvil_use.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/anvil_use.ogg
index 6b195ae2..b7331cb7 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/anvil_use.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/anvil_use.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/bow.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/bow.ogg
index 28050ded..096ae424 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/bow.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/bow.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit1.ogg
index 8e2806ea..0df6d6aa 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit2.ogg
index a1054d33..0c74bf75 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit3.ogg
index 3e15a690..7a7e8981 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit4.ogg
index fc937d76..df3e373f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/bowhit4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/break.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/break.ogg
index 0bea3284..554b1d63 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/break.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/break.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/breath.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/breath.ogg
index fc129f30..5c9d1f56 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/breath.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/breath.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/burp.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/burp.ogg
index 1242587f..110a4533 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/burp.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/burp.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/chestclosed.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/chestclosed.ogg
index 442adc83..0a5d357c 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/chestclosed.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/chestclosed.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/chestopen.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/chestopen.ogg
index 483bdfa3..811626e5 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/chestopen.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/chestopen.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/classic_hurt.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/classic_hurt.ogg
index 308b1c9c..43b5f813 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/classic_hurt.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/classic_hurt.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/click.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/click.ogg
index 9cf4bcbd..3ef92807 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/click.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/click.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/door_close.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/door_close.ogg
index b1645386..3b33c6c3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/door_close.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/door_close.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/door_open.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/door_open.ogg
index 66e393fb..d066ef9f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/door_open.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/door_open.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/drink.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/drink.ogg
index d90ffe85..1cfafcc1 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/drink.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/drink.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/eat1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/eat1.ogg
index 6e7ae3ae..94feacba 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/eat1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/eat1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/eat2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/eat2.ogg
index d17d3fc6..5f7216f1 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/eat2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/eat2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/eat3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/eat3.ogg
index 3a08927e..a3783261 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/eat3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/eat3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/explode1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/explode1.ogg
index 2a5a1bdb..21503fd7 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/explode1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/explode1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/explode2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/explode2.ogg
index 3a6f5707..2eae0df0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/explode2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/explode2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/explode3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/explode3.ogg
index 22360cfc..6a683110 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/explode3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/explode3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/explode4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/explode4.ogg
index 00176955..8b58cc71 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/explode4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/explode4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/fizz.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/fizz.ogg
index cb38b6ff..10f709a6 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/fizz.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/fizz.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/fuse.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/fuse.ogg
index f19d27b3..76c70386 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/fuse.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/fuse.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/glass1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/glass1.ogg
index 73aec24e..b0845023 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/glass1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/glass1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/glass2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/glass2.ogg
index 041bc71a..5fc40a7b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/glass2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/glass2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/glass3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/glass3.ogg
index 0a5c1510..aa94992d 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/glass3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/glass3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/levelup.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/levelup.ogg
index 840cc3ac..058e8c38 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/levelup.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/levelup.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/orb.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/orb.ogg
index 17a04fe0..49c2acef 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/orb.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/orb.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/pop.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/pop.ogg
index 71945360..577ff18b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/pop.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/pop.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/splash.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/splash.ogg
index 522f405e..f0cf19a0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/splash.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/splash.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/successful_hit.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/successful_hit.ogg
index 2b60a2de..71e95d1e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/successful_hit.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/successful_hit.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/random/wood_click.ogg b/desktopRuntime/resources/assets/minecraft/sounds/random/wood_click.ogg
index c372b13b..b1fe9f1b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/random/wood_click.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/random/wood_click.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/cloth1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/cloth1.ogg
index 6aef0ecf..69b12870 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/cloth1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/cloth1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/cloth2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/cloth2.ogg
index 8915645d..5467e150 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/cloth2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/cloth2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/cloth3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/cloth3.ogg
index 42307a7e..36d04c78 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/cloth3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/cloth3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/cloth4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/cloth4.ogg
index c5915028..d6febaca 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/cloth4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/cloth4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/grass1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/grass1.ogg
index 566a275d..c4a622e0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/grass1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/grass1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/grass2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/grass2.ogg
index 984390a5..420f9b51 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/grass2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/grass2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/grass3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/grass3.ogg
index 7d9a6e69..6505b997 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/grass3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/grass3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/grass4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/grass4.ogg
index c35a1a67..3cb29d3a 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/grass4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/grass4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/grass5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/grass5.ogg
index b0012d06..f1e78909 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/grass5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/grass5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/grass6.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/grass6.ogg
index 54468107..6b7fdae3 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/grass6.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/grass6.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/gravel1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/gravel1.ogg
index b5968517..55e79a6f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/gravel1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/gravel1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/gravel2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/gravel2.ogg
index 6b99d1e8..48b710b6 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/gravel2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/gravel2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/gravel3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/gravel3.ogg
index 2d76645a..e31b7545 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/gravel3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/gravel3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/gravel4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/gravel4.ogg
index dd416a4a..0798c204 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/gravel4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/gravel4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/ladder1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/ladder1.ogg
index f16c4078..858a7689 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/ladder1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/ladder1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/ladder2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/ladder2.ogg
index 5a141b0d..2eb8c10b 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/ladder2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/ladder2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/ladder3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/ladder3.ogg
index 9fba1b8f..9d494159 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/ladder3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/ladder3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/ladder4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/ladder4.ogg
index e758a79e..eb07fdd0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/ladder4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/ladder4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/ladder5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/ladder5.ogg
index 949d677b..12aef739 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/ladder5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/ladder5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/sand1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/sand1.ogg
index 087f5f45..248b46b0 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/sand1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/sand1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/sand2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/sand2.ogg
index f397e728..35828753 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/sand2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/sand2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/sand3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/sand3.ogg
index c4a78022..f0421e66 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/sand3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/sand3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/sand4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/sand4.ogg
index 27723047..fce50060 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/sand4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/sand4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/sand5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/sand5.ogg
index 9fbad601..d2e6ac3f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/sand5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/sand5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/snow1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/snow1.ogg
index f4da1c72..c741b4b9 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/snow1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/snow1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/snow2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/snow2.ogg
index 384b132f..b6b57f34 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/snow2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/snow2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/snow3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/snow3.ogg
index efb40a67..bf5a9481 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/snow3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/snow3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/snow4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/snow4.ogg
index 2192a760..efd5d312 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/snow4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/snow4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/stone1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/stone1.ogg
index 02098d0a..0d27182e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/stone1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/stone1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/stone2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/stone2.ogg
index ff65bb88..82bfb4c4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/stone2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/stone2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/stone3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/stone3.ogg
index dd0136c6..155328c4 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/stone3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/stone3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/stone4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/stone4.ogg
index 91651b2d..a833e701 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/stone4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/stone4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/stone5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/stone5.ogg
index 347db882..e3ea6964 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/stone5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/stone5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/stone6.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/stone6.ogg
index ebbf2011..c8353f15 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/stone6.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/stone6.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/wood1.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/wood1.ogg
index 65022e27..ed4c9d0e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/wood1.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/wood1.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/wood2.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/wood2.ogg
index 488974f0..b51676a5 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/wood2.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/wood2.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/wood3.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/wood3.ogg
index f39f803f..bb16055f 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/wood3.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/wood3.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/wood4.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/wood4.ogg
index 79c662af..3990b70d 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/wood4.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/wood4.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/wood5.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/wood5.ogg
index 4445d840..f7a1c70e 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/wood5.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/wood5.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/step/wood6.ogg b/desktopRuntime/resources/assets/minecraft/sounds/step/wood6.ogg
index 57291183..c94dea5a 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/step/wood6.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/step/wood6.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/tile/piston/in.ogg b/desktopRuntime/resources/assets/minecraft/sounds/tile/piston/in.ogg
index ae4f1a3c..63846059 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/tile/piston/in.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/tile/piston/in.ogg differ
diff --git a/desktopRuntime/resources/assets/minecraft/sounds/tile/piston/out.ogg b/desktopRuntime/resources/assets/minecraft/sounds/tile/piston/out.ogg
index b8206f47..486d46a6 100644
Binary files a/desktopRuntime/resources/assets/minecraft/sounds/tile/piston/out.ogg and b/desktopRuntime/resources/assets/minecraft/sounds/tile/piston/out.ogg differ
diff --git a/javascript/assets.epk b/javascript/assets.epk
new file mode 100644
index 00000000..5f2e5493
Binary files /dev/null and b/javascript/assets.epk differ
diff --git a/javascript/classes.js b/javascript/classes.js
new file mode 100644
index 00000000..f6e7b6a6
--- /dev/null
+++ b/javascript/classes.js
@@ -0,0 +1,34698 @@
+"use strict";
+var main;(function(){
+var $rt_seed=2463534242;function $rt_nextId(){var x=$rt_seed;x^=x<<13;x^=x>>17;x^=x<<5;$rt_seed=x;return x;}function $rt_compare(a,b){return a>b?1:a0){var i=0;do {data[i]=null;i=i+1|0;}while(i=0;i=i -1|0){if(dimensions[i]===0){first=i;break;}}if(first>0){for(i=0;i=0?packages[prefixIndex]:"";packages[j]
+=prefix+data[i++]+".";}$rt_packageData=packages;}function $rt_metadata(data){var packages=$rt_packageData;var i=0;while(i=0){m.name=packages[packageIndex]+m.name;}}m.binaryName="L"+m.name+";";var superclass=data[i++];m.superclass=superclass!==0?superclass:null;m.supertypes=data[i++];if(m.superclass){m.supertypes.push(m.superclass);cls.prototype
+=Object.create(m.superclass.prototype);}else {cls.prototype={};}var flags=data[i++];m.enum=(flags&8)!==0;m.flags=flags;m.primitive=false;m.item=null;cls.prototype.constructor=cls;cls.classObject=null;m.accessLevel=data[i++];var clinit=data[i++];cls.$clinit=clinit!==0?clinit:function(){};var virtualMethods=data[i++];if(virtualMethods!==0){for(var j=0;j0){clsName+="[]";}return clsName;}function Long(lo,hi){this.lo=lo|0;this.hi=hi|0;}Long.prototype.__teavm_class__=function(){return "long";};Long.prototype.toString
+=function(){var result=[];var n=this;var positive=Long_isPositive(n);if(!positive){n=Long_neg(n);}var radix=new Long(10,0);do {var divRem=Long_divRem(n,radix);result.push(String.fromCharCode(48+divRem[1].lo));n=divRem[0];}while(n.lo!==0||n.hi!==0);result=(result.reverse()).join('');return positive?result:"-"+result;};Long.prototype.valueOf=function(){return Long_toNumber(this);};var Long_ZERO=new Long(0,0);var Long_MAX_NORMAL=1<<18;function Long_fromInt(val){return val>=0?new Long(val,0):new Long(val, -1);}function Long_fromNumber(val)
+{if(val>=0){return new Long(val|0,val/0x100000000|0);}else {return Long_neg(new Long( -val|0, -val/0x100000000|0));}}function Long_toNumber(val){var lo=val.lo;var hi=val.hi;if(lo<0){lo+=0x100000000;}return 0x100000000*hi+lo;}var $rt_imul=Math.imul||function(a,b){var ah=a>>>16&0xFFFF;var al=a&0xFFFF;var bh=b>>>16&0xFFFF;var bl=b&0xFFFF;return al*bl+(ah*bl+al*bh<<16>>>0)|0;};var $rt_udiv=function(a,b){if(a<0){a+=0x100000000;}if(b<0){b+=0x100000000;}return a/b|0;};var $rt_umod=function(a,b){if(a<0){a+=0x100000000;}if
+(b<0){b+=0x100000000;}return a%b|0;};function $rt_setCloneMethod(target, f){target.cw=f;}
+function $rt_cls(cls){return ABJ(cls);}
+function $rt_str(str) {if (str === null) {return null;}var characters = $rt_createCharArray(str.length);var charsBuffer = characters.data;for (var i = 0; i < str.length; i = (i + 1) | 0) {charsBuffer[i] = str.charCodeAt(i) & 0xFFFF;}return KG(characters);}
+function $rt_ustr(str) {if (str === null) {return null;}var data = str.gE.data;var result = "";for (var i = 0; i < data.length; i = (i + 1) | 0) {result += String.fromCharCode(data[i]);}return result;}
+function $rt_objcls() { return D; }
+function $rt_nullCheck(val) {if (val === null) {$rt_throw(A.CCi());}return val;}
+function $rt_intern(str) {return str;}function $rt_getThread(){return BiK();}
+function $rt_setThread(t){return AAv(t);}
+function $rt_createException(message){return NA(message);}
+function $rt_createStackElement(className,methodName,fileName,lineNumber){return null;}
+function $rt_setStack(e,stack){}
+var A=Object.create(null);
+var I=$rt_throw;var Bo=$rt_compare;var CDd=$rt_nullCheck;var E=$rt_cls;var G=$rt_createArray;var Cf=$rt_isInstance;var Dz=$rt_nativeThread;var B=$rt_suspending;var Gt=$rt_resuming;var Gr=$rt_invalidPointer;var C=$rt_s;var Q=$rt_eraseClinit;var Bf=$rt_imul;var F=$rt_wrapException;
+function D(){this.lL=null;this.$id$=0;}
+A.CFh=function(){var a=new D();ABa(a);return a;};
+A.CoO=function(b){var c;if(b.lL===null)BgS(b);if(b.lL.wz===null)b.lL.wz=A.CFi;else if(b.lL.wz!==A.CFi){c=new CB;Z(c,C(0));I(c);}b=b.lL;b.w_=b.w_+1|0;};
+function BqE(b){var c,d;if(!AAb(b)&&b.lL.wz===A.CFi){c=b.lL;d=c.w_-1|0;c.w_=d;if(!d)b.lL.wz=null;AAb(b);return;}b=new AQP;Be(b);I(b);}
+function FR(b){if(b.lL===null)BgS(b);if(b.lL.wz===null)b.lL.wz=A.CFi;if(b.lL.wz!==A.CFi)A.Cbk(b,1);else{b=b.lL;b.w_=b.w_+1|0;}}
+function BgS(b){b.lL=A.CDS();}
+A.Cbk=function(b,c){var thread=$rt_nativeThread();var javaThread=$rt_getThread();if(thread.isResuming()){thread.status=0;var result=thread.attribute;if(result instanceof Error){throw result;}return result;}var callback=function(){};callback.bon=function(val){thread.attribute=val;$rt_setThread(javaThread);thread.resume();};callback.cjX=function(e){thread.attribute=$rt_exception(e);$rt_setThread(javaThread);thread.resume();};callback=A.Czk(callback);return thread.suspend(function(){try{A.Cyk(b,c,callback);}catch($e)
+{callback.cjX($rt_exception($e));}});};
+A.Cyk=function(b,c,d){var e,f,g;e=A.CFi;if(b.lL===null){BgS(b);AAv(e);b=b.lL;b.w_=b.w_+c|0;E3(d,null);return;}if(b.lL.wz===null){b.lL.wz=e;AAv(e);b=b.lL;b.w_=b.w_+c|0;E3(d,null);return;}f=b.lL;if(f.Ht===null)f.Ht=A.Cbm();f=f.Ht;g=new AXI;g.ceZ=e;g.ce0=b;g.ceX=c;g.ceY=d;d=g;f.push(d);};
+function B7(b){var c;if(!AAb(b)&&b.lL.wz===A.CFi){c=b.lL;c.w_=c.w_-1|0;if(c.w_<=0){c.wz=null;if(c.Ht!==null&&!APT(c.Ht)){c=new AZg;c.cqW=b;A.Y6(c);}else AAb(b);}return;}b=new AQP;Be(b);I(b);}
+function AAb(a){var b;b=a.lL;if(b===null)return 1;a:{if(b.wz===null&&!(b.Ht!==null&&!APT(b.Ht))){if(b.cuU===null)break a;if(APT(b.cuU))break a;}return 0;}a.lL=null;return 1;}
+function ABa(a){return;}
+function BX(a){return ABJ(a.constructor);}
+function Cy2(a){return KH(a);}
+function AFV(a,b){return a!==b?0:1;}
+function AV7(a){var b;b=new K;M(b);H(b,Fj(BX(a)));H(b,C(1));H(b,Wt(KH(a)));return O(b);}
+function KH(a){var b,c;b=a;if(!b.$id$){c=$rt_nextId();b.$id$=c;}return a.$id$;}
+function AMr(a){var b,c,d;if(!Cf(a,F9)&&a.constructor.$meta.item===null){b=new AAC;Be(b);I(b);}b=A.B$C(a);c=b;d=$rt_nextId();c.$id$=d;return b;}
+function UX(){D.call(this);}
+A.CFj=null;A.CFk=null;A.CFl=null;A.CFm=null;A.CFn=0;A.CFo=function(){var a=new UX();BRI(a);return a;};
+function BRI(a){return;}
+function BkZ(){return Cp(C(2),0);}
+A.AKj=function(b){var c,d,e,f,g,h,i,j,k,l,m,n,o,$$je,$p,$z;$p=0;if(Gt()){var $T=Dz();$p=$T.l();o=$T.l();n=$T.l();m=$T.l();l=$T.l();k=$T.l();j=$T.l();i=$T.l();h=$T.l();g=$T.l();f=$T.l();e=$T.l();d=$T.l();c=$T.l();b=$T.l();}_:while(true){switch($p){case 0:BUU();A.BkO();A.H1();A.AIL();Cv2();BwT();Bwi();A.APJ();BOG();A.Dn();ByO();BEe();Bua();CgP();A.OF();BwI();A.AQg();B$A();A.A34();A.AMp();A.ARm();BFd();BQ4();B28();$p=1;case 1:BJe();if(B()){break _;}BV0();Cfu();A.BiY();B56();A.Bqq();CwJ();B_w();A.Jy();Cli();A.BB5();BKT();A.ADT();BRJ();A.RR();A.A$X();BYB();Byj();Ch0();A.MK();A.TV();A.A8t();A.P9();BD7();A.ASr();A.G4();BTk();A.BGL();A.DK();BPn();A.AGw();A.BJL();A.BwK();A.Bbo();B6W();BBX();A.BJ0();A.BFW();$p
+=2;case 2:Cdc();if(B()){break _;}A.A5c();$p=3;case 3:Cwb();if(B()){break _;}$p=4;case 4:A.AHp();if(B()){break _;}$p=5;case 5:A.BCs();if(B()){break _;}A.Zd();Cz8();A.Wr();A.Bi7();A.A5v();$p=6;case 6:CfF();if(B()){break _;}A.ASx();$p=7;case 7:BzZ();if(B()){break _;}$p=8;case 8:A.A$T();if(B()){break _;}$p=9;case 9:A.JA();if(B()){break _;}$p=10;case 10:A.Q3();if(B()){break _;}$p=11;case 11:CgO();if(B()){break _;}ChZ();$p=12;case 12:BJ9();if(B()){break _;}$p=13;case 13:Cag();if(B()){break _;}BAi();$p=14;case 14:CaU();if
+(B()){break _;}A.BAH();$p=15;case 15:BYm();if(B()){break _;}A.BH9();A.BwC();$p=16;case 16:A.ALa();if(B()){break _;}$p=17;case 17:A.AE2();if(B()){break _;}Cuo();CvA();A.ABW();$p=18;case 18:BGu();if(B()){break _;}$p=19;case 19:A.Ip();if(B()){break _;}$p=20;case 20:A.Wb();if(B()){break _;}$p=21;case 21:BAq();if(B()){break _;}$p=22;case 22:A.Bq1();if(B()){break _;}$p=23;case 23:A.Di();if(B()){break _;}$p=24;case 24:A.A1i();if(B()){break _;}CCp();$p=25;case 25:BrL();if(B()){break _;}$p=26;case 26:Bxq();if(B()){break _;}BNX();A.Q9();$p
+=27;case 27:CnD();if(B()){break _;}$p=28;case 28:A.NR();if(B()){break _;}BPC();$p=29;case 29:ClY();if(B()){break _;}A.A8C();$p=30;case 30:A.BHO();if(B()){break _;}A.AOW();$p=31;case 31:A.To();if(B()){break _;}$p=32;case 32:A.Gl();if(B()){break _;}$p=33;case 33:BUK();if(B()){break _;}A.Y1();$p=34;case 34:B2B();if(B()){break _;}Cp6();$p=35;case 35:B9p();if(B()){break _;}$p=36;case 36:A.H0();if(B()){break _;}$p=37;case 37:Bya();if(B()){break _;}BFH();$p=38;case 38:A.Byg();if(B()){break _;}$p=39;case 39:A.BiH();if
+(B()){break _;}$p=40;case 40:BHZ();if(B()){break _;}A.Pa();$p=41;case 41:Cer();if(B()){break _;}$p=42;case 42:A.APw();if(B()){break _;}$p=43;case 43:CAB();if(B()){break _;}$p=44;case 44:B6L();if(B()){break _;}$p=45;case 45:BK0();if(B()){break _;}$p=46;case 46:A.Bz$();if(B()){break _;}$p=47;case 47:Coj();if(B()){break _;}$p=48;case 48:BDj();if(B()){break _;}$p=49;case 49:B7A();if(B()){break _;}$p=50;case 50:A.BlC();if(B()){break _;}$p=51;case 51:A.W6();if(B()){break _;}$p=52;case 52:BSZ();if(B()){break _;}$p
+=53;case 53:Chj();if(B()){break _;}$p=54;case 54:Bxy();if(B()){break _;}BzQ();B5F();A.BFO();Cr7();$p=55;case 55:A.BDr();if(B()){break _;}$p=56;case 56:BRE();if(B()){break _;}$p=57;case 57:B_8();if(B()){break _;}$p=58;case 58:CpV();if(B()){break _;}$p=59;case 59:A.By();if(B()){break _;}$p=60;case 60:B60();if(B()){break _;}$p=61;case 61:Bwq();if(B()){break _;}$p=62;case 62:BM2();if(B()){break _;}$p=63;case 63:A.AJ6();if(B()){break _;}$p=64;case 64:A.ZR();if(B()){break _;}A.O();$p=65;case 65:BT0();if(B()){break _;}$p
+=66;case 66:A.BpF();if(B()){break _;}$p=67;case 67:Bry();if(B()){break _;}$p=68;case 68:A.UE();if(B()){break _;}A.WH();$p=69;case 69:A.BlE();if(B()){break _;}$p=70;case 70:A.Fd();if(B()){break _;}A.BaT();$p=71;case 71:A.A7$();if(B()){break _;}Bw6();$p=72;case 72:CtA();if(B()){break _;}$p=73;case 73:BDE();if(B()){break _;}BSC();A.BFr();$p=74;case 74:A.AE7();if(B()){break _;}$p=75;case 75:A.BFB();if(B()){break _;}A.AKi();A.Baa();$p=76;case 76:A.BxH();if(B()){break _;}A.AGg();$p=77;case 77:A.A81();if(B()){break _;}$p
+=78;case 78:BKU();if(B()){break _;}A.BCR();BsA();BWL();B09();A.BGl();A.Sl();BZV();$p=79;case 79:A.KL();if(B()){break _;}A.ANG();A.Bzb();$p=80;case 80:A.BCC();if(B()){break _;}Cb$();$p=81;case 81:A.Buq();if(B()){break _;}A.AJQ();A.By0();A.ART();A.BU();A.A$t();A.AMQ();A.AQ7();A.DP();$p=82;case 82:CiD();if(B()){break _;}Cuh();$p=83;case 83:A.PR();if(B()){break _;}$p=84;case 84:A.ALc();if(B()){break _;}$p=85;case 85:BEX();if(B()){break _;}$p=86;case 86:A.A17();if(B()){break _;}$p=87;case 87:A.AGd();if(B()){break _;}$p
+=88;case 88:A.AUp();if(B()){break _;}$p=89;case 89:A.AI2();if(B()){break _;}Ccj();CvF();$p=90;case 90:A.AME();if(B()){break _;}$p=91;case 91:A.ByT();if(B()){break _;}A.UR();$p=92;case 92:A.A1u();if(B()){break _;}$p=93;case 93:BHG();if(B()){break _;}$p=94;case 94:A.BoP();if(B()){break _;}Chz();A.Be0();$p=95;case 95:A.ATQ();if(B()){break _;}A.AAZ();$p=96;case 96:B1u();if(B()){break _;}A.Pv();A.Brr();$p=97;case 97:BMg();if(B()){break _;}A.BG();$p=98;case 98:A.B7();if(B()){break _;}$p=99;case 99:B0O();if(B()){break _;}A.BIb();A.Ns();Cx8();Bz9();BrY();B6D();A.JI();BAl();A.Rb();$p
+=100;case 100:B0A();if(B()){break _;}$p=101;case 101:BBM();if(B()){break _;}ByQ();A.BiG();$p=102;case 102:A.BrT();if(B()){break _;}$p=103;case 103:BKq();if(B()){break _;}A.Ed();A.AWy();$p=104;case 104:Ckt();if(B()){break _;}Cya();$p=105;case 105:CAS();if(B()){break _;}$p=106;case 106:A.APu();if(B()){break _;}$p=107;case 107:A.Zu();if(B()){break _;}$p=108;case 108:A.BaW();if(B()){break _;}A.ASX();$p=109;case 109:CxL();if(B()){break _;}$p=110;case 110:A.AUM();if(B()){break _;}$p=111;case 111:A.Bse();if(B()){break _;}$p
+=112;case 112:Cyn();if(B()){break _;}$p=113;case 113:A.BkT();if(B()){break _;}$p=114;case 114:B6p();if(B()){break _;}$p=115;case 115:A.BCL();if(B()){break _;}$p=116;case 116:A.BEX();if(B()){break _;}$p=117;case 117:A.Bp$();if(B()){break _;}$p=118;case 118:Cr5();if(B()){break _;}$p=119;case 119:A.BBM();if(B()){break _;}$p=120;case 120:A.AG6();if(B()){break _;}$p=121;case 121:A.A35();if(B()){break _;}$p=122;case 122:Brc();if(B()){break _;}$p=123;case 123:A.Y9();if(B()){break _;}A.OB();$p=124;case 124:A.BvZ();if
+(B()){break _;}$p=125;case 125:A.CO();if(B()){break _;}$p=126;case 126:A.BbA();if(B()){break _;}$p=127;case 127:A.Bop();if(B()){break _;}$p=128;case 128:BMe();if(B()){break _;}$p=129;case 129:A.ZU();if(B()){break _;}A.Bj2();CkJ();A.Jt();$p=130;case 130:BDW();if(B()){break _;}$p=131;case 131:A.BAM();if(B()){break _;}$p=132;case 132:B6G();if(B()){break _;}$p=133;case 133:Bv6();if(B()){break _;}$p=134;case 134:CgG();if(B()){break _;}$p=135;case 135:A.ARV();if(B()){break _;}$p=136;case 136:A.AZy();if(B()){break _;}$p
+=137;case 137:Chg();if(B()){break _;}$p=138;case 138:Cbn();if(B()){break _;}$p=139;case 139:CmU();if(B()){break _;}$p=140;case 140:Ctt();if(B()){break _;}$p=141;case 141:Cti();if(B()){break _;}$p=142;case 142:A.Bt_();if(B()){break _;}$p=143;case 143:A.RN();if(B()){break _;}$p=144;case 144:A.AFN();if(B()){break _;}$p=145;case 145:A.Bc();if(B()){break _;}$p=146;case 146:A.Biu();if(B()){break _;}$p=147;case 147:A.Bd0();if(B()){break _;}$p=148;case 148:BML();if(B()){break _;}$p=149;case 149:A.ASl();if(B()){break _;}$p
+=150;case 150:BAW();if(B()){break _;}$p=151;case 151:A.A_q();if(B()){break _;}$p=152;case 152:CqC();if(B()){break _;}$p=153;case 153:A.Nz();if(B()){break _;}$p=154;case 154:Co4();if(B()){break _;}$p=155;case 155:BwP();if(B()){break _;}$p=156;case 156:A.BnP();if(B()){break _;}$p=157;case 157:A.AQ6();if(B()){break _;}$p=158;case 158:A.Bhk();if(B()){break _;}$p=159;case 159:B23();if(B()){break _;}$p=160;case 160:BPZ();if(B()){break _;}$p=161;case 161:B$b();if(B()){break _;}$p=162;case 162:A.Id();if(B()){break _;}$p
+=163;case 163:A.AIQ();if(B()){break _;}$p=164;case 164:A.Bpr();if(B()){break _;}$p=165;case 165:A.A$K();if(B()){break _;}$p=166;case 166:A.XW();if(B()){break _;}$p=167;case 167:Cry();if(B()){break _;}$p=168;case 168:A.AB2();if(B()){break _;}$p=169;case 169:BPH();if(B()){break _;}$p=170;case 170:A.A1Q();if(B()){break _;}$p=171;case 171:A.AFP();if(B()){break _;}$p=172;case 172:A.J5();if(B()){break _;}$p=173;case 173:A.AC$();if(B()){break _;}$p=174;case 174:A.BH7();if(B()){break _;}$p=175;case 175:A.A$7();if(B())
+{break _;}$p=176;case 176:A.A3b();if(B()){break _;}$p=177;case 177:A.BfT();if(B()){break _;}$p=178;case 178:BFk();if(B()){break _;}$p=179;case 179:A.S7();if(B()){break _;}$p=180;case 180:Cqy();if(B()){break _;}A.Bzq();Brw();$p=181;case 181:BKb();if(B()){break _;}$p=182;case 182:A.Bdr();if(B()){break _;}$p=183;case 183:BNG();if(B()){break _;}$p=184;case 184:A.AO9();if(B()){break _;}$p=185;case 185:BJT();if(B()){break _;}B5b();Ci4();$p=186;case 186:BGH();if(B()){break _;}$p=187;case 187:A.BF4();if(B()){break _;}$p
+=188;case 188:A.Bfx();if(B()){break _;}$p=189;case 189:B7F();if(B()){break _;}$p=190;case 190:ChJ();if(B()){break _;}A.BJl();A.A9A();A.IT();A.Bn1();Cvn();$p=191;case 191:A.AG0();if(B()){break _;}A.Ud();$p=192;case 192:BGT();if(B()){break _;}CsX();$p=193;case 193:A.Ig();if(B()){break _;}$p=194;case 194:BCV();if(B()){break _;}$p=195;case 195:A.ByC();if(B()){break _;}$p=196;case 196:BIh();if(B()){break _;}A.DO();A.VQ();A.AM2();$p=197;case 197:CDa();if(B()){break _;}BB5();A.BvB();A.Lt();BDf();A.AEW();$p=198;case 198:BL_();if
+(B()){break _;}A.O4();A.NC();Cor();A.BeA();$p=199;case 199:A.BdX();if(B()){break _;}B7e();A.Bjn();A.AX6();A.Bdc();$p=200;case 200:BSz();if(B()){break _;}CiC();$p=201;case 201:A.Wx();if(B()){break _;}B1n();A.AAB();BM5();$p=202;case 202:B7H();if(B()){break _;}$p=203;case 203:A.AGa();if(B()){break _;}$p=204;case 204:A.A9j();if(B()){break _;}$p=205;case 205:A.ARs();if(B()){break _;}$p=206;case 206:Cvz();if(B()){break _;}$p=207;case 207:B4y();if(B()){break _;}$p=208;case 208:Ck$();if(B()){break _;}$p=209;case 209:A.A8m();if
+(B()){break _;}$p=210;case 210:A.AOD();if(B()){break _;}A.AU5();Cmn();A.AQr();$p=211;case 211:A.ADp();if(B()){break _;}$p=212;case 212:Bxl();if(B()){break _;}$p=213;case 213:Cc_();if(B()){break _;}$p=214;case 214:BQo();if(B()){break _;}$p=215;case 215:A.Ue();if(B()){break _;}A.A5M();$p=216;case 216:BtX();if(B()){break _;}A.Bsl();Cd4();A.Brc();A.AMn();A.A5R();Cur();BS5();A.ADe();A.A4t();A.N3();$p=217;case 217:A.BCW();if(B()){break _;}$p=218;case 218:Cb6();if(B()){break _;}A.Qv();BDD();$p=219;case 219:BrD();if
+(B()){break _;}BMl();CAI();A.Bu4();A.Bb5();BYO();$p=220;case 220:A.Bv5();if(B()){break _;}$p=221;case 221:A.BuC();if(B()){break _;}BZr();A.BjY();BGc();A.Pw();$p=222;case 222:A.AOb();if(B()){break _;}$p=223;case 223:Cpi();if(B()){break _;}BRF();A.BEO();A.BbC();BI0();BDC();A.GI();$p=224;case 224:BXO();if(B()){break _;}Cov();A.AK_();$p=225;case 225:A.I5();if(B()){break _;}BBq();B_l();BSj();A.ByX();$p=226;case 226:CeE();if(B()){break _;}Cyu();$p=227;case 227:A.M();if(B()){break _;}A.A91();$p=228;case 228:CoV();if
+(B()){break _;}$p=229;case 229:CxI();if(B()){break _;}$p=230;case 230:BVz();if(B()){break _;}CDc();A.X0();CcM();A.BHX();$p=231;case 231:Brv();if(B()){break _;}A.Bd();B$U();BFN();A.Bh();$p=232;case 232:A.Bud();if(B()){break _;}Bzv();BXf();B03();Bwk();A.AGt();BMX();A.Bhs();A.BAJ();BAm();Clg();A.A5e();$p=233;case 233:CaR();if(B()){break _;}$p=234;case 234:Cuy();if(B()){break _;}A.AJD();A.AYx();$p=235;case 235:A.Bw$();if(B()){break _;}$p=236;case 236:Ctq();if(B()){break _;}BAy();$p=237;case 237:A.Bqy();if(B()){break _;}B2T();A.Bxi();BrU();A.A5G();BU4();A.Bhv();BAR();BSm();$p
+=238;case 238:BMT();if(B()){break _;}$p=239;case 239:A.A2a();if(B()){break _;}B8$();$p=240;case 240:A.AQB();if(B()){break _;}$p=241;case 241:BHH();if(B()){break _;}$p=242;case 242:A.NQ();if(B()){break _;}$p=243;case 243:BUT();if(B()){break _;}$p=244;case 244:A.AVO();if(B()){break _;}$p=245;case 245:A.Bt0();if(B()){break _;}$p=246;case 246:A.Brt();if(B()){break _;}$p=247;case 247:A.Brw();if(B()){break _;}$p=248;case 248:BTB();if(B()){break _;}$p=249;case 249:A.AD5();if(B()){break _;}$p=250;case 250:A.ANy();if
+(B()){break _;}$p=251;case 251:BvU();if(B()){break _;}$p=252;case 252:BON();if(B()){break _;}A.BDi();$p=253;case 253:A.S_();if(B()){break _;}A.Gg();$p=254;case 254:Clz();if(B()){break _;}Cie();$p=255;case 255:A.JZ();if(B()){break _;}$p=256;case 256:A.A0h();if(B()){break _;}$p=257;case 257:Csq();if(B()){break _;}c=AL0();d=IO();try{e=C(3);$p=258;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 258:try{c.cgP(e);if(B()){break _;}e=$rt_str(CvX());if(e===null){c=C(5);$p=263;continue _;}try
+{A.CFj=e;f=new Eo;$p=260;continue _;}catch($$e){$$je=F($$e);if($$je instanceof L){g=$$je;}else{throw $$e;}}c=C(6);$p=265;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;case 259:d.cgP(e);if(B()){break _;}I(c);case 260:try{try{A6r(f,e);if(B()){break _;}e=C(7);$p=261;continue _;}catch($$e){$$je=F($$e);if($$je instanceof L){g=$$je;}else{throw $$e;}}c=C(6);$p=265;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 261:try{try{$z=A.AAX(f,e);if(B()){break _;}e=$z;A.CFk=e;e=C(8);$p=262;continue _;}
+catch($$e){$$je=F($$e);if($$je instanceof L){g=$$je;}else{throw $$e;}}c=C(6);$p=265;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 262:try{try{a:{$z=BA0(f,e);if(B()){break _;}h=$z;if(h instanceof H1){i=h;if(!Fn(i))I(A.Cxh(C(9)));A.CFl=G(AGe,Fn(i));j=0;k=A.CFl.data.length;if(j>=k)break a;b=A.CFl.data;$p=279;continue _;}if(h instanceof Eo){b=G(AGe,1);l=b.data;m=0;e=h;$p=272;continue _;}if(h instanceof By){n=h;b=G(AGe,1);b.data[0]=A.BfF(n,C(10));A.CFl=b;if(X(n)>128){e=C(8);i=J(J(U(),B0(n,
+0,128)),C(11));$p=277;continue _;}}}e=C(12);i=C(13);$p=273;continue _;}catch($$e){$$je=F($$e);if($$je instanceof L){g=$$je;}else{throw $$e;}}c=C(6);$p=265;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 263:try{d.cgP(c);if(B()){break _;}c=C(14);$p=264;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 264:b:{try{d.cgP(c);if(B()){break _;}alert("ERROR: game cannot start, the \"window.eaglercraftXOpts\" variable is undefined");}catch($$e){$$je=F($$e);c=$$je;break b;}c
+=C(4);$p=270;continue _;}e=C(4);$p=259;continue _;case 265:try{d.cgP(c);if(B()){break _;}$p=266;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 266:try{A.AUR(g);if(B()){break _;}c=C(14);$p=267;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 267:try{d.cgP(c);if(B()){break _;}c=J(U(),C(15));$p=268;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 268:try{$z=A.A0U(g);if(B()){break _;}e=$z;c=J(c,e);$p=269;continue _;}catch($$e){$$je=F($$e);c
+=$$je;}e=C(4);$p=259;continue _;case 269:b:{try{$z=Bg(c);if(B()){break _;}c=$z;alert($rt_ustr(c));break b;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;}c=C(4);$p=271;continue _;case 270:d.cgP(c);if(B()){break _;}return;case 271:d.cgP(c);if(B()){break _;}return;case 272:try{try{$z=A.Bqz(e);if(B()){break _;}e=$z;l[m]=e;A.CFl=b;e=C(12);i=C(13);$p=273;continue _;}catch($$e){$$je=F($$e);if($$je instanceof L){g=$$je;}else{throw $$e;}}c=C(6);$p=265;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 273:try
+{try{$z=A.SQ(f,e,i);if(B()){break _;}e=$z;A.CFm=e;if(Ht(A.CFm,C(16)))A.CFm=B0(A.CFm,0,X(A.CFm)-1|0);e=C(17);m=0;$p=274;continue _;}catch($$e){$$je=F($$e);if($$je instanceof L){g=$$je;}else{throw $$e;}}c=C(6);$p=265;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 274:try{try{$z=BCg(f,e,m);if(B()){break _;}m=$z;A.CFp=m;e=A.CFq;$p=275;continue _;}catch($$e){$$je=F($$e);if($$je instanceof L){g=$$je;}else{throw $$e;}}c=C(6);$p=265;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 275:try
+{try{B_B(e,f);if(B()){break _;}e=C(18);$p=276;continue _;}catch($$e){$$je=F($$e);if($$je instanceof L){g=$$je;}else{throw $$e;}}c=C(6);$p=265;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 276:try{c:{try{c.cgP(e);if(B()){break _;}break c;}catch($$e){$$je=F($$e);if($$je instanceof L){g=$$je;}else{throw $$e;}}c=C(6);$p=265;continue _;}e=C(19);$p=281;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 277:try{try{$z=Bg(i);if(B()){break _;}i=$z;$p=278;continue _;}catch
+($$e){$$je=F($$e);if($$je instanceof L){g=$$je;}else{throw $$e;}}c=C(6);$p=265;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 278:try{try{A.A7N(f,e,i);if(B()){break _;}e=C(12);i=C(13);$p=273;continue _;}catch($$e){$$je=F($$e);if($$je instanceof L){g=$$je;}else{throw $$e;}}c=C(6);$p=265;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 279:try{try{$z=Crb(i,j);if(B()){break _;}e=$z;$p=280;continue _;}catch($$e){$$je=F($$e);if($$je instanceof L){g=$$je;}else{throw $$e;}}c
+=C(6);$p=265;continue _;}catch($$e){$$je=F($$e);c=$$je;}e=C(4);$p=259;continue _;case 280:try{try{$z=A.Bqz(e);if(B()){break _;}e=$z;b[j]=e;j=j+1|0;if(j=h)return;j=g[i];b=IO();c=new K;M(c);H(c,C(40));H(c,j);$p=6;continue _;case 4:$z=BGB();if(B()){break _;}b=$z;H(c,b);H(c,C(34));Bl(c,10);$p=5;case 5:$z=A.Bue();if(B()){break _;}b=$z;H(c,b);Bl(c,10);H(c,C(41));H(c,A.CFj);Bl(c,10);Bl(c,10);TO(c,C(42));TO(c,C(43));TO(c,C(44));TO(c,C(45));TO(c,C(46));TO(c,C(47));TO(c,C(48));Bl(c,10);H(c,C(49));b=e===null?C(50):Y(e.clientWidth);$p=8;continue _;case 6:$z=O(c);if(B())
+{break _;}c=$z;$p=7;case 7:b.cgP(c);if(B()){break _;}i=i+1|0;if(i>=h)return;j=g[i];b=IO();c=new K;M(c);H(c,C(40));H(c,j);$p=6;continue _;case 8:BVA(c,b);if(B()){break _;}Bl(c,10);H(c,C(51));b=e===null?C(50):Y(e.clientHeight);$p=9;case 9:BVA(c,b);if(B()){break _;}Bl(c,10);WB(c,C(52));WB(c,C(53));WB(c,C(54));WB(c,C(55));WB(c,C(56));AEG(c,C(57));AEG(c,C(58));AEG(c,C(59));AEG(c,C(60));Bl(c,10);WB(c,C(61));Bl(c,10);H(c,C(62));H(c,C(63));H(c,C(64));H(c,$rt_str(BOa("href")));Bl(c,10);Bl(c,10);if(e===null){alert("Root element not found, crash report was printed to console");b
+=IO();$p=10;continue _;}k=$rt_str(e.getAttribute("style"));f=C(65);b=new K;M(b);if(k===null)k=C(10);H(b,k);H(b,C(66));$p=12;continue _;case 10:$z=O(c);if(B()){break _;}c=$z;$p=11;case 11:b.cgP(c);if(B()){break _;}return;case 12:$z=O(b);if(B()){break _;}l=$z;e.setAttribute($rt_ustr(f),$rt_ustr(l));f=d.createElement("img");l=d.createElement("div");f.setAttribute("style","z-index:100;position:absolute;top:10px;left:calc(50% - 151px);");j=BkZ();f.setAttribute("src",$rt_ustr(j));l.setAttribute("style","z-index:100;position:absolute;top:135px;left:10%;right:10%;bottom:50px;background-color:white;border:1px solid #cccccc;overflow-x:hidden;overflow-y:scroll;overflow-wrap:break-word;white-space:pre-wrap;font: 14px monospace;padding:10px;");e.appendChild(f);e.appendChild(l);$p
+=13;case 13:$z=O(c);if(B()){break _;}c=$z;b=d.createTextNode($rt_ustr(c));l.appendChild(b);$p=14;case 14:A.KF();if(B()){break _;}return;default:Gr();}}Dz().s(b,c,d,e,f,g,h,i,j,k,l,$p);}
+A.Bue=function(){var b,c,d,$p,$z;$p=0;if(Gt()){var $T=Dz();$p=$T.l();d=$T.l();c=$T.l();b=$T.l();}_:while(true){switch($p){case 0:b=new K;M(b);c=A.CFr;if(c===null){d=window.document.createElement("canvas");c=64;d.width=c;c=64;d.height=c;c=d.getContext("webgl");}if(c===null)H(b,C(67));else{if(A.CFr!==null){H(b,C(68));H(b,$rt_str(c.getParameter(7938)));Bl(b,10);}if(c.getExtension("WEBGL_debug_renderer_info")===null){H(b,C(69));d=new K;M(d);H(d,$rt_str(c.getParameter(7937)));H(d,C(70));$p=2;continue _;}H(b,C(69));H(b,
+$rt_str(c.getParameter(37446)));Bl(b,10);H(b,C(71));H(b,$rt_str(c.getParameter(37445)));Bl(b,10);Bl(b,10);H(b,C(72));FS(b,c.getExtension("EXT_color_buffer_half_float")===null?0:1);Bl(b,10);H(b,C(73));FS(b,c.getExtension("EXT_color_buffer_float")===null?0:1);Bl(b,10);}$p=1;case 1:$z=O(b);if(B()){break _;}b=$z;return b;case 2:$z=O(d);if(B()){break _;}d=$z;H(b,d);Bl(b,10);H(b,C(71));d=new K;M(d);H(d,$rt_str(c.getParameter(7936)));H(d,C(70));$p=3;case 3:$z=O(d);if(B()){break _;}d=$z;H(b,d);Bl(b,10);Bl(b,10);H(b,
+C(72));FS(b,c.getExtension("EXT_color_buffer_half_float")===null?0:1);Bl(b,10);H(b,C(73));FS(b,c.getExtension("EXT_color_buffer_float")===null?0:1);Bl(b,10);$p=1;continue _;default:Gr();}}Dz().s(b,c,d,$p);};
+A.FF=function(b){var c,d,e,f,g,h,i,j,k,l,$$je,$p,$z;$p=0;if(Gt()){var $T=Dz();$p=$T.l();l=$T.l();k=$T.l();j=$T.l();i=$T.l();h=$T.l();g=$T.l();f=$T.l();e=$T.l();d=$T.l();c=$T.l();b=$T.l();}_:while(true){switch($p){case 0:if(A.CFn)return;A.CFn=1;c=window.document;d=A.CFk;e=c.getElementById($rt_ustr(d));if(e===null){d=IO();f=new K;M(f);H(f,C(74));H(f,b);$p=1;continue _;}g=$rt_str(e.getAttribute("style"));f=C(65);d=new K;M(d);if(g===null)g=C(10);H(d,g);H(d,C(66));$p=3;continue _;case 1:$z=O(f);if(B()){break _;}b
+=$z;$p=2;case 2:d.cgP(b);if(B()){break _;}return;case 3:$z=O(d);if(B()){break _;}g=$z;e.setAttribute($rt_ustr(f),$rt_ustr(g));h=c.createElement("img");i=c.createElement("div");h.setAttribute("style","z-index:100;position:absolute;top:10px;left:calc(50% - 151px);");f=BkZ();h.setAttribute("src",$rt_ustr(f));i.setAttribute("style","z-index:100;position:absolute;top:135px;left:10%;right:10%;bottom:50px;background-color:white;border:1px solid #cccccc;overflow-x:hidden;overflow-y:scroll;font:18px sans-serif;padding:40px;");e.appendChild(h);e.appendChild(i);d
+="+ This device is incompatible with Eaglercraft :(
Issue:
Things you can try:
- Just try using Eaglercraft on a different device, it isn\'t a bug it\'s common sense
- If you are on a mobile device, please try a proper desktop or a laptop computer
- If you are using a device with no mouse cursor, please use a device with a mouse cursor
- If you are not using Chrome/Edge, try installing the latest Google Chrome
- If your browser is out of date, please update it to the latest version
- If you are using an old OS such as Windows 7, please try Windows 10 or 11
- If you have a GPU launched before 2009, WebGL 2.0 support may be impossible
";i.innerHTML
+=d;d=i.querySelector("#crashReason");b=c.createTextNode($rt_ustr(b));d.appendChild(b);b=i.querySelector("#crashUserAgent");d=$rt_str(AYk("userAgent"));d=c.createTextNode($rt_ustr(d));b.appendChild(d);$p=4;case 4:A.KF();if(B()){break _;}j=C(75);a:{try{g=j;k=window.document.createElement("canvas");b=64;k.width=b;b=64;k.height=b;f=k.getContext("webgl");if(f===null)l=j;else{g=j;if(f.getExtension("WEBGL_debug_renderer_info")!==null){g=j;l=$rt_str(f.getParameter(37446));}else{g=j;l=$rt_str(f.getParameter(7937));if
+(l!==null){g=j;b=J(J(U(),l),C(70));$p=5;continue _;}}g=j;if(l===null)l=j;else{g=l;g=j;}}break a;}catch($$e){$$je=F($$e);if($$je instanceof L){}else{throw $$e;}}l=g;}b=i.querySelector("#crashWebGL");d=c.createTextNode($rt_ustr(l));b.appendChild(d);return;case 5:a:{try{$z=Bg(b);if(B()){break _;}l=$z;g=j;if(l===null)l=j;else{g=l;g=j;}break a;}catch($$e){$$je=F($$e);if($$je instanceof L){}else{throw $$e;}}l=g;}b=i.querySelector("#crashWebGL");d=c.createTextNode($rt_ustr(l));b.appendChild(d);return;default:Gr();}}Dz().s(b,
+c,d,e,f,g,h,i,j,k,l,$p);};
+function WB(b,c){H(b,C(76));H(b,c);H(b,C(64));H(b,$rt_str(A.BHb($rt_ustr(c))));Bl(b,10);}
+function TO(b,c){H(b,C(77));H(b,c);H(b,C(64));H(b,$rt_str(AYk($rt_ustr(c))));Bl(b,10);}
+function AEG(b,c){H(b,C(78));H(b,c);H(b,C(64));H(b,$rt_str(BCQ($rt_ustr(c))));Bl(b,10);}
+function BUU(){A.CFj=null;A.CFk=null;A.CFl=null;A.CFm=null;A.CFn=0;}
+function CvX(){if(typeof window.eaglercraftXOpts==="undefined"){return null;}else if(typeof window.eaglercraftXOpts==="string"){return window.eaglercraftXOpts;}else {return JSON.stringify(window.eaglercraftXOpts);}}
+function ChL(b){window.addEventListener("error",function(e){b(typeof e.message==="string"?e.message:null,typeof e.filename==="string"?e.filename:null,typeof e.lineno==="number"?e.lineno:0,typeof e.colno==="number"?e.colno:0,typeof e.error==="undefined"?null:e.error);});}
+A.BHb=function(b){try {return ""+window[b];}catch(e){return "";}};
+function AYk(b){try {return ""+window.navigator[b];}catch(e){return "";}}
+function BCQ(b){try {return ""+window.screen[b];}catch(e){return "";}}
+function BOa(b){try {return ""+window.location[b];}catch(e){return "";}}
+function AEJ(){}
+function AVi(a,b){return 0;}
+function ACi(){var a=this;D.call(a);a.bWi=null;a.b4L=null;a.nR=null;a.a_c=null;}
+A.CFs=0;function ABJ(b){var c,d;if(b===null)return null;c=b.classObject;if(c===null){c=new ACi;c.nR=b;d=c;b.classObject=d;}return c;}
+A.BRU=function(a){return a.nR;};
+function Pm(a,b){var c;b=b;c=a.nR;return b!==null&&!(typeof b.constructor.$meta==='undefined'?1:0)&&Bpg(b.constructor,c)?1:0;}
+function QD(a,b){return Bpg(b.nR,a.nR);}
+function Fj(a){if(a.bWi===null)a.bWi=Cpa(a.nR);return a.bWi;}
+function EU(a){var b,c,d;b=a.b4L;if(b===null){if(Th(a)){b=new K;M(b);H(b,EU(XL(a)));H(b,C(79));b=O(b);a.b4L=b;return b;}b=Cpa(a.nR);c=Iw(b,36);if(c==(-1)){d=Iw(b,46);if(d!=(-1))b=Cp(b,d+1|0);}else{b=Cp(b,c+1|0);if(Bp(b,0)>=48&&Bp(b,0)<=57)b=C(10);}a.b4L=b;}return b;}
+function Un(a){return a.nR.$meta.primitive?1:0;}
+function Th(a){return B6u(a.nR)===null?0:1;}
+function BE2(a){return a.nR.$meta.enum?1:0;}
+function Xv(a){return !(a.nR.$meta.flags&2)?0:1;}
+function XL(a){return ABJ(B6u(a.nR));}
+A.Cg_=function(){By.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_arraycls($rt_charcls())],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_arraycls($rt_charcls()),$rt_intcls(),$rt_intcls()],returnType:$rt_voidcls(),callable:null},
+{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_arraycls($rt_bytecls()),$rt_intcls(),$rt_intcls(),By],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_arraycls($rt_bytecls()),$rt_intcls(),$rt_intcls(),AQl],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_arraycls($rt_bytecls()),$rt_intcls(),$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes
+:[$rt_arraycls($rt_bytecls())],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_arraycls($rt_bytecls()),By],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_arraycls($rt_bytecls()),AQl],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_arraycls($rt_intcls()),$rt_intcls(),$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"initWithBytes",modifiers
+:0,accessLevel:1,parameterTypes:[$rt_arraycls($rt_bytecls()),$rt_intcls(),$rt_intcls(),AQl],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[K],returnType:$rt_voidcls(),callable:null},{name:"charAt",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_charcls(),callable:null},{name:"codePointAt",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"codePointBefore",modifiers:0,accessLevel:3,parameterTypes
+:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"codePointCount",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"offsetByCodePoints",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"length",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"isEmpty",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable
+:null},{name:"getChars",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls(),$rt_arraycls($rt_charcls()),$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"contentEquals",modifiers:0,accessLevel:3,parameterTypes:[OB],returnType:$rt_booleancls(),callable:null},{name:"contentEquals",modifiers:0,accessLevel:3,parameterTypes:[Wo],returnType:$rt_booleancls(),callable:null},{name:"compareTo",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_intcls(),callable:null},{name:"compareToIgnoreCase",modifiers
+:0,accessLevel:3,parameterTypes:[By],returnType:$rt_intcls(),callable:null},{name:"startsWith",modifiers:0,accessLevel:3,parameterTypes:[By,$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"startsWith",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_booleancls(),callable:null},{name:"regionMatches",modifiers:0,accessLevel:3,parameterTypes:[$rt_booleancls(),$rt_intcls(),By,$rt_intcls(),$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"regionMatches",modifiers:0,accessLevel
+:3,parameterTypes:[$rt_intcls(),By,$rt_intcls(),$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"endsWith",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_booleancls(),callable:null},{name:"indexOf",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"indexOf",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"lastIndexOf",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),
+$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"lastIndexOf",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"indexOf",modifiers:0,accessLevel:3,parameterTypes:[By,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"indexOf",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_intcls(),callable:null},{name:"lastIndexOf",modifiers:0,accessLevel:3,parameterTypes:[By,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"lastIndexOf",modifiers
+:0,accessLevel:3,parameterTypes:[By],returnType:$rt_intcls(),callable:null},{name:"substring",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType:By,callable:null},{name:"substring",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:By,callable:null},{name:"subSequence",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType:Wo,callable:null},{name:"concat",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:By,callable:null},{name:"replace",modifiers
+:0,accessLevel:3,parameterTypes:[$rt_charcls(),$rt_charcls()],returnType:By,callable:null},{name:"contains",modifiers:0,accessLevel:3,parameterTypes:[Wo],returnType:$rt_booleancls(),callable:null},{name:"replace",modifiers:0,accessLevel:3,parameterTypes:[Wo,Wo],returnType:By,callable:null},{name:"trim",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"toString",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"toCharArray",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:$rt_arraycls($rt_charcls()),callable:null},{name:"valueOf",modifiers:512,accessLevel:3,parameterTypes:[D],returnType:By,callable:null},{name:"valueOf",modifiers:512,accessLevel:3,parameterTypes:[$rt_arraycls($rt_charcls())],returnType:By,callable:null},{name:"valueOf",modifiers:512,accessLevel:3,parameterTypes:[$rt_arraycls($rt_charcls()),$rt_intcls(),$rt_intcls()],returnType:By,callable:null},{name:"copyValueOf",modifiers:512,accessLevel:3,parameterTypes:[$rt_arraycls($rt_charcls())],returnType
+:By,callable:null},{name:"copyValueOf",modifiers:512,accessLevel:3,parameterTypes:[$rt_arraycls($rt_charcls()),$rt_intcls(),$rt_intcls()],returnType:By,callable:null},{name:"valueOf",modifiers:512,accessLevel:3,parameterTypes:[$rt_booleancls()],returnType:By,callable:null},{name:"valueOf",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:By,callable:null},{name:"valueOf",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:By,callable:null},{name:"valueOf",modifiers:512,accessLevel
+:3,parameterTypes:[$rt_longcls()],returnType:By,callable:null},{name:"valueOf",modifiers:512,accessLevel:3,parameterTypes:[$rt_floatcls()],returnType:By,callable:null},{name:"valueOf",modifiers:512,accessLevel:3,parameterTypes:[$rt_doublecls()],returnType:By,callable:null},{name:"equals",modifiers:0,accessLevel:3,parameterTypes:[D],returnType:$rt_booleancls(),callable:null},{name:"equalsIgnoreCase",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_booleancls(),callable:null},{name:"getBytes",modifiers
+:0,accessLevel:3,parameterTypes:[By],returnType:$rt_arraycls($rt_bytecls()),callable:null},{name:"getBytes",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_arraycls($rt_bytecls()),callable:null},{name:"getBytes",modifiers:0,accessLevel:3,parameterTypes:[AQl],returnType:$rt_arraycls($rt_bytecls()),callable:null},{name:"hashCode",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"toLowerCase",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},
+{name:"toLowerCase",modifiers:0,accessLevel:3,parameterTypes:[Gf],returnType:By,callable:null},{name:"toUpperCase",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"toUpperCase",modifiers:0,accessLevel:3,parameterTypes:[Gf],returnType:By,callable:null},{name:"intern",modifiers:256,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"matches",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_booleancls(),callable:null},{name:"split",modifiers:0,accessLevel
+:3,parameterTypes:[By],returnType:$rt_arraycls(By),callable:null},{name:"split",modifiers:0,accessLevel:3,parameterTypes:[By,$rt_intcls()],returnType:$rt_arraycls(By),callable:null},{name:"replaceAll",modifiers:0,accessLevel:3,parameterTypes:[By,By],returnType:By,callable:null},{name:"replaceFirst",modifiers:0,accessLevel:3,parameterTypes:[By,By],returnType:By,callable:null},{name:"format",modifiers:512,accessLevel:3,parameterTypes:[By,$rt_arraycls(D)],returnType:By,callable:null},{name:"format",modifiers:512,accessLevel
+:3,parameterTypes:[Gf,By,$rt_arraycls(D)],returnType:By,callable:null},{name:"join",modifiers:512,accessLevel:3,parameterTypes:[Wo,$rt_arraycls(Wo)],returnType:By,callable:null},{name:"join",modifiers:512,accessLevel:3,parameterTypes:[Wo,Ie],returnType:By,callable:null},{name:"compareTo",modifiers:96,accessLevel:3,parameterTypes:[D],returnType:$rt_intcls(),callable:null},{name:"lambda$static$0",modifiers:544,accessLevel:1,parameterTypes:[By,By],returnType:$rt_intcls(),callable:null},{name:"",modifiers
+:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];ACi.$meta.methods=[{name:"",modifiers:0,accessLevel:1,parameterTypes:[A.Bd6],returnType:$rt_voidcls(),callable:null},{name:"getClass",modifiers:512,accessLevel:3,parameterTypes:[A.Bd6],returnType:ACi,callable:null},{name:"getPlatformClass",modifiers:0,accessLevel:3,parameterTypes:[],returnType:A.Bd6,callable:null},{name:"isInstance",modifiers:0,accessLevel:3,parameterTypes:[D],returnType:$rt_booleancls(),callable:null},{name
+:"isInstanceLowLevel",modifiers:0,accessLevel:1,parameterTypes:[ALs],returnType:$rt_booleancls(),callable:null},{name:"isAssignableFrom",modifiers:0,accessLevel:3,parameterTypes:[ACi],returnType:$rt_booleancls(),callable:null},{name:"isAssignableFromLowLevel",modifiers:0,accessLevel:1,parameterTypes:[B4d],returnType:$rt_booleancls(),callable:null},{name:"getName",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"getSimpleName",modifiers:0,accessLevel:3,parameterTypes:[],returnType
+:By,callable:null},{name:"getSimpleNameCache",modifiers:0,accessLevel:1,parameterTypes:[],returnType:By,callable:null},{name:"getSimpleNameCacheLowLevel",modifiers:0,accessLevel:1,parameterTypes:[],returnType:ALs,callable:null},{name:"setSimpleNameCache",modifiers:0,accessLevel:1,parameterTypes:[By],returnType:$rt_voidcls(),callable:null},{name:"setSimpleNameCacheLowLevel",modifiers:0,accessLevel:1,parameterTypes:[ALs],returnType:$rt_voidcls(),callable:null},{name:"isPrimitive",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:$rt_booleancls(),callable:null},{name:"isArray",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isEnum",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isInterface",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getComponentType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:ACi,callable:null},{name:"getDeclaredFields",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:$rt_arraycls(A.BrO),callable:null},{name:"initReflection",modifiers:512,accessLevel:1,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"createMetadata",modifiers:768,accessLevel:1,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getFields",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_arraycls(A.BrO),callable:null},{name:"getDeclaredField",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:A.BrO,callable:null},{name:"getField",modifiers:0,accessLevel
+:3,parameterTypes:[By],returnType:A.BrO,callable:null},{name:"findField",modifiers:0,accessLevel:1,parameterTypes:[By,JX],returnType:A.BrO,callable:null},{name:"newEmptyInstance",modifiers:256,accessLevel:3,parameterTypes:[],returnType:D,callable:null},{name:"getDeclaredConstructors",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_arraycls(A.Bb),callable:null},{name:"getConstructors",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_arraycls(A.Bb),callable:null},{name:"getDeclaredConstructor",modifiers
+:0,accessLevel:3,parameterTypes:[$rt_arraycls(ACi)],returnType:A.Bb,callable:null},{name:"getConstructor",modifiers:0,accessLevel:3,parameterTypes:[$rt_arraycls(ACi)],returnType:A.Bb,callable:null},{name:"getFieldsOfInterfaces",modifiers:512,accessLevel:1,parameterTypes:[ACi,Io,JX],returnType:$rt_voidcls(),callable:null},{name:"getDeclaredMethods",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_arraycls(Y3),callable:null},{name:"getDeclaredMethod",modifiers:0,accessLevel:3,parameterTypes:[By,$rt_arraycls(ACi)],returnType
+:Y3,callable:null},{name:"getMethods",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_arraycls(Y3),callable:null},{name:"getMethod",modifiers:0,accessLevel:3,parameterTypes:[By,$rt_arraycls(ACi)],returnType:Y3,callable:null},{name:"findMethods",modifiers:512,accessLevel:1,parameterTypes:[ACi,Jp],returnType:$rt_voidcls(),callable:null},{name:"findMethod",modifiers:512,accessLevel:1,parameterTypes:[ACi,Y3,By,$rt_arraycls(ACi)],returnType:Y3,callable:null},{name:"getModifiers",modifiers:0,accessLevel
+:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"desiredAssertionStatus",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getSuperclass",modifiers:0,accessLevel:3,parameterTypes:[],returnType:ACi,callable:null},{name:"getInterfaces",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_arraycls(ACi),callable:null},{name:"getEnumConstants",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_arraycls(D),callable:null},{name:"cast",modifiers
+:0,accessLevel:3,parameterTypes:[D],returnType:D,callable:null},{name:"getClassLoader",modifiers:0,accessLevel:3,parameterTypes:[],returnType:AHZ,callable:null},{name:"forName",modifiers:512,accessLevel:3,parameterTypes:[By],returnType:ACi,callable:null},{name:"forName",modifiers:512,accessLevel:3,parameterTypes:[By,$rt_booleancls(),AHZ],returnType:ACi,callable:null},{name:"initialize",modifiers:0,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"newInstance",modifiers:0,accessLevel
+:3,parameterTypes:[],returnType:D,callable:null},{name:"getDeclaringClass",modifiers:0,accessLevel:3,parameterTypes:[],returnType:ACi,callable:null},{name:"getDeclaringClassImpl",modifiers:768,accessLevel:1,parameterTypes:[A.Bd6],returnType:A.Bd6,callable:null},{name:"asSubclass",modifiers:0,accessLevel:3,parameterTypes:[ACi],returnType:ACi,callable:null},{name:"isAnnotationPresent",modifiers:0,accessLevel:3,parameterTypes:[ACi],returnType:$rt_booleancls(),callable:null},{name:"getAnnotation",modifiers:0,accessLevel
+:3,parameterTypes:[ACi],returnType:AOZ,callable:null},{name:"getAnnotations",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_arraycls(AOZ),callable:null},{name:"getDeclaredAnnotations",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_arraycls(AOZ),callable:null},{name:"ensureAnnotationsByType",modifiers:0,accessLevel:1,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getResourceAsStream",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:NW,callable:null},{name:"getPackage",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:ARV,callable:null}];Eo.$meta.methods=[{name:"getMapType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:ACi,callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[Eo,$rt_arraycls(By)],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[Cyl],returnType:$rt_voidcls(),callable:null},{name:"",modifiers
+:0,accessLevel:3,parameterTypes:[Jp],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[D],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:1,parameterTypes:[D,JX],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[D,$rt_arraycls(By)],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_voidcls(),callable:null},{name:"",modifiers
+:0,accessLevel:3,parameterTypes:[By,Gf],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:2,parameterTypes:[$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"accumulate",modifiers:0,accessLevel:3,parameterTypes:[By,D],returnType:Eo,callable:null},{name:"append",modifiers:0,accessLevel:3,parameterTypes:[By,D],returnType:Eo,callable:null},{name:"doubleToString",modifiers:512,accessLevel:3,parameterTypes:[$rt_doublecls()],returnType:By,callable:null},{name:"get",modifiers
+:0,accessLevel:3,parameterTypes:[By],returnType:D,callable:null},{name:"getEnum",modifiers:0,accessLevel:3,parameterTypes:[ACi,By],returnType:Bs,callable:null},{name:"getBoolean",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_booleancls(),callable:null},{name:"getBigInteger",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:GM,callable:null},{name:"getBigDecimal",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:G6,callable:null},{name:"getDouble",modifiers:0,accessLevel:3,parameterTypes
+:[By],returnType:$rt_doublecls(),callable:null},{name:"getFloat",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_floatcls(),callable:null},{name:"getNumber",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:Fi,callable:null},{name:"getInt",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_intcls(),callable:null},{name:"getJSONArray",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:H1,callable:null},{name:"getJSONObject",modifiers:0,accessLevel:3,parameterTypes:[By],returnType
+:Eo,callable:null},{name:"getLong",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_longcls(),callable:null},{name:"getNames",modifiers:512,accessLevel:3,parameterTypes:[Eo],returnType:$rt_arraycls(By),callable:null},{name:"getNames",modifiers:512,accessLevel:3,parameterTypes:[D],returnType:$rt_arraycls(By),callable:null},{name:"getString",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:By,callable:null},{name:"has",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_booleancls(),callable
+:null},{name:"increment",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:Eo,callable:null},{name:"isNull",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_booleancls(),callable:null},{name:"keys",modifiers:0,accessLevel:3,parameterTypes:[],returnType:E5,callable:null},{name:"keySet",modifiers:0,accessLevel:3,parameterTypes:[],returnType:JX,callable:null},{name:"entrySet",modifiers:0,accessLevel:2,parameterTypes:[],returnType:JX,callable:null},{name:"length",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:$rt_intcls(),callable:null},{name:"clear",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"isEmpty",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"names",modifiers:0,accessLevel:3,parameterTypes:[],returnType:H1,callable:null},{name:"numberToString",modifiers:512,accessLevel:3,parameterTypes:[Fi],returnType:By,callable:null},{name:"opt",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:D,callable:null},
+{name:"optEnum",modifiers:0,accessLevel:3,parameterTypes:[ACi,By],returnType:Bs,callable:null},{name:"optEnum",modifiers:0,accessLevel:3,parameterTypes:[ACi,By,Bs],returnType:Bs,callable:null},{name:"optBoolean",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_booleancls(),callable:null},{name:"optBoolean",modifiers:0,accessLevel:3,parameterTypes:[By,$rt_booleancls()],returnType:$rt_booleancls(),callable:null},{name:"optBigDecimal",modifiers:0,accessLevel:3,parameterTypes:[By,G6],returnType:G6,callable
+:null},{name:"objectToBigDecimal",modifiers:512,accessLevel:0,parameterTypes:[D,G6],returnType:G6,callable:null},{name:"objectToBigDecimal",modifiers:512,accessLevel:0,parameterTypes:[D,G6,$rt_booleancls()],returnType:G6,callable:null},{name:"optBigInteger",modifiers:0,accessLevel:3,parameterTypes:[By,GM],returnType:GM,callable:null},{name:"objectToBigInteger",modifiers:512,accessLevel:0,parameterTypes:[D,GM],returnType:GM,callable:null},{name:"optDouble",modifiers:0,accessLevel:3,parameterTypes:[By],returnType
+:$rt_doublecls(),callable:null},{name:"optDouble",modifiers:0,accessLevel:3,parameterTypes:[By,$rt_doublecls()],returnType:$rt_doublecls(),callable:null},{name:"optFloat",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_floatcls(),callable:null},{name:"optFloat",modifiers:0,accessLevel:3,parameterTypes:[By,$rt_floatcls()],returnType:$rt_floatcls(),callable:null},{name:"optInt",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_intcls(),callable:null},{name:"optInt",modifiers:0,accessLevel
+:3,parameterTypes:[By,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"optJSONArray",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:H1,callable:null},{name:"optJSONObject",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:Eo,callable:null},{name:"optJSONObject",modifiers:0,accessLevel:3,parameterTypes:[By,Eo],returnType:Eo,callable:null},{name:"optLong",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_longcls(),callable:null},{name:"optLong",modifiers:0,accessLevel:3,parameterTypes
+:[By,$rt_longcls()],returnType:$rt_longcls(),callable:null},{name:"optNumber",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:Fi,callable:null},{name:"optNumber",modifiers:0,accessLevel:3,parameterTypes:[By,Fi],returnType:Fi,callable:null},{name:"optString",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:By,callable:null},{name:"optString",modifiers:0,accessLevel:3,parameterTypes:[By,By],returnType:By,callable:null},{name:"populateMap",modifiers:0,accessLevel:1,parameterTypes:[D],returnType
+:$rt_voidcls(),callable:null},{name:"populateMap",modifiers:0,accessLevel:1,parameterTypes:[D,JX],returnType:$rt_voidcls(),callable:null},{name:"isValidMethodName",modifiers:512,accessLevel:1,parameterTypes:[By],returnType:$rt_booleancls(),callable:null},{name:"getKeyNameFromMethod",modifiers:512,accessLevel:1,parameterTypes:[Y3],returnType:By,callable:null},{name:"getAnnotation",modifiers:512,accessLevel:1,parameterTypes:[Y3,ACi],returnType:AOZ,callable:null},{name:"getAnnotationDepth",modifiers:512,accessLevel
+:1,parameterTypes:[Y3,ACi],returnType:$rt_intcls(),callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[By,$rt_booleancls()],returnType:Eo,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[By,I6],returnType:Eo,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[By,$rt_doublecls()],returnType:Eo,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[By,$rt_floatcls()],returnType:Eo,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes
+:[By,$rt_intcls()],returnType:Eo,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[By,$rt_longcls()],returnType:Eo,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[By,Jp],returnType:Eo,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[By,D],returnType:Eo,callable:null},{name:"putOnce",modifiers:0,accessLevel:3,parameterTypes:[By,D],returnType:Eo,callable:null},{name:"putOpt",modifiers:0,accessLevel:3,parameterTypes:[By,D],returnType:Eo,callable:null},
+{name:"query",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:D,callable:null},{name:"query",modifiers:0,accessLevel:3,parameterTypes:[B0x],returnType:D,callable:null},{name:"optQuery",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:D,callable:null},{name:"optQuery",modifiers:0,accessLevel:3,parameterTypes:[B0x],returnType:D,callable:null},{name:"quote",modifiers:512,accessLevel:3,parameterTypes:[By],returnType:By,callable:null},{name:"quote",modifiers:512,accessLevel:3,parameterTypes:[By,
+So],returnType:So,callable:null},{name:"remove",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:D,callable:null},{name:"similar",modifiers:0,accessLevel:3,parameterTypes:[D],returnType:$rt_booleancls(),callable:null},{name:"isNumberSimilar",modifiers:512,accessLevel:0,parameterTypes:[Fi,Fi],returnType:$rt_booleancls(),callable:null},{name:"numberIsFinite",modifiers:512,accessLevel:1,parameterTypes:[Fi],returnType:$rt_booleancls(),callable:null},{name:"isDecimalNotation",modifiers:512,accessLevel:2,parameterTypes
+:[By],returnType:$rt_booleancls(),callable:null},{name:"stringToNumber",modifiers:512,accessLevel:2,parameterTypes:[By],returnType:Fi,callable:null},{name:"stringToValue",modifiers:512,accessLevel:3,parameterTypes:[By],returnType:D,callable:null},{name:"testValidity",modifiers:512,accessLevel:3,parameterTypes:[D],returnType:$rt_voidcls(),callable:null},{name:"toJSONArray",modifiers:0,accessLevel:3,parameterTypes:[H1],returnType:H1,callable:null},{name:"toString",modifiers:0,accessLevel:3,parameterTypes:[],returnType
+:By,callable:null},{name:"toString",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:By,callable:null},{name:"valueToString",modifiers:512,accessLevel:3,parameterTypes:[D],returnType:By,callable:null},{name:"wrap",modifiers:512,accessLevel:3,parameterTypes:[D],returnType:D,callable:null},{name:"wrap",modifiers:512,accessLevel:1,parameterTypes:[D,JX],returnType:D,callable:null},{name:"write",modifiers:0,accessLevel:3,parameterTypes:[So],returnType:So,callable:null},{name:"writeValue",modifiers
+:516,accessLevel:0,parameterTypes:[So,D,$rt_intcls(),$rt_intcls()],returnType:So,callable:null},{name:"indent",modifiers:516,accessLevel:0,parameterTypes:[So,$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"write",modifiers:0,accessLevel:3,parameterTypes:[So,$rt_intcls(),$rt_intcls()],returnType:So,callable:null},{name:"toMap",modifiers:0,accessLevel:3,parameterTypes:[],returnType:Jp,callable:null},{name:"wrongValueFormatException",modifiers:512,accessLevel:1,parameterTypes:[By,By,D,L],returnType
+:BP,callable:null},{name:"recursivelyDefinedObjectException",modifiers:512,accessLevel:1,parameterTypes:[By],returnType:BP,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];H1.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[Cyl],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes
+:[By],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[I6],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[Ie],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[H1],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[D],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType
+:$rt_voidcls(),callable:null},{name:"iterator",modifiers:0,accessLevel:3,parameterTypes:[],returnType:E5,callable:null},{name:"get",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:D,callable:null},{name:"getBoolean",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"getDouble",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_doublecls(),callable:null},{name:"getFloat",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType
+:$rt_floatcls(),callable:null},{name:"getNumber",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Fi,callable:null},{name:"getEnum",modifiers:0,accessLevel:3,parameterTypes:[ACi,$rt_intcls()],returnType:Bs,callable:null},{name:"getBigDecimal",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:G6,callable:null},{name:"getBigInteger",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:GM,callable:null},{name:"getInt",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType
+:$rt_intcls(),callable:null},{name:"getJSONArray",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:H1,callable:null},{name:"getJSONObject",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Eo,callable:null},{name:"getLong",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_longcls(),callable:null},{name:"getString",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:By,callable:null},{name:"isNull",modifiers:0,accessLevel:3,parameterTypes
+:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"join",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:By,callable:null},{name:"length",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"clear",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"opt",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:D,callable:null},{name:"optBoolean",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType
+:$rt_booleancls(),callable:null},{name:"optBoolean",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_booleancls()],returnType:$rt_booleancls(),callable:null},{name:"optDouble",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_doublecls(),callable:null},{name:"optDouble",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_doublecls()],returnType:$rt_doublecls(),callable:null},{name:"optFloat",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_floatcls(),callable
+:null},{name:"optFloat",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_floatcls()],returnType:$rt_floatcls(),callable:null},{name:"optInt",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"optInt",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"optEnum",modifiers:0,accessLevel:3,parameterTypes:[ACi,$rt_intcls()],returnType:Bs,callable:null},{name:"optEnum",modifiers:0,accessLevel
+:3,parameterTypes:[ACi,$rt_intcls(),Bs],returnType:Bs,callable:null},{name:"optBigInteger",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),GM],returnType:GM,callable:null},{name:"optBigDecimal",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),G6],returnType:G6,callable:null},{name:"optJSONArray",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:H1,callable:null},{name:"optJSONObject",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Eo,callable:null},{name:"optLong",modifiers
+:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_longcls(),callable:null},{name:"optLong",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_longcls()],returnType:$rt_longcls(),callable:null},{name:"optNumber",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Fi,callable:null},{name:"optNumber",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),Fi],returnType:Fi,callable:null},{name:"optString",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:By,callable
+:null},{name:"optString",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),By],returnType:By,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[$rt_booleancls()],returnType:H1,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[I6],returnType:H1,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[$rt_doublecls()],returnType:H1,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[$rt_floatcls()],returnType:H1,callable:null},{name:"put",modifiers
+:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:H1,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[$rt_longcls()],returnType:H1,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[Jp],returnType:H1,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[D],returnType:H1,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_booleancls()],returnType:H1,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes
+:[$rt_intcls(),I6],returnType:H1,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_doublecls()],returnType:H1,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_floatcls()],returnType:H1,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType:H1,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_longcls()],returnType:H1,callable:null},{name:"put",modifiers
+:0,accessLevel:3,parameterTypes:[$rt_intcls(),Jp],returnType:H1,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),D],returnType:H1,callable:null},{name:"putAll",modifiers:0,accessLevel:3,parameterTypes:[I6],returnType:H1,callable:null},{name:"putAll",modifiers:0,accessLevel:3,parameterTypes:[Ie],returnType:H1,callable:null},{name:"putAll",modifiers:0,accessLevel:3,parameterTypes:[H1],returnType:H1,callable:null},{name:"putAll",modifiers:0,accessLevel:3,parameterTypes:[D],returnType
+:H1,callable:null},{name:"query",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:D,callable:null},{name:"query",modifiers:0,accessLevel:3,parameterTypes:[B0x],returnType:D,callable:null},{name:"optQuery",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:D,callable:null},{name:"optQuery",modifiers:0,accessLevel:3,parameterTypes:[B0x],returnType:D,callable:null},{name:"remove",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:D,callable:null},{name:"similar",modifiers:0,accessLevel
+:3,parameterTypes:[D],returnType:$rt_booleancls(),callable:null},{name:"toJSONObject",modifiers:0,accessLevel:3,parameterTypes:[H1],returnType:Eo,callable:null},{name:"toString",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"toString",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:By,callable:null},{name:"write",modifiers:0,accessLevel:3,parameterTypes:[So],returnType:So,callable:null},{name:"write",modifiers:0,accessLevel:3,parameterTypes:[So,$rt_intcls(),
+$rt_intcls()],returnType:So,callable:null},{name:"toList",modifiers:0,accessLevel:3,parameterTypes:[],returnType:Io,callable:null},{name:"isEmpty",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"addAll",modifiers:0,accessLevel:1,parameterTypes:[I6,$rt_booleancls()],returnType:$rt_voidcls(),callable:null},{name:"addAll",modifiers:0,accessLevel:1,parameterTypes:[Ie,$rt_booleancls()],returnType:$rt_voidcls(),callable:null},{name:"addAll",modifiers:0,accessLevel:1,parameterTypes
+:[D,$rt_booleancls()],returnType:$rt_voidcls(),callable:null},{name:"wrongValueFormatException",modifiers:512,accessLevel:1,parameterTypes:[$rt_intcls(),By,D,L],returnType:BP,callable:null}];JS.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_voidcls(),callable:null},{name:"toString",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType
+:By,callable:null},{name:"toHexString",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:By,callable:null},{name:"toOctalString",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:By,callable:null},{name:"toBinaryString",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:By,callable:null},{name:"toString",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:By,callable:null},{name:"parseInt",modifiers:512,accessLevel:3,parameterTypes:[By,
+$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"parseInt",modifiers:512,accessLevel:3,parameterTypes:[By],returnType:$rt_intcls(),callable:null},{name:"valueOf",modifiers:512,accessLevel:3,parameterTypes:[By,$rt_intcls()],returnType:JS,callable:null},{name:"valueOf",modifiers:512,accessLevel:3,parameterTypes:[By],returnType:JS,callable:null},{name:"valueOf",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:JS,callable:null},{name:"ensureIntegerCache",modifiers:512,accessLevel:
+1,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"intValue",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"longValue",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_longcls(),callable:null},{name:"floatValue",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_floatcls(),callable:null},{name:"doubleValue",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_doublecls(),callable:null},{name:"toString",modifiers:0,accessLevel
+:3,parameterTypes:[],returnType:By,callable:null},{name:"hashCode",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"equals",modifiers:0,accessLevel:3,parameterTypes:[D],returnType:$rt_booleancls(),callable:null},{name:"getInteger",modifiers:512,accessLevel:3,parameterTypes:[By],returnType:JS,callable:null},{name:"getInteger",modifiers:512,accessLevel:3,parameterTypes:[By,$rt_intcls()],returnType:JS,callable:null},{name:"getInteger",modifiers:512,accessLevel:3,parameterTypes
+:[By,JS],returnType:JS,callable:null},{name:"decode",modifiers:512,accessLevel:3,parameterTypes:[By],returnType:JS,callable:null},{name:"decodeDigit",modifiers:512,accessLevel:1,parameterTypes:[$rt_charcls()],returnType:$rt_intcls(),callable:null},{name:"compareTo",modifiers:0,accessLevel:3,parameterTypes:[JS],returnType:$rt_intcls(),callable:null},{name:"compare",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"numberOfLeadingZeros",modifiers
+:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"numberOfTrailingZeros",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"highestOneBit",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"lowestOneBit",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"bitCount",modifiers:512,accessLevel:3,parameterTypes:
+[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"rotateLeft",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"rotateRight",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"reverse",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"reverseBytes",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType
+:$rt_intcls(),callable:null},{name:"signum",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"divideUnsigned",modifiers:768,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"remainderUnsigned",modifiers:768,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"compareTo",modifiers:96,accessLevel:3,parameterTypes:[D],returnType:$rt_intcls(),callable:null},
+{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];BLW.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"contains",modifiers:0,accessLevel:3,parameterTypes:[AQl],returnType:$rt_booleancls(),callable:null},{name:"newDecoder",modifiers:0,accessLevel:3,parameterTypes:[],returnType:ARw,callable:null},{name:"newEncoder",modifiers:0,accessLevel:3,parameterTypes:[],returnType:AI9,callable:null}];A83.$meta.methods
+=[{name:"",modifiers:0,accessLevel:1,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"clone",modifiers:4,accessLevel:2,parameterTypes:[],returnType:D,callable:null},{name:"equals",modifiers:0,accessLevel:3,parameterTypes:[D],returnType:$rt_booleancls(),callable:null},{name:"hashCode",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"toString",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"",modifiers:32,accessLevel
+:0,parameterTypes:[BKd],returnType:$rt_voidcls(),callable:null}];AJD.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getInputStream",modifiers:0,accessLevel:3,parameterTypes:[Bb],returnType:NW,callable:null},{name:"getInputStreamAssets",modifiers:0,accessLevel:3,parameterTypes:[Bb],returnType:NW,callable:null},{name:"getResourceStream",modifiers:0,accessLevel:1,parameterTypes:[Bb],returnType:NW,callable:null},{name:"resourceExists",modifiers
+:0,accessLevel:3,parameterTypes:[Bb],returnType:$rt_booleancls(),callable:null},{name:"getResourceDomains",modifiers:0,accessLevel:3,parameterTypes:[],returnType:JX,callable:null},{name:"getPackMetadata",modifiers:0,accessLevel:3,parameterTypes:[Bd$,By],returnType:U4,callable:null},{name:"getPackImage",modifiers:0,accessLevel:3,parameterTypes:[],returnType:Lm,callable:null},{name:"getPackName",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"",modifiers:512,accessLevel
+:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];K4.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_voidcls(),callable:null},{name:"charValue",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_charcls(),callable:null},{name:"valueOf",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:K4,callable:null},{name:"toString",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"equals",modifiers
+:0,accessLevel:3,parameterTypes:[D],returnType:$rt_booleancls(),callable:null},{name:"hashCode",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"toString",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:By,callable:null},{name:"isValidCodePoint",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isBmpCodePoint",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable
+:null},{name:"isSupplementaryCodePoint",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isHighSurrogate",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isLowSurrogate",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isSurrogate",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},
+{name:"isSurrogatePair",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls(),$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"charCount",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"toCodePoint",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls(),$rt_charcls()],returnType:$rt_intcls(),callable:null},{name:"codePointAt",modifiers:512,accessLevel:3,parameterTypes:[Wo,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name
+:"codePointAt",modifiers:512,accessLevel:3,parameterTypes:[$rt_arraycls($rt_charcls()),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"codePointAt",modifiers:512,accessLevel:3,parameterTypes:[$rt_arraycls($rt_charcls()),$rt_intcls(),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"codePointBefore",modifiers:512,accessLevel:3,parameterTypes:[Wo,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"codePointBefore",modifiers:512,accessLevel:3,parameterTypes:[$rt_arraycls($rt_charcls()),
+$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"codePointBefore",modifiers:512,accessLevel:3,parameterTypes:[$rt_arraycls($rt_charcls()),$rt_intcls(),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"highSurrogate",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_charcls(),callable:null},{name:"lowSurrogate",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_charcls(),callable:null},{name:"toLowerCase",modifiers:512,accessLevel:3,parameterTypes
+:[$rt_charcls()],returnType:$rt_charcls(),callable:null},{name:"toLowerCase",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"toLowerCaseLowLevel",modifiers:512,accessLevel:1,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"toLowerCaseSystem",modifiers:768,accessLevel:1,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"toUpperCase",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:
+$rt_charcls(),callable:null},{name:"toUpperCase",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"toUpperCaseLowLevel",modifiers:512,accessLevel:1,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"toUpperCaseSystem",modifiers:768,accessLevel:1,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"digit",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls(),$rt_intcls()],returnType:$rt_intcls(),callable
+:null},{name:"digit",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"getNumericValue",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_intcls(),callable:null},{name:"getNumericValue",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"forDigit",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType:$rt_charcls(),callable:null},{name:"isDigit",modifiers
+:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isDigit",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"getDigitMapping",modifiers:512,accessLevel:1,parameterTypes:[],returnType:$rt_arraycls($rt_intcls()),callable:null},{name:"obtainDigitMapping",modifiers:512,accessLevel:1,parameterTypes:[],returnType:A.Gz,callable:null},{name:"getClasses",modifiers:512,accessLevel:1,parameterTypes:[],returnType
+:$rt_arraycls(AZ6),callable:null},{name:"obtainClasses",modifiers:512,accessLevel:1,parameterTypes:[],returnType:A.Gz,callable:null},{name:"toChars",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_arraycls($rt_charcls()),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"toChars",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_arraycls($rt_charcls()),callable:null},{name:"codePointCount",modifiers:512,accessLevel:3,parameterTypes:[Wo,$rt_intcls(),$rt_intcls()],returnType
+:$rt_intcls(),callable:null},{name:"codePointCount",modifiers:512,accessLevel:3,parameterTypes:[$rt_arraycls($rt_charcls()),$rt_intcls(),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"offsetByCodePoints",modifiers:512,accessLevel:3,parameterTypes:[Wo,$rt_intcls(),$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"offsetByCodePoints",modifiers:512,accessLevel:3,parameterTypes:[$rt_arraycls($rt_charcls()),$rt_intcls(),$rt_intcls(),$rt_intcls(),$rt_intcls()],returnType:$rt_intcls(),callable
+:null},{name:"isISOControl",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isISOControl",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"getType",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_intcls(),callable:null},{name:"getType",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"isLowerCase",modifiers:512,accessLevel
+:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isLowerCase",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isUpperCase",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isUpperCase",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isTitleCase",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType
+:$rt_booleancls(),callable:null},{name:"isTitleCase",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isDefined",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isDefined",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isLetter",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},
+{name:"isLetter",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isLetterOrDigit",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isLetterOrDigit",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isJavaLetter",modifiers:640,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isJavaIdentifierStart",modifiers
+:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isJavaIdentifierStart",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isJavaLetterOrDigit",modifiers:640,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isJavaIdentifierPart",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isJavaIdentifierPart",modifiers
+:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isAlphabetic",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isUnicodeIdentifierStart",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isUnicodeIdentifierStart",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isUnicodeIdentifierPart",modifiers
+:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isUnicodeIdentifierPart",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isIdentifierIgnorable",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isIdentifierIgnorable",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isSpace",modifiers
+:640,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isSpaceChar",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isSpaceChar",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isWhitespace",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_booleancls(),callable:null},{name:"isWhitespace",modifiers:512,accessLevel:3,parameterTypes
+:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"compareTo",modifiers:0,accessLevel:3,parameterTypes:[K4],returnType:$rt_intcls(),callable:null},{name:"compare",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls(),$rt_charcls()],returnType:$rt_intcls(),callable:null},{name:"reverseBytes",modifiers:512,accessLevel:3,parameterTypes:[$rt_charcls()],returnType:$rt_charcls(),callable:null},{name:"compareTo",modifiers:96,accessLevel:3,parameterTypes:[D],returnType:$rt_intcls(),callable:null},
+{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"obtainDigitMapping$$create",modifiers:768,accessLevel:1,parameterTypes:[],returnType:A.Gz,callable:null},{name:"obtainClasses$$create",modifiers:768,accessLevel:1,parameterTypes:[],returnType:A.Gz,callable:null}];AFO.$meta.methods=[{name:"newElementArray",modifiers:0,accessLevel:0,parameterTypes:[$rt_intcls()],returnType:$rt_arraycls(ADG),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"calculateCapacity",modifiers:512,accessLevel:1,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),$rt_floatcls()],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[Jp],returnType:$rt_voidcls(),callable:null},{name:"clear",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"clone",modifiers:0,accessLevel:3,parameterTypes:[],returnType:D,callable:null},{name:"computeThreshold",modifiers:0,accessLevel:1,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"containsKey",modifiers:0,accessLevel:3,parameterTypes:[D],returnType:$rt_booleancls(),callable:null},{name:"containsValue",modifiers:0,accessLevel:3,parameterTypes:[D],returnType:$rt_booleancls(),callable:null},{name:"entrySet",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:JX,callable:null},{name:"get",modifiers:0,accessLevel:3,parameterTypes:[D],returnType:D,callable:null},{name:"getEntry",modifiers:4,accessLevel:0,parameterTypes:[D],returnType:ADG,callable:null},{name:"findNonNullKeyEntry",modifiers:4,accessLevel:0,parameterTypes:[D,$rt_intcls(),$rt_intcls()],returnType:ADG,callable:null},{name:"findNullKeyEntry",modifiers:4,accessLevel:0,parameterTypes:[],returnType:ADG,callable:null},{name:"isEmpty",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:$rt_booleancls(),callable:null},{name:"keySet",modifiers:0,accessLevel:3,parameterTypes:[],returnType:JX,callable:null},{name:"put",modifiers:0,accessLevel:3,parameterTypes:[D,D],returnType:D,callable:null},{name:"putImpl",modifiers:0,accessLevel:0,parameterTypes:[D,D],returnType:D,callable:null},{name:"createEntry",modifiers:0,accessLevel:0,parameterTypes:[D,$rt_intcls(),D],returnType:ADG,callable:null},{name:"createHashedEntry",modifiers:0,accessLevel:0,parameterTypes:[D,$rt_intcls(),$rt_intcls()],returnType
+:ADG,callable:null},{name:"putAll",modifiers:0,accessLevel:3,parameterTypes:[Jp],returnType:$rt_voidcls(),callable:null},{name:"putAllImpl",modifiers:0,accessLevel:1,parameterTypes:[Jp],returnType:$rt_voidcls(),callable:null},{name:"rehash",modifiers:0,accessLevel:0,parameterTypes:[$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"rehash",modifiers:0,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"remove",modifiers:0,accessLevel:3,parameterTypes:[D],returnType:D,callable
+:null},{name:"removeEntry",modifiers:4,accessLevel:0,parameterTypes:[ADG],returnType:$rt_voidcls(),callable:null},{name:"removeEntry",modifiers:4,accessLevel:0,parameterTypes:[D],returnType:ADG,callable:null},{name:"size",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"values",modifiers:0,accessLevel:3,parameterTypes:[],returnType:I6,callable:null},{name:"computeHashCode",modifiers:512,accessLevel:0,parameterTypes:[D],returnType:$rt_intcls(),callable:null},{name:"areEqualKeys",modifiers
+:512,accessLevel:0,parameterTypes:[D,D],returnType:$rt_booleancls(),callable:null},{name:"areEqualValues",modifiers:512,accessLevel:0,parameterTypes:[D,D],returnType:$rt_booleancls(),callable:null}];N7.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[I6],returnType:$rt_voidcls(),callable
+:null},{name:"trimToSize",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"ensureCapacity",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"get",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:D,callable:null},{name:"size",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"clone",modifiers:0,accessLevel:3,parameterTypes:[],returnType:D,callable:null},{name
+:"set",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),D],returnType:D,callable:null},{name:"add",modifiers:0,accessLevel:3,parameterTypes:[D],returnType:$rt_booleancls(),callable:null},{name:"add",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),D],returnType:$rt_voidcls(),callable:null},{name:"remove",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:D,callable:null},{name:"remove",modifiers:0,accessLevel:3,parameterTypes:[D],returnType:$rt_booleancls(),callable:null},{name:"clear",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"addAll",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),I6],returnType:$rt_booleancls(),callable:null},{name:"removeRange",modifiers:0,accessLevel:2,parameterTypes:[$rt_intcls(),$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"checkIndex",modifiers:0,accessLevel:1,parameterTypes:[$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"checkIndexForAdd",modifiers:0,accessLevel:1,parameterTypes:[$rt_intcls()],returnType
+:$rt_voidcls(),callable:null},{name:"replaceAll",modifiers:0,accessLevel:3,parameterTypes:[BZz],returnType:$rt_voidcls(),callable:null}];V.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[By,L],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes
+:[L],returnType:$rt_voidcls(),callable:null}];Bb.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[$rt_intcls(),$rt_arraycls(By)],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[By,By],returnType:$rt_voidcls(),callable:null},{name:"splitObjectName",modifiers:512,accessLevel:2,parameterTypes:[By],returnType:$rt_arraycls(By),callable:null},
+{name:"getResourcePath",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"getResourceDomain",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"toString",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"equals",modifiers:0,accessLevel:3,parameterTypes:[D],returnType:$rt_booleancls(),callable:null},{name:"hashCode",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null}];Bjd.$meta.methods=[{name
+:"",modifiers:0,accessLevel:0,parameterTypes:[CdP],returnType:$rt_voidcls(),callable:null},{name:"free",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];BH.$meta.methods=[{name:"getIdFromBlock",modifiers:512,accessLevel:3,parameterTypes:[BH],returnType:$rt_intcls(),callable:null},{name:"getStateId",modifiers:512,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getBlockById",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType
+:BH,callable:null},{name:"getStateById",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getBlockFromItem",modifiers:512,accessLevel:3,parameterTypes:[BT],returnType:BH,callable:null},{name:"getBlockFromName",modifiers:512,accessLevel:3,parameterTypes:[By],returnType:BH,callable:null},{name:"isFullBlock",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getLightOpacity",modifiers:0,accessLevel:3,parameterTypes:[],returnType
+:$rt_intcls(),callable:null},{name:"isTranslucent",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getLightValue",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"getUseNeighborBrightness",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getMaterial",modifiers:0,accessLevel:3,parameterTypes:[],returnType:DQ,callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes
+:[Vi],returnType:Eg,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[DQ,Eg],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:2,parameterTypes
+:[DQ],returnType:$rt_voidcls(),callable:null},{name:"setStepSound",modifiers:0,accessLevel:2,parameterTypes:[Pw],returnType:BH,callable:null},{name:"setLightOpacity",modifiers:0,accessLevel:2,parameterTypes:[$rt_intcls()],returnType:BH,callable:null},{name:"setLightLevel",modifiers:0,accessLevel:2,parameterTypes:[$rt_floatcls()],returnType:BH,callable:null},{name:"setResistance",modifiers:0,accessLevel:2,parameterTypes:[$rt_floatcls()],returnType:BH,callable:null},{name:"isBlockNormalCube",modifiers:0,accessLevel
+:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isNormalCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isVisuallyOpaque",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isPassable",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_booleancls(),callable:null},{name:"getRenderType",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"isReplaceable",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"setHardness",modifiers:0,accessLevel:2,parameterTypes:[$rt_floatcls()],returnType:BH,callable:null},{name:"setBlockUnbreakable",modifiers:0,accessLevel:2,parameterTypes:[],returnType:BH,callable:null},{name:"getBlockHardness",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_floatcls(),callable:null},
+{name:"setTickRandomly",modifiers:0,accessLevel:2,parameterTypes:[$rt_booleancls()],returnType:BH,callable:null},{name:"getTickRandomly",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"hasTileEntity",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"setBlockBounds",modifiers:4,accessLevel:2,parameterTypes:[$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_voidcls(),callable
+:null},{name:"getMixedBrightnessForBlock",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_intcls(),callable:null},{name:"shouldSideBeRendered",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"isBlockSolid",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"getSelectedBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:AAQ,callable:null},{name:"addCollisionBoxesToList",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,AAQ,Io,DN],returnType:$rt_voidcls(),callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"canCollideCheck",modifiers:0,accessLevel:3,parameterTypes:[Vi,$rt_booleancls()],returnType:$rt_booleancls(),callable:null},{name:"isCollidable",modifiers:0,accessLevel:3,parameterTypes:[],returnType
+:$rt_booleancls(),callable:null},{name:"randomTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"randomDisplayTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"onBlockDestroyedByPlayer",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},
+{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"tickRate",modifiers:0,accessLevel:3,parameterTypes:[AJi],returnType:$rt_intcls(),callable:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes
+:[A93],returnType:$rt_intcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getPlayerRelativeBlockHardness",modifiers:0,accessLevel:3,parameterTypes:[Dg,AJi,BV],returnType:$rt_floatcls(),callable:null},{name:"dropBlockAsItem",modifiers:4,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"dropBlockAsItemWithChance",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_floatcls(),
+$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"spawnAsEntity",modifiers:512,accessLevel:3,parameterTypes:[AJi,BV,P],returnType:$rt_voidcls(),callable:null},{name:"dropXpOnBlockBreak",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV,$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"damageDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getExplosionResistance",modifiers:0,accessLevel:3,parameterTypes:[DN],returnType:$rt_floatcls(),callable
+:null},{name:"collisionRayTrace",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,LL,LL],returnType:PW,callable:null},{name:"isVecInsideYZBounds",modifiers:0,accessLevel:1,parameterTypes:[LL],returnType:$rt_booleancls(),callable:null},{name:"isVecInsideXZBounds",modifiers:0,accessLevel:1,parameterTypes:[LL],returnType:$rt_booleancls(),callable:null},{name:"isVecInsideXYBounds",modifiers:0,accessLevel:1,parameterTypes:[LL],returnType:$rt_booleancls(),callable:null},{name:"onBlockDestroyedByExplosion",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,BjM],returnType:$rt_voidcls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"canReplace",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,P],returnType:$rt_booleancls(),callable:null},{name:"canPlaceBlockOnSide",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable
+:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"onEntityCollidedWithBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,DN],returnType:$rt_voidcls(),callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"onBlockClicked",modifiers:0,accessLevel
+:3,parameterTypes:[AJi,BV,Dg],returnType:$rt_voidcls(),callable:null},{name:"modifyAcceleration",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,DN,LL],returnType:LL,callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"getBlockBoundsMinX",modifiers:4,accessLevel:3,parameterTypes:[],returnType:$rt_doublecls(),callable:null},{name:"getBlockBoundsMaxX",modifiers:4,accessLevel:3,parameterTypes:[],returnType:$rt_doublecls(),callable
+:null},{name:"getBlockBoundsMinY",modifiers:4,accessLevel:3,parameterTypes:[],returnType:$rt_doublecls(),callable:null},{name:"getBlockBoundsMaxY",modifiers:4,accessLevel:3,parameterTypes:[],returnType:$rt_doublecls(),callable:null},{name:"getBlockBoundsMinZ",modifiers:4,accessLevel:3,parameterTypes:[],returnType:$rt_doublecls(),callable:null},{name:"getBlockBoundsMaxZ",modifiers:4,accessLevel:3,parameterTypes:[],returnType:$rt_doublecls(),callable:null},{name:"getBlockColor",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:$rt_intcls(),callable:null},{name:"getRenderColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"colorMultiplier",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"colorMultiplier",modifiers:4,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_intcls(),callable:null},{name:"getWeakPower",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable:null},{name:
+"canProvidePower",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"onEntityCollidedWithBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,DN],returnType:$rt_voidcls(),callable:null},{name:"getStrongPower",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable:null},{name:"setBlockBoundsForItemRender",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"harvestBlock",modifiers:0,accessLevel
+:3,parameterTypes:[AJi,Dg,BV,Vi,EE],returnType:$rt_voidcls(),callable:null},{name:"canSilkHarvest",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"createStackedBlock",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:P,callable:null},{name:"quantityDroppedWithBonus",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),A93],returnType:$rt_intcls(),callable:null},{name:"onBlockPlacedBy",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,CO,P],returnType:
+$rt_voidcls(),callable:null},{name:"func_181623_g",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"setUnlocalizedName",modifiers:0,accessLevel:3,parameterTypes:[By],returnType:BH,callable:null},{name:"getLocalizedName",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"getUnlocalizedName",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"onBlockEventReceived",modifiers:0,accessLevel:3,parameterTypes:[AJi,
+BV,Vi,$rt_intcls(),$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"getEnableStats",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"disableStats",modifiers:0,accessLevel:2,parameterTypes:[],returnType:BH,callable:null},{name:"getMobilityFlag",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"getAmbientOcclusionLightValue",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_floatcls(),callable:null},{name
+:"onFallenUpon",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,DN,$rt_floatcls()],returnType:$rt_voidcls(),callable:null},{name:"onLanded",modifiers:0,accessLevel:3,parameterTypes:[AJi,DN],returnType:$rt_voidcls(),callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"getDamageValue",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType
+:$rt_voidcls(),callable:null},{name:"getCreativeTabToDisplayOn",modifiers:0,accessLevel:3,parameterTypes:[],returnType:Ej,callable:null},{name:"setCreativeTab",modifiers:0,accessLevel:3,parameterTypes:[Ej],returnType:BH,callable:null},{name:"onBlockHarvested",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg],returnType:$rt_voidcls(),callable:null},{name:"fillWithRain",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_voidcls(),callable:null},{name:"isFlowerPot",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:$rt_booleancls(),callable:null},{name:"requiresUpdates",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"canDropFromExplosion",modifiers:0,accessLevel:3,parameterTypes:[BjM],returnType:$rt_booleancls(),callable:null},{name:"isAssociatedBlock",modifiers:0,accessLevel:3,parameterTypes:[BH],returnType:$rt_booleancls(),callable:null},{name:"isEqualTo",modifiers:512,accessLevel:3,parameterTypes:[BH,BH],returnType:$rt_booleancls(),callable:null},{name:"hasComparatorInputOverride",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"getStateForEntityRender",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Vi,callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"getBlockState",modifiers:0,accessLevel:3,parameterTypes:[],returnType:Ck,callable:null},{name:"setDefaultState",modifiers
+:4,accessLevel:2,parameterTypes:[Vi],returnType:$rt_voidcls(),callable:null},{name:"getDefaultState",modifiers:4,accessLevel:3,parameterTypes:[],returnType:Vi,callable:null},{name:"getOffsetType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:OX,callable:null},{name:"toString",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"registerBlocks",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel
+:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"registerBlock",modifiers:512,accessLevel:1,parameterTypes:[$rt_intcls(),Bb,BH],returnType:$rt_voidcls(),callable:null},{name:"registerBlock",modifiers:512,accessLevel:1,parameterTypes:[$rt_intcls(),By,BH],returnType:$rt_voidcls(),callable:null},{name:"eaglerShadersShouldRenderGlassHighlights",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType
+:$rt_voidcls(),callable:null}];AVs.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getRenderType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"canCollideCheck",modifiers:0,accessLevel
+:3,parameterTypes:[Vi,$rt_booleancls()],returnType:$rt_booleancls(),callable:null},{name:"dropBlockAsItemWithChance",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_floatcls(),$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"isReplaceable",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null}];AIr.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel
+:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getLocalizedName",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"damageDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getSubBlocks",modifiers:0,accessLevel
+:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null}];ATr.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:
+"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"getBlockColor",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"getRenderColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"colorMultiplier",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType
+:BT,callable:null},{name:"canGrow",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_booleancls()],returnType:$rt_booleancls(),callable:null},{name:"canUseBonemeal",modifiers:0,accessLevel:3,parameterTypes:[AJi,A93,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"grow",modifiers:0,accessLevel:3,parameterTypes:[AJi,A93,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel
+:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AFX.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getMapColor",modifiers
+:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null},{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"getDamageValue",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:
+"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"damageDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];ATF.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable
+:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"damageDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType
+:Eg,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null}];AHX.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getLocalizedName",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:By,callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"func_181624_a",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,$rt_intcls(),$rt_intcls(),Iq],returnType:$rt_booleancls(),callable:null},{name:"isTypeAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Iq],returnType:$rt_booleancls(),callable:null},{name:"damageDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},
+{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"canGrow",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_booleancls()],returnType:$rt_booleancls(),callable:null},{name:"canUseBonemeal",modifiers:0,accessLevel:3,parameterTypes:[AJi,A93,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel
+:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AOe.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[DQ],returnType:$rt_voidcls(),callable:null},{name:"placeStaticBlock",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"updateTick",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"tryFlowInto",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi,$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"func_176374_a",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,$rt_intcls(),EM],returnType:$rt_intcls(),callable:null},{name:"getPossibleFlowDirections",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:JX,callable:null},{name:"isBlocked",modifiers:0,accessLevel:1,parameterTypes
+:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"checkAdjacentBlock",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"canFlowInto",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null}];AU2.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[DQ],returnType:$rt_voidcls(),callable
+:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"updateLiquid",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"isSurroundingBlockFlammable",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"getCanBlockBurn",modifiers
+:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null}];AL5.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"damageDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable
+:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null}];BaZ.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable
+:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null}];QC.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[Eg],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType
+:BT,callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"quantityDroppedWithBonus",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),A93],returnType:$rt_intcls(),callable:null},{name:"dropBlockAsItemWithChance",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_floatcls(),$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"getDamageValue",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable
+:null},{name:"damageDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null}];AUz.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType
+:$rt_voidcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"createStackedBlock",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:P,callable:null},{name:"damageDropped",modifiers:0,accessLevel:3,parameterTypes:
+[Vi],returnType:$rt_intcls(),callable:null}];AP1.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getRenderColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"colorMultiplier",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name
+:"dropApple",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV,Vi,$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"getSaplingDropChance",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"createStackedBlock",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:P,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes
+:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getWoodType",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Iq,callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"damageDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null}];AQg.$meta.methods=[{name:"",modifiers:0,accessLevel
+:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getLocalizedName",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"damageDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:
+"tryAbsorb",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"absorb",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType
+:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"randomDisplayTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AXw.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[DQ,$rt_booleancls()],returnType:$rt_voidcls(),callable:null},{name:"quantityDropped",modifiers
+:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"canSilkHarvest",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"eaglerShadersShouldRenderGlassHighlights",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable
+:null}];Ux.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"tickRate",modifiers:0,accessLevel:3,parameterTypes:[AJi],returnType:$rt_intcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"dispense",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV],returnType:$rt_voidcls(),callable:null},{name
+:"getBehavior",modifiers:0,accessLevel:2,parameterTypes:[P],returnType:AN7,callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"onBlockPlacedBy",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,CO,P],returnType:$rt_voidcls(),callable:null},{name:"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getDispensePosition",modifiers:512,accessLevel:3,parameterTypes:[A.BcY],returnType:A5R,callable:null},{name:"getFacing",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:EM,callable:null},{name:"hasComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable
+:null},{name:"getComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"getRenderType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"getStateForEntityRender",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Vi,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes
+:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AQA.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"damageDropped",modifiers:0,accessLevel
+:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers
+:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null}];AOi.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"createNewTileEntity",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable:null},{name:"getInstrument",modifiers:0,accessLevel:1,parameterTypes:[$rt_intcls()],returnType:By,callable:null},{name:"onBlockEventReceived",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_intcls(),$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"getRenderType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType
+:$rt_voidcls(),callable:null}];ADf.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable
+:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"setBedBounds",modifiers:
+0,accessLevel:1,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getSafeExitLocation",modifiers:512,accessLevel:3,parameterTypes:[AJi,BV,$rt_intcls()],returnType:BV,callable:null},{name:"hasRoomForPlayer",modifiers:512,accessLevel:2,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"dropBlockAsItemWithChance",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_floatcls(),$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"getMobilityFlag",modifiers:0,accessLevel
+:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"onBlockHarvested",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg],returnType:$rt_voidcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getActualState",modifiers
+:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];Zx.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers
+:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"func_176566_a",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV,Vi,$rt_booleancls(),$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"func_176567_a",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV,$rt_booleancls(),$rt_intcls(),Ih],returnType:$rt_booleancls(),callable:null},{name:"onNeighborChangedInternal",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"getShapeProperty",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:B1,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AG6.$meta.methods=[{name:"",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"tickRate",modifiers:0,accessLevel:3,parameterTypes:[AJi],returnType:$rt_intcls(),callable:null},{name:"canProvidePower",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getWeakPower",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable:null},
+{name:"getStrongPower",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable:null},{name:"updatePoweredState",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getShapeProperty",modifiers:0,accessLevel:3,parameterTypes:[],returnType:B1,callable:null},{name:"hasComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:$rt_booleancls(),callable:null},{name:"getComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"findMinecarts",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV,ACi,$rt_arraycls(D4)],returnType:Io,callable:null},{name:"getDectectionBox",modifiers:0,accessLevel:1,parameterTypes:[BV],returnType:AAQ,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers
+:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];Vg.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_booleancls()],returnType:$rt_voidcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable
+:null},{name:"onBlockPlacedBy",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,CO,P],returnType:$rt_voidcls(),callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"checkForMove",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"shouldBeExtended",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,EM],returnType:$rt_booleancls(),callable
+:null},{name:"onBlockEventReceived",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_intcls(),$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"setBlockBoundsForItemRender",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"addCollisionBoxesToList",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,AAQ,Io,DN],returnType:$rt_voidcls(),callable
+:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getFacing",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:EM,callable:null},{name:"getFacingFromEntity",modifiers:512,accessLevel:3,parameterTypes:[AJi,BV,CO],returnType:EM,callable:null},{name:"canPush",modifiers:512,accessLevel:3,parameterTypes:[BH,AJi,
+BV,EM,$rt_booleancls()],returnType:$rt_booleancls(),callable:null},{name:"doMove",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,EM,$rt_booleancls()],returnType:$rt_booleancls(),callable:null},{name:"getStateForEntityRender",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Vi,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable
+:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];A$k.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"onEntityCollidedWithBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,DN],returnType:$rt_voidcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:$rt_booleancls(),callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"canSilkHarvest",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getBlockLayer",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null}];AUr.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getBlockColor",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"canBlockStay",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},
+{name:"isReplaceable",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"getRenderColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"colorMultiplier",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"quantityDroppedWithBonus",modifiers:0,accessLevel
+:3,parameterTypes:[$rt_intcls(),A93],returnType:$rt_intcls(),callable:null},{name:"getDamageValue",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"canGrow",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_booleancls()],returnType:$rt_booleancls(),callable:null},{name:"canUseBonemeal",modifiers:0,accessLevel:3,parameterTypes:[AJi,A93,BV,Vi],returnType
+:$rt_booleancls(),callable:null},{name:"grow",modifiers:0,accessLevel:3,parameterTypes:[AJi,A93,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"getOffsetType",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:OX,callable:null}];Bqn.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null},{name:"canPlaceBlockOn",modifiers:0,accessLevel:2,parameterTypes:[BH],returnType:$rt_booleancls(),callable:null},{name:"isReplaceable",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel
+:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null}];AAk.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"onBlockHarvested",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg],returnType:$rt_voidcls(),callable:null},{name:"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable
+:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"canPlaceBlockOnSide",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes
+:[A93],returnType:$rt_intcls(),callable:null},{name:"addCollisionBoxesToList",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,AAQ,Io,DN],returnType:$rt_voidcls(),callable:null},{name:"applyCoreBounds",modifiers:0,accessLevel:1,parameterTypes:[Vi],returnType:$rt_voidcls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"applyHeadBounds",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_voidcls(),callable
+:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"shouldSideBeRendered",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"getFacing",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:EM,callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes
+:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AIh.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[DQ],returnType:$rt_voidcls(),callable:null},{name:"damageDropped",modifiers:0,accessLevel
+:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers
+:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];ADo.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable:null},
+{name:"newTileEntity",modifiers:512,accessLevel:3,parameterTypes:[Vi,EM,$rt_booleancls(),$rt_booleancls()],returnType:EE,callable:null},{name:"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"canPlaceBlockOnSide",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"onBlockDestroyedByPlayer",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"collisionRayTrace",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,LL,LL],returnType:PW,callable
+:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"getBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_floatcls(),EM],returnType:AAQ,callable:null},{name:"getTileEntity",modifiers:0,accessLevel:1,parameterTypes:[AKK,BV],returnType:Tk,callable:null},{name:"getItem",modifiers:0,accessLevel:
+3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AYP.$meta.methods=[{name:"",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getBlockType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:UK,callable:null}];Bhd.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getBlockType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:UK,callable:null}];APf.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"updateTick",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"canPlaceBlockOn",modifiers:0,accessLevel:2,parameterTypes:[BH],returnType:$rt_booleancls(),callable:null},{name:"canBlockStay",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"canGrow",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_booleancls()],returnType
+:$rt_booleancls(),callable:null},{name:"canUseBonemeal",modifiers:0,accessLevel:3,parameterTypes:[AJi,A93,BV,Vi],returnType:$rt_booleancls(),callable:null}];Bek.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"isDouble",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null}];BiG.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"isDouble",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null}];ANd.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"onBlockDestroyedByPlayer",modifiers:0,accessLevel:3,parameterTypes:[AJi,
+BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"explode",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,CO],returnType:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"canDropFromExplosion",modifiers:0,accessLevel:3,parameterTypes:[BjM],returnType:$rt_booleancls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes
+:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];Bnc.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"quantityDropped",modifiers:0,accessLevel
+:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null}];Bl0.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null}];AB7.$meta.methods
+=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"canPlaceOn",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable
+:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"canPlaceAt",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:
+null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"onNeighborChangeInternal",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"checkForDrop",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"collisionRayTrace",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,LL,LL],returnType:PW,callable:null},{name:"randomDisplayTick",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers
+:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];Oj.$meta.methods=[{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"init",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"setFireInfo",modifiers:0,accessLevel:3,parameterTypes:[BH,$rt_intcls(),$rt_intcls()],returnType:$rt_voidcls(),callable
+:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"tickRate",modifiers:0,accessLevel:3,parameterTypes:[AJi],returnType
+:$rt_intcls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"canDie",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"requiresUpdates",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getFlammability",modifiers:0,accessLevel:1,parameterTypes:[BH],returnType:$rt_intcls(),callable:null},{name:"getEncouragement",modifiers:0,accessLevel
+:1,parameterTypes:[BH],returnType:$rt_intcls(),callable:null},{name:"catchOnFire",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,$rt_intcls(),A93,$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"canNeighborCatchFire",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"getNeighborEncouragement",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"isCollidable",modifiers:0,accessLevel:3,parameterTypes:[],returnType
+:$rt_booleancls(),callable:null},{name:"canCatchFire",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_booleancls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"randomDisplayTick",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers
+:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];A6H.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:
+null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"dropBlockAsItemWithChance",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_floatcls(),$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getRenderType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"getBlockLayer",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null}];GE.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},
+{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"setBaseCollisionBounds",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"isBlockStairs",modifiers:512,accessLevel:3,parameterTypes:[BH],returnType:$rt_booleancls(),callable:null},{name:"isSameStair",modifiers:512,accessLevel:3,parameterTypes:[AKK,
+BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"func_176307_f",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_intcls(),callable:null},{name:"func_176305_g",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_intcls(),callable:null},{name:"func_176306_h",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_booleancls(),callable:null},{name:"func_176304_i",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_booleancls(),callable:null},{name:"addCollisionBoxesToList",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,AAQ,Io,DN],returnType:$rt_voidcls(),callable:null},{name:"randomDisplayTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"onBlockClicked",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Dg],returnType:$rt_voidcls(),callable:null},{name:"onBlockDestroyedByPlayer",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getMixedBrightnessForBlock",modifiers:0,accessLevel
+:3,parameterTypes:[AKK,BV],returnType:$rt_intcls(),callable:null},{name:"getExplosionResistance",modifiers:0,accessLevel:3,parameterTypes:[DN],returnType:$rt_floatcls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"tickRate",modifiers:0,accessLevel:3,parameterTypes:[AJi],returnType:$rt_intcls(),callable:null},{name:"getSelectedBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:AAQ,callable:null},{name:"modifyAcceleration",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,DN,LL],returnType:LL,callable:null},{name:"isCollidable",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"canCollideCheck",modifiers:0,accessLevel:3,parameterTypes:[Vi,$rt_booleancls()],returnType:$rt_booleancls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType
+:$rt_voidcls(),callable:null},{name:"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"onEntityCollidedWithBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,DN],returnType:$rt_voidcls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType
+:$rt_booleancls(),callable:null},{name:"onBlockDestroyedByExplosion",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,BjM],returnType:$rt_voidcls(),callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"collisionRayTrace",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,LL,LL],returnType
+:PW,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType
+:$rt_voidcls(),callable:null}];P5.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getRenderType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers
+:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"onBlockPlacedBy",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,CO,P],returnType:$rt_voidcls(),callable:null},{name:"checkForSurroundingChests",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:Vi,callable:null},{name:"correctFacing",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:Vi,callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"isDoubleChest",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable
+:null},{name:"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"getLockableContainer",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:AAG,callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable:null},
+{name:"canProvidePower",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getWeakPower",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable:null},{name:"getStrongPower",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable:null},{name:"isBlocked",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"isBelowSolidBlock",modifiers:0,accessLevel:1,parameterTypes
+:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"isOcelotSittingOnChest",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"hasComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType
+:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];S3.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes
+:[],returnType:$rt_voidcls(),callable:null},{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"getAttachPosition",modifiers:0,accessLevel:1,parameterTypes:[AKK,BV,EM],returnType:NF,callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel
+:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"colorMultiplier",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"updateSurroundingRedstone",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:Vi,callable:null},{name:"calculateCurrentChanges",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,BV,Vi],returnType
+:Vi,callable:null},{name:"notifyWireNeighborsOfStateChange",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_voidcls(),callable:null},{name:"getMaxCurrentStrength",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getStrongPower",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable:null},
+{name:"getWeakPower",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable:null},{name:"func_176339_d",modifiers:0,accessLevel:1,parameterTypes:[AKK,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"canConnectUpwardsTo",modifiers:512,accessLevel:2,parameterTypes:[AKK,BV],returnType:$rt_booleancls(),callable:null},{name:"canConnectUpwardsTo",modifiers:512,accessLevel:2,parameterTypes:[Vi],returnType:$rt_booleancls(),callable:null},{name:"canConnectTo",modifiers:512,accessLevel
+:2,parameterTypes:[Vi,EM],returnType:$rt_booleancls(),callable:null},{name:"canProvidePower",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"colorMultiplier",modifiers:0,accessLevel:1,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"randomDisplayTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},
+{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];Bh_.$meta.methods
+=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null}];T0.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"canPlaceBlockOn",modifiers:0,accessLevel:2,parameterTypes:[BH],returnType:$rt_booleancls(),callable:null},{name:"updateTick",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"grow",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getGrowthChance",modifiers:512,accessLevel:2,parameterTypes:[BH,AJi,BV],returnType:$rt_floatcls(),callable:null},{name:"canBlockStay",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"getSeed",modifiers:0,accessLevel:2,parameterTypes:[],returnType:BT,callable
+:null},{name:"getCrop",modifiers:0,accessLevel:2,parameterTypes:[],returnType:BT,callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"canGrow",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_booleancls()],returnType:$rt_booleancls(),callable:null},{name:"canUseBonemeal",modifiers:0,accessLevel:3,parameterTypes:[AJi,A93,BV,Vi],returnType
+:$rt_booleancls(),callable:null},{name:"grow",modifiers:0,accessLevel:3,parameterTypes:[AJi,A93,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes
+:[],returnType:$rt_voidcls(),callable:null}];AOa.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"updateTick",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"onFallenUpon",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,DN,$rt_floatcls()],returnType:$rt_voidcls(),callable:null},{name:"hasCrops",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"hasWater",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,
+BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"shouldSideBeRendered",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers
+:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AFM.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[$rt_booleancls()],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable
+:null},{name:"randomDisplayTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"setState",modifiers:512,accessLevel:3,parameterTypes:[$rt_booleancls(),AJi,BV],returnType:$rt_voidcls(),callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType
+:EE,callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"onBlockPlacedBy",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,CO,P],returnType:$rt_voidcls(),callable:null},{name:"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"hasComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable
+:null},{name:"getComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"getRenderType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"getStateForEntityRender",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Vi,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType
+:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AMD.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes
+:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];Ll.$meta.methods=[{name:"",modifiers
+:0,accessLevel:2,parameterTypes:[DQ],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getLocalizedName",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isPassable",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getSelectedBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:AAQ,callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"setBoundBasedOnMeta",modifiers:0,accessLevel:1,parameterTypes:[$rt_intcls()],returnType
+:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"toggleDoor",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,$rt_booleancls()],returnType:$rt_voidcls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes
+:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"collisionRayTrace",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,LL,LL],returnType:PW,callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"getMobilityFlag",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"combineMetadata",modifiers:512,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_intcls(),callable:null},{name:"getItem",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"getItem",modifiers:0,accessLevel:1,parameterTypes:[],returnType:BT,callable:null},{name:"onBlockHarvested",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg],returnType:$rt_voidcls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"getStateFromMeta",modifiers
+:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"removeHalfBit",modifiers:512,accessLevel:2,parameterTypes:[$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"isOpen",modifiers:512,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_booleancls(),callable:null},{name:"getFacing",modifiers:512,accessLevel:3,parameterTypes:[AKK,BV],returnType:EM,callable:null},
+{name:"getFacing",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:EM,callable:null},{name:"isOpen",modifiers:512,accessLevel:2,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isTop",modifiers:512,accessLevel:2,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"isHingeLeft",modifiers:512,accessLevel:2,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes
+:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];ASx.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"getSelectedBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:AAQ,callable:null},{name:"setBlockBoundsBasedOnState",modifiers
+:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),
+$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"canBlockStay",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name
+:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];ASF.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable
+:null},{name:"onNeighborChangedInternal",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"getShapeProperty",modifiers:0,accessLevel:3,parameterTypes:[],returnType:B1,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes
+:[],returnType:Ck,callable:null}];AI5.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},
+{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AGn.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable
+:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"canPlaceBlockOnSide",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes
+:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"func_181090_a",modifiers:512,accessLevel:2,parameterTypes:[AJi,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"getMetadataForFacing",modifiers:512,accessLevel:3,parameterTypes:[EM],returnType:$rt_intcls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes
+:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"func_181091_e",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"breakBlock",modifiers:0,accessLevel
+:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getWeakPower",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable:null},{name:"getStrongPower",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable:null},{name:"canProvidePower",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable
+:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AIm.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[DQ,T3],returnType:$rt_voidcls(),callable:null},{name:"getRedstoneStrength",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType
+:$rt_intcls(),callable:null},{name:"setRedstoneStrength",modifiers:0,accessLevel:2,parameterTypes:[Vi,$rt_intcls()],returnType:Vi,callable:null},{name:"computeRedstoneStrength",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers
+:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AMl.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_booleancls()],returnType:$rt_voidcls(),callable:null},{name:"tickRate",modifiers:0,accessLevel:3,parameterTypes:[AJi],returnType:$rt_intcls(),callable:null},{name:"onBlockClicked",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Dg],returnType:$rt_voidcls(),callable
+:null},{name:"onEntityCollidedWithBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,DN],returnType:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"activate",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_voidcls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable
+:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"quantityDroppedWithBonus",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),A93],returnType:$rt_intcls(),callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"dropBlockAsItemWithChance",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_floatcls(),$rt_intcls()],returnType:$rt_voidcls(),callable
+:null},{name:"randomDisplayTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"spawnParticles",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_voidcls(),callable:null},{name:"createStackedBlock",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:P,callable:null}];AEP.$meta.methods=[{name:"isBurnedOut",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,$rt_booleancls()],returnType:$rt_booleancls(),callable:null},{name:"",modifiers
+:0,accessLevel:2,parameterTypes:[$rt_booleancls()],returnType:$rt_voidcls(),callable:null},{name:"tickRate",modifiers:0,accessLevel:3,parameterTypes:[AJi],returnType:$rt_intcls(),callable:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getWeakPower",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable
+:null},{name:"shouldBeOff",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"randomTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"getStrongPower",modifiers
+:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"canProvidePower",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"randomDisplayTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:
+BT,callable:null},{name:"isAssociatedBlock",modifiers:0,accessLevel:3,parameterTypes:[BH],returnType:$rt_booleancls(),callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AVq.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AA6.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"isPassable",modifiers:0,accessLevel
+:3,parameterTypes:[AKK,BV],returnType:$rt_booleancls(),callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"setBlockBoundsForItemRender",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable
+:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"getBoundsForLayers",modifiers:0,accessLevel:2,parameterTypes:[$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"checkAndDropBlock",modifiers
+:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"harvestBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,Dg,BV,Vi,EE],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType
+:$rt_voidcls(),callable:null},{name:"shouldSideBeRendered",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"isReplaceable",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers
+:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AZM.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"harvestBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,Dg,BV,Vi,EE],returnType:$rt_voidcls(),callable:null},{name:"quantityDropped",modifiers
+:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"getMobilityFlag",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null}];Bhe.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType
+:BT,callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null}];APd.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"getCollisionBoundingBox",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"getSelectedBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:AAQ,callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},
+{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"canBlockStay",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"onEntityCollidedWithBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,DN],returnType:$rt_voidcls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel
+:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];A95.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers
+:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null}];ATs.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType
+:$rt_booleancls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"checkForDrop",modifiers:4,accessLevel:2,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"canBlockStay",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"getItemDropped",modifiers
+:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"colorMultiplier",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,$rt_intcls()],returnType:$rt_intcls(),callable:
+null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable
+:null}];AJt.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"insertRecord",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,P],returnType:$rt_voidcls(),callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType
+:EE,callable:null},{name:"hasComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"getRenderType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers
+:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];Iv.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[DQ],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:3,parameterTypes:[DQ,Eg],returnType:$rt_voidcls(),callable:null},{name:"addCollisionBoxesToList",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,AAQ,Io,DN],returnType:$rt_voidcls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isPassable",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType
+:$rt_booleancls(),callable:null},{name:"canConnectTo",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_booleancls(),callable:null},{name:"shouldSideBeRendered",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType
+:$rt_intcls(),callable:null},{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];Iq.$meta.methods=[{name:"values",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_arraycls(Iq),callable:null},{name:"valueOf",modifiers:512,accessLevel:3,parameterTypes
+:[By],returnType:Iq,callable:null},{name:"",modifiers:0,accessLevel:1,parameterTypes:[By,$rt_intcls(),$rt_intcls(),By,Eg],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:1,parameterTypes:[By,$rt_intcls(),$rt_intcls(),By,By,Eg],returnType:$rt_voidcls(),callable:null},{name:"getMetadata",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"func_181070_c",modifiers:0,accessLevel:3,parameterTypes:[],returnType:Eg,callable:null},{name:"toString",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"byMetadata",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Iq,callable:null},{name:"getName",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"getUnlocalizedName",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AGr.$meta.methods=[{name:"",modifiers:0,accessLevel
+:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"canDispenserPlace",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"trySpawnGolem",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_voidcls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable
+:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"getSnowmanBasePattern",modifiers
+:0,accessLevel:2,parameterTypes:[],returnType:Cxp,callable:null},{name:"getSnowmanPattern",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Cxp,callable:null},{name:"getGolemBasePattern",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Cxp,callable:null},{name:"getGolemPattern",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Cxp,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];A3T.$meta.methods=[{name:"",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null}];A6g.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"onEntityCollidedWithBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,DN],returnType:$rt_voidcls(),callable
+:null}];Bjn.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[DQ],returnType:$rt_voidcls(),callable:null},{name:"quantityDroppedWithBonus",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),A93],returnType:$rt_intcls(),callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getMapColor",modifiers
+:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null}];APX.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:
+$rt_voidcls(),callable:null},{name:"getMetaForAxis",modifiers:512,accessLevel:3,parameterTypes:[KO],returnType:$rt_intcls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"func_176548_d",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"shouldSideBeRendered",modifiers
+:0,accessLevel:3,parameterTypes:[AKK,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"onEntityCollidedWithBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,DN],returnType:$rt_voidcls(),callable:null},{name:"randomDisplayTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType
+:$rt_voidcls(),callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"func_181089_f",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType
+:A.PD,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];ALE.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"setBlockBoundsForItemRender",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getCollisionBoundingBox",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"getSelectedBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:AAQ,callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),
+$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"onBlockClicked",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Dg],returnType:$rt_voidcls(),callable:null},{name:"eatCake",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi,Dg],returnType:$rt_voidcls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable
+:null},{name:"canBlockStay",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType
+:P8,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"getComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"hasComparatorInputOverride",modifiers:0,accessLevel
+:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];Zv.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[$rt_booleancls()],returnType:$rt_voidcls(),callable:null},{name:"getLocalizedName",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"onBlockActivated",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"getDelay",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getPoweredState",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:Vi,callable:null},{name:"getUnpoweredState",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:Vi,callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,
+$rt_intcls()],returnType:BT,callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"isLocked",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"canPowerSide",modifiers:0,accessLevel:2,parameterTypes:[BH],returnType:$rt_booleancls(),callable:null},{name:"randomDisplayTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"breakBlock",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AJf.$meta.methods
+=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[DQ],returnType:$rt_voidcls(),callable:null},{name:"damageDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},
+{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"canSilkHarvest",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType
+:$rt_voidcls(),callable:null},{name:"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];WM.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes
+:[DQ],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isPassable",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_booleancls(),callable:null},{name:"getSelectedBoundingBox",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:AAQ,callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"setBlockBoundsForItemRender",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"setBounds",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_voidcls(),callable
+:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"collisionRayTrace",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,LL,LL],returnType:PW,callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"canPlaceBlockOnSide",modifiers:0,accessLevel:3,parameterTypes
+:[AJi,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"getFacing",modifiers:512,accessLevel:2,parameterTypes:[$rt_intcls()],returnType:EM,callable:null},{name:"getMetaForFacing",modifiers:512,accessLevel:2,parameterTypes:[EM],returnType:$rt_intcls(),callable:null},{name:"isValidSupportBlock",modifiers:512,accessLevel:1,parameterTypes:[BH],returnType:$rt_booleancls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getStateFromMeta",modifiers
+:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];ANV.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:
+"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"canContainSilverfish",modifiers:512,accessLevel:3,parameterTypes:[Vi],returnType:$rt_booleancls(),callable:null},{name:"createStackedBlock",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:P,callable:null},{name:"getDamageValue",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType
+:$rt_intcls(),callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null}];SH.$meta.methods=[{name:"",modifiers:0,accessLevel
+:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"damageDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers
+:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AFI.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[DQ,Eg,BH],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},
+{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),
+$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null}];Nu.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[DQ,$rt_booleancls()],returnType:$rt_voidcls(),callable:null},
+{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"shouldSideBeRendered",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,
+EM],returnType:$rt_booleancls(),callable:null},{name:"addCollisionBoxesToList",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,AAQ,Io,DN],returnType:$rt_voidcls(),callable:null},{name:"setBlockBoundsForItemRender",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"canPaneConnectToBlock",modifiers:4,accessLevel:3,parameterTypes:[BH],returnType
+:$rt_booleancls(),callable:null},{name:"canSilkHarvest",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"eaglerShadersShouldRenderGlassHighlights",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers
+:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];Bgi.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name
+:"quantityDroppedWithBonus",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls(),A93],returnType:$rt_intcls(),callable:null}];AAj.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[BH],returnType:$rt_voidcls(),callable:null},{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"canPlaceBlockOn",modifiers:0,accessLevel:2,parameterTypes:[BH],returnType:$rt_booleancls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes
+:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"growStem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getRenderColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"colorMultiplier",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"setBlockBoundsForItemRender",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable
+:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"getSeedItem",modifiers:0,accessLevel:2,parameterTypes:[],returnType:BT,callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"canGrow",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_booleancls()],returnType
+:$rt_booleancls(),callable:null},{name:"canUseBonemeal",modifiers:0,accessLevel:3,parameterTypes:[AJi,A93,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"grow",modifiers:0,accessLevel:3,parameterTypes:[AJi,A93,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers
+:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];RS.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"setBlockBoundsForItemRender",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name
+:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isReplaceable",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes
+:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"canPlaceBlockOnSide",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"canPlaceOn",modifiers:0,accessLevel:1,parameterTypes:[BH],returnType:$rt_booleancls(),callable:null},{name:"recheckGrownSides",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"getBlockColor",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"getRenderColor",modifiers
+:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"colorMultiplier",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"quantityDropped",modifiers
+:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"getPropertyFor",modifiers
+:512,accessLevel:3,parameterTypes:[EM],returnType:AEH,callable:null},{name:"getNumGrownFaces",modifiers:512,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];KT.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[Iq],returnType:$rt_voidcls(),callable:null},{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name
+:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:$rt_booleancls(),callable:null},{name:"isPassable",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_booleancls(),callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"shouldSideBeRendered",modifiers
+:0,accessLevel:3,parameterTypes:[AKK,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AKv.$meta.methods
+=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"randomDisplayTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType
+:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];Bk2.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"addCollisionBoxesToList",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,AAQ,Io,DN],returnType:$rt_voidcls(),callable:null},{name:"getCollisionBoundingBox",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"getBlockColor",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"getRenderColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"colorMultiplier",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"canPlaceBlockOn",modifiers:0,accessLevel:2,parameterTypes:[BH],returnType:$rt_booleancls(),callable
+:null},{name:"canBlockStay",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null}];A9U.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null}];AUF.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes
+:[],returnType:$rt_voidcls(),callable:null},{name:"canPlaceBlockOn",modifiers:0,accessLevel:2,parameterTypes:[BH],returnType:$rt_booleancls(),callable:null},{name:"canBlockStay",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"quantityDropped",modifiers
+:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers
+:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];A_Z.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"randomDisplayTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable
+:null},{name:"getRenderType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"onBlockPlacedBy",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,CO,P],returnType:$rt_voidcls(),callable
+:null}];ANM.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getLocalizedName",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getRenderType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType
+:EE,callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"addCollisionBoxesToList",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,AAQ,Io,DN],returnType:$rt_voidcls(),callable:null},{name:"setBlockBoundsForItemRender",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType
+:$rt_booleancls(),callable:null},{name:"onBlockPlacedBy",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,CO,P],returnType:$rt_voidcls(),callable:null},{name:"randomDisplayTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getItem",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"hasComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable
+:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AJj.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"addCollisionBoxesToList",modifiers:0,accessLevel:3,parameterTypes:[AJi,
+BV,Vi,AAQ,Io,DN],returnType:$rt_voidcls(),callable:null},{name:"setBlockBoundsForItemRender",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType
+:$rt_booleancls(),callable:null},{name:"setWaterLevel",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"fillWithRain",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"hasComparatorInputOverride",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable
+:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];Bm4.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[DQ],returnType:$rt_voidcls(),callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"shouldSideBeRendered",modifiers:
+0,accessLevel:3,parameterTypes:[AKK,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"addCollisionBoxesToList",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,AAQ,Io,DN],returnType:$rt_voidcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType
+:$rt_intcls(),callable:null},{name:"randomDisplayTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null}];AGI.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:$rt_booleancls(),callable:null},{name:"setBlockBoundsForItemRender",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"addCollisionBoxesToList",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,AAQ,Io,DN],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),
+$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"hasComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable
+:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];Boq.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:
+[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"checkFall",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"onBlockClicked",modifiers:0,accessLevel:3,parameterTypes
+:[AJi,BV,Dg],returnType:$rt_voidcls(),callable:null},{name:"teleport",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType:$rt_voidcls(),callable:null},{name:"tickRate",modifiers:0,accessLevel:3,parameterTypes:[AJi],returnType:$rt_intcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"shouldSideBeRendered",modifiers
+:0,accessLevel:3,parameterTypes:[AKK,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null}];AUy.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_booleancls()],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable
+:null},{name:"createStackedBlock",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:P,callable:null}];Bjo.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"isDouble",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null}];A0z.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"isDouble",modifiers:0,accessLevel:3,parameterTypes:[],returnType
+:$rt_booleancls(),callable:null}];AKw.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"canBlockStay",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isOpaqueCube",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"getSelectedBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:AAQ,callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"onBlockPlacedBy",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,CO,P],returnType
+:$rt_voidcls(),callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"dropBlock",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"dropBlockAsItemWithChance",modifiers:0,accessLevel:3,parameterTypes:[AJi,
+BV,Vi,$rt_floatcls(),$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"getDamageValue",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"canGrow",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_booleancls()],returnType:$rt_booleancls(),callable:null},{name:"canUseBonemeal",modifiers:0,accessLevel:3,parameterTypes:[AJi,A93,BV,Vi],returnType:$rt_booleancls(),callable
+:null},{name:"grow",modifiers:0,accessLevel:3,parameterTypes:[AJi,A93,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:
+Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];ZS.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getRenderType",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:$rt_intcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"canSilkHarvest",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType
+:Vi,callable:null},{name:"onBlockPlacedBy",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,CO,P],returnType:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable:null},{name:"randomDisplayTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType
+:$rt_voidcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];VH.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:$rt_voidcls(),callable:null},{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"canPlaceBlockOnSide",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"onBlockPlacedBy",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,CO,P],returnType:$rt_voidcls(),callable:null},{name:"onNeighborBlockChange",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"func_176260_a",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_booleancls(),$rt_booleancls(),$rt_intcls(),Vi],returnType:$rt_voidcls(),callable:null},{name:"randomTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"func_180694_a",modifiers
+:0,accessLevel:1,parameterTypes:[AJi,BV,$rt_booleancls(),$rt_booleancls(),$rt_booleancls(),$rt_booleancls()],returnType:$rt_voidcls(),callable:null},{name:"func_176262_b",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,EM],returnType:$rt_voidcls(),callable:null},{name:"checkForDrop",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:
+"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getWeakPower",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable:null},{name:"getStrongPower",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable:null},{name:"canProvidePower",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes
+:[],returnType:P8,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];Nw.$meta.methods=[{name:"",modifiers:0,accessLevel:
+3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getBlockLayer",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable
+:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"notifyHook",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"isConnectedTo",modifiers:512,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_booleancls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel
+:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];ATh.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"createNewTileEntity",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable:null},{name:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"tickRate",modifiers:0,accessLevel:3,parameterTypes:[AJi],returnType:$rt_intcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"hasComparatorInputOverride",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"onBlockPlacedBy",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,CO,P],returnType:$rt_voidcls(),callable:null},{name:"quantityDropped",modifiers:0,accessLevel:3,parameterTypes:[A93],returnType:$rt_intcls(),callable:null},{name:"getRenderType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable
+:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"",modifiers
+:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];A2B.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"isOpaqueCube",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getRenderType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"onBlockPlacedBy",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,CO,P],returnType:$rt_voidcls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable
+:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null}];OL.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[BH],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getLocalizedName",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable
+:null},{name:"isPassable",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_booleancls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"canConnectTo",modifiers:0,accessLevel:
+3,parameterTypes:[AKK,BV],returnType:$rt_booleancls(),callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"damageDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"shouldSideBeRendered",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable
+:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AEf.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType
+:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getLocalizedName",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"setBlockBoundsForItemRender",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getRenderType",modifiers:0,accessLevel:
+3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"colorMultiplier",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,$rt_intcls()],returnType:$rt_intcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"canNotContain",modifiers:0,accessLevel:1,parameterTypes
+:[BH,$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"getDamageValue",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"isFlowerPot",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"canPlaceBlockAt",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_booleancls(),callable:null},{name:"onNeighborBlockChange",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"onBlockHarvested",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getTileEntity",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV],returnType
+:Sh,callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getActualState",modifiers:0,accessLevel:3,parameterTypes:[Vi,AKK,BV],returnType:Vi,callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:
+[],returnType:P8,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];A4g.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getSeed",modifiers:0,accessLevel:2,parameterTypes:[],returnType:BT,callable:null},{name:"getCrop",modifiers:0,accessLevel:2,parameterTypes:[],returnType:BT,callable:null}];A3R.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType
+:$rt_voidcls(),callable:null},{name:"getSeed",modifiers:0,accessLevel:2,parameterTypes:[],returnType:BT,callable:null},{name:"getCrop",modifiers:0,accessLevel:2,parameterTypes:[],returnType:BT,callable:null}];AXB.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];Sp.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getLocalizedName",modifiers:0,accessLevel:3,parameterTypes:[],returnType
+:By,callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"getCollisionBoundingBox",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:AAQ,callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel
+:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"getDamageValue",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"dropBlockAsItemWithChance",modifiers:0,accessLevel:3,parameterTypes
+:[AJi,BV,Vi,$rt_floatcls(),$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"onBlockHarvested",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg],returnType:$rt_voidcls(),callable:null},{name:"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"canDispenserPlace",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,P],returnType
+:$rt_booleancls(),callable:null},{name:"checkWitherSpawn",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,UM],returnType:$rt_voidcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"getWitherBasePattern",modifiers:0,accessLevel
+:2,parameterTypes:[],returnType:Cxp,callable:null},{name:"getWitherPattern",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Cxp,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AHl.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel
+:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"damageDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes
+:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"onStartFalling",modifiers:0,accessLevel:2,parameterTypes:[Z4],returnType:$rt_voidcls(),callable:null},{name:"onEndFalling",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_voidcls(),callable:null},{name:"shouldSideBeRendered",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"getStateForEntityRender",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Vi,callable:null},{name:"getStateFromMeta",modifiers
+:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes
+:[],returnType:$rt_voidcls(),callable:null}];AF1.$meta.methods=[{name:"",modifiers:0,accessLevel:2,parameterTypes:[DQ,$rt_intcls()],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:0,accessLevel:2,parameterTypes:[DQ,$rt_intcls(),Eg],returnType:$rt_voidcls(),callable:null},{name:"computeRedstoneStrength",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"getRedstoneStrength",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:$rt_intcls(),callable
+:null},{name:"setRedstoneStrength",modifiers:0,accessLevel:2,parameterTypes:[Vi,$rt_intcls()],returnType:Vi,callable:null},{name:"tickRate",modifiers:0,accessLevel:3,parameterTypes:[AJi],returnType:$rt_intcls(),callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:
+[],returnType:Ck,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AA7.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_booleancls()],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getLocalizedName",modifiers:0,accessLevel:3,parameterTypes:[],returnType:By,callable:null},{name:"getItemDropped",modifiers:0,accessLevel
+:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"getDelay",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"getPoweredState",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:Vi,callable:null},{name:"getUnpoweredState",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:Vi,callable:null},{name:"isPowered",modifiers:0,accessLevel:2,parameterTypes
+:[Vi],returnType:$rt_booleancls(),callable:null},{name:"getActiveSignal",modifiers:0,accessLevel:2,parameterTypes:[AKK,BV,Vi],returnType:$rt_intcls(),callable:null},{name:"calculateOutput",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:$rt_intcls(),callable:null},{name:"shouldBePowered",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV,Vi],returnType:$rt_booleancls(),callable:null},{name:"calculateInputStrength",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV,Vi],returnType:$rt_intcls(),callable
+:null},{name:"findItemFrame",modifiers:0,accessLevel:1,parameterTypes:[AJi,EM,BV],returnType:LY,callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"updateState",modifiers:0,accessLevel:2,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"onStateChange",modifiers:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name
+:"updateTick",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,A93],returnType:$rt_voidcls(),callable:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"onBlockEventReceived",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,$rt_intcls(),$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"createNewTileEntity",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),
+$rt_intcls(),CO],returnType:Vi,callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];AGl.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[$rt_booleancls()],returnType:$rt_voidcls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"getWeakPower",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable
+:null},{name:"updatePower",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"getItemDropped",modifiers:0,accessLevel:3,parameterTypes:[Vi,A93,$rt_intcls()],returnType:BT,callable:null},{name:"getItem",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:BT,callable:null},{name:"isFullCube",modifiers
+:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getRenderType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"canProvidePower",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable
+:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"",modifiers:512,accessLevel:0,parameterTypes:[],returnType:
+$rt_voidcls(),callable:null}];A9f.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[DQ,Eg],returnType:$rt_voidcls(),callable:null},{name:"canProvidePower",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getWeakPower",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,Vi,EM],returnType:$rt_intcls(),callable:null}];VT.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"setBlockBoundsBasedOnState",modifiers
+:0,accessLevel:3,parameterTypes:[AKK,BV],returnType:$rt_voidcls(),callable:null},{name:"addCollisionBoxesToList",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,AAQ,Io,DN],returnType:$rt_voidcls(),callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable:null},{name:"onBlockPlacedBy",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,CO,P],returnType:$rt_voidcls(),callable:null},{name:"onBlockAdded",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"onBlockActivated",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,Dg,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls()],returnType:$rt_booleancls(),callable:null},{name:"onNeighborBlockChange",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi,BH],returnType:$rt_voidcls(),callable:null},{name:"updateState",modifiers
+:0,accessLevel:1,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"breakBlock",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,Vi],returnType:$rt_voidcls(),callable:null},{name:"getRenderType",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_intcls(),callable:null},{name:"isFullCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"isOpaqueCube",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},
+{name:"shouldSideBeRendered",modifiers:0,accessLevel:3,parameterTypes:[AKK,BV,EM],returnType:$rt_booleancls(),callable:null},{name:"getFacing",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:EM,callable:null},{name:"isEnabled",modifiers:512,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:$rt_booleancls(),callable:null},{name:"hasComparatorInputOverride",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_booleancls(),callable:null},{name:"getComparatorInputOverride",modifiers
+:0,accessLevel:3,parameterTypes:[AJi,BV],returnType:$rt_intcls(),callable:null},{name:"getBlockLayer",modifiers:0,accessLevel:3,parameterTypes:[],returnType:P8,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null},{name:"",modifiers
+:512,accessLevel:0,parameterTypes:[],returnType:$rt_voidcls(),callable:null}];ALr.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"bootstrapStates",modifiers:512,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"onBlockPlaced",modifiers:0,accessLevel:3,parameterTypes:[AJi,BV,EM,$rt_floatcls(),$rt_floatcls(),$rt_floatcls(),$rt_intcls(),CO],returnType:Vi,callable:null},{name:"damageDropped",modifiers:0,accessLevel
+:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createStackedBlock",modifiers:0,accessLevel:2,parameterTypes:[Vi],returnType:P,callable:null},{name:"getSubBlocks",modifiers:0,accessLevel:3,parameterTypes:[BT,Ej,Io],returnType:$rt_voidcls(),callable:null},{name:"getMapColor",modifiers:0,accessLevel:3,parameterTypes:[Vi],returnType:Eg,callable:null},{name:"getStateFromMeta",modifiers:0,accessLevel:3,parameterTypes:[$rt_intcls()],returnType:Vi,callable:null},{name:"getMetaFromState",modifiers
+:0,accessLevel:3,parameterTypes:[Vi],returnType:$rt_intcls(),callable:null},{name:"createBlockState",modifiers:0,accessLevel:2,parameterTypes:[],returnType:Ck,callable:null}];A20.$meta.methods=[{name:"",modifiers:0,accessLevel:3,parameterTypes:[],returnType:$rt_voidcls(),callable:null},{name:"getBehavior",modifiers:0,accessLevel:2,parameterTypes:[P],returnType:AN7,callable:null},{name:"createNewTileEntity",modifiers:0,accessLevel:3,parameterTypes:[AJi,$rt_intcls()],returnType:EE,callable:null},{name:"dispense",modifiers
+:0,accessLevel:2,parameterTypes:[AJi,BV],returnType:$rt_voidcls(),callable:null}];ALt.$meta.methods=[{name:"