diff --git a/src/main/java/noppes/npcs/ServerEventsHandler.java b/src/main/java/noppes/npcs/ServerEventsHandler.java index a1294a569..e4e7f1f18 100644 --- a/src/main/java/noppes/npcs/ServerEventsHandler.java +++ b/src/main/java/noppes/npcs/ServerEventsHandler.java @@ -40,6 +40,7 @@ import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.items.ItemExcalibur; import noppes.npcs.items.ItemShield; import noppes.npcs.items.ItemSoulstoneEmpty; +import noppes.npcs.quests.QuestItem; import noppes.npcs.quests.QuestKill; import noppes.npcs.roles.RoleFollower; @@ -345,6 +346,7 @@ public class ServerEventsHandler { return; PlayerData playerData = PlayerDataController.instance.getPlayerData(event.entityPlayer); PlayerQuestData questData = playerData.questData; + QuestItem.pickedUp = event.item.getEntityItem(); questData.checkQuestCompletion(playerData, EnumQuestType.Item); } diff --git a/src/main/java/noppes/npcs/client/NoppesUtil.java b/src/main/java/noppes/npcs/client/NoppesUtil.java index 2c41363b8..46ccab73a 100644 --- a/src/main/java/noppes/npcs/client/NoppesUtil.java +++ b/src/main/java/noppes/npcs/client/NoppesUtil.java @@ -302,10 +302,9 @@ public class NoppesUtil { public static void guiQuestCompletion(EntityPlayer player, NBTTagCompound read) { Quest quest = new Quest(); quest.readNBT(read); - if (!quest.completeText.equals("")) + if (!quest.completeText.isEmpty()) { NoppesUtil.openGUI(player, new GuiQuestCompletion(quest)); - else - NoppesUtilPlayer.sendData(EnumPlayerPacket.QuestCompletion, quest.id); + } } public static void openDialog(NBTTagCompound compound, EntityNPCInterface npc, EntityPlayer player){ diff --git a/src/main/java/noppes/npcs/client/gui/player/GuiQuestCompletion.java b/src/main/java/noppes/npcs/client/gui/player/GuiQuestCompletion.java index 7a089c6d2..cb37aa3e5 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiQuestCompletion.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiQuestCompletion.java @@ -63,7 +63,6 @@ public class GuiQuestCompletion extends GuiNPCInterface implements ITopButtonLis protected void actionPerformed(GuiButton guibutton) { if(guibutton.id == 0){ - NoppesUtilPlayer.sendData(EnumPlayerPacket.QuestCompletion, quest.id); close(); } } @@ -81,7 +80,7 @@ public class GuiQuestCompletion extends GuiNPCInterface implements ITopButtonLis } @Override public void save() { - NoppesUtilPlayer.sendData(EnumPlayerPacket.QuestCompletion, quest.id); + } } diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java index 505241f06..3b7dbd722 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java @@ -18,6 +18,7 @@ import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.QuestController; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.quests.QuestInterface; +import noppes.npcs.quests.QuestItem; import noppes.npcs.scripted.interfaces.handler.IPlayerQuestData; import noppes.npcs.scripted.interfaces.handler.data.IQuest; @@ -122,7 +123,7 @@ public class PlayerQuestData implements IPlayerQuestData { QuestInterface inter = data.quest.questInterface; if(inter.isCompleted(playerData)){ if(!data.isCompleted){ - if(!data.quest.complete(player,data)){ + if(!data.quest.complete(player,data) || data.quest.completeText.isEmpty()){ Server.sendData((EntityPlayerMP)player, EnumPacketClient.MESSAGE, "quest.completed", data.quest.title); Server.sendData((EntityPlayerMP)player, EnumPacketClient.CHAT, "quest.completed",": ",data.quest.title); } @@ -134,6 +135,7 @@ public class PlayerQuestData implements IPlayerQuestData { else data.isCompleted = false; } + QuestItem.pickedUp = null; return bo; } diff --git a/src/main/java/noppes/npcs/controllers/data/Quest.java b/src/main/java/noppes/npcs/controllers/data/Quest.java index 9dcb7896c..a680ece5c 100644 --- a/src/main/java/noppes/npcs/controllers/data/Quest.java +++ b/src/main/java/noppes/npcs/controllers/data/Quest.java @@ -3,10 +3,7 @@ package noppes.npcs.controllers.data; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; -import noppes.npcs.ICompatibilty; -import noppes.npcs.NpcMiscInventory; -import noppes.npcs.Server; -import noppes.npcs.VersionCompatibility; +import noppes.npcs.*; import noppes.npcs.constants.EnumPacketClient; import noppes.npcs.constants.EnumQuestCompletion; import noppes.npcs.constants.EnumQuestRepeat; @@ -138,6 +135,7 @@ public class Quest implements ICompatibilty, IQuest { public boolean complete(EntityPlayer player, QuestData data) { if(completion == EnumQuestCompletion.Instant){ + NoppesUtilPlayer.questCompletion((EntityPlayerMP) player, data.quest.id); Server.sendData((EntityPlayerMP)player, EnumPacketClient.QUEST_COMPLETION, data.quest.writeToNBT(new NBTTagCompound())); return true; } diff --git a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java index 4ab7d2ce5..8ea79f11b 100644 --- a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java +++ b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java @@ -384,6 +384,7 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti PlayerQuestData playerdata = PlayerDataController.instance.getPlayerData(player).questData; QuestData data = playerdata.getQuestCompletion(player, this); if (data != null){ + NoppesUtilPlayer.questCompletion((EntityPlayerMP) player, data.quest.id); Server.sendData((EntityPlayerMP)player, EnumPacketClient.QUEST_COMPLETION, data.quest.writeToNBT(new NBTTagCompound())); } else if (dialog != null){ diff --git a/src/main/java/noppes/npcs/quests/QuestItem.java b/src/main/java/noppes/npcs/quests/QuestItem.java index 0eca93aff..566ab8198 100644 --- a/src/main/java/noppes/npcs/quests/QuestItem.java +++ b/src/main/java/noppes/npcs/quests/QuestItem.java @@ -16,6 +16,7 @@ import noppes.npcs.util.ValueUtil; public class QuestItem extends QuestInterface implements IQuestItem { public NpcMiscInventory items = new NpcMiscInventory(3); + public static ItemStack pickedUp; public boolean leaveItems = false; public boolean ignoreDamage = false; public boolean ignoreNBT = false; @@ -64,7 +65,11 @@ public class QuestItem extends QuestInterface implements IQuestItem { is.stackSize = 0; map.put(slot,is); } - for(ItemStack item : player.inventory.mainInventory){ + + ArrayList list = new ArrayList<>(Arrays.asList(player.inventory.mainInventory)); + list.add(pickedUp); + + for(ItemStack item : list){ if(item == null) continue; for(ItemStack questItem : map.values()){