9
0
mirror of https://github.com/Auxilor/EcoQuests.git synced 2025-12-20 23:49:25 +00:00

Compare commits

..

96 Commits

Author SHA1 Message Date
Will FP
b61afeea44 libreforge-updater 2025-10-06 08:57:19 +01:00
Will FP
3a1ab8a62c libreforge-updater 2025-09-11 09:59:12 +01:00
Will FP
31f608eea5 libreforge-updater 2025-08-01 10:04:43 +01:00
Will FP
cdf83a9ba7 Merge pull request #5 from kiriharu/master
FEAT: Add addexp subcommand
2025-08-01 09:42:22 +01:00
Will FP
86550af579 libreforge-updater 2025-07-05 16:45:41 +01:00
Will FP
0ea4e3cd20 libreforge-updater 2025-07-04 09:51:18 +01:00
Will FP
779f942454 libreforge-updater 2025-03-29 14:22:27 +00:00
Will FP
abad5bdfbd libreforge-updater 2025-01-31 11:55:03 +00:00
Will FP
588839fc97 libreforge-updater 2025-01-25 13:50:08 +00:00
Will FP
1c36c4b18f Fix 2025-01-25 13:48:44 +00:00
Will FP
0460f1f6bf libreforge-updater 2025-01-25 13:46:03 +00:00
kiriharu
a5dd2566f5 FIX: Forget to add description 2024-12-12 16:51:09 +03:00
kiriharu
66524ade50 FEAT: Add addexp subcommand 2024-12-12 16:39:21 +03:00
Will FP
5814587ed5 libreforge-updater 2024-11-06 18:33:27 +00:00
Will FP
f4682214cc libreforge-updater 2024-10-22 12:14:38 +01:00
Will FP
3c0d5651d8 Merge pull request #3 from kiriharu/master
FIX: Prevent to give expirience to task when it marked as completed
2024-09-26 19:08:57 +01:00
Will FP
c86651df9b libreforge-updater 2024-09-22 17:00:59 +01:00
Will FP
26ccae38b1 Merge pull request #4 from Exanthiax/improved_sorting
improved sorting and multi-line descriptions
2024-09-22 15:47:35 +01:00
Exanthiax
c1c985d638 improved sorting and multi-line descriptions 2024-09-22 15:12:11 +01:00
kiriharu
ed947b354f FIX: Stop giving exp to task and call steps related to it when task already marked as completed 2024-09-21 13:00:51 +03:00
Auxilor
5e51c369bb libreforge-updater 2024-09-02 11:30:14 +01:00
Auxilor
67a2e2fb4f libreforge-updater 2024-08-30 17:25:13 +01:00
Auxilor
f94e79bc92 libreforge-updater 2024-08-29 12:09:23 +01:00
Auxilor
9cf8d465b9 libreforge-updater 2024-08-23 15:35:29 +01:00
Auxilor
237ebda870 libreforge-updater 2024-08-21 18:58:25 +01:00
Auxilor
ed6bcaab04 libreforge-updater 2024-08-15 15:07:42 +01:00
Auxilor
40a0f99716 libreforge-updater 2024-08-03 13:41:32 +01:00
Auxilor
a59bce65ab libreforge-updater 2024-07-25 10:04:39 +01:00
Auxilor
0212076fad libreforge-updater 2024-07-21 12:19:23 +01:00
Auxilor
c4b0429ad5 libreforge-updater 2024-07-19 20:28:44 +01:00
Auxilor
c5e0611a20 libreforge-updater 2024-07-18 13:24:18 +01:00
Auxilor
cb2e8a181f libreforge-updater 2024-07-16 17:13:48 +01:00
Auxilor
c40a304c8a libreforge-updater 2024-07-13 20:45:24 +01:00
Auxilor
9e7a8a7581 libreforge-updater 2024-07-08 15:58:33 +01:00
Auxilor
2e5fbda6c2 libreforge-updater 2024-07-05 13:02:51 +01:00
Auxilor
908a4c5a14 libreforge-updater 2024-07-03 17:44:03 +01:00
Auxilor
ee38c05518 libreforge-updater 2024-06-29 16:44:07 +01:00
Auxilor
98d5431ba7 libreforge-updater 2024-06-28 15:56:30 +01:00
Auxilor
ff13678d33 libreforge-updater 2024-06-27 18:54:34 +01:00
Auxilor
8b955f3481 libreforge-updater 2024-06-26 16:52:26 +01:00
Auxilor
b6d8b4154b libreforge-updater 2024-06-25 15:14:05 +01:00
Auxilor
f71078f956 libreforge-updater 2024-06-24 15:06:40 +01:00
Auxilor
4e4f9c637b Updated to Java 21 2024-06-24 14:04:43 +01:00
Auxilor
2433c34a1c libreforge-updater 2024-06-23 17:26:37 +01:00
Auxilor
607da38533 libreforge-updater 2024-06-23 13:19:10 +01:00
Will FP
17d0af8ab9 libreforge-updater 2024-05-31 20:37:52 +01:00
Will FP
8332c5aa2a libreforge-updater 2024-05-11 18:21:18 +01:00
Will FP
863e741ac6 libreforge-updater 2024-04-17 20:35:00 +01:00
Auxilor
aab1a5bf44 libreforge-updater 2024-04-15 18:19:50 +01:00
Auxilor
93f243871f libreforge-updater 2024-04-11 13:17:45 +01:00
Auxilor
78e2b6bfff libreforge-updater 2024-03-29 16:08:51 +00:00
Will FP
4bf97077b7 libreforge-updater 2024-03-11 17:38:06 +00:00
Will FP
6eead2f420 libreforge-updater 2024-03-10 20:09:37 +00:00
Will FP
c574d78992 libreforge-updater 2024-03-02 15:20:52 +00:00
Will FP
399101a487 libreforge-updater 2024-02-22 13:18:23 +00:00
Will FP
95a013fbf1 Merge pull request #1 from MCCasper/master
t
2024-02-17 19:57:48 +00:00
Nikolai Connolly
b0fa4bad8b t 2024-02-16 20:52:30 -06:00
Will FP
d55635c590 libreforge-updater 2024-02-15 13:02:37 +00:00
Will FP
bd6b919f86 libreforge-updater 2024-02-08 19:49:56 +00:00
Will FP
d390a2102a libreforge-updater 2024-01-30 11:27:42 +00:00
Will FP
89e2232618 libreforge-updater 2024-01-18 17:03:23 +00:00
Will FP
db34794aa0 libreforge-updater 2024-01-16 13:29:19 +00:00
Will FP
b8a8076b23 libreforge-updater 2024-01-13 14:24:05 +00:00
Will FP
b999e381a1 libreforge-updater 2024-01-07 13:52:00 +00:00
Will FP
e726af326f libreforge-updater 2024-01-06 09:20:18 +00:00
Auxilor
9654b2c78b libreforge-updater 2024-01-04 17:25:37 +00:00
Auxilor
2645d679f5 libreforge-updater 2024-01-01 20:02:39 +00:00
Will FP
3851943ee4 libreforge-updater 2023-12-27 14:17:46 +01:00
Will FP
ee39a180e1 libreforge-updater 2023-12-24 14:54:57 +01:00
Auxilor
da5cb60399 libreforge-updater 2023-12-20 15:57:20 +00:00
Will FP
d25ba604c3 libreforge-updater 2023-12-14 16:13:50 +00:00
Will FP
5810b4a7a9 libreforge-updater 2023-12-11 12:13:05 +00:00
Will FP
2ab6a42b37 libreforge-updater 2023-12-07 17:26:01 +00:00
Will FP
b496848143 libreforge-updater 2023-12-03 15:59:50 +00:00
Will FP
274102ac06 libreforge-updater 2023-11-30 14:27:46 +00:00
Will FP
08ef85f6d0 libreforge-updater 2023-11-26 23:24:49 +00:00
Will FP
29d0f8200e libreforge-updater 2023-11-23 13:21:45 +00:00
Auxilor
6496d5c7d1 libreforge-updater 2023-11-21 22:41:42 +00:00
Auxilor
35c89d7aa5 libreforge-updater 2023-11-19 14:14:25 +00:00
Auxilor
ab99f74626 libreforge-updater 2023-11-17 19:02:33 +00:00
Auxilor
ecfa40920f libreforge-updater 2023-11-11 17:58:59 +00:00
Auxilor
202528681a libreforge-updater 2023-11-10 13:59:29 +00:00
Auxilor
7aa02b3a91 libreforge-updater 2023-11-05 13:42:08 +00:00
Auxilor
070d25de67 libreforge-updater 2023-10-30 13:31:07 +00:00
Auxilor
3ab99c9237 libreforge-updater 2023-10-28 14:15:35 +01:00
Auxilor
3ee10633fb libreforge-updater 2023-10-24 15:39:35 +01:00
Auxilor
49c77396ea libreforge-updater 2023-10-19 12:52:36 +01:00
Auxilor
09fb8d2109 libreforge-updater 2023-10-14 14:20:33 +01:00
Auxilor
9623f1c427 libreforge-updater 2023-10-14 14:19:14 +01:00
Auxilor
39eaef3856 libreforge-updater 2023-10-02 11:54:25 +01:00
Auxilor
bf085b4ea5 libreforge-updater 2023-09-26 14:46:03 +01:00
Auxilor
1a1433f84f libreforge-updater 2023-09-20 15:33:56 +01:00
Auxilor
571b4c05e2 Fixed a small amount of stupidity 2023-09-17 11:29:16 +01:00
Auxilor
58aa2fd81d graddel 2023-09-17 11:28:35 +01:00
Auxilor
335524a2da libreforge-updater 2023-09-17 11:20:21 +01:00
Auxilor
73d748d445 libreforge-updater 2023-09-13 15:08:56 +01:00
25 changed files with 205 additions and 94 deletions

View File

@@ -15,11 +15,11 @@ jobs:
- name: Checkout latest code - name: Checkout latest code
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: Set up JDK 17 - name: Set up JDK 21
uses: actions/setup-java@v2 uses: actions/setup-java@v2
with: with:
distribution: 'temurin' distribution: 'temurin'
java-version: 17 java-version: 21
- name: Change wrapper permissions - name: Change wrapper permissions
run: chmod +x ./gradlew run: chmod +x ./gradlew

View File

@@ -1,9 +1,11 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins { plugins {
java java
`java-library` `java-library`
`maven-publish` `maven-publish`
kotlin("jvm") version "1.7.10" kotlin("jvm") version "2.1.0"
id("com.github.johnrengelman.shadow") version "8.0.0" id("com.gradleup.shadow") version "8.3.0"
id("com.willfp.libreforge-gradle-plugin") version "1.0.0" id("com.willfp.libreforge-gradle-plugin") version "1.0.0"
} }
@@ -25,7 +27,7 @@ allprojects {
apply(plugin = "java") apply(plugin = "java")
apply(plugin = "kotlin") apply(plugin = "kotlin")
apply(plugin = "maven-publish") apply(plugin = "maven-publish")
apply(plugin = "com.github.johnrengelman.shadow") apply(plugin = "com.gradleup.shadow")
repositories { repositories {
mavenLocal() mavenLocal()
@@ -39,12 +41,12 @@ allprojects {
dependencies { dependencies {
compileOnly("com.willfp:eco:6.65.0") compileOnly("com.willfp:eco:6.65.0")
compileOnly("org.jetbrains:annotations:23.0.0") compileOnly("org.jetbrains:annotations:23.0.0")
compileOnly("org.jetbrains.kotlin:kotlin-stdlib:1.7.10") compileOnly("org.jetbrains.kotlin:kotlin-stdlib:2.1.0")
} }
java { java {
withSourcesJar() withSourcesJar()
toolchain.languageVersion.set(JavaLanguageVersion.of(17)) toolchain.languageVersion.set(JavaLanguageVersion.of(21))
} }
tasks { tasks {
@@ -54,8 +56,8 @@ allprojects {
} }
compileKotlin { compileKotlin {
kotlinOptions { compilerOptions {
jvmTarget = "17" jvmTarget.set(JvmTarget.JVM_21)
} }
} }

View File

@@ -0,0 +1,83 @@
package com.willfp.ecoquests.commands
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.impl.PluginCommand
import com.willfp.eco.core.commands.notifyNull
import com.willfp.eco.util.StringUtils
import com.willfp.ecoquests.quests.Quests
import com.willfp.ecoquests.tasks.Tasks
import org.bukkit.command.CommandSender
import org.bukkit.util.StringUtil
class CommandAddExp(plugin: EcoPlugin) : PluginCommand(
plugin,
"addexp",
"ecoquests.command.addexp",
false
) {
override fun onExecute(sender: CommandSender, args: List<String>) {
val player = notifyPlayerRequired(args.getOrNull(0), "invalid-player")
val quest = notifyNull(Quests[args.getOrNull(1)], "invalid-quest")
val taskTemplate = notifyNull(Tasks[args.getOrNull(2)], "invalid-task")
val task = notifyNull(quest.getTask(taskTemplate), "invalid-task")
if (args.size < 4) {
sender.sendMessage(plugin.langYml.getMessage("invalid-exp-value"))
return
}
val unparsedValue = args[3].notifyNull("invalid-exp-value")
val value: Double
try {
value = unparsedValue.toDouble()
} catch (_: NumberFormatException) {
sender.sendMessage(plugin.langYml.getMessage("invalid-exp-value"))
return
}
task.gainExperience(player, value)
sender.sendMessage(
plugin.langYml.getMessage("exp-added", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
.replace("%xp%", value.toString())
.replace("%quest%", quest.name)
.replace("%task%", task.template.id)
.replace("%player%", player.name)
)
}
override fun tabComplete(sender: CommandSender, args: List<String>): List<String> {
val completions = mutableListOf<String>()
if (args.size == 1) {
StringUtil.copyPartialMatches(
args[0],
plugin.server.onlinePlayers.map { it.name },
completions
)
}
if (args.size == 2) {
StringUtil.copyPartialMatches(
args[1],
Quests.values().map { it.id },
completions
)
}
if (args.size == 3) {
val quest = Quests[args[1]]
if (quest != null) {
StringUtil.copyPartialMatches(
args[2],
quest.tasks.map { it.template.id } ,
completions
)
}
}
return completions
}
}

View File

@@ -15,6 +15,7 @@ class CommandEcoQuests(plugin: EcoPlugin) : PluginCommand(
.addSubcommand(CommandStart(plugin)) .addSubcommand(CommandStart(plugin))
.addSubcommand(CommandResetPlayer(plugin)) .addSubcommand(CommandResetPlayer(plugin))
.addSubcommand(CommandReset(plugin)) .addSubcommand(CommandReset(plugin))
.addSubcommand(CommandAddExp(plugin))
} }
override fun onExecute(sender: CommandSender, args: List<String>) { override fun onExecute(sender: CommandSender, args: List<String>) {

View File

@@ -3,8 +3,6 @@ package com.willfp.ecoquests.commands
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.impl.PluginCommand import com.willfp.eco.core.command.impl.PluginCommand
import com.willfp.ecoquests.gui.QuestsGUI import com.willfp.ecoquests.gui.QuestsGUI
import com.willfp.libreforge.commands.CommandReload
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player import org.bukkit.entity.Player
class CommandQuests(plugin: EcoPlugin) : PluginCommand( class CommandQuests(plugin: EcoPlugin) : PluginCommand(

View File

@@ -3,11 +3,8 @@ package com.willfp.ecoquests.commands
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.impl.PluginCommand import com.willfp.eco.core.command.impl.PluginCommand
import com.willfp.eco.util.StringUtils import com.willfp.eco.util.StringUtils
import com.willfp.ecoquests.gui.QuestsGUI
import com.willfp.ecoquests.quests.Quests import com.willfp.ecoquests.quests.Quests
import com.willfp.libreforge.commands.CommandReload
import org.bukkit.command.CommandSender import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
import org.bukkit.util.StringUtil import org.bukkit.util.StringUtil
class CommandStart(plugin: EcoPlugin) : PluginCommand( class CommandStart(plugin: EcoPlugin) : PluginCommand(

View File

@@ -2,9 +2,12 @@ package com.willfp.ecoquests.libreforge
import com.willfp.eco.core.config.interfaces.Config import com.willfp.eco.core.config.interfaces.Config
import com.willfp.ecoquests.quests.Quests import com.willfp.ecoquests.quests.Quests
import com.willfp.libreforge.Dispatcher
import com.willfp.libreforge.NoCompileData import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.ProvidedHolder
import com.willfp.libreforge.arguments import com.willfp.libreforge.arguments
import com.willfp.libreforge.conditions.Condition import com.willfp.libreforge.conditions.Condition
import com.willfp.libreforge.get
import org.bukkit.entity.Player import org.bukkit.entity.Player
object ConditionHasCompletedQuest : Condition<NoCompileData>("has_completed_quest") { object ConditionHasCompletedQuest : Condition<NoCompileData>("has_completed_quest") {
@@ -12,7 +15,14 @@ object ConditionHasCompletedQuest : Condition<NoCompileData>("has_completed_ques
require("quest", "You must specify the quest ID!") require("quest", "You must specify the quest ID!")
} }
override fun isMet(player: Player, config: Config, compileData: NoCompileData): Boolean { override fun isMet(
dispatcher: Dispatcher<*>,
config: Config,
holder: ProvidedHolder,
compileData: NoCompileData
): Boolean {
val player = dispatcher.get<Player>() ?: return false
val quest = Quests[config.getString("quest")] ?: return false val quest = Quests[config.getString("quest")] ?: return false
return quest.hasCompleted(player) return quest.hasCompleted(player)

View File

@@ -3,9 +3,12 @@ package com.willfp.ecoquests.libreforge
import com.willfp.eco.core.config.interfaces.Config import com.willfp.eco.core.config.interfaces.Config
import com.willfp.ecoquests.quests.Quests import com.willfp.ecoquests.quests.Quests
import com.willfp.ecoquests.tasks.Tasks import com.willfp.ecoquests.tasks.Tasks
import com.willfp.libreforge.Dispatcher
import com.willfp.libreforge.NoCompileData import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.ProvidedHolder
import com.willfp.libreforge.arguments import com.willfp.libreforge.arguments
import com.willfp.libreforge.conditions.Condition import com.willfp.libreforge.conditions.Condition
import com.willfp.libreforge.get
import org.bukkit.entity.Player import org.bukkit.entity.Player
object ConditionHasCompletedTask : Condition<NoCompileData>("has_completed_task") { object ConditionHasCompletedTask : Condition<NoCompileData>("has_completed_task") {
@@ -14,7 +17,14 @@ object ConditionHasCompletedTask : Condition<NoCompileData>("has_completed_task"
require("task", "You must specify the task ID!") require("task", "You must specify the task ID!")
} }
override fun isMet(player: Player, config: Config, compileData: NoCompileData): Boolean { override fun isMet(
dispatcher: Dispatcher<*>,
config: Config,
holder: ProvidedHolder,
compileData: NoCompileData
): Boolean {
val player = dispatcher.get<Player>() ?: return false
val quest = Quests[config.getString("quest")] ?: return false val quest = Quests[config.getString("quest")] ?: return false
val template = Tasks[config.getString("task")] ?: return false val template = Tasks[config.getString("task")] ?: return false
val task = quest.getTask(template) ?: return false val task = quest.getTask(template) ?: return false

View File

@@ -2,9 +2,12 @@ package com.willfp.ecoquests.libreforge
import com.willfp.eco.core.config.interfaces.Config import com.willfp.eco.core.config.interfaces.Config
import com.willfp.ecoquests.quests.Quests import com.willfp.ecoquests.quests.Quests
import com.willfp.libreforge.Dispatcher
import com.willfp.libreforge.NoCompileData import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.ProvidedHolder
import com.willfp.libreforge.arguments import com.willfp.libreforge.arguments
import com.willfp.libreforge.conditions.Condition import com.willfp.libreforge.conditions.Condition
import com.willfp.libreforge.get
import org.bukkit.entity.Player import org.bukkit.entity.Player
object ConditionHasQuestActive : Condition<NoCompileData>("has_quest_active") { object ConditionHasQuestActive : Condition<NoCompileData>("has_quest_active") {
@@ -12,7 +15,14 @@ object ConditionHasQuestActive : Condition<NoCompileData>("has_quest_active") {
require("quest", "You must specify the quest ID!") require("quest", "You must specify the quest ID!")
} }
override fun isMet(player: Player, config: Config, compileData: NoCompileData): Boolean { override fun isMet(
dispatcher: Dispatcher<*>,
config: Config,
holder: ProvidedHolder,
compileData: NoCompileData
): Boolean {
val player = dispatcher.get<Player>() ?: return false
val quest = Quests[config.getString("quest")] ?: return false val quest = Quests[config.getString("quest")] ?: return false
return quest.hasActive(player) return quest.hasActive(player)

View File

@@ -4,6 +4,7 @@ import com.willfp.ecoquests.api.event.PlayerTaskExpGainEvent
import com.willfp.ecoquests.quests.Quest import com.willfp.ecoquests.quests.Quest
import com.willfp.ecoquests.quests.Quests import com.willfp.ecoquests.quests.Quests
import com.willfp.libreforge.effects.templates.MultiMultiplierEffect import com.willfp.libreforge.effects.templates.MultiMultiplierEffect
import com.willfp.libreforge.toDispatcher
import org.bukkit.event.EventHandler import org.bukkit.event.EventHandler
object EffectQuestXpMultiplier : MultiMultiplierEffect<Quest>("quest_xp_multiplier") { object EffectQuestXpMultiplier : MultiMultiplierEffect<Quest>("quest_xp_multiplier") {
@@ -19,6 +20,6 @@ object EffectQuestXpMultiplier : MultiMultiplierEffect<Quest>("quest_xp_multipli
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
fun handle(event: PlayerTaskExpGainEvent) { fun handle(event: PlayerTaskExpGainEvent) {
event.amount *= getMultiplier(event.player, event.quest) event.amount *= getMultiplier(event.player.toDispatcher(), event.quest)
} }
} }

View File

@@ -2,6 +2,7 @@ package com.willfp.ecoquests.libreforge
import com.willfp.ecoquests.api.event.PlayerQuestCompleteEvent import com.willfp.ecoquests.api.event.PlayerQuestCompleteEvent
import com.willfp.ecoquests.api.event.PlayerQuestStartEvent import com.willfp.ecoquests.api.event.PlayerQuestStartEvent
import com.willfp.libreforge.toDispatcher
import com.willfp.libreforge.triggers.Trigger import com.willfp.libreforge.triggers.Trigger
import com.willfp.libreforge.triggers.TriggerData import com.willfp.libreforge.triggers.TriggerData
import com.willfp.libreforge.triggers.TriggerParameter import com.willfp.libreforge.triggers.TriggerParameter
@@ -18,7 +19,7 @@ object TriggerCompleteQuest : Trigger("complete_quest") {
val player = event.player val player = event.player
this.dispatch( this.dispatch(
player, player.toDispatcher(),
TriggerData( TriggerData(
player = player, player = player,
event = event event = event

View File

@@ -1,6 +1,7 @@
package com.willfp.ecoquests.libreforge package com.willfp.ecoquests.libreforge
import com.willfp.ecoquests.api.event.PlayerTaskCompleteEvent import com.willfp.ecoquests.api.event.PlayerTaskCompleteEvent
import com.willfp.libreforge.toDispatcher
import com.willfp.libreforge.triggers.Trigger import com.willfp.libreforge.triggers.Trigger
import com.willfp.libreforge.triggers.TriggerData import com.willfp.libreforge.triggers.TriggerData
import com.willfp.libreforge.triggers.TriggerParameter import com.willfp.libreforge.triggers.TriggerParameter
@@ -17,7 +18,7 @@ object TriggerCompleteTask : Trigger("complete_task") {
val player = event.player val player = event.player
this.dispatch( this.dispatch(
player, player.toDispatcher(),
TriggerData( TriggerData(
player = player, player = player,
event = event event = event

View File

@@ -1,6 +1,7 @@
package com.willfp.ecoquests.libreforge package com.willfp.ecoquests.libreforge
import com.willfp.ecoquests.api.event.PlayerTaskExpGainEvent import com.willfp.ecoquests.api.event.PlayerTaskExpGainEvent
import com.willfp.libreforge.toDispatcher
import com.willfp.libreforge.triggers.Trigger import com.willfp.libreforge.triggers.Trigger
import com.willfp.libreforge.triggers.TriggerData import com.willfp.libreforge.triggers.TriggerData
import com.willfp.libreforge.triggers.TriggerParameter import com.willfp.libreforge.triggers.TriggerParameter
@@ -19,7 +20,7 @@ object TriggerGainTaskXp : Trigger("gain_task_xp") {
val player = event.player val player = event.player
this.dispatch( this.dispatch(
player, player.toDispatcher(),
TriggerData( TriggerData(
player = player, player = player,
event = event, event = event,

View File

@@ -1,6 +1,7 @@
package com.willfp.ecoquests.libreforge package com.willfp.ecoquests.libreforge
import com.willfp.ecoquests.api.event.PlayerQuestStartEvent import com.willfp.ecoquests.api.event.PlayerQuestStartEvent
import com.willfp.libreforge.toDispatcher
import com.willfp.libreforge.triggers.Trigger import com.willfp.libreforge.triggers.Trigger
import com.willfp.libreforge.triggers.TriggerData import com.willfp.libreforge.triggers.TriggerData
import com.willfp.libreforge.triggers.TriggerParameter import com.willfp.libreforge.triggers.TriggerParameter
@@ -17,7 +18,7 @@ object TriggerStartQuest : Trigger("start_quest") {
val player = event.player val player = event.player
this.dispatch( this.dispatch(
player, player.toDispatcher(),
TriggerData( TriggerData(
player = player, player = player,
event = event event = event

View File

@@ -28,6 +28,7 @@ import com.willfp.libreforge.ViolationContext
import com.willfp.libreforge.conditions.Conditions import com.willfp.libreforge.conditions.Conditions
import com.willfp.libreforge.effects.Effects import com.willfp.libreforge.effects.Effects
import com.willfp.libreforge.effects.executors.impl.NormalExecutorFactory import com.willfp.libreforge.effects.executors.impl.NormalExecutorFactory
import com.willfp.libreforge.toDispatcher
import org.bukkit.Bukkit import org.bukkit.Bukkit
import org.bukkit.OfflinePlayer import org.bukkit.OfflinePlayer
import org.bukkit.entity.Player import org.bukkit.entity.Player
@@ -58,7 +59,7 @@ class Quest(
) )
addLoreLines( addLoreLines(
startConditions.getNotMetLines(player, EmptyProvidedHolder) startConditions.getNotMetLines(player.toDispatcher(), EmptyProvidedHolder)
) )
setDisplayName( setDisplayName(
@@ -100,12 +101,22 @@ class Quest(
// The tasks that are actually in use // The tasks that are actually in use
var tasks = run { var tasks = run {
if (taskAmount == availableTasks.size) {
// If taskAmount is equal to availableTasks.size then tasks are ordered as configured
if (isResettable) {
availableTasks.take(taskAmount)
} else {
availableTasks.shuffled().take(taskAmount)
}
} else {
// If taskAmount is less than availableTasks.size then tasks are selected and ordered randomly.
if (isResettable) { if (isResettable) {
loadTasks() ?: availableTasks.randomlyPick(taskAmount) loadTasks() ?: availableTasks.randomlyPick(taskAmount)
} else { } else {
availableTasks.randomlyPick(taskAmount) availableTasks.randomlyPick(taskAmount)
} }
} }
}
private set private set
private val hasStartedKey = PersistentDataKey( private val hasStartedKey = PersistentDataKey(
@@ -222,6 +233,28 @@ class Quest(
.formatEco(it) .formatEco(it)
} }
}.register() }.register()
for (i in 1..this.tasks.size+1) {
PlayerPlaceholder(plugin, "quest_${id}_task_${i}_required_xp") {
this.tasks[i-1].getExperienceRequired(it).toNiceString()
}.register()
PlayerPlaceholder(plugin, "quest_${id}_task_${i}_xp") {
this.tasks[i-1].getExperience(it).toNiceString()
}.register()
PlayerPlaceholder(plugin, "quest_${id}_task_${i}_description") {
this.tasks[i-1].getDescription(it)
}.register()
PlayerPlaceholder(plugin, "quest_${id}_task_${i}_completed") {
this.tasks[i-1].hasCompleted(it).toNiceString()
}.register()
PlayerPlaceholder(plugin, "quest_${id}_task_${i}_completed_description") {
this.tasks[i-1].getCompletedDescription(it)
}.register()
}
} }
override fun onRegister() { override fun onRegister() {
@@ -245,7 +278,8 @@ class Quest(
} }
fun getDescription(player: Player): List<String> { fun getDescription(player: Player): List<String> {
return addPlaceholdersInto(listOf(config.getString("description")), player) val descriptions = config.getStrings("description")
return addPlaceholdersInto(descriptions, player)
} }
fun hasActive(player: OfflinePlayer): Boolean { fun hasActive(player: OfflinePlayer): Boolean {
@@ -257,7 +291,7 @@ class Quest(
} }
fun meetsStartConditions(player: Player): Boolean { fun meetsStartConditions(player: Player): Boolean {
return startConditions.areMet(player, EmptyProvidedHolder) return startConditions.areMet(player.toDispatcher(), EmptyProvidedHolder)
} }
fun shouldStart(player: Player): Boolean { fun shouldStart(player: Player): Boolean {
@@ -282,7 +316,7 @@ class Quest(
return return
} }
startEffects?.trigger(player) startEffects?.trigger(player.toDispatcher())
player.profile.write(hasStartedKey, true) player.profile.write(hasStartedKey, true)
player.profile.write(startedTimeKey, currentTimeMinutes) player.profile.write(startedTimeKey, currentTimeMinutes)
@@ -408,7 +442,7 @@ class Quest(
private fun complete(player: Player) { private fun complete(player: Player) {
player.profile.write(hasCompletedKey, true) player.profile.write(hasCompletedKey, true)
player.profile.write(completedTimeKey, currentTimeMinutes) player.profile.write(completedTimeKey, currentTimeMinutes)
rewards?.trigger(player) rewards?.trigger(player.toDispatcher())
Bukkit.getPluginManager().callEvent(PlayerQuestCompleteEvent(player, this)) Bukkit.getPluginManager().callEvent(PlayerQuestCompleteEvent(player, this))
} }

View File

@@ -15,6 +15,7 @@ import com.willfp.ecoquests.api.event.PlayerTaskExpGainEvent
import com.willfp.ecoquests.quests.Quest import com.willfp.ecoquests.quests.Quest
import com.willfp.ecoquests.quests.Quests import com.willfp.ecoquests.quests.Quests
import com.willfp.libreforge.counters.Accumulator import com.willfp.libreforge.counters.Accumulator
import com.willfp.libreforge.toDispatcher
import org.bukkit.Bukkit import org.bukkit.Bukkit
import org.bukkit.OfflinePlayer import org.bukkit.OfflinePlayer
import org.bukkit.entity.Player import org.bukkit.entity.Player
@@ -145,6 +146,11 @@ class Task(
* Give experience directly * Give experience directly
*/ */
fun giveExperience(player: Player, amount: Double) { fun giveExperience(player: Player, amount: Double) {
if (player.profile.read(hasCompletedKey)) {
return
}
val requiredXp = getExperienceRequired(player) val requiredXp = getExperienceRequired(player)
val newXp = player.profile.read(xpKey) + amount val newXp = player.profile.read(xpKey) + amount
@@ -152,7 +158,7 @@ class Task(
if (newXp >= requiredXp) { if (newXp >= requiredXp) {
player.profile.write(hasCompletedKey, true) player.profile.write(hasCompletedKey, true)
template.onComplete?.trigger(player) template.onComplete?.trigger(player.toDispatcher())
Bukkit.getPluginManager().callEvent(PlayerTaskCompleteEvent(player, template, quest)) Bukkit.getPluginManager().callEvent(PlayerTaskCompleteEvent(player, template, quest))

View File

@@ -7,12 +7,15 @@ messages:
invalid-player: "&cInvalid player!" invalid-player: "&cInvalid player!"
invalid-quest: "&cInvalid quest!" invalid-quest: "&cInvalid quest!"
invalid-task: "&cInvalid task! Should be exist in quest."
invalid-exp-value: "&cInvalid exp value! Should be a double (like 1.0)."
already-started: "&cThe player has already started this quest!" already-started: "&cThe player has already started this quest!"
started-quest: "&fStarted the &a%quest% &fquest for &a%player%&f!" started-quest: "&fStarted the &a%quest% &fquest for &a%player%&f!"
reset-quest-for-player: "&fReset the &a%quest% &fquest for &a%player%&f!" reset-quest-for-player: "&fReset the &a%quest% &fquest for &a%player%&f!"
reset-quest: "&fReset the &a%quest% &fquest!" reset-quest: "&fReset the &a%quest% &fquest!"
quest-not-resettable: "&cThis quest is not resettable!" quest-not-resettable: "&cThis quest is not resettable!"
exp-added: "&aAdded &f%xp% &aXP in quest &f%quest%&a, task &f%task%&a for &f%player%&a!"
time-since: time-since:
never: "&cNot started yet!" never: "&cNot started yet!"

View File

@@ -1,52 +0,0 @@
name: ${pluginName}
version: ${version}
main: com.willfp.ecoquests.EcoQuestsPlugin
api-version: 1.19
dependencies:
- name: eco
required: true
bootstrap: false
- name: libreforge
required: false
bootstrap: false
load-after:
- name: eco
bootstrap: false
permissions:
ecoquests.*:
description: All ecoquests permissions
default: op
children:
ecoquests.command.*: true
ecoquests.command.*:
description: All commands
default: op
children:
ecoquests.command.reload: true
ecoquests.command.quests: true
ecoquests.command.start: true
ecoquests.command.reset: true
ecoquests.command.resetplayer: true
ecoquests.command.reload:
description: Allows reloading the config
default: op
ecoquests.command.ecoquests:
description: Allows the use of /ecoquests.
default: true
ecoquests.command.quests:
description: Allows the use of /quests.
default: true
ecoquests.command.start:
description: Allows using /ecoquests start.
default: op
ecoquests.command.reset:
description: Allows using /ecoquests reset.
default: op
ecoquests.command.resetplayer:
description: Allows using /ecoquests resetplayer.
default: op

View File

@@ -35,6 +35,7 @@ permissions:
ecoquests.command.start: true ecoquests.command.start: true
ecoquests.command.reset: true ecoquests.command.reset: true
ecoquests.command.resetplayer: true ecoquests.command.resetplayer: true
ecoquests.command.addexp: true
ecoquests.command.reload: ecoquests.command.reload:
description: Allows reloading the config description: Allows reloading the config
@@ -54,3 +55,6 @@ permissions:
ecoquests.command.resetplayer: ecoquests.command.resetplayer:
description: Allows using /ecoquests resetplayer. description: Allows using /ecoquests resetplayer.
default: op default: op
ecoquests.command.addexp:
description: Allows using /ecoquests addexp.
default: op

View File

@@ -1,5 +1,5 @@
#libreforge-updater #libreforge-updater
#Thu Sep 07 16:01:57 BST 2023 #Mon Oct 06 08:57:19 BST 2025
kotlin.code.style=official kotlin.code.style=official
libreforge-version=4.33.3 libreforge-version=4.79.0
version=1.5.2 version=1.50.0

Binary file not shown.

View File

@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

0
gradlew vendored Normal file → Executable file
View File

View File

@@ -1,6 +0,0 @@
jdk: openjdk17
before_install:
- source "$HOME/.sdkman/bin/sdkman-init.sh"
- sdk update
- sdk install java 17.0.1-tem
- sdk use java 17.0.1-tem

View File

@@ -2,11 +2,15 @@ pluginManagement {
repositories { repositories {
gradlePluginPortal() gradlePluginPortal()
mavenLocal() mavenLocal()
maven("https://repo.jpenilla.xyz/snapshots/")
maven("https://repo.auxilor.io/repository/maven-public/") maven("https://repo.auxilor.io/repository/maven-public/")
maven("https://repo.papermc.io/repository/maven-public/")
} }
} }
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}
rootProject.name = "EcoQuests" rootProject.name = "EcoQuests"
// Core // Core