From d1d4155c889b02dfcbc7490b4d30598857ed9eb3 Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 10 Mar 2026 04:50:28 -0400 Subject: [PATCH] Some GUI and Packet Fixes --- .../category/AbilityCategoryMovePacket.java | 6 ++ .../category/CategoryMoveItemPacket.java | 6 ++ .../gui/global/GuiAbilityDirectory.java | 67 ++++++++++--------- .../gui/util/GuiDirectoryCategorized.java | 4 +- 4 files changed, 50 insertions(+), 33 deletions(-) diff --git a/src/main/java/kamkeel/npcs/network/packets/request/category/AbilityCategoryMovePacket.java b/src/main/java/kamkeel/npcs/network/packets/request/category/AbilityCategoryMovePacket.java index e498ed4a2..4912bcd28 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/category/AbilityCategoryMovePacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/category/AbilityCategoryMovePacket.java @@ -14,6 +14,7 @@ import kamkeel.npcs.util.ByteBufUtils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import noppes.npcs.constants.EnumCategoryType; +import noppes.npcs.controllers.CategoryManager; import java.io.IOException; @@ -63,6 +64,11 @@ public final class AbilityCategoryMovePacket extends AbstractPacket { String itemName = ByteBufUtils.readString(in); int cat = in.readInt(); + // Validate target category exists (0 = Uncategorized is always valid) + CategoryManager cm = CategorySavePacket.getManager(type); + if (cm == null) return; + if (cat != CategoryManager.UNCATEGORIZED_ID && cm.getCategory(cat) == null) return; + switch (type) { case EnumCategoryType.ABILITY: AbilityController.Instance.moveCustomAbilityToCategory(itemName, cat); diff --git a/src/main/java/kamkeel/npcs/network/packets/request/category/CategoryMoveItemPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/category/CategoryMoveItemPacket.java index 0aed23e7e..4953bcf0c 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/category/CategoryMoveItemPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/category/CategoryMoveItemPacket.java @@ -14,6 +14,7 @@ import net.minecraft.entity.player.EntityPlayerMP; import kamkeel.npcs.controllers.AbilityController; import noppes.npcs.constants.EnumCategoryType; import noppes.npcs.controllers.AnimationController; +import noppes.npcs.controllers.CategoryManager; import noppes.npcs.controllers.CustomEffectController; import noppes.npcs.controllers.LinkedItemController; @@ -65,6 +66,11 @@ public final class CategoryMoveItemPacket extends AbstractPacket { int item = in.readInt(); int cat = in.readInt(); + // Validate target category exists (0 = Uncategorized is always valid) + CategoryManager cm = CategorySavePacket.getManager(type); + if (cm == null) return; + if (cat != CategoryManager.UNCATEGORIZED_ID && cm.getCategory(cat) == null) return; + switch (type) { case EnumCategoryType.EFFECT: CustomEffectController.getInstance().moveItemToCategory(item, cat); break; case EnumCategoryType.ANIMATION: AnimationController.getInstance().moveItemToCategory(item, cat); break; diff --git a/src/main/java/noppes/npcs/client/gui/global/GuiAbilityDirectory.java b/src/main/java/noppes/npcs/client/gui/global/GuiAbilityDirectory.java index 8985c80da..0684218c2 100644 --- a/src/main/java/noppes/npcs/client/gui/global/GuiAbilityDirectory.java +++ b/src/main/java/noppes/npcs/client/gui/global/GuiAbilityDirectory.java @@ -764,44 +764,47 @@ public class GuiAbilityDirectory extends GuiDirectoryCategorized GL11.glEnable(GL11.GL_SCISSOR_TEST); setScissorClip(previewX, previewY, previewW, previewH); - GL11.glEnable(GL11.GL_COLOR_MATERIAL); - GL11.glPushMatrix(); - - GL11.glTranslatef(npcScreenX, npcScreenY, 500F); - GL11.glScalef(-renderZoom, renderZoom, renderZoom); - GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); - GL11.glRotatef(CAMERA_PITCH, 1.0F, 0.0F, 0.0F); - GL11.glRotatef(rotation, 0.0F, 1.0F, 0.0F); - - GL11.glRotatef(135F, 0.0F, 1.0F, 0.0F); - RenderHelper.enableStandardItemLighting(); - GL11.glRotatef(-135F, 0.0F, 1.0F, 0.0F); - - GL11.glTranslatef(0.0F, npc.yOffset, 0.0F); - RenderManager.instance.playerViewY = 180F; - ClientEventHandler.renderingEntityInGUI = true; - - // Render NPC at its position delta try { - RenderManager.instance.renderEntityWithPosYaw(npc, npcDeltaX, npcDeltaY, npcDeltaZ, 0.0F, partialTicks); - } catch (Exception ignored) {} + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glPushMatrix(); - // Render preview entities - renderPreviewEntities(partialTicks); + GL11.glTranslatef(npcScreenX, npcScreenY, 500F); + GL11.glScalef(-renderZoom, renderZoom, renderZoom); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(CAMERA_PITCH, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(rotation, 0.0F, 1.0F, 0.0F); - // Render telegraph - renderPreviewTelegraph(partialTicks); + GL11.glRotatef(135F, 0.0F, 1.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GL11.glRotatef(-135F, 0.0F, 1.0F, 0.0F); - ClientEventHandler.renderingEntityInGUI = false; - GL11.glPopMatrix(); + GL11.glTranslatef(0.0F, npc.yOffset, 0.0F); + RenderManager.instance.playerViewY = 180F; + ClientEventHandler.renderingEntityInGUI = true; - RenderHelper.disableStandardItemLighting(); - GL11.glDisable(GL12.GL_RESCALE_NORMAL); - OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); - GL11.glDisable(GL11.GL_TEXTURE_2D); - OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); + // Render NPC at its position delta + try { + RenderManager.instance.renderEntityWithPosYaw(npc, npcDeltaX, npcDeltaY, npcDeltaZ, 0.0F, partialTicks); + } catch (Exception ignored) {} - GL11.glDisable(GL11.GL_SCISSOR_TEST); + // Render preview entities + renderPreviewEntities(partialTicks); + + // Render telegraph + renderPreviewTelegraph(partialTicks); + + ClientEventHandler.renderingEntityInGUI = false; + GL11.glPopMatrix(); + + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GL11.glDisable(GL11.GL_TEXTURE_2D); + OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); + } finally { + ClientEventHandler.renderingEntityInGUI = false; + GL11.glDisable(GL11.GL_SCISSOR_TEST); + } GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); } diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiDirectoryCategorized.java b/src/main/java/noppes/npcs/client/gui/util/GuiDirectoryCategorized.java index e8be1249a..b27429ec1 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiDirectoryCategorized.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiDirectoryCategorized.java @@ -771,7 +771,7 @@ public abstract class GuiDirectoryCategorized extends GuiDirectory if (subgui instanceof SubGuiEditText) { if (!((SubGuiEditText) subgui).cancelled && selectedCatId > 0) { String name = ((SubGuiEditText) subgui).text; - if (name != null && !name.isEmpty() && !catData.containsKey(name)) { + if (name != null && !name.isEmpty() && !name.equals(prevCatName) && !catData.containsKey(name)) { Category cat = new Category(selectedCatId, name); onSaveCategory(cat); catData.remove(prevCatName); @@ -779,6 +779,8 @@ public abstract class GuiDirectoryCategorized extends GuiDirectory prevCatName = name; } } + // Restore category selection to current name (handles validation failure) + catScroll.setSelected(prevCatName); } if (subgui instanceof SubGuiCategoryMoveConfirm) { SubGuiCategoryMoveConfirm confirm = (SubGuiCategoryMoveConfirm) subgui;