Shared Item Removal for Quest Item Shared

This commit is contained in:
Kam committed 2024-03-18 04:23:36 -04:00
1 parent 2fd7594720
commit e6c9c20751
3 files changed
+59 -3

No files matched your search

@@ -626,11 +626,12 @@ public class NoppesUtilPlayer {
}
playerData.save();
if(meetsComplete){
Server.sendData((EntityPlayerMP)player, EnumPacketClient.QUEST_COMPLETION, data.quest.writeToNBT(new NBTTagCompound()));
}
Server.sendData((EntityPlayerMP)player, EnumPacketClient.QUEST_COMPLETION, data.quest.writeToNBT(new NBTTagCompound()));
}
if(quest.type == EnumQuestType.Item && partyOptions.objectiveRequirement == EnumPartyObjectives.Shared){
quest.questInterface.removePartyItems(party);
}
if (hasNextQuest) {
if(party.validateQuest(data.quest.getNextQuest().getId(), true)){
@@ -30,6 +30,8 @@ public abstract class QuestInterface implements IQuestInterface {
handleComplete(player);
}
public void removePartyItems(Party party){}
public abstract Vector<String> getQuestLogStatus(EntityPlayer player);
public abstract IQuestObjective[] getObjectives(EntityPlayer var1);
@@ -106,9 +106,62 @@ public class QuestItem extends QuestInterface implements IQuestItem {
removeItems(player);
} else if (objectives == EnumPartyObjectives.Shared){
// Shared Case
// Do nothing, handled later in quest completion
}
}
public void removePartyItems(Party party) {
// Iterate through each quest item in the list
for (ItemStack questItem : items.items.values()) {
int remainingItems = questItem.stackSize;
// Iterate through all members of the party
for (UUID uuid : party.getPlayerUUIDs()) {
EntityPlayer player = NoppesUtilServer.getPlayer(uuid);
if (player != null) {
int removedItems = removeItemFromPlayer(player, questItem, remainingItems);
remainingItems -= removedItems;
// If no remaining items are needed for this quest item, move to the next one
if (remainingItems <= 0) {
break;
}
}
}
}
}
private int removeItemFromPlayer(EntityPlayer player, ItemStack questItem, int numItemsToRemove) {
int itemsRemoved = 0;
// Iterate through the player's inventory
for (int i = 0; i < player.inventory.mainInventory.length && itemsRemoved < numItemsToRemove; i++) {
ItemStack itemStack = player.inventory.mainInventory[i];
if (itemStack == null)
continue;
if (NoppesUtilPlayer.compareItems(itemStack, questItem, ignoreDamage, ignoreNBT)) {
int itemsToRemoveFromStack = Math.min(itemStack.stackSize, numItemsToRemove - itemsRemoved);
int size = itemStack.stackSize;
if (itemsToRemoveFromStack >= size) {
player.inventory.setInventorySlotContents(i, null);
itemsRemoved += size;
} else {
itemStack.stackSize -= itemsToRemoveFromStack;
itemsRemoved += itemsToRemoveFromStack;
}
// If there are no more remaining items to remove, break out of the loop
if (itemsRemoved >= numItemsToRemove) {
break;
}
}
}
return itemsRemoved;
}
public void removeItems(EntityPlayer player){
for(ItemStack questitem : items.items.values()){
int stacksize = questitem.stackSize;