diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
index 79ee123c..0f7bc519 100644
--- a/.idea/codeStyles/codeStyleConfig.xml
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -2,4 +2,4 @@
-
\ No newline at end of file
+
diff --git a/common/src/main/java/earth/terrarium/heracles/api/quests/QuestSettings.java b/common/src/main/java/earth/terrarium/heracles/api/quests/QuestSettings.java
index c03b0240..f6f455e5 100644
--- a/common/src/main/java/earth/terrarium/heracles/api/quests/QuestSettings.java
+++ b/common/src/main/java/earth/terrarium/heracles/api/quests/QuestSettings.java
@@ -3,7 +3,6 @@
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.teamresourceful.resourcefullib.common.codecs.EnumCodec;
-import earth.terrarium.heracles.common.utils.ModUtils;
import java.util.Objects;
@@ -13,7 +12,8 @@ public final class QuestSettings {
EnumCodec.of(QuestDisplayStatus.class).fieldOf("hidden").orElse(QuestDisplayStatus.LOCKED).forGetter(QuestSettings::hiddenUntil),
Codec.BOOL.fieldOf("unlockNotification").orElse(false).forGetter(QuestSettings::unlockNotification),
Codec.BOOL.fieldOf("showDependencyArrow").orElse(true).forGetter(QuestSettings::showDependencyArrow),
- Codec.BOOL.fieldOf("repeatable").orElse(false).forGetter(QuestSettings::repeatable)
+ Codec.BOOL.fieldOf("repeatable").orElse(false).forGetter(QuestSettings::repeatable),
+ Codec.BOOL.fieldOf("autoClaimRewards").orElse(false).forGetter(QuestSettings::autoClaimRewards)
).apply(instance, QuestSettings::new));
private boolean individualProgress;
@@ -21,17 +21,19 @@ public final class QuestSettings {
private boolean unlockNotification;
private boolean showDependencyArrow;
private boolean repeatable;
+ private boolean autoClaimRewards;
- public QuestSettings(boolean individualProgress, QuestDisplayStatus hiddenUntil, boolean unlockNotification, boolean showDependencyArrow, boolean repeatable) {
+ public QuestSettings(boolean individualProgress, QuestDisplayStatus hiddenUntil, boolean unlockNotification, boolean showDependencyArrow, boolean repeatable, boolean autoClaimRewards) {
this.individualProgress = individualProgress;
this.hiddenUntil = hiddenUntil;
this.unlockNotification = unlockNotification;
this.showDependencyArrow = showDependencyArrow;
this.repeatable = repeatable;
+ this.autoClaimRewards = autoClaimRewards;
}
public static QuestSettings createDefault() {
- return new QuestSettings(false, QuestDisplayStatus.LOCKED, false, true, false);
+ return new QuestSettings(false, QuestDisplayStatus.LOCKED, false, true, false, false);
}
public boolean individualProgress() {
@@ -54,6 +56,10 @@ public Boolean repeatable() {
return repeatable;
}
+ public boolean autoClaimRewards() {
+ return autoClaimRewards;
+ }
+
@Override
public boolean equals(Object obj) {
if (obj == this) return true;
@@ -64,12 +70,13 @@ public boolean equals(Object obj) {
this.hiddenUntil == that.hiddenUntil &&
this.unlockNotification == that.unlockNotification &&
this.showDependencyArrow == that.showDependencyArrow &&
- this.repeatable == that.repeatable;
+ this.repeatable == that.repeatable &&
+ this.autoClaimRewards == that.autoClaimRewards;
}
@Override
public int hashCode() {
- return Objects.hash(individualProgress, hiddenUntil, unlockNotification, showDependencyArrow, repeatable);
+ return Objects.hash(individualProgress, hiddenUntil, unlockNotification, showDependencyArrow, repeatable, autoClaimRewards);
}
public void update(QuestSettings newSettings) {
@@ -100,4 +107,8 @@ public void setRepeatable(boolean repeatable) {
this.repeatable = repeatable;
}
+ public void setAutoClaimRewards(boolean autoClaimRewards) {
+ this.autoClaimRewards = autoClaimRewards;
+ }
+
}
diff --git a/common/src/main/java/earth/terrarium/heracles/client/screens/quests/QuestSettingsInitalizer.java b/common/src/main/java/earth/terrarium/heracles/client/screens/quests/QuestSettingsInitalizer.java
index 683a1d6f..b9f99911 100644
--- a/common/src/main/java/earth/terrarium/heracles/client/screens/quests/QuestSettingsInitalizer.java
+++ b/common/src/main/java/earth/terrarium/heracles/client/screens/quests/QuestSettingsInitalizer.java
@@ -19,6 +19,7 @@ public CreationData create(@Nullable QuestSettings object) {
settings.put("unlock_notification", BooleanSetting.FALSE, object != null && object.unlockNotification());
settings.put("show_dependency_arrow", BooleanSetting.TRUE, object != null && object.showDependencyArrow());
settings.put("repeatable", BooleanSetting.FALSE, object != null && object.repeatable());
+ settings.put("auto_claim_rewards", BooleanSetting.FALSE, object != null && object.autoClaimRewards());
return settings;
}
@@ -29,7 +30,8 @@ public QuestSettings create(String id, QuestSettings object, Data data) {
data.get("hidden", new EnumSetting<>(QuestDisplayStatus.class, QuestDisplayStatus.LOCKED)).orElse(object != null ? object.hiddenUntil() : QuestDisplayStatus.LOCKED),
data.get("unlock_notification", BooleanSetting.FALSE).orElse(object != null && object.unlockNotification()),
data.get("show_dependency_arrow", BooleanSetting.TRUE).orElse(object != null && object.showDependencyArrow()),
- data.get("repeatable", BooleanSetting.FALSE).orElse(object != null && object.repeatable())
+ data.get("repeatable", BooleanSetting.FALSE).orElse(object != null && object.repeatable()),
+ data.get("auto_claim_rewards", BooleanSetting.FALSE).orElse(object != null && object.autoClaimRewards())
);
}
}
diff --git a/common/src/main/java/earth/terrarium/heracles/client/screens/quests/SelectQuestWidget.java b/common/src/main/java/earth/terrarium/heracles/client/screens/quests/SelectQuestWidget.java
index d51fe480..c8557ffc 100644
--- a/common/src/main/java/earth/terrarium/heracles/client/screens/quests/SelectQuestWidget.java
+++ b/common/src/main/java/earth/terrarium/heracles/client/screens/quests/SelectQuestWidget.java
@@ -163,7 +163,8 @@ public SelectQuestWidget(int x, int y, int width, int height, QuestsWidget widge
.hiddenUntil(questSettings.hiddenUntil())
.unlockNotification(questSettings.unlockNotification())
.showDependencyArrow(questSettings.showDependencyArrow())
- .repeatable(questSettings.repeatable());
+ .repeatable(questSettings.repeatable())
+ .autoClaimRewards(questSettings.autoClaimRewards());
})
);
edit.setTitle(Component.translatable("gui.heracles.quests.edit_quest_settings"));
diff --git a/common/src/main/java/earth/terrarium/heracles/common/handlers/progress/QuestProgressHandler.java b/common/src/main/java/earth/terrarium/heracles/common/handlers/progress/QuestProgressHandler.java
index 2da9ad0d..05aa8e45 100644
--- a/common/src/main/java/earth/terrarium/heracles/common/handlers/progress/QuestProgressHandler.java
+++ b/common/src/main/java/earth/terrarium/heracles/common/handlers/progress/QuestProgressHandler.java
@@ -1,6 +1,7 @@
package earth.terrarium.heracles.common.handlers.progress;
import earth.terrarium.heracles.Heracles;
+import earth.terrarium.heracles.api.events.HeraclesEvents;
import earth.terrarium.heracles.api.quests.Quest;
import earth.terrarium.heracles.api.teams.TeamProviders;
import earth.terrarium.heracles.common.handlers.quests.QuestHandler;
@@ -19,6 +20,15 @@ public class QuestProgressHandler extends SavedData {
private final Map progress = new HashMap<>();
public QuestProgressHandler() {
+ HeraclesEvents.QuestCompleteListener.register(it -> {
+ if (it.quest().settings().autoClaimRewards()) {
+ // For avoiding the reward trigger the task checking again.
+ it.player().server.execute(() -> {
+ var questsProgress = getProgress(it.player().getUUID());
+ it.quest().claimRewards(it.player(), it.id(), questsProgress, questsProgress.getProgress(it.id()));
+ });
+ }
+ });
}
public QuestsProgress getProgress(UUID uuid) {
diff --git a/common/src/main/java/earth/terrarium/heracles/common/network/packets/quests/data/NetworkQuestData.java b/common/src/main/java/earth/terrarium/heracles/common/network/packets/quests/data/NetworkQuestData.java
index 8f600cd1..d55f1b66 100644
--- a/common/src/main/java/earth/terrarium/heracles/common/network/packets/quests/data/NetworkQuestData.java
+++ b/common/src/main/java/earth/terrarium/heracles/common/network/packets/quests/data/NetworkQuestData.java
@@ -69,6 +69,7 @@ public static class Builder {
private TriState unlockNotification = TriState.UNDEFINED;
private TriState showDependencyArrow = TriState.UNDEFINED;
private TriState repeatable = TriState.UNDEFINED;
+ private TriState autoClaimRewards = TriState.UNDEFINED;
private Set dependencies;
private Map> tasks;
private Map> rewards;
@@ -139,6 +140,11 @@ public Builder repeatable(boolean repeatable) {
return this;
}
+ public Builder autoClaimRewards(boolean autoClaimRewards) {
+ this.autoClaimRewards = TriState.of(autoClaimRewards);
+ return this;
+ }
+
public Builder dependencies(Set dependencies) {
this.dependencies = new HashSet<>(dependencies);
return this;
@@ -173,7 +179,8 @@ public NetworkQuestData build() {
Optional.ofNullable(hiddenUntil),
Optional.ofNullable(unlockNotification.isUndefined() ? null : unlockNotification.isTrue()),
Optional.ofNullable(showDependencyArrow.isUndefined() ? null : showDependencyArrow.isTrue()),
- Optional.ofNullable(repeatable.isUndefined() ? null : repeatable.isTrue())
+ Optional.ofNullable(repeatable.isUndefined() ? null : repeatable.isTrue()),
+ Optional.ofNullable(autoClaimRewards.isUndefined() ? null : autoClaimRewards.isTrue())
);
}
diff --git a/common/src/main/java/earth/terrarium/heracles/common/network/packets/quests/data/NetworkQuestSettingsData.java b/common/src/main/java/earth/terrarium/heracles/common/network/packets/quests/data/NetworkQuestSettingsData.java
index 8b7fa293..eccc83ca 100644
--- a/common/src/main/java/earth/terrarium/heracles/common/network/packets/quests/data/NetworkQuestSettingsData.java
+++ b/common/src/main/java/earth/terrarium/heracles/common/network/packets/quests/data/NetworkQuestSettingsData.java
@@ -13,7 +13,8 @@ public record NetworkQuestSettingsData(
Optional hiddenUntil,
Optional unlockNotification,
Optional showDependencyArrow,
- Optional repeatable
+ Optional repeatable,
+ Optional autoClaimRewards
) {
public static final ByteCodec CODEC = ObjectByteCodec.create(
@@ -22,6 +23,7 @@ public record NetworkQuestSettingsData(
ByteCodec.BOOLEAN.optionalFieldOf(NetworkQuestSettingsData::unlockNotification),
ByteCodec.BOOLEAN.optionalFieldOf(NetworkQuestSettingsData::showDependencyArrow),
ByteCodec.BOOLEAN.optionalFieldOf(NetworkQuestSettingsData::repeatable),
+ ByteCodec.BOOLEAN.optionalFieldOf(NetworkQuestSettingsData::autoClaimRewards),
NetworkQuestSettingsData::new
);
@@ -32,5 +34,6 @@ public void update(Quest quest) {
unlockNotification.ifPresent(settings::setUnlockNotification);
showDependencyArrow.ifPresent(settings::setShowDependencyArrow);
repeatable.ifPresent(settings::setRepeatable);
+ autoClaimRewards.ifPresent(settings::setAutoClaimRewards);
}
}
diff --git a/common/src/main/resources/assets/heracles/lang/en_us.json b/common/src/main/resources/assets/heracles/lang/en_us.json
index a37fd2c6..2b4a1dd5 100644
--- a/common/src/main/resources/assets/heracles/lang/en_us.json
+++ b/common/src/main/resources/assets/heracles/lang/en_us.json
@@ -100,6 +100,7 @@
"setting.heracles.quest.unlock_notification": "Unlock Notification",
"setting.heracles.quest.show_dependency_arrow": "Show Dependency Arrow",
"setting.heracles.quest.repeatable": "Repeatable",
+ "setting.heracles.quest.auto_claim_rewards": "Auto Claim Rewards",
"rei.sections.odyssey": "Project Odyssey",
"rei.heracles.heracles.tooltip": "Open Quests",
diff --git a/common/src/main/resources/assets/heracles/lang/zh_cn.json b/common/src/main/resources/assets/heracles/lang/zh_cn.json
index 23e154d3..766504a6 100644
--- a/common/src/main/resources/assets/heracles/lang/zh_cn.json
+++ b/common/src/main/resources/assets/heracles/lang/zh_cn.json
@@ -98,6 +98,7 @@
"setting.heracles.quest.unlock_notification": "解锁通知",
"setting.heracles.quest.show_dependency_arrow": "显示依赖箭头",
"setting.heracles.quest.repeatable": "可重复",
+ "setting.heracles.quest.auto_claim_rewards": "自动领取奖励",
"rei.sections.odyssey": "Project Odyssey",
"rei.heracles.heracles.tooltip": "打开任务",