diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoquests/quests/Quest.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoquests/quests/Quest.kt index 90b954e..01d4d2e 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoquests/quests/Quest.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoquests/quests/Quest.kt @@ -31,6 +31,7 @@ import com.willfp.libreforge.conditions.Conditions import com.willfp.libreforge.effects.Effects import com.willfp.libreforge.effects.executors.impl.NormalExecutorFactory import org.bukkit.Bukkit +import org.bukkit.OfflinePlayer import org.bukkit.entity.Player class Quest( @@ -208,11 +209,11 @@ class Quest( return addPlaceholdersInto(listOf(config.getString("description")), player) } - fun hasActive(player: Player): Boolean { + fun hasActive(player: OfflinePlayer): Boolean { return hasStarted(player) && !hasCompleted(player) } - fun hasCompleted(player: Player): Boolean { + fun hasCompleted(player: OfflinePlayer): Boolean { return player.profile.read(hasCompletedKey) } @@ -224,11 +225,11 @@ class Quest( return meetsStartConditions(player) && !hasStarted(player) } - fun hasStarted(player: Player): Boolean { + fun hasStarted(player: OfflinePlayer): Boolean { return player.profile.read(hasStartedKey) } - fun reset(player: Player) { + fun reset(player: OfflinePlayer) { player.profile.write(hasStartedKey, false) player.profile.write(hasCompletedKey, false) @@ -267,6 +268,15 @@ class Quest( reset(player) } + // Offline players can be reset async + plugin.scheduler.runAsync { + for (player in Bukkit.getOfflinePlayers()) { + if (!player.isOnline) { + reset(player) + } + } + } + // Unbind old tasks for (task in tasks) { task.unbind() diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoquests/tasks/Task.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoquests/tasks/Task.kt index 6802216..f2c5e2c 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoquests/tasks/Task.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoquests/tasks/Task.kt @@ -16,6 +16,7 @@ import com.willfp.ecoquests.quests.Quest import com.willfp.ecoquests.quests.Quests import com.willfp.libreforge.counters.Accumulator import org.bukkit.Bukkit +import org.bukkit.OfflinePlayer import org.bukkit.entity.Player import kotlin.math.min @@ -79,12 +80,12 @@ class Task( } } - fun reset(player: Player) { + fun reset(player: OfflinePlayer) { player.profile.write(xpKey, 0.0) player.profile.write(hasCompletedKey, false) } - fun hasCompleted(player: Player): Boolean { + fun hasCompleted(player: OfflinePlayer): Boolean { return player.profile.read(hasCompletedKey) } @@ -97,8 +98,8 @@ class Task( ) } - fun getExperience(player: Player): Double { - return min(player.profile.read(xpKey), getExperienceRequired(player)) + fun getExperience(player: OfflinePlayer): Double { + return player.profile.read(xpKey) } /** @@ -123,7 +124,7 @@ class Task( val requiredXp = getExperienceRequired(player) val newXp = player.profile.read(xpKey) + amount - player.profile.write(xpKey, newXp) + player.profile.write(xpKey, min(newXp, requiredXp)) if (newXp >= requiredXp) { player.profile.write(hasCompletedKey, true)