From aba24fc93cc34e50393f9db590a3be64b591bcef Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Mon, 20 Mar 2023 22:29:58 -0500 Subject: [PATCH] Tags can now be added through a new sub gui in the NPC advanced tab. --- src/api | 2 +- src/main/java/noppes/npcs/DataAdvanced.java | 15 +++ .../java/noppes/npcs/PacketHandlerServer.java | 24 +++- .../client/gui/advanced/GuiNPCTagSetup.java | 117 ++++++++++++++++++ .../client/gui/mainmenu/GuiNpcAdvanced.java | 27 ++-- .../npcs/constants/EnumPacketServer.java | 2 +- .../npcs/controllers/TagController.java | 15 ++- 7 files changed, 182 insertions(+), 20 deletions(-) create mode 100644 src/main/java/noppes/npcs/client/gui/advanced/GuiNPCTagSetup.java diff --git a/src/api b/src/api index dc6882a30..64875b0fd 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit dc6882a30364c673daf1d27750cf9da10c4b1a82 +Subproject commit 64875b0fdd3d2f07ec94a0feb1dc37313746e02f diff --git a/src/main/java/noppes/npcs/DataAdvanced.java b/src/main/java/noppes/npcs/DataAdvanced.java index 6d0dbea3a..82f6b572d 100644 --- a/src/main/java/noppes/npcs/DataAdvanced.java +++ b/src/main/java/noppes/npcs/DataAdvanced.java @@ -2,6 +2,7 @@ package noppes.npcs; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; import noppes.npcs.constants.EnumJobType; import noppes.npcs.constants.EnumRoleType; import noppes.npcs.controllers.GlobalDataController; @@ -13,6 +14,8 @@ import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.roles.*; import java.util.HashMap; +import java.util.HashSet; +import java.util.UUID; public class DataAdvanced { @@ -32,6 +35,7 @@ public class DataAdvanced { private EntityNPCInterface npc; public FactionOptions factions = new FactionOptions(); + public HashSet tagUUIDs = new HashSet<>(); public EnumRoleType role = EnumRoleType.None; public EnumJobType job = EnumJobType.None; @@ -78,6 +82,12 @@ public class DataAdvanced { compound.setBoolean("RefuseSoulStone", refuseSoulStone); compound.setString("SoulStonePlayerName", soulStonePlayerName); compound.setInteger("MinFactionPointsToSoulStone", minFactionPointsToSoulStone); + + NBTTagList nbtTagList = new NBTTagList(); + for (UUID uuid : tagUUIDs) { + nbtTagList.appendTag(new NBTTagString(uuid.toString())); + } + compound.setTag("TagUUIDs", nbtTagList); return compound; } @@ -113,6 +123,11 @@ public class DataAdvanced { refuseSoulStone = compound.getBoolean("RefuseSoulStone"); soulStonePlayerName = compound.getString("SoulStonePlayerName"); minFactionPointsToSoulStone = compound.getInteger("MinFactionPointsToSoulStone"); + + NBTTagList nbtTagList = compound.getTagList("TagUUIDs",8); + for (int i = 0; i < nbtTagList.tagCount(); i++) { + tagUUIDs.add(UUID.fromString(nbtTagList.getStringTagAt(i))); + } } private HashMap getDialogs(NBTTagList tagList) { diff --git a/src/main/java/noppes/npcs/PacketHandlerServer.java b/src/main/java/noppes/npcs/PacketHandlerServer.java index 422d8cfca..84022a4c7 100644 --- a/src/main/java/noppes/npcs/PacketHandlerServer.java +++ b/src/main/java/noppes/npcs/PacketHandlerServer.java @@ -95,6 +95,19 @@ public class PacketHandlerServer{ map.put(provider.getDimensionName(), id); } NoppesUtilServer.sendScrollData(player, map); + } else if(type == EnumPacketServer.TagsGet){ + NoppesUtilServer.sendTagDataAll(player); + } else if (type == EnumPacketServer.NpcTagsGet) { + NBTTagCompound compound = new NBTTagCompound(); + NBTTagList tagList = new NBTTagList(); + for (UUID uuid : npc.advanced.tagUUIDs) { + Tag tag = TagController.getInstance().getTagFromUUID(uuid); + if (tag != null) { + tagList.appendTag(new NBTTagString(tag.name)); + } + } + compound.setTag("TagNames",tagList); + Server.sendData(player, EnumPacketClient.GUI_DATA, compound); } if(type.needsNpc && npc == null){ @@ -404,9 +417,6 @@ public class PacketHandlerServer{ else if(type == EnumPacketServer.FactionsGet){ NoppesUtilServer.sendFactionDataAll(player); } - else if(type == EnumPacketServer.TagsGet){ - NoppesUtilServer.sendTagDataAll(player); - } else if(type == EnumPacketServer.DialogGet){ Dialog dialog = DialogController.instance.dialogs.get(buffer.readInt()); if(dialog != null){ @@ -751,7 +761,13 @@ public class PacketHandlerServer{ Server.sendData(player, EnumPacketClient.GUI_DATA, compound); } else if(type == EnumPacketServer.TagSet){ - // npc.setFaction(buffer.readInt()); + npc.advanced.tagUUIDs.clear(); + NBTTagCompound compound = Server.readNBT(buffer); + NBTTagList list = compound.getTagList("TagNames",8); + for (int i = 0; i < list.tagCount(); i++) { + String tagName = list.getStringTagAt(i); + npc.advanced.tagUUIDs.add(((Tag)TagController.getInstance().getTagFromName(tagName)).uuid); + } } else if(type == EnumPacketServer.TagSave){ Tag tag = new Tag(); diff --git a/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCTagSetup.java b/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCTagSetup.java new file mode 100644 index 000000000..643dcccc6 --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/advanced/GuiNPCTagSetup.java @@ -0,0 +1,117 @@ +package noppes.npcs.client.gui.advanced; + +import net.minecraft.client.gui.GuiButton; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import noppes.npcs.client.Client; +import noppes.npcs.client.gui.SubGuiNpcFactionOptions; +import noppes.npcs.client.gui.util.*; +import noppes.npcs.constants.EnumPacketServer; +import noppes.npcs.entity.EntityNPCInterface; + +import java.util.*; + +public class GuiNPCTagSetup extends GuiNPCInterface2 implements IScrollData,ICustomScrollListener,IGuiData +{ + private GuiCustomScroll scrollTags; + private GuiCustomScroll npcTags; + private HashMap data = new HashMap<>(); + private final ArrayList tagNames = new ArrayList<>(); + + public GuiNPCTagSetup(EntityNPCInterface npc) + { + super(npc); + Client.sendData(EnumPacketServer.TagsGet); + Client.sendData(EnumPacketServer.NpcTagsGet); + } + + public void initGui() + { + super.initGui(); + + if(scrollTags == null){ + scrollTags = new GuiCustomScroll(this,0); + scrollTags.setSize(120, 180); + } + scrollTags.guiLeft = guiLeft + 50; + scrollTags.guiTop = guiTop + 24; + this.addScroll(scrollTags); + + if(npcTags == null){ + npcTags = new GuiCustomScroll(this,1); + npcTags.setSize(120, 180); + } + npcTags.guiLeft = guiLeft + width - 180; + npcTags.guiTop = guiTop + 24; + npcTags.setList(tagNames); + this.addScroll(npcTags); + + addButton(new GuiNpcButton(10, guiLeft + 180, guiTop + 90, 55, 20, ">")); + addButton(new GuiNpcButton(11, guiLeft + 180, guiTop + 112, 55, 20, "<")); + + addButton(new GuiNpcButton(12, guiLeft + 180, guiTop + 140, 55, 20, ">>")); + addButton(new GuiNpcButton(13, guiLeft + 180, guiTop + 162, 55, 20, "<<")); + } + + @Override + public void buttonEvent(GuiButton guibutton) { + if (guibutton.id == 10 && scrollTags.hasSelected() && !tagNames.contains(scrollTags.getSelected())) { + tagNames.add(scrollTags.getSelected()); + } + if (guibutton.id == 12) { + tagNames.clear(); + tagNames.addAll(data.keySet()); + } + if (guibutton.id == 11 && npcTags.hasSelected()) { + tagNames.remove(npcTags.getSelected()); + } + if (guibutton.id == 13) { + tagNames.clear(); + } + initGui(); + } + + @Override + public void setData(Vector list, HashMap data) + { + this.data = data; + scrollTags.setList(list); + initGui(); + } + + @Override + public void setGuiData(NBTTagCompound compound) { + NBTTagList tagList = compound.getTagList("TagNames",8); + tagNames.clear(); + for (int i = 0; i < tagList.tagCount(); i++) { + tagNames.add(tagList.getStringTagAt(i)); + } + } + + public void mouseClicked(int i, int j, int k) + { + super.mouseClicked(i, j, k); + if(k == 0 && scrollTags != null) + scrollTags.mouseClicked(i, j, k); + } + + @Override + public void setSelected(String selected) { + scrollTags.setSelected(selected); + } + + @Override + public void customScrollClicked(int i, int j, int k, GuiCustomScroll guiCustomScroll) { + } + + public void save() { + NBTTagCompound tagCompound = new NBTTagCompound(); + NBTTagList tagList = new NBTTagList(); + for (String string : this.tagNames) { + tagList.appendTag(new NBTTagString(string)); + } + tagCompound.setTag("TagNames",tagList); + Client.sendData(EnumPacketServer.TagSet, tagCompound); + } +} diff --git a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAdvanced.java b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAdvanced.java index b92dbe2e5..84ce86992 100644 --- a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAdvanced.java +++ b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAdvanced.java @@ -27,21 +27,24 @@ public class GuiNpcAdvanced extends GuiNPCInterface2 implements IGuiData @Override public void initGui(){ super.initGui(); - this.addButton(new GuiNpcButton(3, guiLeft + 85 + 160, guiTop + 20, 52, 20, "selectServer.edit")); - this.addButton(new GuiNpcButton(8, guiLeft + 85, guiTop + 20,155,20, new String[]{"role.none","role.trader","role.follower","role.bank","role.transporter", "role.mailman", NoppesStringUtils.translate("role.companion", "(WIP)")},npc.advanced.role.ordinal())); + int y = guiTop + 10; + int gap = 21; + this.addButton(new GuiNpcButton(3, guiLeft + 85 + 160, y, 52, 20, "selectServer.edit")); + this.addButton(new GuiNpcButton(8, guiLeft + 85, y,155,20, new String[]{"role.none","role.trader","role.follower","role.bank","role.transporter", "role.mailman", NoppesStringUtils.translate("role.companion", "(WIP)")},npc.advanced.role.ordinal())); getButton(3).setEnabled(npc.advanced.role != EnumRoleType.None && npc.advanced.role != EnumRoleType.Postman); - this.addButton(new GuiNpcButton(4, guiLeft + 85 + 160, guiTop + 43, 52, 20, "selectServer.edit")); - this.addButton(new GuiNpcButton(5, guiLeft + 85, guiTop + 43,155,20, new String[]{"job.none","job.bard","job.healer","job.guard","job.itemgiver","role.follower", "job.spawner", "job.conversation", "job.chunkloader"},npc.advanced.job.ordinal())); + this.addButton(new GuiNpcButton(4, guiLeft + 85 + 160, y += gap, 52, 20, "selectServer.edit")); + this.addButton(new GuiNpcButton(5, guiLeft + 85, y,155,20, new String[]{"job.none","job.bard","job.healer","job.guard","job.itemgiver","role.follower", "job.spawner", "job.conversation", "job.chunkloader"},npc.advanced.job.ordinal())); getButton(4).setEnabled(npc.advanced.job != EnumJobType.None && npc.advanced.job != EnumJobType.ChunkLoader); - this.addButton(new GuiNpcButton(7, guiLeft + 85, guiTop + 66, 214, 20, "advanced.lines")); - this.addButton(new GuiNpcButton(9, guiLeft + 85, guiTop + 89, 214, 20, "menu.factions")); - this.addButton(new GuiNpcButton(10, guiLeft + 85, guiTop + 112, 214, 20, "dialog.dialogs")); - this.addButton(new GuiNpcButton(11, guiLeft + 85, guiTop + 135, 214, 20, "advanced.sounds")); - this.addButton(new GuiNpcButton(12, guiLeft + 85, guiTop + 158, 214, 20, "advanced.night")); - this.addButton(new GuiNpcButton(13, guiLeft + 85, guiTop + 181, 214, 20, "global.linked")); + this.addButton(new GuiNpcButton(7, guiLeft + 85, y += gap, 214, 20, "advanced.lines")); + this.addButton(new GuiNpcButton(9, guiLeft + 85, y += gap, 214, 20, "menu.factions")); + this.addButton(new GuiNpcButton(10, guiLeft + 85, y += gap, 214, 20, "dialog.dialogs")); + this.addButton(new GuiNpcButton(11, guiLeft + 85, y += gap, 214, 20, "advanced.sounds")); + this.addButton(new GuiNpcButton(12, guiLeft + 85, y += gap, 214, 20, "advanced.night")); + this.addButton(new GuiNpcButton(13, guiLeft + 85, y += gap, 214, 20, "global.linked")); + this.addButton(new GuiNpcButton(14, guiLeft + 85, y += gap, 214, 20, "menu.tags")); } @@ -92,6 +95,10 @@ public class GuiNpcAdvanced extends GuiNPCInterface2 implements IGuiData save(); NoppesUtil.openGUI(player, new GuiNPCAdvancedLinkedNpc(npc)); } + if(button.id == 14){ + save(); + NoppesUtil.openGUI(player, new GuiNPCTagSetup(npc)); + } } @Override diff --git a/src/main/java/noppes/npcs/constants/EnumPacketServer.java b/src/main/java/noppes/npcs/constants/EnumPacketServer.java index 194837038..7b2e74029 100644 --- a/src/main/java/noppes/npcs/constants/EnumPacketServer.java +++ b/src/main/java/noppes/npcs/constants/EnumPacketServer.java @@ -66,7 +66,7 @@ public enum EnumPacketServer { FactionRemove(CustomNpcsPermissions.GLOBAL_FACTION), FactionSave(CustomNpcsPermissions.GLOBAL_FACTION), FactionsGet, FactionGet, TagRemove(CustomNpcsPermissions.GLOBAL_TAG), - TagSave(CustomNpcsPermissions.GLOBAL_TAG), TagsGet, TagGet, + TagSave(CustomNpcsPermissions.GLOBAL_TAG), TagsGet, TagGet, NpcTagsGet, QuestCategorySave(CustomNpcsPermissions.GLOBAL_QUEST), QuestCategoriesGet, QuestRemove(CustomNpcsPermissions.GLOBAL_QUEST), QuestCategoryRemove(CustomNpcsPermissions.GLOBAL_QUEST), diff --git a/src/main/java/noppes/npcs/controllers/TagController.java b/src/main/java/noppes/npcs/controllers/TagController.java index 07ced08de..4915076b8 100644 --- a/src/main/java/noppes/npcs/controllers/TagController.java +++ b/src/main/java/noppes/npcs/controllers/TagController.java @@ -10,10 +10,7 @@ import noppes.npcs.api.handler.data.ITag; import noppes.npcs.controllers.data.Tag; import java.io.*; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.zip.GZIPInputStream; public class TagController implements ITagHandler { @@ -206,6 +203,7 @@ public class TagController implements ITagHandler { return true; return false; } + public Tag getTagFromName(String tagname){ for (Map.Entry entryTag: TagController.getInstance().tags.entrySet()){ if (entryTag.getValue().name.equalsIgnoreCase(tagname)){ @@ -224,4 +222,13 @@ public class TagController implements ITagHandler { } return names; } + + public Tag getTagFromUUID(UUID uuid){ + for (Map.Entry entryTag: TagController.getInstance().tags.entrySet()){ + if (entryTag.getValue().uuid.equals(uuid)) { + return entryTag.getValue(); + } + } + return null; + } }