From 041da7c7d179df01c4048a81ddf40a9f13c3ce77 Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Fri, 26 Apr 2024 10:11:23 +0200 Subject: Add fuel durability bar --- .../firmament/mixins/CustomDurabilityBarPatch.java | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/main/java/moe/nea/firmament/mixins/CustomDurabilityBarPatch.java (limited to 'src/main/java') diff --git a/src/main/java/moe/nea/firmament/mixins/CustomDurabilityBarPatch.java b/src/main/java/moe/nea/firmament/mixins/CustomDurabilityBarPatch.java new file mode 100644 index 0000000..f396ce6 --- /dev/null +++ b/src/main/java/moe/nea/firmament/mixins/CustomDurabilityBarPatch.java @@ -0,0 +1,58 @@ +/* + * SPDX-FileCopyrightText: 2024 Linnea Gräf + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package moe.nea.firmament.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Share; +import com.llamalad7.mixinextras.sugar.ref.LocalRef; +import moe.nea.firmament.util.DurabilityBarEvent; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(DrawContext.class) +public class CustomDurabilityBarPatch { + @WrapOperation( + method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isItemBarVisible()Z") + ) + private boolean onIsItemBarVisible( + ItemStack instance, Operation original, + @Share("barOverride") LocalRef barOverride + ) { + if (original.call(instance)) + return true; + DurabilityBarEvent event = new DurabilityBarEvent(instance); + DurabilityBarEvent.Companion.publish(event); + barOverride.set(event.getBarOverride()); + return barOverride.get() != null; + } + + @WrapOperation(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getItemBarStep()I")) + private int overrideItemStep( + ItemStack instance, Operation original, + @Share("barOverride") LocalRef barOverride + ) { + if (barOverride.get() != null) + return Math.round(barOverride.get().getPercentage() * 13); + return original.call(instance); + } + + @WrapOperation(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getItemBarColor()I")) + private int overrideItemColor( + ItemStack instance, Operation original, + @Share("barOverride") LocalRef barOverride + ) { + if (barOverride.get() != null) + return barOverride.get().getColor().getColor(); + return original.call(instance); + } +} -- cgit