From e6c24346192153cddf78329eaddcb387050a7bf5 Mon Sep 17 00:00:00 2001 From: techno-sam <77073745+techno-sam@users.noreply.github.com> Date: Sat, 4 Apr 2026 17:42:44 +0200 Subject: [PATCH] Porting III --- .../mixin/ChunkLightProviderMixin.java | 6 ++-- .../mixin/ChunkSkyLightMixin.java | 5 ++-- .../shaders/core/terrain_sky.vsh | 26 ----------------- .../core/crystalline_sky_rendertype_sky.fsh} | 16 ++++++----- .../core/crystalline_sky_rendertype_sky.json | 18 ++++++++++++ .../core/crystalline_sky_rendertype_sky.vsh | 28 +++++++++++++++++++ 6 files changed, 62 insertions(+), 37 deletions(-) delete mode 100644 src/main/resources/assets/crystalline_sky/shaders/core/terrain_sky.vsh rename src/main/resources/assets/{crystalline_sky/shaders/core/terrain_sky.fsh => minecraft/shaders/core/crystalline_sky_rendertype_sky.fsh} (60%) create mode 100644 src/main/resources/assets/minecraft/shaders/core/crystalline_sky_rendertype_sky.json create mode 100644 src/main/resources/assets/minecraft/shaders/core/crystalline_sky_rendertype_sky.vsh diff --git a/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/ChunkLightProviderMixin.java b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/ChunkLightProviderMixin.java index f0fa99b..c055e48 100644 --- a/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/ChunkLightProviderMixin.java +++ b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/ChunkLightProviderMixin.java @@ -4,14 +4,16 @@ import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks; import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; import net.minecraft.world.chunk.light.ChunkLightProvider; import org.spongepowered.asm.mixin.Mixin; @Mixin(ChunkLightProvider.class) public class ChunkLightProviderMixin { @WrapMethod(method = "needsLightUpdate") - private static boolean updateSky(BlockState oldState, BlockState newState, Operation original) { - return original.call(oldState, newState) + private static boolean updateSky(BlockView blockView, BlockPos pos, BlockState oldState, BlockState newState, Operation original) { + return original.call(blockView, pos, oldState, newState) || (CrystallineBlocks.getSkyLightLevel(oldState) != CrystallineBlocks.getSkyLightLevel(newState)) || (CrystallineBlocks.isWeepingSky(oldState) != CrystallineBlocks.isWeepingSky(newState)); } diff --git a/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/ChunkSkyLightMixin.java b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/ChunkSkyLightMixin.java index 0c74bd8..5caa964 100644 --- a/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/ChunkSkyLightMixin.java +++ b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/ChunkSkyLightMixin.java @@ -35,13 +35,14 @@ public abstract class ChunkSkyLightMixin implements ChunkSkyLight_Duck { private BlockPos.Mutable reusableBlockPos1; @Shadow - private static boolean faceBlocksLight(BlockState upper, BlockState lower) { + private static boolean faceBlocksLight(BlockView blockView, BlockPos upperPos, BlockState upperState, BlockPos lowerPos, BlockState lowerState) { throw new RuntimeException("Mixin failed to apply"); } @Shadow @Final private BlockPos.Mutable reusableBlockPos2; + @Unique @Final @Mutable @@ -99,7 +100,7 @@ public abstract class ChunkSkyLightMixin implements ChunkSkyLight_Duck { if (foundSky == -1) { foundSky = (short) (bottomPos.getY() - weepingMinY); } - } else if (faceBlocksLight(topState, bottomState)) { + } else if (faceBlocksLight(chunk, topPos, topState, bottomPos, bottomState)) { if (foundSky != -1) { short lastLitY = (short) (bottomPos.getY() - weepingMinY + 1); data.add(foundSky); diff --git a/src/main/resources/assets/crystalline_sky/shaders/core/terrain_sky.vsh b/src/main/resources/assets/crystalline_sky/shaders/core/terrain_sky.vsh deleted file mode 100644 index 091b9e4..0000000 --- a/src/main/resources/assets/crystalline_sky/shaders/core/terrain_sky.vsh +++ /dev/null @@ -1,26 +0,0 @@ -#version 150 - -#moj_import -#moj_import -#moj_import - -in vec3 Position; -in vec4 Color; -in vec2 UV0; -in ivec2 UV2; -in vec3 Normal; - -uniform sampler2D Sampler2; - -out float sphericalVertexDistance; -out float cylindricalVertexDistance; -out vec4 texProj0; - -void main() { - vec3 pos = Position + ModelOffset; - gl_Position = ProjMat * ModelViewMat * vec4(pos, 1.0); - - sphericalVertexDistance = fog_spherical_distance(pos); - cylindricalVertexDistance = fog_cylindrical_distance(pos); - texProj0 = projection_from_position(gl_Position); -} diff --git a/src/main/resources/assets/crystalline_sky/shaders/core/terrain_sky.fsh b/src/main/resources/assets/minecraft/shaders/core/crystalline_sky_rendertype_sky.fsh similarity index 60% rename from src/main/resources/assets/crystalline_sky/shaders/core/terrain_sky.fsh rename to src/main/resources/assets/minecraft/shaders/core/crystalline_sky_rendertype_sky.fsh index 8b6fd56..eea77b7 100644 --- a/src/main/resources/assets/crystalline_sky/shaders/core/terrain_sky.fsh +++ b/src/main/resources/assets/minecraft/shaders/core/crystalline_sky_rendertype_sky.fsh @@ -1,19 +1,21 @@ #version 150 -#moj_import -#moj_import -#moj_import +#moj_import uniform sampler2D Sampler0; -in float sphericalVertexDistance; -in float cylindricalVertexDistance; +uniform vec4 ColorModulator; +uniform float FogStart; +uniform float FogEnd; +uniform vec4 FogColor; + +in float vertexDistance; in vec4 texProj0; out vec4 fragColor; #ifndef BAYER_BIAS -#define BAYER_BIAS 0.0 +#define BAYER_BIAS 0.03125 #endif #ifndef SCALE @@ -37,5 +39,5 @@ void main() { } vec4 color = textureProj(Sampler0, texProj0) * vec4(ColorModulator.rgb, 1.0); - fragColor = apply_fog(color, sphericalVertexDistance, cylindricalVertexDistance, FogEnvironmentalStart, FogEnvironmentalEnd, FogRenderDistanceStart, FogRenderDistanceEnd, FogColor); + fragColor = linear_fog(color, vertexDistance, FogStart, FogEnd, FogColor); } diff --git a/src/main/resources/assets/minecraft/shaders/core/crystalline_sky_rendertype_sky.json b/src/main/resources/assets/minecraft/shaders/core/crystalline_sky_rendertype_sky.json new file mode 100644 index 0000000..220fd24 --- /dev/null +++ b/src/main/resources/assets/minecraft/shaders/core/crystalline_sky_rendertype_sky.json @@ -0,0 +1,18 @@ +{ + "vertex": "crystalline_sky_rendertype_sky", + "fragment": "crystalline_sky_rendertype_sky", + "samplers": [ + { "name": "Sampler0" }, + { "name": "Sampler2" } + ], + "uniforms": [ + { "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, + { "name": "ChunkOffset", "type": "float", "count": 3, "values": [ 0.0, 0.0, 0.0 ] }, + { "name": "ColorModulator", "type": "float", "count": 4, "values": [ 1.0, 1.0, 1.0, 1.0 ] }, + { "name": "FogStart", "type": "float", "count": 1, "values": [ 0.0 ] }, + { "name": "FogEnd", "type": "float", "count": 1, "values": [ 1.0 ] }, + { "name": "FogColor", "type": "float", "count": 4, "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "FogShape", "type": "int", "count": 1, "values": [ 0 ] } + ] +} diff --git a/src/main/resources/assets/minecraft/shaders/core/crystalline_sky_rendertype_sky.vsh b/src/main/resources/assets/minecraft/shaders/core/crystalline_sky_rendertype_sky.vsh new file mode 100644 index 0000000..dc6565f --- /dev/null +++ b/src/main/resources/assets/minecraft/shaders/core/crystalline_sky_rendertype_sky.vsh @@ -0,0 +1,28 @@ +#version 150 + +#moj_import +#moj_import + +in vec3 Position; +in vec4 Color; +in vec2 UV0; +in ivec2 UV2; +in vec3 Normal; + +uniform sampler2D Sampler2; + +uniform mat4 ModelViewMat; +uniform mat4 ProjMat; +uniform vec3 ChunkOffset; +uniform int FogShape; + +out float vertexDistance; +out vec4 texProj0; + +void main() { + vec3 pos = Position + ChunkOffset; + gl_Position = ProjMat * ModelViewMat * vec4(pos, 1.0); + + vertexDistance = fog_distance(pos, FogShape); + texProj0 = projection_from_position(gl_Position); +}