diff --git a/src/main/java/useless/legacyui/Gui/GuiScreens/Options/GuiOptionsPageLegacy.java b/src/main/java/useless/legacyui/Gui/GuiScreens/Options/GuiOptionsPageLegacy.java index e8283ef..431dea0 100644 --- a/src/main/java/useless/legacyui/Gui/GuiScreens/Options/GuiOptionsPageLegacy.java +++ b/src/main/java/useless/legacyui/Gui/GuiScreens/Options/GuiOptionsPageLegacy.java @@ -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(), diff --git a/src/main/java/useless/legacyui/Gui/GuiScreens/UtilGui.java b/src/main/java/useless/legacyui/Gui/GuiScreens/UtilGui.java index d7d0854..a91bc3b 100644 --- a/src/main/java/useless/legacyui/Gui/GuiScreens/UtilGui.java +++ b/src/main/java/useless/legacyui/Gui/GuiScreens/UtilGui.java @@ -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); @@ -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); @@ -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); + } } diff --git a/src/main/java/useless/legacyui/Mixins/Gui/GuiIngameAccessor.java b/src/main/java/useless/legacyui/Mixins/Gui/GuiIngameAccessor.java new file mode 100644 index 0000000..77a12a3 --- /dev/null +++ b/src/main/java/useless/legacyui/Mixins/Gui/GuiIngameAccessor.java @@ -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(); +} diff --git a/src/main/java/useless/legacyui/Mixins/Gui/GuiIngameMixin.java b/src/main/java/useless/legacyui/Mixins/Gui/GuiIngameMixin.java index e321266..35bb734 100644 --- a/src/main/java/useless/legacyui/Mixins/Gui/GuiIngameMixin.java +++ b/src/main/java/useless/legacyui/Mixins/Gui/GuiIngameMixin.java @@ -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; @@ -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){ @@ -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){ diff --git a/src/main/java/useless/legacyui/Mixins/ItemEntityRendererMixin.java b/src/main/java/useless/legacyui/Mixins/ItemEntityRendererMixin.java new file mode 100644 index 0000000..d1a2d2d --- /dev/null +++ b/src/main/java/useless/legacyui/Mixins/ItemEntityRendererMixin.java @@ -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); + } +} diff --git a/src/main/java/useless/legacyui/Mixins/RenderBlocksMixin.java b/src/main/java/useless/legacyui/Mixins/RenderBlocksMixin.java new file mode 100644 index 0000000..7e40989 --- /dev/null +++ b/src/main/java/useless/legacyui/Mixins/RenderBlocksMixin.java @@ -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); + } +} diff --git a/src/main/java/useless/legacyui/Mixins/Settings/GameSettingsMixin.java b/src/main/java/useless/legacyui/Mixins/Settings/GameSettingsMixin.java index 567e6f2..3bdee14 100644 --- a/src/main/java/useless/legacyui/Mixins/Settings/GameSettingsMixin.java +++ b/src/main/java/useless/legacyui/Mixins/Settings/GameSettingsMixin.java @@ -36,7 +36,10 @@ private void onOptionChanged(Option option, CallbackInfo ci){ private void displayString(Option option, CallbackInfoReturnable 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 @@ -89,6 +92,10 @@ private void displayString(Option option, CallbackInfoReturnable 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; } @@ -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; + } } diff --git a/src/main/java/useless/legacyui/Settings/ILegacyOptions.java b/src/main/java/useless/legacyui/Settings/ILegacyOptions.java index 8cebf43..d756e14 100644 --- a/src/main/java/useless/legacyui/Settings/ILegacyOptions.java +++ b/src/main/java/useless/legacyui/Settings/ILegacyOptions.java @@ -28,4 +28,6 @@ public interface ILegacyOptions { BooleanOption getEnableAutoBridge(); BooleanOption getForceLegacyTooltip(); BooleanOption getEnablePaperDoll(); + BooleanOption getEnableHUDFadeout(); + FloatOption getHUDFadeoutDelay(); } diff --git a/src/main/resources/lang/legacyui/en_US.lang b/src/main/resources/lang/legacyui/en_US.lang index c253c0f..1c8bc1e 100644 --- a/src/main/resources/lang/legacyui/en_US.lang +++ b/src/main/resources/lang/legacyui/en_US.lang @@ -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 diff --git a/src/main/resources/legacyui.mixins.json b/src/main/resources/legacyui.mixins.json index 24a32d4..d14bfae 100644 --- a/src/main/resources/legacyui.mixins.json +++ b/src/main/resources/legacyui.mixins.json @@ -10,6 +10,7 @@ "ContainerMixin", "ControllerInputMixin", "EntityPlayerSPMixin", + "ItemEntityRendererMixin", "MapItemRendererMixin", "MinecraftMixin", "Gamemodes.GamemodeCreativeMixin", @@ -17,11 +18,13 @@ "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", @@ -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