Update to EaglercraftX 1.8 u34
This commit is contained in:
parent
5cd9fb6ba7
commit
b679d4c470
Binary file not shown.
Binary file not shown.
|
@ -33,8 +33,8 @@ out vec4 v_color4f;
|
||||||
|
|
||||||
uniform mat4 u_matrixTransform;
|
uniform mat4 u_matrixTransform;
|
||||||
uniform vec3 u_texCoordSize2f_particleSize1f;
|
uniform vec3 u_texCoordSize2f_particleSize1f;
|
||||||
uniform vec4 u_transformParam_1_2_3_4_f;
|
uniform vec3 u_transformParam_1_2_5_f;
|
||||||
uniform float u_transformParam_5_f;
|
uniform vec2 u_transformParam_3_4_f;
|
||||||
uniform vec4 u_color4f;
|
uniform vec4 u_color4f;
|
||||||
|
|
||||||
uniform sampler2D u_lightmapTexture;
|
uniform sampler2D u_lightmapTexture;
|
||||||
|
@ -51,11 +51,8 @@ void main() {
|
||||||
|
|
||||||
vec3 pos3f = p_position3f;
|
vec3 pos3f = p_position3f;
|
||||||
vec2 spos2f = a_position2f * particleSize;
|
vec2 spos2f = a_position2f * particleSize;
|
||||||
pos3f.x += u_transformParam_1_2_3_4_f.x * spos2f.x;
|
pos3f += u_transformParam_1_2_5_f * spos2f.xyy;
|
||||||
pos3f.x += u_transformParam_1_2_3_4_f.w * spos2f.y;
|
pos3f.zx += u_transformParam_3_4_f * spos2f;
|
||||||
pos3f.y += u_transformParam_1_2_3_4_f.y * spos2f.y;
|
|
||||||
pos3f.z += u_transformParam_1_2_3_4_f.z * spos2f.x;
|
|
||||||
pos3f.z += u_transformParam_5_f * spos2f.y;
|
|
||||||
|
|
||||||
gl_Position = u_matrixTransform * vec4(pos3f, 1.0);
|
gl_Position = u_matrixTransform * vec4(pos3f, 1.0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,8 +43,8 @@ uniform mat4 u_matrixTransform;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform vec3 u_texCoordSize2f_particleSize1f;
|
uniform vec3 u_texCoordSize2f_particleSize1f;
|
||||||
uniform vec4 u_transformParam_1_2_3_4_f;
|
uniform vec3 u_transformParam_1_2_5_f;
|
||||||
uniform float u_transformParam_5_f;
|
uniform vec2 u_transformParam_3_4_f;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
v_color4f = p_color4f.bgra;
|
v_color4f = p_color4f.bgra;
|
||||||
|
@ -59,11 +59,8 @@ void main() {
|
||||||
|
|
||||||
vec3 pos3f = p_position3f;
|
vec3 pos3f = p_position3f;
|
||||||
vec2 spos2f = a_position2f * particleSize;
|
vec2 spos2f = a_position2f * particleSize;
|
||||||
pos3f.x += u_transformParam_1_2_3_4_f.x * spos2f.x;
|
pos3f += u_transformParam_1_2_5_f * spos2f.xyy;
|
||||||
pos3f.x += u_transformParam_1_2_3_4_f.w * spos2f.y;
|
pos3f.zx += u_transformParam_3_4_f * spos2f;
|
||||||
pos3f.y += u_transformParam_1_2_3_4_f.y * spos2f.y;
|
|
||||||
pos3f.z += u_transformParam_1_2_3_4_f.z * spos2f.x;
|
|
||||||
pos3f.z += u_transformParam_5_f * spos2f.y;
|
|
||||||
|
|
||||||
#ifdef COMPILE_GBUFFER_VSH
|
#ifdef COMPILE_GBUFFER_VSH
|
||||||
gl_Position = u_matrixTransform * vec4(pos3f, 1.0);
|
gl_Position = u_matrixTransform * vec4(pos3f, 1.0);
|
||||||
|
|
|
@ -7,3 +7,4 @@ 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:sea_lantern,0,0.5530,0.6468,1.0000,10.0,
|
||||||
minecraft:lava_bucket,0,1.0000,0.4461,0.1054,6.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
|
minecraft:nether_star,0,0.5711,0.6611,1.0000,6.0
|
||||||
|
minecraft:ender_eye,0,0.1990,0.7750,0.4130,4.0
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "§eHigh Performance PBR",
|
"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",
|
"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.1.0",
|
"vers": "1.2.0",
|
||||||
"author": "lax1dude",
|
"author": "lax1dude",
|
||||||
"api_vers": 1,
|
"api_vers": 1,
|
||||||
"features": [
|
"features": [
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
#line 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024 lax1dude. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
precision lowp int;
|
||||||
|
precision mediump float;
|
||||||
|
precision mediump sampler2D;
|
||||||
|
|
||||||
|
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_inputTexture;
|
||||||
|
uniform sampler2D u_lightmapTexture;
|
||||||
|
|
||||||
|
uniform mat4 u_inverseViewMatrix4f;
|
||||||
|
|
||||||
|
layout(std140) uniform u_chunkLightingData {
|
||||||
|
mediump int u_dynamicLightCount1i;
|
||||||
|
mediump int _paddingA_;
|
||||||
|
mediump int _paddingB_;
|
||||||
|
mediump int _paddingC_;
|
||||||
|
mediump vec4 u_dynamicLightArray[12];
|
||||||
|
};
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec4 color = texture(u_inputTexture, v_texCoord2f) * v_color4f;
|
||||||
|
|
||||||
|
if(color.a < 0.004) {
|
||||||
|
discard;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 light;
|
||||||
|
float diffuse = 0.0;
|
||||||
|
if(u_dynamicLightCount1i > 0) {
|
||||||
|
vec4 worldPosition4f = u_inverseViewMatrix4f * v_position4f;
|
||||||
|
worldPosition4f.xyz /= worldPosition4f.w;
|
||||||
|
vec3 normalVector3f = normalize(u_inverseViewMatrix4f[2].xyz);
|
||||||
|
int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i;
|
||||||
|
for(int i = 0; i < safeLightCount; ++i) {
|
||||||
|
light = u_dynamicLightArray[i];
|
||||||
|
light.xyz = light.xyz - worldPosition4f.xyz;
|
||||||
|
diffuse += max(dot(normalize(light.xyz), normalVector3f) * 0.8 + 0.2, 0.0) * max(light.w - sqrt(dot(light.xyz, light.xyz)), 0.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
color *= texture(u_lightmapTexture, vec2(min(v_lightmap2f.x + diffuse * 0.066667, 1.0), v_lightmap2f.y));
|
||||||
|
|
||||||
|
output4f = color;
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
#line 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024 lax1dude. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
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 vec4 v_position4f;
|
||||||
|
out vec2 v_texCoord2f;
|
||||||
|
out vec4 v_color4f;
|
||||||
|
out vec2 v_lightmap2f;
|
||||||
|
|
||||||
|
uniform mat4 u_modelViewMatrix4f;
|
||||||
|
uniform mat4 u_projectionMatrix4f;
|
||||||
|
uniform vec3 u_texCoordSize2f_particleSize1f;
|
||||||
|
uniform vec3 u_transformParam_1_2_5_f;
|
||||||
|
uniform vec2 u_transformParam_3_4_f;
|
||||||
|
uniform vec4 u_color4f;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
v_color4f = u_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;
|
||||||
|
vec2 spos2f = a_position2f * particleSize;
|
||||||
|
pos3f += u_transformParam_1_2_5_f * spos2f.xyy;
|
||||||
|
pos3f.zx += u_transformParam_3_4_f * spos2f;
|
||||||
|
|
||||||
|
v_position4f = u_modelViewMatrix4f * vec4(pos3f, 1.0);
|
||||||
|
gl_Position = u_projectionMatrix4f * v_position4f;
|
||||||
|
}
|
|
@ -0,0 +1,210 @@
|
||||||
|
#line 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
in vec4 v_position4f;
|
||||||
|
|
||||||
|
#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;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||||
|
in vec2 v_lightmap2f;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||||
|
uniform sampler2D u_samplerTexture;
|
||||||
|
#if !defined(COMPILE_TEXTURE_ATTRIB) && !defined(COMPILE_ENABLE_TEX_GEN)
|
||||||
|
uniform vec2 u_textureCoords01;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||||
|
uniform sampler2D u_samplerLightmap;
|
||||||
|
#ifndef COMPILE_LIGHTMAP_ATTRIB
|
||||||
|
uniform vec2 u_textureCoords02;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||||
|
uniform float u_alphaTestRef1f;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef COMPILE_ENABLE_MC_LIGHTING
|
||||||
|
uniform int u_lightsEnabled1i;
|
||||||
|
uniform vec4 u_lightsDirections4fv[4];
|
||||||
|
uniform vec3 u_lightsAmbient3f;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef COMPILE_NORMAL_ATTRIB
|
||||||
|
uniform vec3 u_uniformNormal3f;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef COMPILE_ENABLE_FOG
|
||||||
|
uniform vec4 u_fogParameters4f;
|
||||||
|
uniform vec4 u_fogColor4f;
|
||||||
|
#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_ANISOTROPIC_FIX
|
||||||
|
uniform vec2 u_textureAnisotropicFix;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uniform mat4 u_inverseViewMatrix4f;
|
||||||
|
|
||||||
|
layout(std140) uniform u_chunkLightingData {
|
||||||
|
mediump int u_dynamicLightCount1i;
|
||||||
|
mediump int _paddingA_;
|
||||||
|
mediump int _paddingB_;
|
||||||
|
mediump int _paddingC_;
|
||||||
|
mediump vec4 u_dynamicLightArray[12];
|
||||||
|
};
|
||||||
|
|
||||||
|
layout(location = 0) out vec4 output4f;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
|
||||||
|
#ifdef COMPILE_COLOR_ATTRIB
|
||||||
|
vec4 color = v_color4f * u_color4f;
|
||||||
|
#else
|
||||||
|
vec4 color = u_color4f;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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 = u_textureMat4f01 * texGenVector;
|
||||||
|
color *= texture(u_samplerTexture, texGenVector.xy / texGenVector.w);
|
||||||
|
|
||||||
|
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||||
|
if(color.a < u_alphaTestRef1f) discard;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||||
|
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||||
|
#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
|
||||||
|
// d3d11 doesn't support GL_NEAREST upscaling with anisotropic
|
||||||
|
// filtering enabled, so it needs this stupid fix to 'work'
|
||||||
|
vec2 uv = floor(v_texture2f * u_textureAnisotropicFix) + 0.5;
|
||||||
|
color *= texture(u_samplerTexture, uv / u_textureAnisotropicFix);
|
||||||
|
#else
|
||||||
|
color *= texture(u_samplerTexture, v_texture2f);
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
color *= texture(u_samplerTexture, u_textureCoords01);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef COMPILE_NORMAL_ATTRIB
|
||||||
|
vec3 normal = normalize(v_normal3f);
|
||||||
|
#else
|
||||||
|
vec3 normal = u_uniformNormal3f;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||||
|
float diffuse = 0.0;
|
||||||
|
vec4 light;
|
||||||
|
if(u_dynamicLightCount1i > 0) {
|
||||||
|
vec4 worldPosition4f = u_inverseViewMatrix4f * v_position4f;
|
||||||
|
worldPosition4f.xyz /= worldPosition4f.w;
|
||||||
|
vec3 normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normal);
|
||||||
|
int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i;
|
||||||
|
for(int i = 0; i < safeLightCount; ++i) {
|
||||||
|
light = u_dynamicLightArray[i];
|
||||||
|
light.xyz = light.xyz - worldPosition4f.xyz;
|
||||||
|
diffuse += max(dot(normalize(light.xyz), normalVector3f) * 0.8 + 0.2, 0.0) * max(light.w - sqrt(dot(light.xyz, light.xyz)), 0.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||||
|
color *= texture(u_samplerLightmap, vec2(min(v_lightmap2f.x + diffuse * 0.066667, 1.0), v_lightmap2f.y));
|
||||||
|
#else
|
||||||
|
color *= texture(u_samplerLightmap, vec2(min(u_textureCoords02.x + diffuse * 0.066667, 1.0), u_textureCoords02.y));
|
||||||
|
#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
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef COMPILE_ENABLE_MC_LIGHTING
|
||||||
|
#ifndef COMPILE_ENABLE_LIGHTMAP
|
||||||
|
vec4 light;
|
||||||
|
float diffuse = 0.0;
|
||||||
|
#else
|
||||||
|
diffuse = 0.0;
|
||||||
|
#endif
|
||||||
|
for(int i = 0; i < u_lightsEnabled1i; ++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_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 - 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
|
||||||
|
|
||||||
|
output4f = color;
|
||||||
|
}
|
|
@ -0,0 +1,80 @@
|
||||||
|
#line 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
in vec3 a_position3f;
|
||||||
|
|
||||||
|
out vec4 v_position4f;
|
||||||
|
|
||||||
|
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||||
|
out vec3 v_objectPosition3f;
|
||||||
|
#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;
|
||||||
|
#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_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);
|
||||||
|
#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;
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
THESE ARE NOT DOOM/GMOD MODELS!
|
||||||
|
|
||||||
|
The FNAW skins are stored in a proprietary format created by lax1dude.
|
||||||
|
|
||||||
|
The format is a container for raw OpenGL vertex buffer and index buffer data intended to be copied directly into the GPU's memory, along with a small amount of metadata.
|
||||||
|
|
||||||
|
Data is rendered in GL_TRIANGLES mode using glDrawElements.
|
||||||
|
|
||||||
|
See "net/lax1dude/eaglercraft/v1_8/opengl/EaglerMeshLoader.java" and "net/lax1dude/eaglercraft/v1_8/opengl/HighPolyMesh.java" for more details.
|
|
@ -129,6 +129,7 @@ eaglercraft.options.fastMath=Fast Math
|
||||||
eaglercraft.options.fastMath.0=OFF
|
eaglercraft.options.fastMath.0=OFF
|
||||||
eaglercraft.options.fastMath.1=Low
|
eaglercraft.options.fastMath.1=Low
|
||||||
eaglercraft.options.fastMath.2=High
|
eaglercraft.options.fastMath.2=High
|
||||||
|
eaglercraft.options.dynamicLights=Dynamic Lights
|
||||||
|
|
||||||
eaglercraft.key.function=Function
|
eaglercraft.key.function=Function
|
||||||
eaglercraft.key.zoomCamera=Zoom Camera
|
eaglercraft.key.zoomCamera=Zoom Camera
|
||||||
|
@ -576,7 +577,12 @@ eaglercraft.singleplayer.demo.create.create.tooltip=Play the Minecraft 1.8 demo
|
||||||
eaglercraft.singleplayer.demo.create.join=Join Shared World
|
eaglercraft.singleplayer.demo.create.join=Join Shared World
|
||||||
eaglercraft.singleplayer.demo.create.join.tooltip=Join someone else's world and play multiplayer
|
eaglercraft.singleplayer.demo.create.join.tooltip=Join someone else's world and play multiplayer
|
||||||
|
|
||||||
eaglercraft.createWorld.seedNote=Note: Vanilla seeds do not work!
|
eaglercraft.createWorld.seedNote=Note: Vanilla seeds now work!
|
||||||
|
|
||||||
|
eaglercraft.singleplayer.oldseedwarning.title=Old World Detected!
|
||||||
|
eaglercraft.singleplayer.oldseedwarning.msg1=Please use EaglercraftX u32 or older to "Re-Create" this world
|
||||||
|
eaglercraft.singleplayer.oldseedwarning.msg2=The world's seed will not be the same otherwise :(
|
||||||
|
eaglercraft.singleplayer.oldseedwarning.ok=OK
|
||||||
|
|
||||||
eaglercraft.singleplayer.outdatedLANServerKick=This is a 1.5.2 LAN world!
|
eaglercraft.singleplayer.outdatedLANServerKick=This is a 1.5.2 LAN world!
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -1 +1 @@
|
||||||
{"pluginName":"EaglercraftXBungee","pluginVersion":"1.2.3","pluginButton":"Download \"EaglerXBungee-1.2.3.jar\"","pluginFilename":"EaglerXBungee.zip"}
|
{"pluginName":"EaglercraftXBungee","pluginVersion":"1.2.5","pluginButton":"Download \"EaglerXBungee-1.2.5.jar\"","pluginFilename":"EaglerXBungee.zip"}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
@ -18,20 +18,19 @@
|
||||||
- **Any portion of the decompiled Minecraft 1.8 source code or resources**
|
- **Any portion of the decompiled Minecraft 1.8 source code or resources**
|
||||||
- **Any portion of Mod Coder Pack and it's config files**
|
- **Any portion of Mod Coder Pack and it's config files**
|
||||||
- **Data that can be used alone to reconstruct portions of the game's source code**
|
- **Data that can be used alone to reconstruct portions of the game's source code**
|
||||||
- **Software configured by default to allow users to play without owning a copy of Minecraft**
|
|
||||||
|
|
||||||
## Getting Started:
|
## Getting Started:
|
||||||
|
|
||||||
### To compile the latest version of the client, on Windows:
|
### To compile the latest version of the client, on Windows:
|
||||||
|
|
||||||
1. Make sure you have at least Java 11 installed and added to your PATH
|
1. Make sure you have at least Java 11 installed and added to your PATH, its is recommended to use Java 17
|
||||||
2. Download (clone) this repository to your computer
|
2. Download (clone) this repository to your computer
|
||||||
3. Double click `CompileLatestClient.bat`, a GUI resembling a classic windows installer should open
|
3. Double click `CompileLatestClient.bat`, a GUI resembling a classic windows installer should open
|
||||||
4. Follow the steps shown to you in the new window to finish compiling
|
4. Follow the steps shown to you in the new window to finish compiling
|
||||||
|
|
||||||
### To compile the latest version of the client, on Linux/macOS:
|
### To compile the latest version of the client, on Linux/macOS:
|
||||||
|
|
||||||
1. Make sure you have at least Java 11 installed
|
1. Make sure you have at least Java 11 installed, its is recommended to use Java 17
|
||||||
2. Download (clone) this repository to your computer
|
2. Download (clone) this repository to your computer
|
||||||
3. Open a terminal in the folder the repository was cloned to
|
3. Open a terminal in the folder the repository was cloned to
|
||||||
4. Type `chmod +x CompileLatestClient.sh` and hit enter
|
4. Type `chmod +x CompileLatestClient.sh` and hit enter
|
||||||
|
@ -68,6 +67,8 @@ EaglercraftX 1.8 includes an integrated voice-chat service that can be used in s
|
||||||
|
|
||||||
To make a server for EaglercraftX 1.8 the recommended software to use is EaglercraftXBungee ("EaglerXBungee") which is included in this repository in the `gateway/EaglercraftXBungee` folder. This is a plugin designed to be used with BungeeCord to allow Eaglercraft players to join your BungeeCord server. It is assumed that the reader already knows what BungeeCord is and has a working server set up that is joinable via java edition. If you don't know what BungeeCord is, please research the topic yourself first before continuing. Waterfall and FlameCord have also been tested, but EaglerXBungee was natively compiled against BungeeCord.
|
To make a server for EaglercraftX 1.8 the recommended software to use is EaglercraftXBungee ("EaglerXBungee") which is included in this repository in the `gateway/EaglercraftXBungee` folder. This is a plugin designed to be used with BungeeCord to allow Eaglercraft players to join your BungeeCord server. It is assumed that the reader already knows what BungeeCord is and has a working server set up that is joinable via java edition. If you don't know what BungeeCord is, please research the topic yourself first before continuing. Waterfall and FlameCord have also been tested, but EaglerXBungee was natively compiled against BungeeCord.
|
||||||
|
|
||||||
|
There is an experimental velocity plugin available in `gateway/EaglercraftXVelocity` but it is still in development and not recommended for public servers, so be sure to check for updates regularly if you use it. Configuration files are basically identical to EaglercraftXBungee so its safe to just directy copy in your old EaglercraftXBungee config files to the `plugins/eaglerxvelocity` folder and they should work with a minimal number of edits if you are migrating your network from BungeeCord to Velocity.
|
||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
Obtain the latest version of the EaglerXBungee JAR file (it can be downloaded in the client from the "Multiplayer" screen) and place it in the "plugins" folder of your BungeeCord server. It's recommended to only join native Minecraft 1.8 servers through an EaglerXBungee server but plugins like ProtocolSupport have allowed some people to join newer servers too.
|
Obtain the latest version of the EaglerXBungee JAR file (it can be downloaded in the client from the "Multiplayer" screen) and place it in the "plugins" folder of your BungeeCord server. It's recommended to only join native Minecraft 1.8 servers through an EaglerXBungee server but plugins like ProtocolSupport have allowed some people to join newer servers too.
|
||||||
|
@ -183,7 +184,7 @@ You may want to implement some custom logic for loading/saving certain local sto
|
||||||
|
|
||||||
Be aware that the client will still save the key to the browser's local storage anyway even if you define a custom save handler, and will just attempt to load the key from the browser's local storage normally if you return null, these are meant to be used like event handlers for creating backups of keys instead of completely replacing the local storage save and load functions.
|
Be aware that the client will still save the key to the browser's local storage anyway even if you define a custom save handler, and will just attempt to load the key from the browser's local storage normally if you return null, these are meant to be used like event handlers for creating backups of keys instead of completely replacing the local storage save and load functions.
|
||||||
|
|
||||||
On a normal client you will only ever need to handle local storage keys called `_eaglercraftX.p` (profile), `_eaglercraftX.g` (game settings), `_eaglercraftX.s` (server list), `_eaglercraftX.r` (shared world relays), feel free to just ignore any other keys. It is guaranteed that the data the client stores will always be valid base64, so it is best practice to decode it to raw binary first if possible to reduce it's size before saving it to something like a MySQL database in your backend if you are trying to implement some kind of profile syncing system for your website. The keys already have GZIP compression applied to them by default so don't bother trying to compress them yourself a second time because it won't reduce their size.
|
On a normal client you will only ever need to handle local storage keys called `p` (profile), `g` (game settings), `s` (server list), `r` (shared world relays), in your hooks functions. Feel free to just ignore any other keys. It is guaranteed that the data the client stores will always be valid base64, so it is best practice to decode it to raw binary first if possible to reduce it's size before saving it to something like a MySQL database in your backend if you are trying to implement some kind of profile syncing system for your website. The keys already have GZIP compression applied to them by default so don't bother trying to compress them yourself a second time because it won't reduce their size.
|
||||||
|
|
||||||
## Developing a Client
|
## Developing a Client
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue