diff --git a/src/main/java/org/terasology/tasks/DefaultQuest.java b/src/main/java/org/terasology/tasks/DefaultQuest.java index 728f44c..5167e45 100644 --- a/src/main/java/org/terasology/tasks/DefaultQuest.java +++ b/src/main/java/org/terasology/tasks/DefaultQuest.java @@ -17,6 +17,9 @@ package org.terasology.tasks; import org.terasology.entitySystem.entity.EntityRef; +import org.terasology.logic.inventory.StartingInventoryComponent; + +import java.util.List; /** * @@ -26,12 +29,14 @@ public class DefaultQuest implements Quest { private final String description; private final TaskGraph tasks; private final EntityRef entity; + private final List reward; - public DefaultQuest(EntityRef entity, String shortName, String description, TaskGraph tasks) { + public DefaultQuest(EntityRef entity, String shortName, String description, TaskGraph tasks, List reward) { this.entity = entity; this.shortName = shortName; this.description = description; this.tasks = tasks; + this.reward = reward; } @Override @@ -54,6 +59,11 @@ public TaskGraph getTaskGraph() { return tasks; } + @Override + public List getReward() { + return reward; + } + /** * The quest fails if any task failed. Otherwise, the quest is active if any task is active. Otherwise, * the quest has completed successfully. diff --git a/src/main/java/org/terasology/tasks/Quest.java b/src/main/java/org/terasology/tasks/Quest.java index 2e7ab16..33927c9 100644 --- a/src/main/java/org/terasology/tasks/Quest.java +++ b/src/main/java/org/terasology/tasks/Quest.java @@ -17,6 +17,9 @@ package org.terasology.tasks; import org.terasology.entitySystem.entity.EntityRef; +import org.terasology.logic.inventory.StartingInventoryComponent; + +import java.util.List; public interface Quest { @@ -42,4 +45,10 @@ public interface Quest { * @return the target entity for this quest */ EntityRef getEntity(); + + /** + * + * @return the reward attached to this quest + */ + List getReward(); } diff --git a/src/main/java/org/terasology/tasks/components/QuestComponent.java b/src/main/java/org/terasology/tasks/components/QuestComponent.java index f74e0cc..864e86a 100644 --- a/src/main/java/org/terasology/tasks/components/QuestComponent.java +++ b/src/main/java/org/terasology/tasks/components/QuestComponent.java @@ -17,10 +17,14 @@ package org.terasology.tasks.components; import org.terasology.entitySystem.Component; +import org.terasology.logic.inventory.StartingInventoryComponent; import org.terasology.tasks.TaskGraph; +import java.util.List; + public class QuestComponent implements Component { public String shortName; public String description; public TaskGraph tasks; + public List reward; } diff --git a/src/main/java/org/terasology/tasks/systems/QuestSystem.java b/src/main/java/org/terasology/tasks/systems/QuestSystem.java index 9c04a07..e89b153 100644 --- a/src/main/java/org/terasology/tasks/systems/QuestSystem.java +++ b/src/main/java/org/terasology/tasks/systems/QuestSystem.java @@ -16,11 +16,9 @@ package org.terasology.tasks.systems; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Optional; - +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Collections2; +import com.google.common.collect.ListMultimap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.entitySystem.entity.EntityRef; @@ -29,6 +27,9 @@ import org.terasology.entitySystem.systems.RegisterMode; import org.terasology.entitySystem.systems.RegisterSystem; import org.terasology.logic.common.ActivateEvent; +import org.terasology.logic.inventory.ItemCommands; +import org.terasology.logic.inventory.StartingInventoryComponent; +import org.terasology.registry.In; import org.terasology.registry.Share; import org.terasology.tasks.DefaultQuest; import org.terasology.tasks.Quest; @@ -41,9 +42,10 @@ import org.terasology.tasks.events.StartTaskEvent; import org.terasology.tasks.events.TaskCompletedEvent; -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Collections2; -import com.google.common.collect.ListMultimap; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Optional; /** * This controls the main logic of the quest, and defines what to do with a "quest card" @@ -54,6 +56,9 @@ public class QuestSystem extends BaseComponentSystem { private static final Logger logger = LoggerFactory.getLogger(QuestSystem.class); + @In + private ItemCommands commands; + private final ListMultimap quests = ArrayListMultimap.create(); private final Collection activeQuestView = Collections2.filter(quests.values(), quest -> quest.getStatus() == Status.ACTIVE); @@ -70,7 +75,7 @@ public void onActivate(ActivateEvent event, EntityRef questItem) { if (!beforeQuestEvent.isConsumed()) { TaskGraph taskGraph = questComp.tasks; - DefaultQuest quest = new DefaultQuest(entity, questComp.shortName, questComp.description, taskGraph); + DefaultQuest quest = new DefaultQuest(entity, questComp.shortName, questComp.description, taskGraph, questComp.reward); quests.put(entity, quest); for (Task task : taskGraph) { @@ -100,6 +105,15 @@ public void onTaskComplete(TaskCompletedEvent event, EntityRef entity) { } } + @ReceiveEvent + public void reward(QuestCompleteEvent event, EntityRef entity) { + Quest quest = event.getQuest(); + List rewards = quest.getReward(); + for (StartingInventoryComponent.InventoryItem item : rewards) { + commands.give(entity, item.uri, item.quantity, null); + } + } + /** * @return an unmodifiable map of all known quests. */