From cc9de305692a769171b0fcedf271a21a3416452c Mon Sep 17 00:00:00 2001 From: Prince Date: Wed, 29 Apr 2020 18:47:56 +0530 Subject: [PATCH 1/3] Player now gets rewarded on completing a quest --- .../org/terasology/tasks/DefaultQuest.java | 10 +++++++++- src/main/java/org/terasology/tasks/Quest.java | 9 +++++++++ .../tasks/components/QuestComponent.java | 4 ++++ .../terasology/tasks/systems/QuestSystem.java | 18 +++++++++++++++++- 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/terasology/tasks/DefaultQuest.java b/src/main/java/org/terasology/tasks/DefaultQuest.java index 728f44c..287bcdb 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,9 @@ 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..d062820 100644 --- a/src/main/java/org/terasology/tasks/systems/QuestSystem.java +++ b/src/main/java/org/terasology/tasks/systems/QuestSystem.java @@ -24,11 +24,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.entitySystem.entity.EntityRef; +import org.terasology.entitySystem.event.Event; import org.terasology.entitySystem.event.ReceiveEvent; import org.terasology.entitySystem.systems.BaseComponentSystem; import org.terasology.entitySystem.systems.RegisterMode; import org.terasology.entitySystem.systems.RegisterSystem; import org.terasology.logic.common.ActivateEvent; +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; @@ -44,6 +47,7 @@ import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Collections2; import com.google.common.collect.ListMultimap; +import org.terasology.world.block.entity.BlockCommands; /** * This controls the main logic of the quest, and defines what to do with a "quest card" @@ -54,6 +58,9 @@ public class QuestSystem extends BaseComponentSystem { private static final Logger logger = LoggerFactory.getLogger(QuestSystem.class); + @In + private BlockCommands commands; + private final ListMultimap quests = ArrayListMultimap.create(); private final Collection activeQuestView = Collections2.filter(quests.values(), quest -> quest.getStatus() == Status.ACTIVE); @@ -70,7 +77,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 +107,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.giveBlock(entity, item.uri, item.quantity, null); + } + } + /** * @return an unmodifiable map of all known quests. */ From d538dcb00936b6703b4c3dc4cef394a0d347a443 Mon Sep 17 00:00:00 2001 From: Prince Date: Wed, 29 Apr 2020 18:50:16 +0530 Subject: [PATCH 2/3] added missing newline --- src/main/java/org/terasology/tasks/DefaultQuest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/terasology/tasks/DefaultQuest.java b/src/main/java/org/terasology/tasks/DefaultQuest.java index 287bcdb..5167e45 100644 --- a/src/main/java/org/terasology/tasks/DefaultQuest.java +++ b/src/main/java/org/terasology/tasks/DefaultQuest.java @@ -60,7 +60,9 @@ public TaskGraph getTaskGraph() { } @Override - public List getReward() {return reward;} + public List getReward() { + return reward; + } /** * The quest fails if any task failed. Otherwise, the quest is active if any task is active. Otherwise, From 38f674a99fcd86e4431870be090056a96cf7ddd9 Mon Sep 17 00:00:00 2001 From: Prince Date: Wed, 29 Apr 2020 20:10:11 +0530 Subject: [PATCH 3/3] replaced BlockCommand with ItemCommand and optimized imports --- .../terasology/tasks/systems/QuestSystem.java | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/terasology/tasks/systems/QuestSystem.java b/src/main/java/org/terasology/tasks/systems/QuestSystem.java index d062820..e89b153 100644 --- a/src/main/java/org/terasology/tasks/systems/QuestSystem.java +++ b/src/main/java/org/terasology/tasks/systems/QuestSystem.java @@ -16,20 +16,18 @@ 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; -import org.terasology.entitySystem.event.Event; import org.terasology.entitySystem.event.ReceiveEvent; import org.terasology.entitySystem.systems.BaseComponentSystem; 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; @@ -44,10 +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 org.terasology.world.block.entity.BlockCommands; +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" @@ -59,7 +57,7 @@ public class QuestSystem extends BaseComponentSystem { private static final Logger logger = LoggerFactory.getLogger(QuestSystem.class); @In - private BlockCommands commands; + private ItemCommands commands; private final ListMultimap quests = ArrayListMultimap.create(); private final Collection activeQuestView = Collections2.filter(quests.values(), @@ -112,7 +110,7 @@ public void reward(QuestCompleteEvent event, EntityRef entity) { Quest quest = event.getQuest(); List rewards = quest.getReward(); for (StartingInventoryComponent.InventoryItem item : rewards) { - commands.giveBlock(entity, item.uri, item.quantity, null); + commands.give(entity, item.uri, item.quantity, null); } }