HTTPS
https://git.nageyqma.icu/nageyqma/blade-addons-next.git
SSH
git@git.nageyqma.icu:nageyqma/blade-addons-next.git
HTTPS 链接可直接 git clone;推送代码请使用 SSH。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
package blade.addon.mixin;
import blade.addon.features.dungeon.f7.terms.TitleHider;
import blade.addon.features.dungeon.f7.terms.device.DeviceNotifier;
import blade.addon.utils.config.components.Components;
import blade.addon.utils.config.values.ExtraOptions;
import blade.addon.utils.config.values.Visual;
import blade.addon.utils.interfaces.GameHud;
import blade.addon.utils.rendering.DrawEvents;
import com.llamalad7.mixinextras.sugar.Local;
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.gui.GuiGraphicsExtractor;
import net.minecraft.client.gui.Hud;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.util.profiling.Profiler;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Hud.class)
public class HudMixin implements GameHud {
@Shadow
private Component title;
@Shadow
private Component subtitle;
@Shadow
private int titleFadeInTime;
@Shadow
private int titleStayTime;
@Shadow
private int titleFadeOutTime;
@Shadow
private int titleTime;
@Shadow
private int toolHighlightTimer;
@Inject(method = "extractSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphicsExtractor;item(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;III)V"), order = 2000)
public void drawBackground(GuiGraphicsExtractor context, int x, int y, DeltaTracker tickCounter, Player player, ItemStack stack, int seed, CallbackInfo ci) {
DrawEvents.HUD_SLOT_BEFORE.invoke(slotEvent -> slotEvent.draw(context, stack, x, y));
}
@Inject(method = "extractSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphicsExtractor;item(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;III)V", shift = At.Shift.AFTER), order = 2000)
public void drawStar(GuiGraphicsExtractor context, int x, int y, DeltaTracker tickCounter, Player player, ItemStack stack, int seed, CallbackInfo ci) {
DrawEvents.HUD_SLOT_AFTER.invoke(slotEvent -> slotEvent.draw(context, stack, x, y));
}
@Inject(method = "extractEffects", at = @At("HEAD"), cancellable = true, order = 2000)
public void renderStatusEffectsOverLay(GuiGraphicsExtractor context, DeltaTracker tickCounter, CallbackInfo ci) {
if (Visual.hideStatusOverLay) {
ci.cancel();
}
}
@Inject(method = "setTitle", at = @At("HEAD"), cancellable = true, order = 2000)
public void setTitle(Component title, CallbackInfo ci) {
if (TitleHider.shouldHideTitle(title)) ci.cancel();
else if (DeviceNotifier.disableTitles(title)) ci.cancel();
}
@Inject(method = "setSubtitle", at = @At("HEAD"), cancellable = true, order = 2000)
public void setSubtitle(Component subtitle, CallbackInfo ci) {
if (TitleHider.shouldHideTitle(subtitle)) ci.cancel();
else if (DeviceNotifier.disableTitles(subtitle)) ci.cancel();
}
@Inject(method = "extractSelectedItemName", at=@At("HEAD"))
private void getFadeDuration(GuiGraphicsExtractor graphics, CallbackInfo ci) {
if (!ExtraOptions.moveToolTip) return;
Components.toolTipDisplay.setFade(toolHighlightTimer);
}
@Inject(method = "extractSelectedItemName", at= @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphicsExtractor;textWithBackdrop(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIII)V"), cancellable = true)
private void renderHeldItemTooltip(GuiGraphicsExtractor graphics, CallbackInfo ci, @Local(name = "str") MutableComponent mutableText, @Local(name = "alpha") int color) {
if (!ExtraOptions.moveToolTip) return;
ci.cancel();
Components.toolTipDisplay.setText(mutableText);
Components.toolTipDisplay.setColor(color);
Profiler.get().pop();
}
@Unique
public void blade_addons$forceTitle(Component title, Component subtitle) {
this.title = title;
this.subtitle = subtitle;
this.titleTime = this.titleFadeInTime + this.titleStayTime + this.titleFadeOutTime;
}
}