Skip to content

Commit

Permalink
Fix Glowing (SkyblockerMod#1093)
Browse files Browse the repository at this point in the history
  • Loading branch information
AzureAaron authored Dec 22, 2024
1 parent fab3e8a commit 7e7020b
Show file tree
Hide file tree
Showing 7 changed files with 93 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package de.hysky.skyblocker.injected;

public interface CustomGlowInfo {

default boolean atLeastOneMobHasCustomGlow() {
return false;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package de.hysky.skyblocker.mixins;

import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;

import com.llamalad7.mixinextras.injector.ModifyExpressionValue;

import de.hysky.skyblocker.utils.render.SkyblockerRenderLayers;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.RenderPhase.DepthTest;

@Mixin(RenderLayer.MultiPhase.class)
public class RenderLayerMultiPhaseMixin {

@ModifyExpressionValue(method = "method_34844", at = @At(value = "FIELD", target = "Lnet/minecraft/client/render/RenderLayer$MultiPhase;ALWAYS_DEPTH_TEST:Lnet/minecraft/client/render/RenderPhase$DepthTest;", opcode = Opcodes.GETSTATIC))
private static DepthTest skyblocker$modifyDepthTestForOutlineLayer(DepthTest depthTest) {
return SkyblockerRenderLayers.OUTLINE_ALWAYS;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package de.hysky.skyblocker.mixins;

import org.lwjgl.opengl.GL11;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyArg;

import com.llamalad7.mixinextras.sugar.Local;
import com.mojang.blaze3d.systems.RenderSystem;

import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.RenderPhase;
import net.minecraft.client.render.WorldRenderer;

@Mixin(RenderPhase.DepthTest.class)
public class RenderPhaseDepthTestMixin {

@ModifyArg(method = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/RenderPhase;<init>(Ljava/lang/String;Ljava/lang/Runnable;Ljava/lang/Runnable;)V"), index = 1)
private static Runnable skyblocker$modifyOutlineAlwaysStartAction(Runnable original, @Local(argsOnly = true) String depthFunctionName) {
if (depthFunctionName.equals("outline_always")) {
return () -> {
WorldRenderer worldRenderer = MinecraftClient.getInstance().worldRenderer;

if (worldRenderer != null && worldRenderer.atLeastOneMobHasCustomGlow()) {
RenderSystem.enableDepthTest();
RenderSystem.depthFunc(GL11.GL_LEQUAL);
}
};
}

return original;
}

@ModifyArg(method = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/RenderPhase;<init>(Ljava/lang/String;Ljava/lang/Runnable;Ljava/lang/Runnable;)V"), index = 2)
private static Runnable skyblocker$modifyOutlineAlwaysEndAction(Runnable original, @Local(argsOnly = true) String depthFunctionName) {
if (depthFunctionName.equals("outline_always")) {
return () -> {
WorldRenderer worldRenderer = MinecraftClient.getInstance().worldRenderer;

if (worldRenderer != null && worldRenderer.atLeastOneMobHasCustomGlow()) {
RenderSystem.disableDepthTest();
RenderSystem.depthFunc(GL11.GL_LEQUAL);
}
};
}

return original;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.llamalad7.mixinextras.sugar.Share;
import com.llamalad7.mixinextras.sugar.ref.LocalBooleanRef;

import de.hysky.skyblocker.injected.CustomGlowInfo;
import de.hysky.skyblocker.skyblock.dungeon.LividColor;
import de.hysky.skyblocker.skyblock.entity.MobBoundingBoxes;
import de.hysky.skyblocker.skyblock.entity.MobGlow;
Expand All @@ -26,7 +27,7 @@
import net.minecraft.entity.decoration.ArmorStandEntity;

@Mixin(WorldRenderer.class)
public class WorldRendererMixin {
public class WorldRendererMixin implements CustomGlowInfo {
@Shadow
@Final
private MinecraftClient client;
Expand Down Expand Up @@ -81,6 +82,11 @@ public class WorldRendererMixin {
}
}

@Override
public boolean atLeastOneMobHasCustomGlow() {
return atLeastOneMobHasCustomGlow;
}

@Inject(method = "render", at = @At("TAIL"))
private void skyblocker$resetCustomGlowBool(CallbackInfo ci) {
atLeastOneMobHasCustomGlow = false;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package de.hysky.skyblocker.utils.render;

import org.lwjgl.opengl.GL11;

import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.RenderLayer.MultiPhase;
import net.minecraft.client.render.RenderLayer.MultiPhaseParameters;
Expand All @@ -9,6 +11,8 @@
import net.minecraft.client.render.VertexFormats;

public class SkyblockerRenderLayers {
public static final DepthTest OUTLINE_ALWAYS = new DepthTest("outline_always", GL11.GL_ALWAYS);

public static final MultiPhase FILLED = RenderLayer.of("filled", VertexFormats.POSITION_COLOR, DrawMode.TRIANGLE_STRIP, RenderLayer.CUTOUT_BUFFER_SIZE, false, true, MultiPhaseParameters.builder()
.program(RenderPhase.POSITION_COLOR_PROGRAM)
.layering(RenderPhase.VIEW_OFFSET_Z_LAYERING)
Expand Down
3 changes: 3 additions & 0 deletions src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@
"loom:injected_interfaces": {
"net/minecraft/class_1799": [
"de/hysky/skyblocker/injected/SkyblockerStack"
],
"net/minecraft/class_761": [
"de/hysky/skyblocker/injected/CustomGlowInfo"
]
}
}
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/skyblocker.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
"PlayerSkinProviderMixin",
"PlayerSkinTextureDownloaderMixin",
"RenderFishMixin",
"RenderLayerMultiPhaseMixin",
"RenderPhaseDepthTestMixin",
"ScoreboardMixin",
"SignEditScreenMixin",
"SocialInteractionsPlayerListWidgetMixin",
Expand Down

0 comments on commit 7e7020b

Please sign in to comment.