aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/mixins/WorldRendererMixin.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/mixins/WorldRendererMixin.java')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/WorldRendererMixin.java48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/WorldRendererMixin.java b/src/main/java/de/hysky/skyblocker/mixins/WorldRendererMixin.java
new file mode 100644
index 00000000..2959d4b5
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/mixins/WorldRendererMixin.java
@@ -0,0 +1,48 @@
+package de.hysky.skyblocker.mixins;
+
+import de.hysky.skyblocker.skyblock.dungeon.LividColor;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.ModifyVariable;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
+import com.llamalad7.mixinextras.sugar.Local;
+import com.llamalad7.mixinextras.sugar.Share;
+import com.llamalad7.mixinextras.sugar.ref.LocalBooleanRef;
+
+import de.hysky.skyblocker.skyblock.entity.MobBoundingBoxes;
+import de.hysky.skyblocker.skyblock.entity.MobGlow;
+import net.minecraft.client.render.WorldRenderer;
+import net.minecraft.entity.Entity;
+import org.spongepowered.asm.mixin.injection.Slice;
+
+@Mixin(WorldRenderer.class)
+public class WorldRendererMixin {
+
+ @ModifyExpressionValue(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;hasOutline(Lnet/minecraft/entity/Entity;)Z"))
+ private boolean skyblocker$shouldMobGlow(boolean original, @Local Entity entity, @Share("hasCustomGlow") LocalBooleanRef hasCustomGlow) {
+ boolean allowGlow = LividColor.allowGlow();
+ boolean shouldGlow = MobGlow.shouldMobGlow(entity);
+ hasCustomGlow.set(shouldGlow);
+ return allowGlow && original || shouldGlow;
+ }
+
+ @ModifyVariable(method = "render",
+ slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;hasOutline(Lnet/minecraft/entity/Entity;)Z"), to = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/OutlineVertexConsumerProvider;setColor(IIII)V")),
+ at = @At("STORE"), ordinal = 0
+ )
+ private int skyblocker$modifyGlowColor(int color, @Local Entity entity, @Share("hasCustomGlow") LocalBooleanRef hasCustomGlow) {
+ return hasCustomGlow.get() ? MobGlow.getGlowColor(entity) : color;
+ }
+
+ @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;renderEntity(Lnet/minecraft/entity/Entity;DDDFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;)V"))
+ private void skyblocker$beforeEntityIsRendered(CallbackInfo ci, @Local Entity entity) {
+ boolean shouldShowBoundingBox = MobBoundingBoxes.shouldDrawMobBoundingBox(entity);
+
+ if (shouldShowBoundingBox) {
+ MobBoundingBoxes.submitBox2BeRendered(entity.getBoundingBox(), MobBoundingBoxes.getBoxColor(entity));
+ }
+ }
+}