From c2af47b2b331697bf2c0ae196e0d3879d19a5a5b Mon Sep 17 00:00:00 2001 From: ev chang Date: Mon, 6 May 2024 01:07:59 -0400 Subject: [PATCH] Fix compat with Forge events --- gradle.properties | 2 +- .../sk1er/patcher/config/PatcherConfig.java | 3 +- .../org/polyfrost/vanillahud/VanillaHUD.java | 55 ++- .../vanillahud/mixin/EntityRendererMixin.java | 4 + .../vanillahud/mixin/GuiIngameForgeMixin.java | 333 +++++++++++++++--- .../mixin/GuiIngameForgeMixin_Cancel.java | 44 +-- .../mixin/GuiIngameForgeMixin_CancelLow.java | 46 +++ .../vanillahud/mixin/GuiIngameMixin.java | 19 + .../mixin/GuiPlayerTabOverlayMixin.java | 37 ++ .../vanillahud/mixin/GuiSpectatorMixin.java | 17 + .../vanillahud/utils/DummyClassUtils.java | 17 + src/main/resources/mixins.vanillahud.json | 1 + 12 files changed, 495 insertions(+), 83 deletions(-) create mode 100644 src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameForgeMixin_CancelLow.java create mode 100644 src/main/java/org/polyfrost/vanillahud/utils/DummyClassUtils.java diff --git a/gradle.properties b/gradle.properties index c2815d2..a0fd961 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_name = VanillaHUD mod_id = vanillahud -mod_version = 2.2.0 +mod_version = 2.2.1 mod_archives_name=VanillaHUD # Gradle Configuration -- DO NOT TOUCH THESE VALUES. diff --git a/src/dummy/java/club/sk1er/patcher/config/PatcherConfig.java b/src/dummy/java/club/sk1er/patcher/config/PatcherConfig.java index 6c3b14a..e336be4 100644 --- a/src/dummy/java/club/sk1er/patcher/config/PatcherConfig.java +++ b/src/dummy/java/club/sk1er/patcher/config/PatcherConfig.java @@ -1,5 +1,6 @@ package club.sk1er.patcher.config; public class PatcherConfig { - + public static boolean tabHeightAllow; + public static int tabHeight; } diff --git a/src/main/java/org/polyfrost/vanillahud/VanillaHUD.java b/src/main/java/org/polyfrost/vanillahud/VanillaHUD.java index 284520c..34c4844 100644 --- a/src/main/java/org/polyfrost/vanillahud/VanillaHUD.java +++ b/src/main/java/org/polyfrost/vanillahud/VanillaHUD.java @@ -2,11 +2,17 @@ import Apec.Components.Gui.GuiIngame.ApecGuiIngameForge; import cc.polyfrost.oneconfig.config.data.Mod; +import cc.polyfrost.oneconfig.events.EventManager; +import cc.polyfrost.oneconfig.events.event.Stage; +import cc.polyfrost.oneconfig.events.event.TickEvent; +import cc.polyfrost.oneconfig.libs.eventbus.Subscribe; +import cc.polyfrost.oneconfig.libs.universal.UMinecraft; import cc.polyfrost.oneconfig.utils.Notifications; import net.minecraft.client.Minecraft; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.util.StringUtils; import net.minecraftforge.fml.common.Loader; import org.polyfrost.vanillahud.config.ModConfig; -import org.polyfrost.vanillahud.hud.*; import org.polyfrost.vanillahud.utils.TabListManager; import java.util.ArrayList; @@ -20,12 +26,16 @@ public class VanillaHUD { public static ModConfig modConfig; private static boolean apec = false; public static boolean isPatcher = false; + private static boolean isSBA = false; + private static boolean inSkyblock = false; public static ArrayList mods = new ArrayList<>(); + private int tickAmount = 0; @net.minecraftforge.fml.common.Mod.EventHandler public void onFMLInitialization(net.minecraftforge.fml.common.event.FMLInitializationEvent event) { modConfig = new ModConfig(); TabListManager.asyncUpdateList(); + EventManager.INSTANCE.register(this); } @net.minecraftforge.fml.common.Mod.EventHandler @@ -39,9 +49,52 @@ public void onPostInit(net.minecraftforge.fml.common.event.FMLPostInitialization } apec = Loader.isModLoaded("apec"); isPatcher = Loader.isModLoaded("patcher"); + isSBA = Loader.isModLoaded("skyblockaddons") || Loader.isModLoaded("sbaunofficial"); + } + + @Subscribe + private void onTick(TickEvent event) { + if (event.stage == Stage.START) { + tickAmount++; + if (tickAmount % 20 == 0) { + if (UMinecraft.getPlayer() != null) { + Minecraft mc = Minecraft.getMinecraft(); + if (mc != null && mc.theWorld != null && !mc.isSingleplayer()) { + ScoreObjective scoreboardObj = mc.theWorld.getScoreboard().getObjectiveInDisplaySlot(1); + if (scoreboardObj != null) { + String scObjName = cleanSB(scoreboardObj.getDisplayName()); + if (scObjName.contains("SKYBLOCK")) { + inSkyblock = true; + return; + } + } + } + inSkyblock = false; + } + + tickAmount = 0; + } + } + } + + private static String cleanSB(String scoreboard) { + char[] nvString = StringUtils.stripControlCodes(scoreboard).toCharArray(); + StringBuilder cleaned = new StringBuilder(); + + for (char c : nvString) { + if ((int) c > 20 && (int) c < 127) { + cleaned.append(c); + } + } + + return cleaned.toString(); } public static boolean isApec() { return apec && Minecraft.getMinecraft().ingameGUI instanceof ApecGuiIngameForge; } + + public static boolean inSBASkyblock() { + return inSkyblock && isSBA; + } } diff --git a/src/main/java/org/polyfrost/vanillahud/mixin/EntityRendererMixin.java b/src/main/java/org/polyfrost/vanillahud/mixin/EntityRendererMixin.java index 6bb0bb1..11894e2 100644 --- a/src/main/java/org/polyfrost/vanillahud/mixin/EntityRendererMixin.java +++ b/src/main/java/org/polyfrost/vanillahud/mixin/EntityRendererMixin.java @@ -3,6 +3,7 @@ import cc.polyfrost.oneconfig.libs.universal.UResolution; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.EntityRenderer; +import org.polyfrost.vanillahud.VanillaHUD; import org.polyfrost.vanillahud.hud.TabList; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -13,6 +14,9 @@ public class EntityRendererMixin { @Inject(method = "updateCameraAndRender", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiIngame;renderGameOverlay(F)V", shift = At.Shift.AFTER)) private void draw(float partialTicks, long nanoTime, CallbackInfo ci) { + if (VanillaHUD.inSBASkyblock()) { + return; + } TabList.isGuiIngame = false; ((GuiIngameForgeAccessor) Minecraft.getMinecraft().ingameGUI).drawPlayerList(UResolution.getScaledWidth(), UResolution.getScaledHeight()); } diff --git a/src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameForgeMixin.java b/src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameForgeMixin.java index de8f17a..8c1b18e 100644 --- a/src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameForgeMixin.java +++ b/src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameForgeMixin.java @@ -14,6 +14,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.scoreboard.ScoreObjective; import net.minecraftforge.client.GuiIngameForge; +import net.minecraftforge.common.ForgeHooks; import org.lwjgl.opengl.GL11; import org.polyfrost.vanillahud.VanillaHUD; import org.polyfrost.vanillahud.hud.*; @@ -61,48 +62,122 @@ public abstract class GuiIngameForgeMixin { @Shadow protected abstract void renderArmor(int width, int height); - @Redirect(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderAir(II)V")) - private void air(GuiIngameForge instance, int width, int height) { + @ModifyArgs(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderAir(II)V")) + private void air(Args args) { + if (VanillaHUD.isApec()) { + return; + } + args.set(0, -182); + args.set(1, right_height); + } + + private boolean needsToResetAir = false; + + @Inject(method = "renderAir", at = @At(value = "INVOKE", target = "Lnet/minecraft/profiler/Profiler;startSection(Ljava/lang/String;)V")) + private void air(CallbackInfo ci) { + if (VanillaHUD.isApec()) { + return; + } GlStateManager.pushMatrix(); GlStateManager.translate((int) Air.hud.position.getX(), (int) Air.hud.position.getY() - (Air.AirHud.healthLink ? healthLink() : 0) - (Air.AirHud.mountLink ? mountLink() : 0), 0F); GlStateManager.scale(Air.hud.getScale(), Air.hud.getScale(), 1F); - renderAir(-182, right_height); - GlStateManager.popMatrix(); + needsToResetAir = true; + } + + @Inject(method = "renderAir", at = @At("RETURN"), remap = false) + private void airReturn(CallbackInfo ci) { + if (needsToResetAir) { + GlStateManager.popMatrix(); + needsToResetAir = false; + } + } + + @Inject(method = "renderAir", at = @At(value = "INVOKE", target = "Lnet/minecraft/profiler/Profiler;endSection()V")) + private void airPop(CallbackInfo ci) { + if (needsToResetAir) { + GlStateManager.popMatrix(); + needsToResetAir = false; + } } @Redirect(method = "renderAir", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/EntityPlayer;isInsideOfMaterial(Lnet/minecraft/block/material/Material;)Z")) private boolean airExample(EntityPlayer instance, Material material) { + if (VanillaHUD.isApec()) { + return instance.isInsideOfMaterial(material); + } return instance.isInsideOfMaterial(material) || HudCore.editing; } @ModifyArgs(method = "renderAir", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;drawTexturedModalRect(IIIIII)V")) private void airAlignment(Args args) { + if (VanillaHUD.isApec()) { + return; + } int left = (int) args.get(0) + (Air.hud.alignment ? 81 : 9); args.set(0, Air.hud.alignment ? left : -left); } @Redirect(method = "renderAir", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getRenderViewEntity()Lnet/minecraft/entity/Entity;")) private Entity airEdit(Minecraft instance) { + if (VanillaHUD.isApec()) { + return instance.getRenderViewEntity(); + } return HudCore.editing ? instance.thePlayer : instance.getRenderViewEntity(); } - @Redirect(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderArmor(II)V")) - private void armor(GuiIngameForge instance, int width, int height) { + @ModifyArgs(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderArmor(II)V")) + private void armor(Args args) { + if (VanillaHUD.isApec()) { + return; + } + args.set(0, 182); + args.set(1, left_height); + } + + private boolean needsToResetArmor = false; + + @Inject(method = "renderArmor", at = @At(value = "INVOKE", target = "Lnet/minecraft/profiler/Profiler;startSection(Ljava/lang/String;)V")) + private void armor(CallbackInfo ci) { + if (VanillaHUD.isApec()) { + return; + } GlStateManager.pushMatrix(); GlStateManager.translate((int) Armor.hud.position.getX(), (int) Armor.hud.position.getY() - (Armor.ArmorHud.healthLink ? healthLink() : 0) - (Armor.ArmorHud.mountLink ? mountLink() : 0), 0F); GlStateManager.scale(Armor.hud.getScale(), Armor.hud.getScale(), 1F); - renderArmor(182, left_height); - GlStateManager.popMatrix(); + needsToResetArmor = true; + } + + @Inject(method = "renderArmor", at = @At("RETURN"), remap = false) + private void armorReturn(CallbackInfo ci) { + if (needsToResetArmor) { + GlStateManager.popMatrix(); + needsToResetArmor = false; + } + } + + @Inject(method = "renderArmor", at = @At(value = "INVOKE", target = "Lnet/minecraft/profiler/Profiler;endSection()V")) + private void armorPop(CallbackInfo ci) { + if (needsToResetArmor) { + GlStateManager.popMatrix(); + needsToResetArmor = false; + } } @Redirect(method = "renderArmor", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/common/ForgeHooks;getTotalArmorValue(Lnet/minecraft/entity/player/EntityPlayer;)I"), remap = false) private int armorExample(EntityPlayer player) { - int value = player.getTotalArmorValue(); + if (VanillaHUD.isApec()) { + return ForgeHooks.getTotalArmorValue(player); + } + int value = ForgeHooks.getTotalArmorValue(player); return HudCore.editing ? value > 0 ? value : 10 : value; } @Redirect(method = "renderArmor", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;drawTexturedModalRect(IIIIII)V")) private void armorFlip(GuiIngameForge instance, int x, int y, int textureX, int textureY, int width, int height) { + if (VanillaHUD.isApec()) { + instance.drawTexturedModalRect(x, y, textureX, textureY, width, height); + return; + } int left = Armor.hud.alignment ? 72 - x : x; if (Armor.hud.alignment && textureX == 25) { Gui.drawScaledCustomSizeModalRect(left, y, textureX + 9, textureY, -9, 9, 9, 9, 256, 256); @@ -111,36 +186,104 @@ private void armorFlip(GuiIngameForge instance, int x, int y, int textureX, int } } - @Redirect(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderExperience(II)V")) - private void exp(GuiIngameForge instance, int width, int height) { + @ModifyArgs(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderExperience(II)V")) + private void exp(Args args) { + if (VanillaHUD.isApec()) { + return; + } + args.set(0, 182); + args.set(1, 29); + } + + private boolean needsToResetExp = false; + + @Inject(method = "renderExperience", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;color(FFFF)V", ordinal = 0)) + private void experience(int width, int height, CallbackInfo ci) { + if (VanillaHUD.isApec()) { + return; + } GlStateManager.pushMatrix(); GlStateManager.translate((int) Experience.hud.position.getX(), (int) Experience.hud.position.getY(), 0F); GlStateManager.scale(Experience.hud.getScale(), Experience.hud.getScale(), 1F); - renderExperience(182, 29); - GlStateManager.popMatrix(); + needsToResetExp = true; + } + + @Inject(method = "renderExperience", at = @At("RETURN"), remap = false) + private void experienceReturn(CallbackInfo ci) { + if (needsToResetExp) { + GlStateManager.popMatrix(); + needsToResetExp = false; + } + } + + @Inject(method = "renderExperience", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;color(FFFF)V", shift = At.Shift.AFTER, ordinal = 1)) + private void experiencePop(CallbackInfo ci) { + if (needsToResetExp) { + GlStateManager.popMatrix(); + needsToResetExp = false; + } } @ModifyArgs(method = "renderExperience", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/FontRenderer;drawString(Ljava/lang/String;III)I")) private void expLevelHeight(Args args) { + if (VanillaHUD.isApec()) { + return; + } args.set(2, (int) args.get(2) + 4 - (int) Experience.ExperienceHud.expHeight); } @Redirect(method = "renderExperience", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/PlayerControllerMP;gameIsSurvivalOrAdventure()Z")) private boolean expExample(PlayerControllerMP instance) { + if (VanillaHUD.isApec()) { + return instance.gameIsSurvivalOrAdventure(); + } return HudCore.editing || instance.gameIsSurvivalOrAdventure(); } - @Redirect(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderHealth(II)V")) - private void health(GuiIngameForge instance, int x, int y) { + @ModifyArgs(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderHealth(II)V")) + private void health(Args args) { + if (VanillaHUD.isApec()) { + return; + } + args.set(0, 182); + args.set(1, left_height); + } + + private boolean needsToResetHealth = false; + + @Inject(method = "renderHealth", at = @At(value = "INVOKE", target = "Lnet/minecraft/profiler/Profiler;startSection(Ljava/lang/String;)V")) + private void health(CallbackInfo ci) { + if (VanillaHUD.isApec()) { + return; + } GlStateManager.pushMatrix(); GlStateManager.translate((int) Health.hud.position.getX(), (int) Health.hud.position.getY() - (Health.HealthHud.mountLink ? mountLink() : 0), 0F); GlStateManager.scale(Health.hud.getScale(), Health.hud.getScale(), 1F); - renderHealth(182, left_height); - GlStateManager.popMatrix(); + needsToResetHealth = true; + } + + @Inject(method = "renderHealth", at = @At("RETURN"), remap = false) + private void healthReturn(CallbackInfo ci) { + if (needsToResetHealth) { + GlStateManager.popMatrix(); + needsToResetHealth = false; + } + } + + @Inject(method = "renderHealth", at = @At(value = "INVOKE", target = "Lnet/minecraft/profiler/Profiler;endSection()V")) + private void healthPop(CallbackInfo ci) { + if (needsToResetHealth) { + GlStateManager.popMatrix(); + needsToResetHealth = false; + } } @Redirect(method = "renderHealth", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;drawTexturedModalRect(IIIIII)V")) private void healthFlip(GuiIngameForge instance, int x, int y, int textureX, int textureY, int width, int height) { + if (VanillaHUD.isApec()) { + instance.drawTexturedModalRect(x, y, textureX, textureY, width, height); + return; + } if (textureX < 61 || ((textureX - 16) / 9) % 2 == 0 || !Health.hud.alignment) { instance.drawTexturedModalRect(x, y, textureX, textureY, width, height); } else { @@ -150,11 +293,17 @@ private void healthFlip(GuiIngameForge instance, int x, int y, int textureX, int @ModifyVariable(method = "renderHealth", at = @At("STORE"), ordinal = 14, remap = false) private int healthAlignment(int x) { + if (VanillaHUD.isApec()) { + return x; + } return Health.hud.alignment ? 72 - x : x; } @ModifyVariable(method = "renderHealth", at = @At("STORE"), ordinal = 15, remap = false) private int healthMode(int y) { + if (VanillaHUD.isApec()) { + return y; + } if (HudCore.editing) return 0; if (Health.HealthHud.mode) return y; return -y; @@ -162,39 +311,75 @@ private int healthMode(int y) { @Redirect(method = "renderHealth", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getRenderViewEntity()Lnet/minecraft/entity/Entity;")) private Entity healthEdit(Minecraft instance) { + if (VanillaHUD.isApec()) { + return instance.getRenderViewEntity(); + } return HudCore.editing ? instance.thePlayer : instance.getRenderViewEntity(); } @ModifyArgs(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderFood(II)V")) private void renderFood(Args args) { + if (VanillaHUD.isApec()) { + return; + } args.set(0, -182); args.set(1, right_height); } - @Inject(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderFood(II)V")) - private void hunger(float partialTicks, CallbackInfo ci) { + private boolean needsToResetHunger = false; + + @Inject(method = "renderFood", at = @At(value = "INVOKE", target = "Lnet/minecraft/profiler/Profiler;startSection(Ljava/lang/String;)V"), cancellable = true) + private void hunger(int width, int height, CallbackInfo ci) { + if (VanillaHUD.isApec()) { + return; + } + if (!(renderFood || Hunger.mountHud.isEnabled())) { + ci.cancel(); + return; + } GlStateManager.pushMatrix(); GlStateManager.translate((int) Hunger.hud.position.getX(), (int) Hunger.hud.position.getY() - (Hunger.HungerHud.healthLink ? healthLink() : 0) - (Hunger.HungerHud.mountLink ? mountLink() : 0), 0F); GlStateManager.scale(Hunger.hud.getScale(), Hunger.hud.getScale(), 1F); + needsToResetHunger = true; } - @Redirect(method = "renderGameOverlay", at = @At(value = "FIELD", target = "Lnet/minecraftforge/client/GuiIngameForge;renderFood:Z", ordinal = 1)) - private boolean hungerRender() { - return renderFood || Hunger.mountHud.isEnabled(); + @Inject(method = "renderFood", at = @At("RETURN"), remap = false) + private void hungerReturn(CallbackInfo ci) { + if (needsToResetHunger) { + GlStateManager.popMatrix(); + needsToResetHunger = false; + } + } + + @Inject(method = "renderFood", at = @At(value = "INVOKE", target = "Lnet/minecraft/profiler/Profiler;endSection()V"), remap = false) + private void hungerPop(CallbackInfo ci) { + if (needsToResetHunger) { + GlStateManager.popMatrix(); + needsToResetHunger = false; + } } @ModifyVariable(method = "renderFood", at = @At("STORE"), ordinal = 8, remap = false) private int hungerAlignment(int x) { + if (VanillaHUD.isApec()) { + return x; + } return Hunger.hud.alignment ? 81 + x : -(x + 9); } @Redirect(method = "renderFood", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getRenderViewEntity()Lnet/minecraft/entity/Entity;")) private Entity hungerEdit(Minecraft instance) { + if (VanillaHUD.isApec()) { + return instance.getRenderViewEntity(); + } return HudCore.editing ? instance.thePlayer : instance.getRenderViewEntity(); } @Redirect(method = "renderHealthMount", at = @At(value = "FIELD", target = "Lnet/minecraft/entity/player/EntityPlayer;ridingEntity:Lnet/minecraft/entity/Entity;")) private Entity mountExample(EntityPlayer instance) { + if (VanillaHUD.isApec()) { + return instance.ridingEntity; + } Entity entity = instance.ridingEntity; return (entity instanceof EntityLivingBase) ? entity : HudCore.editing ? instance : null; @@ -203,12 +388,19 @@ private Entity mountExample(EntityPlayer instance) { @Dynamic @ModifyVariable(method = "renderHealthMount", at = @At("STORE"), ordinal = 13, remap = false) private int mountAlignment(int x) { + if (VanillaHUD.isApec()) { + return x; + } boolean alignment = Hunger.mountHud.isEnabled() ? Hunger.mountHud.alignment : Hunger.hud.alignment; return alignment ? 81 + x : -(x + 9); } @Redirect(method = "renderHealthMount", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;drawTexturedModalRect(IIIIII)V")) private void mountFlip(GuiIngameForge instance, int x, int y, int textureX, int textureY, int width, int height) { + if (VanillaHUD.isApec()) { + instance.drawTexturedModalRect(x, y, textureX, textureY, width, height); + return; + } if (textureX < 97 || ((textureX - 16) / 9) % 2 == 0 || getMountHud().alignment) { instance.drawTexturedModalRect(x, y, textureX, textureY, width, height); } else { @@ -218,54 +410,112 @@ private void mountFlip(GuiIngameForge instance, int x, int y, int textureX, int @Redirect(method = "renderHealthMount", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getRenderViewEntity()Lnet/minecraft/entity/Entity;")) private Entity mountEdit(Minecraft instance) { + if (VanillaHUD.isApec()) { + return instance.getRenderViewEntity(); + } return HudCore.editing ? instance.thePlayer : instance.getRenderViewEntity(); } @ModifyConstant(method = "renderHealthMount", constant = @Constant(intValue = 10, ordinal = 1), remap = false) private int mountMode(int constant) { + if (VanillaHUD.isApec()) { + return constant; + } if (HudCore.editing) return 0; return (Hunger.mode ? 1 : -1) * 10; } @Redirect(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/PlayerControllerMP;shouldDrawHUD()Z")) private boolean example(PlayerControllerMP instance) { - return instance.shouldDrawHUD() || HudCore.editing; + return instance.shouldDrawHUD() || (HudCore.editing && !VanillaHUD.isApec()); } @Redirect(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getRenderViewEntity()Lnet/minecraft/entity/Entity;")) private Entity example(Minecraft instance) { - return HudCore.editing ? instance.thePlayer : instance.getRenderViewEntity(); + return (HudCore.editing && !VanillaHUD.isApec()) ? instance.thePlayer : instance.getRenderViewEntity(); } - @Inject(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderFood(II)V", shift = At.Shift.AFTER)) - private void pop(float partialTicks, CallbackInfo ci) { - GlStateManager.popMatrix(); + + @ModifyArgs(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderHealthMount(II)V")) + private void mountHealth(Args args) { + if (VanillaHUD.isApec()) { + return; + } + args.set(0, -182); + args.set(1, right_height); } - @Redirect(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderHealthMount(II)V")) - private void mountHealth(GuiIngameForge instance, int i, int top) { + private boolean needsToResetMount = false; + + @Inject(method = "renderHealthMount", at = @At(value = "INVOKE", target = "Lnet/minecraft/profiler/Profiler;endStartSection(Ljava/lang/String;)V"), cancellable = true) + private void mount(CallbackInfo ci) { + if (VanillaHUD.isApec()) { + return; + } + if (!(renderHealthMount || Hunger.mountHud.isEnabled())) { + ci.cancel(); + return; + } Hud hud = getMountHud(); boolean healthLink = Hunger.mountHud.isEnabled() ? Hunger.MountHud.healthLink : Hunger.HungerHud.healthLink; GlStateManager.pushMatrix(); GlStateManager.translate((int) hud.position.getX(), (int) hud.position.getY() - (healthLink ? healthLink() : 0), 0F); GlStateManager.scale(hud.getScale(), hud.getScale(), 1F); - renderHealthMount(-182, right_height); - GlStateManager.popMatrix(); + needsToResetMount = true; + } + + @Inject(method = "renderHealthMount", at = @At("RETURN"), remap = false) + private void mountReturn(CallbackInfo ci) { + if (needsToResetMount) { + GlStateManager.popMatrix(); + needsToResetMount = false; + } + } + + @Inject(method = "renderHealthMount", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;post(Lnet/minecraftforge/client/event/RenderGameOverlayEvent$ElementType;)V"), remap = false) + private void mountPop(CallbackInfo ci) { + if (needsToResetMount) { + GlStateManager.popMatrix(); + needsToResetMount = false; + } } - @Redirect(method = "renderGameOverlay", at = @At(value = "FIELD", target = "Lnet/minecraftforge/client/GuiIngameForge;renderHealthMount:Z", ordinal = 1)) - private boolean mountRender() { - return renderHealthMount || Hunger.mountHud.isEnabled(); + @ModifyArgs(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderJumpBar(II)V")) + private void jump(Args args) { + if (VanillaHUD.isApec()) { + return; + } + args.set(0, 182); + args.set(1, 29); } + private boolean needsToResetJump = false; - @Redirect(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderJumpBar(II)V")) - private void jump(GuiIngameForge instance, int width, int height) { + @Inject(method = "renderJumpBar", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glColor4f(FFFF)V", ordinal = 0), remap = false) + private void jump(CallbackInfo ci) { + if (VanillaHUD.isApec()) { + return; + } GlStateManager.pushMatrix(); GlStateManager.translate((int) Experience.hud.position.getX(), (int) Experience.hud.position.getY(), 0F); GlStateManager.scale(Experience.hud.getScale(), Experience.hud.getScale(), 1F); - renderJumpBar(182, 29); - GlStateManager.popMatrix(); + needsToResetJump = true; + } + + @Inject(method = "renderJumpBar", at = @At("RETURN"), remap = false) + private void jumpReturn(CallbackInfo ci) { + if (needsToResetJump) { + GlStateManager.popMatrix(); + needsToResetJump = false; + } + } + + @Inject(method = "renderJumpBar", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;post(Lnet/minecraftforge/client/event/RenderGameOverlayEvent$ElementType;)V"), remap = false) + private void jumpPop(CallbackInfo ci) { + if (needsToResetJump) { + GlStateManager.popMatrix(); + needsToResetJump = false; + } } @Inject(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;renderPlayerList(II)V")) @@ -278,6 +528,9 @@ private void setCheck(float partialTicks, CallbackInfo ci) { @Redirect(method = "renderPlayerList", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/settings/KeyBinding;isKeyDown()Z")) private boolean tabExample(KeyBinding instance) { + if (VanillaHUD.inSBASkyblock()) { + return instance.isKeyDown(); + } ScoreObjective scoreobjective = mc.theWorld.getScoreboard().getObjectiveInDisplaySlot(0); NetHandlerPlayClient handler = mc.thePlayer.sendQueue; @@ -311,7 +564,7 @@ private boolean tabExample2(Minecraft instance) { @Inject(method = "renderPlayerList", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;renderPlayerlist(ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreObjective;)V")) private void enableScissor(int width, int height, CallbackInfo ci) { - if (HudCore.editing) return; + if (HudCore.editing || VanillaHUD.inSBASkyblock()) return; GL11.glEnable(GL11.GL_SCISSOR_TEST); Position position = TabList.hud.position; int scale = (int) UResolution.getScaleFactor(); @@ -320,7 +573,7 @@ private void enableScissor(int width, int height, CallbackInfo ci) { @Inject(method = "renderPlayerList", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;renderPlayerlist(ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreObjective;)V", shift = At.Shift.AFTER)) private void disable(int width, int height, CallbackInfo ci) { - if (HudCore.editing) return; + if (HudCore.editing || VanillaHUD.inSBASkyblock()) return; GL11.glDisable(GL11.GL_SCISSOR_TEST); } } diff --git a/src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameForgeMixin_Cancel.java b/src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameForgeMixin_Cancel.java index fdd3430..030d212 100644 --- a/src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameForgeMixin_Cancel.java +++ b/src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameForgeMixin_Cancel.java @@ -2,64 +2,28 @@ import net.minecraftforge.client.GuiIngameForge; import org.polyfrost.vanillahud.VanillaHUD; -import org.polyfrost.vanillahud.hud.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(value = GuiIngameForge.class, remap = false, priority = 9000) +@Mixin(value = GuiIngameForge.class, priority = 9000) public class GuiIngameForgeMixin_Cancel { - @Inject(method = "renderRecordOverlay", at = @At("HEAD"), cancellable = true) + @Inject(method = "renderRecordOverlay", at = @At("HEAD"), cancellable = true, remap = false) private void cancelActionBar(int width, int height, float partialTicks, CallbackInfo ci) { ci.cancel(); } - @Inject(method = "renderTitle", at = @At("HEAD"), cancellable = true) + @Inject(method = "renderTitle", at = @At("HEAD"), cancellable = true, remap = false) private void cancelTitle(int width, int height, float partialTicks, CallbackInfo ci) { ci.cancel(); } - @Inject(method = "renderToolHightlight", at = @At("HEAD"), cancellable = true) + @Inject(method = "renderToolHightlight", at = @At("HEAD"), cancellable = true, remap = false) private void cancelHeldItem(CallbackInfo ci) { if (!VanillaHUD.isApec()) { ci.cancel(); } } - @Inject(method = "renderJumpBar", at = @At("HEAD"), cancellable = true) - private void cancelHorsePower(CallbackInfo ci) { - if (!Experience.hud.shouldRender()) ci.cancel(); - } - - @Inject(method = "renderHealthMount", at = @At("HEAD"), cancellable = true) - private void cancelHorseHealth(CallbackInfo ci) { - if (!Hunger.getMountHud().shouldRender()) ci.cancel(); - } - - @Inject(method = "renderExperience", at = @At("HEAD"), cancellable = true) - private void cancelExpBar(CallbackInfo ci) { - if (!Experience.hud.shouldRender()) ci.cancel(); - } - - @Inject(method = "renderHealth", at = @At("HEAD"), cancellable = true) - private void cancelHealth(CallbackInfo ci) { - if (!Health.hud.shouldRender()) ci.cancel(); - } - - @Inject(method = "renderFood", at = @At("HEAD"), cancellable = true) - private void cancelHunger(CallbackInfo ci) { - if (!Hunger.hud.shouldRender()) ci.cancel(); - } - - @Inject(method = "renderArmor", at = @At("HEAD"), cancellable = true) - private void cancelArmor(CallbackInfo ci) { - if (!Armor.hud.shouldRender()) ci.cancel(); - } - - @Inject(method = "renderAir", at = @At("HEAD"), cancellable = true) - private void cancelAir(CallbackInfo ci) { - if (!Air.hud.shouldRender()) ci.cancel(); - } - } diff --git a/src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameForgeMixin_CancelLow.java b/src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameForgeMixin_CancelLow.java new file mode 100644 index 0000000..4d746c7 --- /dev/null +++ b/src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameForgeMixin_CancelLow.java @@ -0,0 +1,46 @@ +package org.polyfrost.vanillahud.mixin; + +import net.minecraftforge.client.GuiIngameForge; +import org.polyfrost.vanillahud.hud.*; +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 = GuiIngameForge.class, priority = 999) +public class GuiIngameForgeMixin_CancelLow { + @Inject(method = "renderJumpBar", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glColor4f(FFFF)V", ordinal = 0), cancellable = true, remap = false) + private void cancelHorsePower(CallbackInfo ci) { + if (!Experience.hud.shouldRender()) ci.cancel(); + } + + @Inject(method = "renderHealthMount", at = @At(value = "INVOKE", target = "Lnet/minecraft/profiler/Profiler;endStartSection(Ljava/lang/String;)V"), cancellable = true) + private void cancelHorseHealth(CallbackInfo ci) { + if (!Hunger.getMountHud().shouldRender()) ci.cancel(); + } + + @Inject(method = "renderExperience", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;color(FFFF)V", ordinal = 0), cancellable = true) + private void cancelExpBar(CallbackInfo ci) { + if (!Experience.hud.shouldRender()) ci.cancel(); + } + + @Inject(method = "renderHealth", at = @At(value = "INVOKE", target = "Lnet/minecraft/profiler/Profiler;startSection(Ljava/lang/String;)V"), cancellable = true) + private void cancelHealth(CallbackInfo ci) { + if (!Health.hud.shouldRender()) ci.cancel(); + } + + @Inject(method = "renderFood", at = @At(value = "INVOKE", target = "Lnet/minecraft/profiler/Profiler;startSection(Ljava/lang/String;)V"), cancellable = true) + private void cancelHunger(CallbackInfo ci) { + if (!Hunger.hud.shouldRender()) ci.cancel(); + } + + @Inject(method = "renderArmor", at = @At(value = "INVOKE", target = "Lnet/minecraft/profiler/Profiler;startSection(Ljava/lang/String;)V"), cancellable = true) + private void cancelArmor(CallbackInfo ci) { + if (!Armor.hud.shouldRender()) ci.cancel(); + } + + @Inject(method = "renderAir", at = @At(value = "INVOKE", target = "Lnet/minecraft/profiler/Profiler;startSection(Ljava/lang/String;)V"), cancellable = true) + private void cancelAir(CallbackInfo ci) { + if (!Air.hud.shouldRender()) ci.cancel(); + } +} diff --git a/src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameMixin.java b/src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameMixin.java index 49a5ac2..c8483a6 100644 --- a/src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameMixin.java +++ b/src/main/java/org/polyfrost/vanillahud/mixin/GuiIngameMixin.java @@ -5,6 +5,7 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.scoreboard.ScoreObjective; +import org.polyfrost.vanillahud.VanillaHUD; import org.polyfrost.vanillahud.hud.Hotbar; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; @@ -30,6 +31,9 @@ private void cancelScoreboard(ScoreObjective s, ScaledResolution sr, CallbackInf @Inject(method = "renderTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiIngame;drawTexturedModalRect(IIIIII)V", ordinal = 0)) private void translate(ScaledResolution sr, float partialTicks, CallbackInfo ci) { + if (VanillaHUD.isApec()) { + return; + } GlStateManager.pushMatrix(); GlStateManager.translate((int) Hotbar.hud.position.getX(), (int) Hotbar.hud.position.getY(), 0f); GlStateManager.scale(Hotbar.hud.getScale(), Hotbar.hud.getScale(), 1f); @@ -42,15 +46,24 @@ private void translate(ScaledResolution sr, float partialTicks, CallbackInfo ci) @Inject(method = "renderTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiIngame;drawTexturedModalRect(IIIIII)V", ordinal = 1, shift = At.Shift.AFTER)) private void popRotate(ScaledResolution sr, float partialTicks, CallbackInfo ci) { + if (VanillaHUD.isApec()) { + return; + } GlStateManager.popMatrix(); } @Inject(method = "renderTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderHelper;disableStandardItemLighting()V")) private void pop(ScaledResolution sr, float partialTicks, CallbackInfo ci) { + if (VanillaHUD.isApec()) { + return; + } GlStateManager.popMatrix(); } @Inject(method = "renderTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiIngame;drawTexturedModalRect(IIIIII)V")) private void prePosition(ScaledResolution sr, float partialTicks, CallbackInfo ci) { + if (VanillaHUD.isApec()) { + return; + } int x = sr.getScaledWidth() / 2 - 91; int y = sr.getScaledHeight() - 22; GlStateManager.pushMatrix(); @@ -59,11 +72,17 @@ private void prePosition(ScaledResolution sr, float partialTicks, CallbackInfo c @Inject(method = "renderTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiIngame;drawTexturedModalRect(IIIIII)V", shift = At.Shift.AFTER)) private void postPosition(ScaledResolution sr, float partialTicks, CallbackInfo ci) { + if (VanillaHUD.isApec()) { + return; + } GlStateManager.popMatrix(); } @Redirect(method = "renderTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiIngame;renderHotbarItem(IIIFLnet/minecraft/entity/player/EntityPlayer;)V")) private void scaleItems(GuiIngame instance, int index, int xPos, int yPos, float partialTicks, EntityPlayer player) { + if (VanillaHUD.isApec()) { + return; + } renderHotbarItem(index, (Hotbar.HotBarHud.hotbarMode ? index * 20 : 0) + 3, (Hotbar.HotBarHud.hotbarMode ? 0 : index * 20) + 3, partialTicks, player); } } diff --git a/src/main/java/org/polyfrost/vanillahud/mixin/GuiPlayerTabOverlayMixin.java b/src/main/java/org/polyfrost/vanillahud/mixin/GuiPlayerTabOverlayMixin.java index 0f7b9cf..ea7b8ee 100644 --- a/src/main/java/org/polyfrost/vanillahud/mixin/GuiPlayerTabOverlayMixin.java +++ b/src/main/java/org/polyfrost/vanillahud/mixin/GuiPlayerTabOverlayMixin.java @@ -11,7 +11,9 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.scoreboard.*; import net.minecraft.util.*; +import org.polyfrost.vanillahud.VanillaHUD; import org.polyfrost.vanillahud.hud.TabList; +import org.polyfrost.vanillahud.utils.DummyClassUtils; import org.polyfrost.vanillahud.utils.TabListManager; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; @@ -41,6 +43,7 @@ public class GuiPlayerTabOverlayMixin { @ModifyVariable(method = "renderPlayerlist", at = @At(value = "STORE", ordinal = 0), ordinal = 9) private int resetY(int y) { + if (VanillaHUD.inSBASkyblock()) return y; return 1; } @@ -58,6 +61,7 @@ private int captureEntryX(int x) { @ModifyConstant(method = "renderPlayerlist", constant = @Constant(intValue = 13)) private int pingWidth(int constant) { + if (VanillaHUD.inSBASkyblock()) return constant; int width = 3; if (TabList.TabHud.numberPing && TabList.TabHud.pingType) { int maxWidth = 0; @@ -74,6 +78,7 @@ private int pingWidth(int constant) { @Redirect(method = "renderPlayerlist", at = @At(value = "FIELD", target = "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;header:Lnet/minecraft/util/IChatComponent;")) private IChatComponent modifyHeader(GuiPlayerTabOverlay instance) { + if (VanillaHUD.inSBASkyblock()) return header; if (!TabList.TabHud.showHeader) return null; if (HudCore.editing) return tab$exampleHeader; return header; @@ -81,6 +86,7 @@ private IChatComponent modifyHeader(GuiPlayerTabOverlay instance) { @Redirect(method = "renderPlayerlist", at = @At(value = "FIELD", target = "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;footer:Lnet/minecraft/util/IChatComponent;")) private IChatComponent modifyFooter(GuiPlayerTabOverlay instance) { + if (VanillaHUD.inSBASkyblock()) return footer; if (!TabList.TabHud.showFooter) return null; if (HudCore.editing) return tab$exampleFooter; return footer; @@ -88,19 +94,25 @@ private IChatComponent modifyFooter(GuiPlayerTabOverlay instance) { @Inject(method = "renderPlayerlist", at = @At(value = "HEAD")) private void translate(int width, Scoreboard scoreboardIn, ScoreObjective scoreObjectiveIn, CallbackInfo ci) { + if (VanillaHUD.inSBASkyblock()) return; TabList.TabHud hud = TabList.hud; GlStateManager.pushMatrix(); GlStateManager.translate((float) (-width / 2) * hud.getScale() + hud.position.getCenterX(), hud.position.getY() + hud.getPaddingY(), 0); GlStateManager.scale(hud.getScale(), hud.getScale(), 1f); + if (DummyClassUtils.willPatcherShiftDown()) { + GlStateManager.translate(0, -DummyClassUtils.patcherTabHeight(), 0); + } } @Inject(method = "renderPlayerlist", at = @At(value = "TAIL")) private void pop(int width, Scoreboard scoreboardIn, ScoreObjective scoreObjectiveIn, CallbackInfo ci) { + if (VanillaHUD.inSBASkyblock()) return; GlStateManager.popMatrix(); } @Redirect(method = "renderPlayerlist", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/Ordering;sortedCopy(Ljava/lang/Iterable;)Ljava/util/List;")) private List list(Ordering instance, Iterable elements) { + if (VanillaHUD.inSBASkyblock()) return instance.sortedCopy(elements); List list = instance.sortedCopy(elements); if (TabList.TabHud.selfAtTop) { for (NetworkPlayerInfo info : list) { @@ -116,11 +128,13 @@ private List list(Ordering instance, Itera @ModifyArgs(method = "renderPlayerlist", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;drawRect(IIIII)V", ordinal = 0)) private void captureWidth(Args args) { + if (VanillaHUD.inSBASkyblock()) return; args.set(4, tab$TRANSPARENT); } @ModifyArgs(method = "renderPlayerlist", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;drawRect(IIIII)V", ordinal = 1)) private void cancelRect(Args args) { + if (VanillaHUD.inSBASkyblock()) return; args.set(4, tab$TRANSPARENT); TabList.width = (int) args.get(2) - (int) args.get(0); TabList.height = args.get(3); @@ -128,17 +142,20 @@ private void cancelRect(Args args) { @ModifyArgs(method = "renderPlayerlist", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;drawRect(IIIII)V", ordinal = 3)) private void captureHeight(Args args) { + if (VanillaHUD.inSBASkyblock()) return; args.set(4, tab$TRANSPARENT); TabList.height = args.get(3); } @ModifyArgs(method = "renderPlayerlist", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;drawRect(IIIII)V", ordinal = 2)) private void fixWidth(Args args) { + if (VanillaHUD.inSBASkyblock()) return; args.set(2, (int) args.get(2) - 1); } @ModifyConstant(method = "renderPlayerlist", constant = @Constant(intValue = 20, ordinal = 0)) private int limit(int constant) { + if (VanillaHUD.inSBASkyblock()) return constant; return (HudCore.editing ? 10 : constant); } @@ -149,12 +166,14 @@ private int limit(int constant) { to = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;drawPing(IIILnet/minecraft/client/network/NetworkPlayerInfo;)V") )) private void preHeadTransform(int width, Scoreboard scoreboardIn, ScoreObjective scoreObjectiveIn, CallbackInfo ci) { + if (VanillaHUD.inSBASkyblock()) return; GlStateManager.pushMatrix(); GlStateManager.translate(TabList.TabHud.showHead ? 0 : -8, 0, 0); } @Redirect(method = "renderPlayerlist", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/FontRenderer;drawStringWithShadow(Ljava/lang/String;FFI)I")) private int drawText(FontRenderer instance, String text, float x, float y, int color) { + if (VanillaHUD.inSBASkyblock()) return instance.drawStringWithShadow(text, x, y, color); GlStateManager.pushMatrix(); GlStateManager.enableBlend(); GlStateManager.enableAlpha(); @@ -173,11 +192,16 @@ private int drawText(FontRenderer instance, String text, float x, float y, int c to = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;drawPing(IIILnet/minecraft/client/network/NetworkPlayerInfo;)V") )) private void postHeadTransform(int width, Scoreboard scoreboardIn, ScoreObjective scoreObjectiveIn, CallbackInfo ci) { + if (VanillaHUD.inSBASkyblock()) return; GlStateManager.popMatrix(); } @Redirect(method = "renderPlayerlist", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Gui;drawScaledCustomSizeModalRect(IIFFIIIIFF)V")) private void playerHead(int x, int y, float u, float v, int uWidth, int vHeight, int width, int height, float tileWidth, float tileHeight) { + if (VanillaHUD.inSBASkyblock()) { + Gui.drawScaledCustomSizeModalRect(x, y, u, v, uWidth, vHeight, width, height, tileWidth, tileHeight); + return; + } if (!TabList.TabHud.showHead) return; Gui.drawScaledCustomSizeModalRect(x, y, u, v, uWidth, vHeight, width, height, tileWidth, tileHeight); @@ -193,6 +217,10 @@ private void captureInfo(ScoreObjective scoreObjective, int i, String string, in @Redirect(method = "renderPlayerlist", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;drawScoreboardValues(Lnet/minecraft/scoreboard/ScoreObjective;ILjava/lang/String;IILnet/minecraft/client/network/NetworkPlayerInfo;)V")) private void scoreboard(GuiPlayerTabOverlay instance, ScoreObjective scoreObjective, int i, String string, int j, int k, NetworkPlayerInfo networkPlayerInfo) { + if (VanillaHUD.inSBASkyblock()) { + ((GuiPlayerTabOverlayAccessor) instance).renderScore(scoreObjective, i, string, j, k, networkPlayerInfo); + return; + } GlStateManager.pushMatrix(); GlStateManager.enableBlend(); GlStateManager.enableAlpha(); @@ -205,6 +233,7 @@ private void scoreboard(GuiPlayerTabOverlay instance, ScoreObjective scoreObject @Redirect(method = "drawScoreboardValues", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/FontRenderer;drawStringWithShadow(Ljava/lang/String;FFI)I", ordinal = 1)) private int translate(FontRenderer instance, String text, float x, float y, int color) { + if (VanillaHUD.inSBASkyblock()) return instance.drawStringWithShadow(text, x, y, color); int ping = info.getResponseTime(); boolean offset = TabList.TabHud.numberPing && TabList.TabHud.hideFalsePing && (ping <= 1 || ping >= 999) || !TabList.TabHud.showPing; float textWidth = mc.fontRendererObj.getStringWidth(text); @@ -215,6 +244,10 @@ private int translate(FontRenderer instance, String text, float x, float y, int @Redirect(method = "renderPlayerlist", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;drawPing(IIILnet/minecraft/client/network/NetworkPlayerInfo;)V")) private void drawPing(GuiPlayerTabOverlay instance, int width, int x, int y, NetworkPlayerInfo networkPlayerInfoIn) { + if (VanillaHUD.inSBASkyblock()) { + ((GuiPlayerTabOverlayAccessor) instance).renderPing(width, x, y, networkPlayerInfoIn); + return; + } if (!TabList.TabHud.showPing) return; if (TabList.TabHud.numberPing) { int ping = networkPlayerInfoIn.getResponseTime(); @@ -252,21 +285,25 @@ private void drawPing(GuiPlayerTabOverlay instance, int width, int x, int y, Net @ModifyConstant(method = "renderPlayerlist", constant = @Constant(intValue = 553648127)) private int tabOpacity(int opacity) { + if (VanillaHUD.inSBASkyblock()) return opacity; return TabList.TabHud.tabWidgetColor.getRGB(); } @ModifyConstant(method = "renderPlayerlist", constant = @Constant(intValue = 80)) private int changePlayerCount(int original) { + if (VanillaHUD.inSBASkyblock()) return original; return TabList.TabHud.getTabPlayerLimit(); } @ModifyVariable(method = "renderPlayerlist", at = @At(value = "STORE"), ordinal = 0) private List setLimit(List value) { + if (VanillaHUD.inSBASkyblock()) return value; return value.subList(0, Math.min(value.size(), TabList.TabHud.getTabPlayerLimit())); } @Redirect(method = "renderPlayerlist", at = @At(value = "INVOKE", target = "Ljava/lang/Math;min(II)I", ordinal = 1)) private int noLimit(int a, int b) { + if (VanillaHUD.inSBASkyblock()) return a; return a; } } diff --git a/src/main/java/org/polyfrost/vanillahud/mixin/GuiSpectatorMixin.java b/src/main/java/org/polyfrost/vanillahud/mixin/GuiSpectatorMixin.java index 0c911e4..e44165d 100644 --- a/src/main/java/org/polyfrost/vanillahud/mixin/GuiSpectatorMixin.java +++ b/src/main/java/org/polyfrost/vanillahud/mixin/GuiSpectatorMixin.java @@ -4,6 +4,7 @@ import net.minecraft.client.gui.GuiSpectator; import net.minecraft.client.gui.spectator.ISpectatorMenuObject; import net.minecraft.client.renderer.GlStateManager; +import org.polyfrost.vanillahud.VanillaHUD; import org.polyfrost.vanillahud.hud.Hotbar; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.*; @@ -15,12 +16,18 @@ public abstract class GuiSpectatorMixin { @ModifyArg(method = "renderTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiSpectator;func_175258_a(Lnet/minecraft/client/gui/ScaledResolution;FIFLnet/minecraft/client/gui/spectator/categories/SpectatorDetails;)V"), index = 3) private float y(float f) { + if (VanillaHUD.isApec()) { + return f; + } if (!Hotbar.hud.isEnabled()) return f; return UResolution.getScaledHeight() - 22; } @ModifyArgs(method = "func_175258_a", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiSpectator;drawTexturedModalRect(FFIIII)V")) private void setPosition(Args args) { + if (VanillaHUD.isApec()) { + return; + } if (!Hotbar.hud.isEnabled()) return; int x = UResolution.getScaledWidth() / 2 - 91; int y = UResolution.getScaledHeight() - 22; @@ -30,6 +37,9 @@ private void setPosition(Args args) { @Inject(method = "func_175258_a", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiSpectator;drawTexturedModalRect(FFIIII)V", ordinal = 0)) private void set(CallbackInfo ci) { + if (VanillaHUD.isApec()) { + return; + } GlStateManager.pushMatrix(); GlStateManager.translate(Hotbar.hud.position.getX(), Hotbar.hud.position.getY(), 0f); GlStateManager.scale(Hotbar.hud.getScale(), Hotbar.hud.getScale(), 1f); @@ -37,12 +47,19 @@ private void set(CallbackInfo ci) { @Inject(method = "func_175258_a", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderHelper;disableStandardItemLighting()V")) private void pop(CallbackInfo ci) { + if (VanillaHUD.isApec()) { + return; + } GlStateManager.popMatrix(); } @Redirect(method = "func_175258_a", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiSpectator;func_175266_a(IIFFLnet/minecraft/client/gui/spectator/ISpectatorMenuObject;)V")) private void icon(GuiSpectator instance, int i, int j, float f, float g, ISpectatorMenuObject iSpectatorMenuObject) { GuiSpectatorAccessor accessor = (GuiSpectatorAccessor) instance; + if (VanillaHUD.isApec()) { + accessor.drawItem(i, j, f, g, iSpectatorMenuObject); + return; + } accessor.drawItem(i, i * 20 + 3, 3f, g, iSpectatorMenuObject); } diff --git a/src/main/java/org/polyfrost/vanillahud/utils/DummyClassUtils.java b/src/main/java/org/polyfrost/vanillahud/utils/DummyClassUtils.java new file mode 100644 index 0000000..c0b9dfb --- /dev/null +++ b/src/main/java/org/polyfrost/vanillahud/utils/DummyClassUtils.java @@ -0,0 +1,17 @@ +package org.polyfrost.vanillahud.utils; + +import club.sk1er.patcher.config.PatcherConfig; +import net.minecraft.entity.boss.BossStatus; +import net.minecraftforge.client.GuiIngameForge; +import org.polyfrost.vanillahud.VanillaHUD; + +public class DummyClassUtils { + + public static boolean willPatcherShiftDown() { + return VanillaHUD.isPatcher && PatcherConfig.tabHeightAllow && BossStatus.bossName != null && BossStatus.statusBarTime > 0 && GuiIngameForge.renderBossHealth; + } + + public static int patcherTabHeight() { + return PatcherConfig.tabHeight; + } +} diff --git a/src/main/resources/mixins.vanillahud.json b/src/main/resources/mixins.vanillahud.json index 100a21c..2f431a4 100644 --- a/src/main/resources/mixins.vanillahud.json +++ b/src/main/resources/mixins.vanillahud.json @@ -13,6 +13,7 @@ "GuiIngameForgeAccessor", "GuiIngameForgeMixin", "GuiIngameForgeMixin_Cancel", + "GuiIngameForgeMixin_CancelLow", "GuiIngameMixin", "GuiPlayerTabOverlayAccessor", "GuiPlayerTabOverlayMixin",