From d8b756aba6a22b5eafbcbcaad20e5929d8551502 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 15 Mar 2024 19:14:14 -0400 Subject: [PATCH] Handle Party Complete for Quest Items - Shared Item Quests not yet implemented --- .../java/noppes/npcs/NoppesUtilPlayer.java | 16 ++--- .../noppes/npcs/quests/QuestInterface.java | 8 ++- .../java/noppes/npcs/quests/QuestItem.java | 61 ++++++++++++------- 3 files changed, 51 insertions(+), 34 deletions(-) diff --git a/src/main/java/noppes/npcs/NoppesUtilPlayer.java b/src/main/java/noppes/npcs/NoppesUtilPlayer.java index 6c35b9a8b..a40fe83e9 100644 --- a/src/main/java/noppes/npcs/NoppesUtilPlayer.java +++ b/src/main/java/noppes/npcs/NoppesUtilPlayer.java @@ -596,11 +596,7 @@ public class NoppesUtilPlayer { } } } - - if(meetsComplete){ - data.quest.questInterface.handleComplete(player); - } - + data.quest.questInterface.handlePartyComplete(player, party, isLeader, partyOptions.objectiveRequirement); if(meetsReward){ if(data.quest.rewardExp > 0){ player.worldObj.playSoundAtEntity(player, "random.orb", 0.1F, 0.5F * ((player.worldObj.rand.nextFloat() - player.worldObj.rand.nextFloat()) * 0.7F + 1.8F)); @@ -623,12 +619,10 @@ public class NoppesUtilPlayer { PlayerQuestController.setQuestPartyFinished(data.quest, player, data); } - if (hasNextQuest) { - if(meetsComplete){ - QuestData nextQuest = new QuestData(data.quest.getNextQuest()); - nextQuest.sendAlerts = data.quest.id != data.quest.getNextQuest().id || data.sendAlerts; - PlayerQuestController.addActiveQuest(nextQuest, player); - } + if (hasNextQuest && meetsComplete) { + QuestData nextQuest = new QuestData(data.quest.getNextQuest()); + nextQuest.sendAlerts = data.quest.id != data.quest.getNextQuest().id || data.sendAlerts; + PlayerQuestController.addActiveQuest(nextQuest, player); } playerData.save(); diff --git a/src/main/java/noppes/npcs/quests/QuestInterface.java b/src/main/java/noppes/npcs/quests/QuestInterface.java index 1fa44ce11..b84722421 100644 --- a/src/main/java/noppes/npcs/quests/QuestInterface.java +++ b/src/main/java/noppes/npcs/quests/QuestInterface.java @@ -4,6 +4,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.api.handler.data.IQuestInterface; import noppes.npcs.api.handler.data.IQuestObjective; +import noppes.npcs.constants.EnumPartyObjectives; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.data.Party; import noppes.npcs.controllers.data.PlayerData; @@ -24,7 +25,12 @@ public abstract class QuestInterface implements IQuestInterface { } } } - public abstract Vector getQuestLogStatus(EntityPlayer player); + + public void handlePartyComplete(EntityPlayer player, Party party, boolean isLeader, EnumPartyObjectives objectives){ + handleComplete(player); + } + + public abstract Vector getQuestLogStatus(EntityPlayer player); public abstract IQuestObjective[] getObjectives(EntityPlayer var1); diff --git a/src/main/java/noppes/npcs/quests/QuestItem.java b/src/main/java/noppes/npcs/quests/QuestItem.java index 083d7b3b5..fdae99002 100644 --- a/src/main/java/noppes/npcs/quests/QuestItem.java +++ b/src/main/java/noppes/npcs/quests/QuestItem.java @@ -9,7 +9,6 @@ import noppes.npcs.NpcMiscInventory; import noppes.npcs.api.handler.data.IQuestItem; import noppes.npcs.api.handler.data.IQuestObjective; import noppes.npcs.constants.EnumPartyObjectives; -import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.data.Party; import noppes.npcs.controllers.data.PlayerData; import noppes.npcs.scripted.CustomNPCsException; @@ -93,29 +92,47 @@ public class QuestItem extends QuestInterface implements IQuestItem { super.handleComplete(player); if(leaveItems) return; - for(ItemStack questitem : items.items.values()){ - int stacksize = questitem.stackSize; - for(int i = 0; i < player.inventory.mainInventory.length; i++){ - ItemStack item = player.inventory.mainInventory[i]; - if(item == null) - continue; - if(NoppesUtilPlayer.compareItems(item, questitem, ignoreDamage, ignoreNBT)){ - int size = item.stackSize; - if(stacksize - size >= 0){ - player.inventory.setInventorySlotContents(i, null); - item.splitStack(size); - } - else{ - item.splitStack(stacksize); - } - stacksize -= size; - if(stacksize <= 0) - break; - } - } - } + removeItems(player); } + public void handlePartyComplete(EntityPlayer player, Party party, boolean isLeader, EnumPartyObjectives objectives){ + super.handlePartyComplete(player, party, isLeader, objectives); + if(leaveItems) + return; + + if(isLeader && objectives == EnumPartyObjectives.Leader){ + removeItems(player); + } else if (objectives == EnumPartyObjectives.All){ + removeItems(player); + } else if (objectives == EnumPartyObjectives.Shared){ + // Shared Case + } + } + + public void removeItems(EntityPlayer player){ + for(ItemStack questitem : items.items.values()){ + int stacksize = questitem.stackSize; + for(int i = 0; i < player.inventory.mainInventory.length; i++){ + ItemStack item = player.inventory.mainInventory[i]; + if(item == null) + continue; + if(NoppesUtilPlayer.compareItems(item, questitem, ignoreDamage, ignoreNBT)){ + int size = item.stackSize; + if(stacksize - size >= 0){ + player.inventory.setInventorySlotContents(i, null); + item.splitStack(size); + } + else{ + item.splitStack(stacksize); + } + stacksize -= size; + if(stacksize <= 0) + break; + } + } + } + } + @Override public Vector getQuestLogStatus(EntityPlayer player) { Vector vec = new Vector();