From f84b16b29a2ce653b454bae0b3213fe41be30ba8 Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Sun, 18 Feb 2024 03:02:02 -0600 Subject: [PATCH] Implemented party quest dropping in the party GUI. Made party button always visible in the quest log if a quest can be partied with. Added drawTextBlock() function to GuiNPCInterface. --- .../client/gui/player/inventory/GuiParty.java | 77 ++++++++++--------- .../gui/player/inventory/GuiQuestLog.java | 18 +++-- .../npcs/client/gui/util/GuiNPCInterface.java | 11 +++ .../assets/customnpcs/lang/en_US.lang | 5 +- 4 files changed, 63 insertions(+), 48 deletions(-) diff --git a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiParty.java b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiParty.java index 96c2daf23..7c05dfff5 100644 --- a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiParty.java +++ b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiParty.java @@ -65,14 +65,10 @@ public class GuiParty extends GuiCNPCInventory implements ITextfieldListener, IT // //create party button // - GuiNpcButton createPartyButton = new GuiNpcButton(200, guiLeft + xSize/2 + 45, guiTop + ySize/2 + 20, "party.createParty"); + GuiNpcButton createPartyButton = new GuiNpcButton(200, guiLeft + xSize/2 + 40, guiTop + ySize/2 + 20, "party.createParty"); createPartyButton.width = 100; this.addButton(createPartyButton); - this.addLabel(new GuiNpcLabel(201, "party.partyInfo1", guiLeft + xSize/2 + 30, guiTop + ySize/2 - 30)); - this.addLabel(new GuiNpcLabel(202, "party.partyInfo2", guiLeft + xSize/2 + 30, guiTop + ySize/2 - 20)); - this.addLabel(new GuiNpcLabel(203, "party.partyInfo3", guiLeft + xSize/2 + 30, guiTop + ySize/2 - 10)); - //party invites list // GuiCustomScroll inviteScroll = new GuiCustomScroll(this, 210, false); @@ -112,12 +108,36 @@ public class GuiParty extends GuiCNPCInventory implements ITextfieldListener, IT this.addScroll(playerScroll); if (party.getIsLocked()) { - addButton(new GuiButtonNextPage(400, guiLeft + 144, guiTop + 176, false)); - getButton(400).visible = this.showQuestText; - addButton(new GuiButtonNextPage(401, guiLeft + 286, guiTop + 176, true)); - getButton(401).visible = !getButton(400).visible; + int arrowButtonsY = guiTop + ySize - 8 - 20; + + addButton(new GuiButtonNextPage(400, guiLeft + 144, arrowButtonsY, false)); + addLabel(new GuiNpcLabel(401, "quest.objectives", guiLeft + 168, getButton(400).yPosition + 3)); + getButton(400).visible = getLabel(401).enabled = this.showQuestText; + + addButton(new GuiButtonNextPage(405, guiLeft + 286, arrowButtonsY, true)); + String textString = StatCollector.translateToLocal("gui.text"); + addLabel(new GuiNpcLabel(406, textString, + guiLeft + 284 - fontRendererObj.getStringWidth(textString), getButton(405).yPosition + 3)); + getButton(405).visible = getLabel(406).enabled = !getButton(400).visible; + + GuiNpcButton disbandButton = new GuiNpcButton(410, guiLeft + 164, arrowButtonsY + 19, "party.dropQuest"); + disbandButton.width = 135; + this.addButton(disbandButton); } + //toggle friendly fire + // + GuiNpcLabel friendlyFireLabel = new GuiNpcLabel(321, StatCollector.translateToLocal("party.friendlyFire") + ":", + guiLeft + xSize / 2 + 10, guiTop + ySize / 2 + 5); + if (party.getIsLocked()) { + friendlyFireLabel.x = guiLeft + 5; + friendlyFireLabel.y = guiTop + ySize - 8 - 15; + } + this.addLabel(friendlyFireLabel); + GuiNpcButton friendlyFireButton = new GuiNpcButton(320, friendlyFireLabel.x + 70, friendlyFireLabel.y - 6, new String[]{"gui.on", "gui.off"}, party.friendlyFire() ? 0 : 1); + friendlyFireButton.width = 40; + this.addButton(friendlyFireButton); + if (this.isLeader) { if (!party.getIsLocked()) { //set leader button @@ -134,25 +154,13 @@ public class GuiParty extends GuiCNPCInventory implements ITextfieldListener, IT //send invite button (opens subgui) // - GuiNpcTextField playerTextField = new GuiNpcTextField(325, this, guiLeft + xSize / 2 + 20, guiTop + ySize / 2 + 40, 100, 20, ""); + GuiNpcTextField playerTextField = new GuiNpcTextField(325, this, friendlyFireLabel.x, guiTop + ySize / 2 + 25, 100, 20, ""); this.addTextField(playerTextField); - GuiNpcButton inviteButton = new GuiNpcButton(330, guiLeft + xSize / 2 + 125, guiTop + ySize / 2 + 40, "party.invite"); + GuiNpcButton inviteButton = new GuiNpcButton(330, playerTextField.xPosition + 105, playerTextField.yPosition, "party.invite"); inviteButton.width = 50; this.addButton(inviteButton); } - //toggle friendly fire - // - GuiNpcLabel friendlyFireLabel = new GuiNpcLabel(321, StatCollector.translateToLocal("party.friendlyFire") + ":", guiLeft + xSize / 2 + 20, guiTop + ySize / 2 + 5); - if (party.getIsLocked()) { - friendlyFireLabel.x = guiLeft + 5; - friendlyFireLabel.y = guiTop + ySize - 8 - 15; - } - this.addLabel(friendlyFireLabel); - GuiNpcButton friendlyFireButton = new GuiNpcButton(320, friendlyFireLabel.x + 70, friendlyFireLabel.y - 6, new String[]{"gui.on", "gui.off"}, party.friendlyFire() ? 0 : 1); - friendlyFireButton.width = 40; - this.addButton(friendlyFireButton); - //disband party // GuiNpcButton disbandButton = new GuiNpcButton(335, guiLeft + 5, guiTop + ySize - 9, "party.disbandParty"); @@ -252,9 +260,12 @@ public class GuiParty extends GuiCNPCInventory implements ITextfieldListener, IT case 400: this.showQuestText = false; break; - case 401: + case 405: this.showQuestText = true; break; + case 410: + Client.sendData(EnumPacketServer.SetPartyQuest, "", ""); + break; } initGui(); if (guibutton.id == 100 && activeTab != 0) { @@ -291,16 +302,14 @@ public class GuiParty extends GuiCNPCInventory implements ITextfieldListener, IT return; } - if (ClientCacheHandler.party != null && ClientCacheHandler.party.getQuest() != null) { + if (ClientCacheHandler.party == null) { + drawTextBlock("party.messageNoParty", guiLeft + 155, guiTop + ySize/2 - 20, 160); + } else if (ClientCacheHandler.party.getQuest() != null) { Quest quest = (Quest) ClientCacheHandler.party.getQuest(); if (showQuestText) { - drawQuestText(quest); - String title = StatCollector.translateToLocal("quest.objectives"); - fontRendererObj.drawString(title, guiLeft + 168, guiTop + 179, CustomNpcResourceListener.DefaultTextColor); + drawTextBlock(quest.getLogText(), guiLeft + 142, guiTop + 20, 174); } else { drawProgress(); - String title = StatCollector.translateToLocal("gui.text"); - fontRendererObj.drawString(title, guiLeft + 284 - fontRendererObj.getStringWidth(title), guiTop + 179, CustomNpcResourceListener.DefaultTextColor); } GL11.glPushMatrix(); @@ -312,14 +321,6 @@ public class GuiParty extends GuiCNPCInventory implements ITextfieldListener, IT } } - private void drawQuestText(Quest quest){ - TextBlockClient block = new TextBlockClient(quest.getLogText(), 174, true, player); - for(int i = 0; i < block.lines.size(); i++){ - String text = block.lines.get(i).getFormattedText(); - fontRendererObj.drawString(text, guiLeft + 142, guiTop + 20 + (i * fontRendererObj.FONT_HEIGHT), CustomNpcResourceListener.DefaultTextColor); - } - } - private void drawProgress() { String complete = this.questCompleteWith; if(complete != null && !complete.isEmpty()) diff --git a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiQuestLog.java b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiQuestLog.java index 96e083339..5968cc332 100644 --- a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiQuestLog.java +++ b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiQuestLog.java @@ -87,15 +87,16 @@ public class GuiQuestLog extends GuiCNPCInventory implements ITopButtonListener, addButton(new GuiButtonNextPage(1, guiLeft + 286, guiTop + 176, true)); addButton(new GuiButtonNextPage(2, guiLeft + 144, guiTop + 176, false)); - if (ClientCacheHandler.party != null && data.hasSelectedQuest() - && data.partyAbleQuests.contains(data.selectedCategory + ":" + data.selectedQuest) - && ClientCacheHandler.party.getPartyLeaderName().equals(this.player.getCommandSenderName())) { - String questName = ClientCacheHandler.party.getCurrentQuestName(); + if (data.partyAbleQuests.contains(data.selectedCategory + ":" + data.selectedQuest)) { + String questName = ClientCacheHandler.party != null ? ClientCacheHandler.party.getCurrentQuestName() : null; GuiNpcButton partyButton = new GuiNpcButton(3, guiLeft + 150, guiTop + 151, 50, 20, new String[]{"party.party", "party.partying"}, Objects.equals(questName, data.selectedQuest) ? 1 : 0); - if (Objects.equals(questName, data.selectedQuest)) { + addButton(partyButton); + + partyButton.enabled = ClientCacheHandler.party != null && data.hasSelectedQuest() + && ClientCacheHandler.party.getPartyLeaderName().equals(this.player.getCommandSenderName()); + if (partyButton.enabled && Objects.equals(questName, data.selectedQuest)) { partyButton.packedFGColour = 0x32CD32; } - addButton(partyButton); } GuiNpcButton trackingButton = new GuiNpcButton(4, guiLeft + 260, guiTop + 151, 50, 20, new String[]{"quest.track", "quest.tracking"}, data.trackedQuestKey.equals(data.selectedCategory + ":" + data.selectedQuest) ? 1 : 0); @@ -111,6 +112,9 @@ public class GuiQuestLog extends GuiCNPCInventory implements ITopButtonListener, getButton(2).visible = !questDetails && data.hasSelectedQuest(); getButton(4).visible = !data.selectedQuest.isEmpty() && getButton(1).visible; getButton(5).visible = getButton(4).visible; + if (getButton(3) != null) { + getButton(3).visible = getButton(4).visible; + } } @Override protected void actionPerformed(GuiButton guibutton){ @@ -317,5 +321,5 @@ public class GuiQuestLog extends GuiCNPCInventory implements ITopButtonListener, Client.sendData(EnumPacketServer.QuestLogToServer, compound, this.data.trackedQuestKey); } } - + } diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java b/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java index 5df690a6e..2f15eca88 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiNPCInterface.java @@ -9,6 +9,9 @@ import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import noppes.npcs.client.CustomNpcResourceListener; +import noppes.npcs.client.TextBlockClient; import noppes.npcs.entity.EntityNPCInterface; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; @@ -269,6 +272,14 @@ public abstract class GuiNPCInterface extends GuiScreen GL11.glPopMatrix(); } + protected void drawTextBlock(String text, int x, int y, int lineWidth) { + TextBlockClient block = new TextBlockClient(StatCollector.translateToLocal(text), lineWidth, true, player); + for(int line = 0; line < block.lines.size(); line++){ + String lineText = block.lines.get(line).getFormattedText(); + fontRendererObj.drawString(lineText, x, y + (line * fontRendererObj.FONT_HEIGHT), CustomNpcResourceListener.DefaultTextColor); + } + } + public FontRenderer getFontRenderer() { return this.fontRendererObj; } diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index 65c68a44f..4338c92f1 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -138,6 +138,7 @@ party.completeFor=Complete For party.createParty=Create Party party.disbandParty=Disband Party party.disbandConfirm=Are you sure you want to disband the party? +party.dropQuest=Drop Quest party.friendlyFire=Friendly Fire party.ignore=Ignore party.invite=Invite @@ -154,9 +155,7 @@ party.maxPartySize=Max Party Size party.options=Party Options party.party=Party party.partying=Partying! -party.partyInfo1=You're not in a party! -party.partyInfo2=Either wait for an invite -party.partyInfo3=or create one. +party.messageNoParty=You're not in a party! Either wait for an invite or create one. party.partyRequirements=Party Requirements party.partyRewards=Party Rewards