feat: Hide potion effects

This commit is contained in:
Linnea Gräf
2024-12-22 16:29:18 +01:00
parent 856f5e0e81
commit 13994393ed
3 changed files with 76 additions and 49 deletions

View File

@@ -0,0 +1,29 @@
package moe.nea.firmament.mixins;
import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
import moe.nea.firmament.features.fixes.Fixes;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.ingame.InventoryScreen;
import net.minecraft.client.gui.screen.ingame.StatusEffectsDisplay;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(InventoryScreen.class)
public abstract class HideStatusEffectsPatch {
@Shadow
public abstract boolean shouldHideStatusEffectHud();
@Inject(method = "shouldHideStatusEffectHud", at = @At("HEAD"), cancellable = true)
private void hideStatusEffects(CallbackInfoReturnable<Boolean> cir) {
cir.setReturnValue(!Fixes.TConfig.INSTANCE.getHidePotionEffects());
}
@WrapWithCondition(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ingame/StatusEffectsDisplay;drawStatusEffects(Lnet/minecraft/client/gui/DrawContext;IIF)V"))
private boolean conditionalRenderStatuses(StatusEffectsDisplay instance, DrawContext context, int mouseX, int mouseY, float tickDelta) {
return shouldHideStatusEffectHud() || !Fixes.TConfig.INSTANCE.getHidePotionEffects();
}
}

View File

@@ -1,71 +1,67 @@
package moe.nea.firmament.features.fixes package moe.nea.firmament.features.fixes
import moe.nea.jarvis.api.Point import moe.nea.jarvis.api.Point
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable
import net.minecraft.client.MinecraftClient import net.minecraft.client.MinecraftClient
import net.minecraft.client.option.KeyBinding import net.minecraft.client.option.KeyBinding
import net.minecraft.entity.player.PlayerEntity
import net.minecraft.text.Text import net.minecraft.text.Text
import net.minecraft.util.Arm
import moe.nea.firmament.annotations.Subscribe import moe.nea.firmament.annotations.Subscribe
import moe.nea.firmament.events.HudRenderEvent import moe.nea.firmament.events.HudRenderEvent
import moe.nea.firmament.events.WorldKeyboardEvent import moe.nea.firmament.events.WorldKeyboardEvent
import moe.nea.firmament.features.FirmamentFeature import moe.nea.firmament.features.FirmamentFeature
import moe.nea.firmament.gui.config.ManagedConfig import moe.nea.firmament.gui.config.ManagedConfig
import moe.nea.firmament.util.MC import moe.nea.firmament.util.MC
import moe.nea.firmament.util.errorBoundary
object Fixes : FirmamentFeature { object Fixes : FirmamentFeature {
override val identifier: String override val identifier: String
get() = "fixes" get() = "fixes"
object TConfig : ManagedConfig(identifier, Category.MISC) { // TODO: split this config object TConfig : ManagedConfig(identifier, Category.MISC) { // TODO: split this config
val fixUnsignedPlayerSkins by toggle("player-skins") { true } val fixUnsignedPlayerSkins by toggle("player-skins") { true }
var autoSprint by toggle("auto-sprint") { false } var autoSprint by toggle("auto-sprint") { false }
val autoSprintKeyBinding by keyBindingWithDefaultUnbound("auto-sprint-keybinding") val autoSprintKeyBinding by keyBindingWithDefaultUnbound("auto-sprint-keybinding")
val autoSprintHud by position("auto-sprint-hud", 80, 10) { Point(0.0, 1.0) } val autoSprintHud by position("auto-sprint-hud", 80, 10) { Point(0.0, 1.0) }
val peekChat by keyBindingWithDefaultUnbound("peek-chat") val peekChat by keyBindingWithDefaultUnbound("peek-chat")
} val hidePotionEffects by toggle("hide-mob-effects") { false }
}
override val config: ManagedConfig override val config: ManagedConfig
get() = TConfig get() = TConfig
fun handleIsPressed( fun handleIsPressed(
keyBinding: KeyBinding, keyBinding: KeyBinding,
cir: CallbackInfoReturnable<Boolean> cir: CallbackInfoReturnable<Boolean>
) { ) {
if (keyBinding === MinecraftClient.getInstance().options.sprintKey && TConfig.autoSprint && MC.player?.isSprinting != true) if (keyBinding === MinecraftClient.getInstance().options.sprintKey && TConfig.autoSprint && MC.player?.isSprinting != true)
cir.returnValue = true cir.returnValue = true
} }
@Subscribe @Subscribe
fun onRenderHud(it: HudRenderEvent) { fun onRenderHud(it: HudRenderEvent) {
if (!TConfig.autoSprintKeyBinding.isBound) return if (!TConfig.autoSprintKeyBinding.isBound) return
it.context.matrices.push() it.context.matrices.push()
TConfig.autoSprintHud.applyTransformations(it.context.matrices) TConfig.autoSprintHud.applyTransformations(it.context.matrices)
it.context.drawText( it.context.drawText(
MC.font, Text.translatable( MC.font, Text.translatable(
if (TConfig.autoSprint) if (TConfig.autoSprint)
"firmament.fixes.auto-sprint.on" "firmament.fixes.auto-sprint.on"
else if (MC.player?.isSprinting == true) else if (MC.player?.isSprinting == true)
"firmament.fixes.auto-sprint.sprinting" "firmament.fixes.auto-sprint.sprinting"
else else
"firmament.fixes.auto-sprint.not-sprinting" "firmament.fixes.auto-sprint.not-sprinting"
), 0, 0, -1, false ), 0, 0, -1, false
) )
it.context.matrices.pop() it.context.matrices.pop()
} }
@Subscribe @Subscribe
fun onWorldKeyboard(it: WorldKeyboardEvent) { fun onWorldKeyboard(it: WorldKeyboardEvent) {
if (it.matches(TConfig.autoSprintKeyBinding)) { if (it.matches(TConfig.autoSprintKeyBinding)) {
TConfig.autoSprint = !TConfig.autoSprint TConfig.autoSprint = !TConfig.autoSprint
} }
} }
fun shouldPeekChat(): Boolean { fun shouldPeekChat(): Boolean {
return TConfig.peekChat.isPressed(atLeast = true) return TConfig.peekChat.isPressed(atLeast = true)
} }
} }

View File

@@ -112,6 +112,8 @@
"firmament.config.fixes.auto-sprint-keybinding": "Auto Sprint KeyBinding", "firmament.config.fixes.auto-sprint-keybinding": "Auto Sprint KeyBinding",
"firmament.config.fixes.auto-sprint-keybinding.description": "Toggle auto sprint via this keybinding.", "firmament.config.fixes.auto-sprint-keybinding.description": "Toggle auto sprint via this keybinding.",
"firmament.config.fixes.auto-sprint.description": "This is different from vanilla sprint in the way that it only marks the keybinding pressed for the first tick of walking.", "firmament.config.fixes.auto-sprint.description": "This is different from vanilla sprint in the way that it only marks the keybinding pressed for the first tick of walking.",
"firmament.config.fixes.hide-mob-effects": "Hide Potion Effects",
"firmament.config.fixes.hide-mob-effects.description": "Hide Potion effects on the right side of your player inventory.",
"firmament.config.fixes.peek-chat": "Peek Chat", "firmament.config.fixes.peek-chat": "Peek Chat",
"firmament.config.fixes.peek-chat.description": "Hold this keybinding to view the chat as if you have it opened, but while still being able to control your character.", "firmament.config.fixes.peek-chat.description": "Hold this keybinding to view the chat as if you have it opened, but while still being able to control your character.",
"firmament.config.fixes.player-skins": "Fix unsigned Player Skins", "firmament.config.fixes.player-skins": "Fix unsigned Player Skins",