fix an issue with sanity shaders and update version number

This commit is contained in:
2026-07-29 17:48:41 +02:00
parent 78802a8103
commit 6ad4d646c4
4 changed files with 15 additions and 38 deletions
+1 -1
View File
@@ -52,7 +52,7 @@ mod_name=Mind & Motion
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=All Rights Reserved mod_license=All Rights Reserved
# The mod version. See https://semver.org/ # The mod version. See https://semver.org/
mod_version=1.4.4 mod_version=1.4.5
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
# This should match the base package used for the mod sources. # This should match the base package used for the mod sources.
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html # See https://maven.apache.org/guides/mini/guide-naming-conventions.html
@@ -4,7 +4,6 @@ import com.mojang.logging.LogUtils;
import net.fretux.mindmotion.ConfigMM; import net.fretux.mindmotion.ConfigMM;
import net.fretux.mindmotion.client.ClientData; import net.fretux.mindmotion.client.ClientData;
import net.fretux.mindmotion.client.shader.VentShaderHandler; import net.fretux.mindmotion.client.shader.VentShaderHandler;
import net.fretux.mindmotion.mixin.PostChainAccessor;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.PostChain; import net.minecraft.client.renderer.PostChain;
import net.minecraft.client.renderer.PostPass; import net.minecraft.client.renderer.PostPass;
@@ -28,6 +27,7 @@ public class SanityShaderHandler {
ResourceLocation.fromNamespaceAndPath("mindmotion", "shaders/post/desaturate.json"); ResourceLocation.fromNamespaceAndPath("mindmotion", "shaders/post/desaturate.json");
private static float currentStrength = 0f; private static float currentStrength = 0f;
private static boolean shaderErrorLogged = false;
private static final Logger LOGGER = LogUtils.getLogger(); private static final Logger LOGGER = LogUtils.getLogger();
private static final Field PASSES_FIELD = private static final Field PASSES_FIELD =
ObfuscationReflectionHelper.findField(PostChain.class, "f_110009_"); ObfuscationReflectionHelper.findField(PostChain.class, "f_110009_");
@@ -37,11 +37,17 @@ public class SanityShaderHandler {
try { try {
return (List<PostPass>) PASSES_FIELD.get(chain); return (List<PostPass>) PASSES_FIELD.get(chain);
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
LOGGER.error("Failed to access PostChain.passes", e); logShaderError("Failed to access sanity shader passes", e);
return List.of(); return List.of();
} }
} }
private static void logShaderError(String message, Throwable error) {
if (shaderErrorLogged) return;
shaderErrorLogged = true;
LOGGER.error(message, error);
}
@SubscribeEvent @SubscribeEvent
public static void onRenderWorld(RenderLevelStageEvent event) { public static void onRenderWorld(RenderLevelStageEvent event) {
@@ -85,23 +91,8 @@ public class SanityShaderHandler {
if (current == null) { if (current == null) {
try { try {
mc.gameRenderer.loadEffect(DESAT_EFFECT); mc.gameRenderer.loadEffect(DESAT_EFFECT);
PostChain chain = mc.gameRenderer.currentEffect();
LOGGER.info("Loaded post chain = {}", chain != null);
if (chain != null) {
try {
for (PostPass pass : safeGetPasses(chain)) {
EffectInstance fx = pass.getEffect();
LOGGER.info("pass fx={}", fx != null ? fx.getName() : "null");
if (fx != null) {
LOGGER.info(" Desat uniform={}", fx.getUniform("Desat") != null);
}
}
} catch (Throwable t) {
LOGGER.error("Failed to read PostChain passes via reflection", t);
}
}
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("Failed to read PostChain passes via reflection", e); logShaderError("Failed to load sanity post-processing shader", e);
return; return;
} }
} }
@@ -174,7 +165,7 @@ public class SanityShaderHandler {
} }
} }
} catch (Exception e) { } catch (Exception e) {
LOGGER.info("Error loading post chain{}", e.getMessage()); logShaderError("Failed to update sanity shader uniforms", e);
} }
} }
@@ -94,20 +94,5 @@ public class SyncStatsS2CPacket {
ClientData.MADNESS_DECAY_DELAY_TICKS = msg.madnessDecayDelayTicks; ClientData.MADNESS_DECAY_DELAY_TICKS = msg.madnessDecayDelayTicks;
}); });
ctx.get().setPacketHandled(true); ctx.get().setPacketHandled(true);
System.out.println(
"[Client] Sanity: " + msg.sanity +
", Insanity: " + msg.insanity +
", Tempo: " + msg.tempo +
", VentCD: " + msg.ventCooldown +
", MaxSanity: " + msg.maxSanity +
", MaxTempo: " + msg.maxTempo +
", SanityEnabled: " + msg.sanityEnabled +
", TempoEnabled: " + msg.tempoEnabled +
", Madness: " + msg.madness +
", MaxMadness: " + msg.maxMadness
+ ", MadnessDecayPerTick: " + msg.madnessDecayPerTick +
", MadnessDecayDelayTicks: " + msg.madnessDecayDelayTicks
);
} }
} }
@@ -84,8 +84,8 @@ void main() {
float warp = intensity * 0.012 + PulseStrength * 0.006; float warp = intensity * 0.012 + PulseStrength * 0.006;
shockUV += fromCenter * warp * dist; shockUV += fromCenter * warp * dist;
// Chromatic aberration that ramps up with insanity // Chromatic aberration must disappear completely when no insanity effect is active.
vec2 chromaOffset = fromCenter * (0.002 + intensity * 0.004); vec2 chromaOffset = fromCenter * intensity * 0.006;
float r = texture(DiffuseSampler, shockUV + chromaOffset).r; float r = texture(DiffuseSampler, shockUV + chromaOffset).r;
float g = texture(DiffuseSampler, shockUV).g; float g = texture(DiffuseSampler, shockUV).g;
float b = texture(DiffuseSampler, shockUV - chromaOffset).b; float b = texture(DiffuseSampler, shockUV - chromaOffset).b;
@@ -150,7 +150,8 @@ void main() {
float contrast = 1.0 + intensity * 0.35; float contrast = 1.0 + intensity * 0.35;
col.rgb = (col.rgb - 0.5) * contrast + 0.5; col.rgb = (col.rgb - 0.5) * contrast + 0.5;
col.rgb = filmicTone(col.rgb, 1.05 + intensity * 0.2); vec3 toneMapped = filmicTone(col.rgb, 1.05 + intensity * 0.2);
col.rgb = mix(col.rgb, toneMapped, intensity);
col.rgb = clamp(col.rgb, 0.0, 1.0); col.rgb = clamp(col.rgb, 0.0, 1.0);
fragColor = vec4(col.rgb, 1.0); fragColor = vec4(col.rgb, 1.0);
} }