Skip to content

Commit

Permalink
Merge pull request #26 from UselessBullets/next-hudfade
Browse files Browse the repository at this point in the history
Implemented Hud Fade
  • Loading branch information
UselessBullets authored Nov 12, 2023
2 parents 8f63462 + cf814e2 commit 63d3194
Show file tree
Hide file tree
Showing 10 changed files with 151 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ public GuiOptionsPageLegacy(GuiScreen parent, GameSettings settings) {
legacyOptions.getCoordsOnMaps(),
legacyOptions.getForceButtonPrompts(),
legacyOptions.getForceLegacyTooltip(),
legacyOptions.getEnablePaperDoll());
legacyOptions.getEnablePaperDoll(),
legacyOptions.getEnableHUDFadeout(),
legacyOptions.getHUDFadeoutDelay());
this.addOptionsCategory("legacyui.options.panorama",
legacyOptions.getEnablePanorama(),
legacyOptions.getPanoramaScrollLength(),
Expand Down
41 changes: 41 additions & 0 deletions src/main/java/useless/legacyui/Gui/GuiScreens/UtilGui.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,17 @@

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiIngame;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.render.EntityRenderDispatcher;
import net.minecraft.client.render.Lighting;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.entity.ItemEntityRenderer;
import net.minecraft.core.item.ItemStack;
import org.lwjgl.opengl.GL11;
import useless.legacyui.Helper.IconHelper;
import useless.legacyui.LegacyUI;
import useless.legacyui.Mixins.Gui.GuiIngameAccessor;

public class UtilGui {
public static Minecraft mc = Minecraft.getMinecraft(Minecraft.class);
Expand Down Expand Up @@ -40,6 +44,29 @@ public static void drawIconTexture(Gui gui, int x, int y, int[] iconCoord, float
width,
(1f/(IconHelper.ICON_RESOLUTION * IconHelper.ICON_ATLAS_WIDTH_TILES)) * (1/scale));
}
public static float blockAlpha = 1f;
public static void renderInventorySlot(GuiIngame gui, int itemIndex, int x, int y, float delta, float alpha) {
blockAlpha = alpha;
ItemEntityRenderer itemRenderer = ((GuiIngameAccessor)gui).getItemRenderer();
ItemStack itemstack = mc.thePlayer.inventory.mainInventory[itemIndex];
if (itemstack == null) {
return;
}
float animProgress = (float)itemstack.animationsToGo - delta;
if (animProgress > 0.0f) {
GL11.glPushMatrix();
float f2 = 1.0f + animProgress / 5.0f;
GL11.glTranslatef(x + 8, y + 12, 0.0f);
GL11.glScalef(1.0f / f2, (f2 + 1.0f) / 2.0f, 1.0f);
GL11.glTranslatef(-(x + 8), -(y + 12), 0.0f);
}
itemRenderer.renderItemIntoGUI(mc.fontRenderer, mc.renderEngine, itemstack, x, y, alpha);
if (animProgress > 0.0f) {
GL11.glPopMatrix();
}
itemRenderer.renderItemOverlayIntoGUI(mc.fontRenderer, mc.renderEngine, itemstack, x, y, alpha);
blockAlpha = 1f;
}
public static void drawPanorama(GuiScreen gui, int panoNum){
GL11.glDisable(2896);
GL11.glDisable(2912);
Expand Down Expand Up @@ -113,4 +140,18 @@ public static void drawPaperDoll(boolean drawRight){
GL11.glDisable(32826);
prevYRot = mc.thePlayer.yRot;
}
private static int prevItem = -1;
private static long timeHotbarLastActive = 0;
public static float getHotbarAlpha(){
if (!LegacyUI.modSettings.getEnableHUDFadeout().value) return 1;
if (mc.thePlayer.inventory.currentItem != prevItem) {
timeHotbarLastActive = System.currentTimeMillis();
}
prevItem = mc.thePlayer.inventory.currentItem;
long currentTime = System.currentTimeMillis();
if (currentTime - timeHotbarLastActive <= (LegacyUI.modSettings.getHUDFadeoutDelay().value * 10000)){
return 1f;
}
return (float) Math.max(1f - ((currentTime - timeHotbarLastActive) - (LegacyUI.modSettings.getHUDFadeoutDelay().value * 10000))/1000f, 0.2);
}
}
12 changes: 12 additions & 0 deletions src/main/java/useless/legacyui/Mixins/Gui/GuiIngameAccessor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package useless.legacyui.Mixins.Gui;

import net.minecraft.client.gui.GuiIngame;
import net.minecraft.client.render.entity.ItemEntityRenderer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

@Mixin(value = GuiIngame.class, remap = false)
public interface GuiIngameAccessor {
@Accessor
ItemEntityRenderer getItemRenderer();
}
33 changes: 33 additions & 0 deletions src/main/java/useless/legacyui/Mixins/Gui/GuiIngameMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,13 @@
import net.minecraft.client.gui.GuiContainer;
import net.minecraft.client.gui.GuiIngame;
import net.minecraft.client.option.ImmersiveModeOption;
import net.minecraft.client.render.FontRenderer;
import net.minecraft.client.render.RenderEngine;
import net.minecraft.client.render.entity.ItemEntityRenderer;
import net.minecraft.core.item.Item;
import net.minecraft.core.item.ItemStack;
import net.minecraft.core.player.gamemode.Gamemode;
import org.lwjgl.opengl.GL11;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
Expand All @@ -29,6 +33,15 @@ private boolean dontRenderInGuiHotbar(ImmersiveModeOption instance){
}
return instance.drawHotbar();
}
@Redirect(method = "renderGameOverlay(FZII)V", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glColor4f(FFFF)V", ordinal = 0))
private void fadeOutHotBar1(float red, float green, float blue, float alpha){
GL11.glColor4d(red, green, blue, UtilGui.getHotbarAlpha());
}
@Redirect(method = "renderGameOverlay(FZII)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiIngame;renderInventorySlot(IIIFF)V"))
private void fadeOutItems(GuiIngame guiIngame, int itemIndex, int x, int y, float delta, float alpha){
UtilGui.renderInventorySlot((GuiIngame)(Object)this, itemIndex, x, y, delta, UtilGui.getHotbarAlpha());
}

@Redirect(method = "renderGameOverlay(FZII)V", at = @At(value = "INVOKE", target = "Ljava/lang/Boolean;booleanValue()Z", ordinal = 11))
private boolean dontRenderInGuiArmor(Boolean instance){
if (LegacyUI.modSettings.getHideHotbarInGUIs().value){
Expand All @@ -38,6 +51,26 @@ private boolean dontRenderInGuiArmor(Boolean instance){
}
return instance;
}
@Redirect(method = "renderGameOverlay(FZII)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/ItemEntityRenderer;renderItemIntoGUI(Lnet/minecraft/client/render/FontRenderer;Lnet/minecraft/client/render/RenderEngine;Lnet/minecraft/core/item/ItemStack;IIF)V", ordinal = 1))
private void alphaHeldItem(ItemEntityRenderer instance, FontRenderer fontrenderer, RenderEngine renderengine, ItemStack itemstack, int i, int j, float alpha){
UtilGui.blockAlpha = UtilGui.getHotbarAlpha();
instance.renderItemIntoGUI(fontrenderer, renderengine, itemstack, i, j, UtilGui.getHotbarAlpha());
UtilGui.blockAlpha = 1;
}
@Inject(method = "renderGameOverlay(FZII)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/controller/PlayerController;shouldDrawHUD()Z"))
private void heartsAndArmorAlphaOn(float partialTicks, boolean flag, int mouseX, int mouseY, CallbackInfo ci){
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(770, 771);
GL11.glColor4f(1,1,1, UtilGui.getHotbarAlpha());
}
@Inject(method = "renderGameOverlay(FZII)V", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glEnable(I)V", ordinal = 2))
private void heartsAndArmorAlphaOff(float partialTicks, boolean flag, int mouseX, int mouseY, CallbackInfo ci){
GL11.glDisable(GL11.GL_BLEND);
GL11.glColor4f(1,1,1, 1);
}



@Redirect(method = "renderGameOverlay(FZII)V", at = @At(value = "INVOKE", target = "Ljava/lang/Boolean;booleanValue()Z", ordinal = 12))
private boolean dontRenderInGuiHeldItem(Boolean instance){
if (LegacyUI.modSettings.getHideHotbarInGUIs().value){
Expand Down
22 changes: 22 additions & 0 deletions src/main/java/useless/legacyui/Mixins/ItemEntityRendererMixin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package useless.legacyui.Mixins;

import net.minecraft.client.render.FontRenderer;
import net.minecraft.client.render.RenderEngine;
import net.minecraft.client.render.entity.ItemEntityRenderer;
import org.lwjgl.opengl.GL11;
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.callback.CallbackInfo;

@Mixin(value = ItemEntityRenderer.class, remap = false)
public class ItemEntityRendererMixin {
@Inject(method = "drawItemIntoGui(Lnet/minecraft/client/render/FontRenderer;Lnet/minecraft/client/render/RenderEngine;IIIIIFF)V", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glDisable(I)V", ordinal = 1))
private void enableAlphaOnItems(FontRenderer fontrenderer, RenderEngine renderengine, int i, int j, int k, int l, int i1, float brightness, float alpha, CallbackInfo ci){
GL11.glEnable(GL11.GL_BLEND);
}
@Inject(method = "drawItemIntoGui(Lnet/minecraft/client/render/FontRenderer;Lnet/minecraft/client/render/RenderEngine;IIIIIFF)V", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glEnable(I)V", ordinal = 1))
private void disableAlphaAfterItems(FontRenderer fontrenderer, RenderEngine renderengine, int i, int j, int k, int l, int i1, float brightness, float alpha, CallbackInfo ci){
GL11.glDisable(GL11.GL_BLEND);
}
}
16 changes: 16 additions & 0 deletions src/main/java/useless/legacyui/Mixins/RenderBlocksMixin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package useless.legacyui.Mixins;

import net.minecraft.client.render.RenderBlocks;
import org.lwjgl.opengl.GL11;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import useless.legacyui.Gui.GuiScreens.UtilGui;

@Mixin(value = RenderBlocks.class, remap = false)
public class RenderBlocksMixin {
@Redirect(method = "renderBlockOnInventory(Lnet/minecraft/core/block/Block;IF)V", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glColor4f(FFFF)V"))
private void addAlphaSupport(float red, float green, float blue, float alpha){
GL11.glColor4f(red, green, blue, UtilGui.blockAlpha);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,10 @@ private void onOptionChanged(Option<?> option, CallbackInfo ci){
private void displayString(Option<?> option, CallbackInfoReturnable<String> cir){
I18n translator = I18n.getInstance();
if (option == panoramaScrollLength){
cir.setReturnValue("" + (panoramaScrollLength.value + 1) * 15 + " " + translator.translateKey("options.legacyui.panoramaSpeed.unit"));
cir.setReturnValue((panoramaScrollLength.value + 1) * 15 + " " + translator.translateKey("options.legacyui.panoramaSpeed.unit"));
}
if (option == HUDFadeoutDelay){
cir.setReturnValue(String.format("%.1f", HUDFadeoutDelay.value * 10) + " " + translator.translateKey("options.legacyui.hudFadeout.unit"));
}
}
@Unique
Expand Down Expand Up @@ -89,6 +92,10 @@ private void displayString(Option<?> option, CallbackInfoReturnable<String> cir)
public BooleanOption forceLegacyTooltip = new BooleanOption(thisAs, "legacyui.forceLegacyTooltip", false);
@Unique
public BooleanOption enablePaperDoll = new BooleanOption(thisAs, "legacyui.enablePaperDoll", false);
@Unique
public BooleanOption enableHUDFadeout = new BooleanOption(thisAs, "legacyui.enableHUDFadeout", true);
@Unique
public FloatOption HUDFadeoutDelay = new FloatOption(thisAs, "legacyui.hudFadeoutDelay", 0.5f);
public BooleanOption getCraftingHideUndiscoveredItems() {
return craftingHideUndiscoveredItems;
}
Expand Down Expand Up @@ -154,12 +161,16 @@ public BooleanOption getForceButtonPrompts() {
public BooleanOption getEnableAutoBridge() {
return enableAutoBridge;
}

public BooleanOption getForceLegacyTooltip() {
return forceLegacyTooltip;
}

public BooleanOption getEnablePaperDoll() {
return enablePaperDoll;
}
public BooleanOption getEnableHUDFadeout() {
return enableHUDFadeout;
}
public FloatOption getHUDFadeoutDelay() {
return HUDFadeoutDelay;
}
}
2 changes: 2 additions & 0 deletions src/main/java/useless/legacyui/Settings/ILegacyOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,6 @@ public interface ILegacyOptions {
BooleanOption getEnableAutoBridge();
BooleanOption getForceLegacyTooltip();
BooleanOption getEnablePaperDoll();
BooleanOption getEnableHUDFadeout();
FloatOption getHUDFadeoutDelay();
}
3 changes: 3 additions & 0 deletions src/main/resources/lang/legacyui/en_US.lang
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ options.legacyui.forceButtonPrompts=Force Button Prompts
options.legacyui.enableAutoBridge=Enable Easy Bridge
options.legacyui.forceLegacyTooltip=Enable Legacy Tooltip
options.legacyui.enablePaperDoll=Enable Paper Doll
options.legacyui.enableHUDFadeout=Enable HUD Fadeout
options.legacyui.hudFadeoutDelay=HUD Fadeout Delay
options.legacyui.hudFadeout.unit=Seconds

options.tooltipStyle.legacy=Legacy
options.legacyui.tooltipStyle.legacy=Legacy
Expand Down
7 changes: 5 additions & 2 deletions src/main/resources/legacyui.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,21 @@
"ContainerMixin",
"ControllerInputMixin",
"EntityPlayerSPMixin",
"ItemEntityRendererMixin",
"MapItemRendererMixin",
"MinecraftMixin",
"Gamemodes.GamemodeCreativeMixin",
"Gamemodes.GamemodeSurvivalMixin",
"Gui.GuiAchievementMixin",
"Gui.GuiAchievementsMixin",
"Gui.GuiChestMixin",
"Gui.GuiContainerAccessor",
"Gui.GuiContainerMixin",
"Gui.GuiCraftingMixin",
"Gui.GuiDispenserMixin",
"Gui.GuiFurnaceMixin",
"Gui.GuiGuidebookMixin",
"Gui.GuiIngameAccessor",
"Gui.GuiIngameMixin",
"Gui.GuiInventoryAccessor",
"Gui.GuiInventoryCreativeMixin",
Expand All @@ -30,12 +33,12 @@
"Gui.GuiOptionsBaseMixin",
"Gui.GuiScreenMixin",
"Gui.GuiTrommelMixin",
"Gui.GuiContainerAccessor",
"Modded.NoNameDyes.GuiBleacherMixin",
"Modded.PotatoLogistics.GuiFilterMixin",
"Multiplayer.PlayerControllerMPMixin",
"Settings.GameSettingsMixin",
"Settings.TooltipStyleMixin"
"Settings.TooltipStyleMixin",
"RenderBlocksMixin"
],
"injectors": {
"defaultRequire": 1
Expand Down

0 comments on commit 63d3194

Please # to comment.