From a37b32c1a506b03460e45e0b5ec14598cde1551c Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 21 Feb 2025 18:13:08 -0500 Subject: [PATCH] Effects Rendering Borders --- .../npcs/controllers/ProfileController.java | 3 +++ .../npcs/client/gui/SubGuiEffectGeneral.java | 8 ++++---- .../gui/global/GuiNPCManageEffects.java | 8 ++++---- .../gui/mainmenu/GuiNPCGlobalMainMenu.java | 2 +- .../player/inventory/GuiCNPCInventory.java | 4 ++-- .../gui/player/inventory/GuiSettings.java | 10 ++++++++++ .../npcs/client/gui/util/GuiEffectBar.java | 8 ++++++++ .../java/noppes/npcs/config/ConfigClient.java | 6 ++++++ .../assets/customnpcs/lang/en_US.lang | 1 + .../assets/customnpcs/textures/gui/icons.png | Bin 4653 -> 5191 bytes 10 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/main/java/kamkeel/npcs/controllers/ProfileController.java b/src/main/java/kamkeel/npcs/controllers/ProfileController.java index 6c2808e1b..e7d14dbfd 100644 --- a/src/main/java/kamkeel/npcs/controllers/ProfileController.java +++ b/src/main/java/kamkeel/npcs/controllers/ProfileController.java @@ -91,6 +91,9 @@ public class ProfileController implements IProfileHandler { } public synchronized void login(EntityPlayer player) { + if(!ConfigMain.ProfilesEnabled) + return; + if (player == null) return; Profile profile; diff --git a/src/main/java/noppes/npcs/client/gui/SubGuiEffectGeneral.java b/src/main/java/noppes/npcs/client/gui/SubGuiEffectGeneral.java index a5f8f0418..ea9152189 100644 --- a/src/main/java/noppes/npcs/client/gui/SubGuiEffectGeneral.java +++ b/src/main/java/noppes/npcs/client/gui/SubGuiEffectGeneral.java @@ -16,6 +16,8 @@ import org.lwjgl.opengl.GL11; import java.util.ArrayList; import java.util.List; +import static noppes.npcs.client.gui.player.inventory.GuiCNPCInventory.specialIcons; + public class SubGuiEffectGeneral extends SubGuiInterface implements ITextfieldListener { private final GuiNPCManageEffects parent; public CustomEffect effect; @@ -128,10 +130,8 @@ public class SubGuiEffectGeneral extends SubGuiInterface implements ITextfieldLi func_152125_a(x, y, 0, 0, 1, 1, iconRenderSize, iconRenderSize, 1, 1); } GL11.glDisable(GL11.GL_DEPTH_TEST); - - // TODO: FIX TEXTURE - // textureManager.bindTexture(new ResourceLocation(CustomNpcPlusDBC.ID + ":textures/gui/icons.png")); - // func_152125_a(x, y, 0, 240, 16, 16, iconRenderSize, iconRenderSize, 256, 256); + textureManager.bindTexture(specialIcons); + func_152125_a(x, y, 0, 224, 16, 16, iconRenderSize, iconRenderSize, 256, 256); GL11.glEnable(GL11.GL_DEPTH_TEST); } }; diff --git a/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageEffects.java b/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageEffects.java index b227cc829..d0da71469 100644 --- a/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageEffects.java +++ b/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageEffects.java @@ -28,6 +28,8 @@ import java.util.HashMap; import java.util.List; import java.util.Vector; +import static noppes.npcs.client.gui.player.inventory.GuiCNPCInventory.specialIcons; + public class GuiNPCManageEffects extends GuiNPCInterface2 implements ICustomScrollListener, IScrollData, IGuiData, ISubGuiListener, GuiYesNoCallback { public GuiCustomScroll scrollEffects; public HashMap data = new HashMap<>(); @@ -170,10 +172,8 @@ public class GuiNPCManageEffects extends GuiNPCInterface2 implements ICustomScro func_152125_a(x, y, 0, 0, 1, 1, iconRenderSize, iconRenderSize, 1, 1); } GL11.glDisable(GL11.GL_DEPTH_TEST); - - // TODO: Fix ICONS - // textureManager.bindTexture(new ResourceLocation(CustomNpcPlusDBC.ID + ":textures/gui/icons.png")); - // func_152125_a(x, y, 0, 240, 16, 16, iconRenderSize, iconRenderSize, 256, 256); + textureManager.bindTexture(specialIcons); + func_152125_a(x, y, 0, 224, 16, 16, iconRenderSize, iconRenderSize, 256, 256); GL11.glEnable(GL11.GL_DEPTH_TEST); x += iconRenderSize + 3; diff --git a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNPCGlobalMainMenu.java b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNPCGlobalMainMenu.java index 203b32c9f..a4b38906e 100644 --- a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNPCGlobalMainMenu.java +++ b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNPCGlobalMainMenu.java @@ -83,7 +83,7 @@ public class GuiNPCGlobalMainMenu extends GuiNPCInterface2 { tagButton.setIconPos(24, 24, 192, 32).setIconTexture(specialIcons); registerButton(effectsButton = new GuiNpcSquareButton(19, 0, 0, 20, "global.customeffects", 0xFF333333)); - effectsButton.setIconPos(24, 24, 192, 32).setIconTexture(specialIcons); + effectsButton.setIconPos(24, 24, 24, 56).setIconTexture(specialIcons); // Layout composite buttons optimally. layoutButtons(); diff --git a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiCNPCInventory.java b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiCNPCInventory.java index ee607398b..7e5480712 100644 --- a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiCNPCInventory.java +++ b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiCNPCInventory.java @@ -83,7 +83,7 @@ public class GuiCNPCInventory extends GuiNPCInterface { int effectBarX = guiLeft + xSize + 65; int effectBarY = guiTop + 10; - int effectBarWidth = 24; + int effectBarWidth = 20; int effectBarHeight = ySize; effectBar = new GuiEffectBar(effectBarX, effectBarY, effectBarWidth, effectBarHeight); } @@ -107,7 +107,7 @@ public class GuiCNPCInventory extends GuiNPCInterface { public void drawScreen(int mouseX, int mouseY, float partialTicks) { updateEffectBar(); super.drawScreen(mouseX, mouseY, partialTicks); - if (effectBar != null) { + if (!ConfigClient.HideEffectsBar && effectBar != null && !effectBar.entries.isEmpty()) { effectBar.drawScreen(mouseX, mouseY, partialTicks); } } diff --git a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiSettings.java b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiSettings.java index 19aea1433..44f2af54e 100644 --- a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiSettings.java +++ b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiSettings.java @@ -13,6 +13,7 @@ import noppes.npcs.client.gui.util.GuiNpcLabel; import noppes.npcs.client.gui.util.GuiNpcTextField; import noppes.npcs.client.gui.util.ITextfieldListener; import noppes.npcs.config.ConfigClient; +import noppes.npcs.config.ConfigMain; import org.lwjgl.opengl.GL11; import tconstruct.client.tabs.AbstractTab; @@ -77,6 +78,9 @@ public class GuiSettings extends GuiCNPCInventory implements ITextfieldListener, y += 22; + this.addLabel(new GuiNpcLabel(8, "settings.effectsBar", guiLeft + 8, guiTop + 14 + y)); + this.addButton(new GuiNpcButton(8, guiLeft + 105, guiTop + 9 + y, 50, 20, new String[]{"gui.no", "gui.yes"}, ConfigClient.HideEffectsBar?1:0)); + y += 22; y += 22; @@ -154,6 +158,12 @@ public class GuiSettings extends GuiCNPCInventory implements ITextfieldListener, ConfigClient.BannerAlerts = button.getValue() == 1; ConfigClient.BannerAlertsProperty.set(ConfigClient.BannerAlerts); } + if(button.id == 8){ + ConfigClient.HideEffectsBar = button.getValue() == 1; + ConfigClient.HideEffectsBarProperty.set(ConfigClient.HideEffectsBar); + } + + ConfigClient.config.save(); } diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiEffectBar.java b/src/main/java/noppes/npcs/client/gui/util/GuiEffectBar.java index 96b78fc59..938265149 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiEffectBar.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiEffectBar.java @@ -4,6 +4,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.util.ResourceLocation; import noppes.npcs.client.ClientCacheHandler; import noppes.npcs.client.renderer.ImageData; import noppes.npcs.controllers.data.CustomEffect; @@ -13,6 +14,8 @@ import org.lwjgl.opengl.GL11; import java.util.ArrayList; import java.util.List; +import static noppes.npcs.client.gui.player.inventory.GuiCNPCInventory.specialIcons; + public class GuiEffectBar extends GuiScreen { public int x, y, width, height; public int scrollY = 0; // Tracks vertical scrolling @@ -77,6 +80,11 @@ public class GuiEffectBar extends GuiScreen { int texWidth = imageData.getTotalWidth(); func_152125_a(x + 2, drawY + 2, iconU, iconV, iconWidth, iconHeight, iconRenderSize, iconRenderSize, texWidth, texWidth); + + GL11.glDisable(GL11.GL_DEPTH_TEST); + minecraft.getTextureManager().bindTexture(specialIcons); + func_152125_a(x + 2, drawY + 2, 0, 224, 16, 16, iconRenderSize, iconRenderSize, 256, 256); + GL11.glEnable(GL11.GL_DEPTH_TEST); } // If mouse hovers over this effect, save tooltip info diff --git a/src/main/java/noppes/npcs/config/ConfigClient.java b/src/main/java/noppes/npcs/config/ConfigClient.java index 459268552..d2d7d1a85 100644 --- a/src/main/java/noppes/npcs/config/ConfigClient.java +++ b/src/main/java/noppes/npcs/config/ConfigClient.java @@ -47,6 +47,9 @@ public class ConfigClient public static Property ChatBubblesFontTypeProperty; public static boolean ChatBubblesFontType = false; + public static Property HideEffectsBarProperty; + public static boolean HideEffectsBar = false; + /** * Questing Properties **/ @@ -127,6 +130,9 @@ public class ConfigClient ChatBubblesFontTypeProperty = config.get(VISUAL, "Chat Bubbles Font Type", false, "Enable the use of Custom Font for Chat Bubbles"); ChatBubblesFontType = ChatBubblesFontTypeProperty.getBoolean(false); + HideEffectsBarProperty = config.get(VISUAL, "Hide Effects Bar", false, "Hides CNPC+ Inventory Effects Bar"); + HideEffectsBar = HideEffectsBarProperty.getBoolean(false); + // Questing TrackingInfoAlignmentProperty = config.get(QUESTING, "Tracking Info Alignment", 3, "Client sided! Determines where tracking quest info shows up on the screen based on a number from 0 to 8. Default: 3"); TrackingInfoAlignment = TrackingInfoAlignmentProperty.getInt(3); diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index 908d9f23c..c4f26dd2d 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -210,6 +210,7 @@ settings.dialogSound=Dialog Sound settings.dialogSpeed=Dialog Speed settings.chatAlerts=Chat Alerts settings.bannerAlerts=Banner Alerts +settings.effectsBar=Hide Effects Bar settings.alignmentX=Alignment X settings.alignmentY=Alignment Y settings.trackScale=Tracking Scale diff --git a/src/main/resources/assets/customnpcs/textures/gui/icons.png b/src/main/resources/assets/customnpcs/textures/gui/icons.png index bcfb3ba65e65c136dd12360329e2cb7c6466f3b9..49c1b77e922e80daced989d904c4eff3c02c3c60 100644 GIT binary patch delta 4652 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