mirror of
https://github.com/Auxilor/EcoQuests.git
synced 2026-01-06 15:52:00 +00:00
Added libreforge integration and improved API
This commit is contained in:
@@ -7,18 +7,45 @@ import com.willfp.ecoquests.commands.CommandEcoQuests
|
||||
import com.willfp.ecoquests.commands.CommandQuests
|
||||
import com.willfp.ecoquests.gui.PreviousQuestsGUI
|
||||
import com.willfp.ecoquests.gui.QuestsGUI
|
||||
import com.willfp.ecoquests.libreforge.ConditionHasCompletedQuest
|
||||
import com.willfp.ecoquests.libreforge.ConditionHasCompletedTask
|
||||
import com.willfp.ecoquests.libreforge.EffectGainTaskXp
|
||||
import com.willfp.ecoquests.libreforge.EffectGiveTaskXp
|
||||
import com.willfp.ecoquests.libreforge.EffectStartQuest
|
||||
import com.willfp.ecoquests.libreforge.FilterQuest
|
||||
import com.willfp.ecoquests.libreforge.FilterTask
|
||||
import com.willfp.ecoquests.libreforge.TriggerCompleteQuest
|
||||
import com.willfp.ecoquests.libreforge.TriggerCompleteTask
|
||||
import com.willfp.ecoquests.libreforge.TriggerGainTaskXp
|
||||
import com.willfp.ecoquests.libreforge.TriggerStartQuest
|
||||
import com.willfp.ecoquests.quests.QuestCompleteDisplay
|
||||
import com.willfp.ecoquests.quests.QuestStartDisplay
|
||||
import com.willfp.ecoquests.quests.Quests
|
||||
import com.willfp.ecoquests.tasks.Tasks
|
||||
import com.willfp.libreforge.conditions.Conditions
|
||||
import com.willfp.libreforge.effects.Effects
|
||||
import com.willfp.libreforge.filters.Filters
|
||||
import com.willfp.libreforge.loader.LibreforgePlugin
|
||||
import com.willfp.libreforge.loader.configs.ConfigCategory
|
||||
import com.willfp.libreforge.triggers.Triggers
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.event.Listener
|
||||
|
||||
|
||||
class EcoQuestsPlugin : LibreforgePlugin() {
|
||||
override fun handleEnable() {
|
||||
Conditions.register(ConditionHasCompletedQuest)
|
||||
Conditions.register(ConditionHasCompletedTask)
|
||||
Effects.register(EffectGainTaskXp)
|
||||
Effects.register(EffectGiveTaskXp)
|
||||
Effects.register(EffectStartQuest)
|
||||
Filters.register(FilterQuest)
|
||||
Filters.register(FilterTask)
|
||||
Triggers.register(TriggerCompleteQuest)
|
||||
Triggers.register(TriggerCompleteTask)
|
||||
Triggers.register(TriggerGainTaskXp)
|
||||
Triggers.register(TriggerStartQuest)
|
||||
|
||||
PlayerlessPlaceholder(this, "quests_amount") {
|
||||
Quests.values().size.toString()
|
||||
}
|
||||
|
||||
@@ -7,8 +7,10 @@ import org.bukkit.event.player.PlayerEvent
|
||||
|
||||
class PlayerQuestCompleteEvent(
|
||||
who: Player,
|
||||
val quest: Quest
|
||||
): PlayerEvent(who) {
|
||||
override val quest: Quest
|
||||
): PlayerEvent(who), QuestEvent {
|
||||
override val player: Player = super.player
|
||||
|
||||
override fun getHandlers(): HandlerList {
|
||||
return HANDLERS
|
||||
}
|
||||
|
||||
@@ -7,8 +7,10 @@ import org.bukkit.event.player.PlayerEvent
|
||||
|
||||
class PlayerQuestStartEvent(
|
||||
who: Player,
|
||||
val quest: Quest
|
||||
): PlayerEvent(who) {
|
||||
override val quest: Quest
|
||||
): PlayerEvent(who), QuestEvent {
|
||||
override val player: Player = super.player
|
||||
|
||||
override fun getHandlers(): HandlerList {
|
||||
return HANDLERS
|
||||
}
|
||||
|
||||
@@ -7,8 +7,10 @@ import org.bukkit.event.player.PlayerEvent
|
||||
|
||||
class PlayerTaskCompleteEvent(
|
||||
who: Player,
|
||||
val task: Task
|
||||
): PlayerEvent(who) {
|
||||
override val task: Task
|
||||
): PlayerEvent(who), TaskEvent {
|
||||
override val player: Player = super.player
|
||||
|
||||
override fun getHandlers(): HandlerList {
|
||||
return HANDLERS
|
||||
}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.willfp.ecoquests.api.event
|
||||
|
||||
import com.willfp.ecoquests.tasks.Task
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.Cancellable
|
||||
import org.bukkit.event.HandlerList
|
||||
import org.bukkit.event.player.PlayerEvent
|
||||
|
||||
class PlayerTaskExpGainEvent(
|
||||
who: Player,
|
||||
override val task: Task,
|
||||
var amount: Double
|
||||
) : PlayerEvent(who), TaskEvent, Cancellable {
|
||||
private var cancelled = false
|
||||
|
||||
override fun isCancelled(): Boolean {
|
||||
return cancelled
|
||||
}
|
||||
|
||||
override fun setCancelled(cancel: Boolean) {
|
||||
cancelled = cancel
|
||||
}
|
||||
|
||||
override val player: Player = super.player
|
||||
|
||||
override fun getHandlers(): HandlerList {
|
||||
return HANDLERS
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val HANDLERS = HandlerList()
|
||||
|
||||
@JvmStatic
|
||||
fun getHandlerList(): HandlerList {
|
||||
return HANDLERS
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.willfp.ecoquests.api.event
|
||||
|
||||
import com.willfp.ecoquests.quests.Quest
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
interface QuestEvent {
|
||||
val quest: Quest
|
||||
|
||||
val player: Player
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.willfp.ecoquests.api.event
|
||||
|
||||
import com.willfp.ecoquests.quests.Quest
|
||||
import com.willfp.ecoquests.tasks.Task
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
interface TaskEvent {
|
||||
val task: Task
|
||||
|
||||
val player: Player
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.willfp.ecoquests.libreforge
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.Config
|
||||
import com.willfp.ecoquests.quests.Quests
|
||||
import com.willfp.libreforge.NoCompileData
|
||||
import com.willfp.libreforge.arguments
|
||||
import com.willfp.libreforge.conditions.Condition
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
object ConditionHasCompletedQuest : Condition<NoCompileData>("has_completed_quest") {
|
||||
override val arguments = arguments {
|
||||
require("quest", "You must specify the quest ID!")
|
||||
}
|
||||
|
||||
override fun isMet(player: Player, config: Config, compileData: NoCompileData): Boolean {
|
||||
val quest = Quests[config.getString("quest")] ?: return false
|
||||
|
||||
return quest.hasCompleted(player)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.willfp.ecoquests.libreforge
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.Config
|
||||
import com.willfp.ecoquests.quests.Quests
|
||||
import com.willfp.ecoquests.tasks.Tasks
|
||||
import com.willfp.libreforge.NoCompileData
|
||||
import com.willfp.libreforge.arguments
|
||||
import com.willfp.libreforge.conditions.Condition
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
object ConditionHasCompletedTask : Condition<NoCompileData>("has_completed_task") {
|
||||
override val arguments = arguments {
|
||||
require("task", "You must specify the task ID!")
|
||||
}
|
||||
|
||||
override fun isMet(player: Player, config: Config, compileData: NoCompileData): Boolean {
|
||||
val task = Tasks[config.getString("task")] ?: return false
|
||||
|
||||
return task.hasCompleted(player)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.willfp.ecoquests.libreforge
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.Config
|
||||
import com.willfp.ecoquests.tasks.Tasks
|
||||
import com.willfp.libreforge.NoCompileData
|
||||
import com.willfp.libreforge.arguments
|
||||
import com.willfp.libreforge.effects.Effect
|
||||
import com.willfp.libreforge.getDoubleFromExpression
|
||||
import com.willfp.libreforge.triggers.TriggerData
|
||||
import com.willfp.libreforge.triggers.TriggerParameter
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
object EffectGainTaskXp : Effect<NoCompileData>("gain_task_xp") {
|
||||
override val parameters = setOf(
|
||||
TriggerParameter.PLAYER
|
||||
)
|
||||
|
||||
override val arguments = arguments {
|
||||
require("task", "You must specify the task ID!")
|
||||
require("xp", "You must specify the amount of xp to gain!")
|
||||
}
|
||||
|
||||
override fun onTrigger(config: Config, data: TriggerData, compileData: NoCompileData): Boolean {
|
||||
val player = data.player ?: return false
|
||||
|
||||
val task = Tasks[config.getString("task")] ?: return false
|
||||
val xp = config.getDoubleFromExpression("xp", data)
|
||||
|
||||
task.gainExperience(player, xp)
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.willfp.ecoquests.libreforge
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.Config
|
||||
import com.willfp.ecoquests.tasks.Tasks
|
||||
import com.willfp.libreforge.NoCompileData
|
||||
import com.willfp.libreforge.arguments
|
||||
import com.willfp.libreforge.effects.Effect
|
||||
import com.willfp.libreforge.getDoubleFromExpression
|
||||
import com.willfp.libreforge.triggers.TriggerData
|
||||
import com.willfp.libreforge.triggers.TriggerParameter
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
object EffectGiveTaskXp : Effect<NoCompileData>("give_task_xp") {
|
||||
override val parameters = setOf(
|
||||
TriggerParameter.PLAYER
|
||||
)
|
||||
|
||||
override val arguments = arguments {
|
||||
require("task", "You must specify the task ID!")
|
||||
require("xp", "You must specify the amount of xp to give!")
|
||||
}
|
||||
|
||||
override fun onTrigger(config: Config, data: TriggerData, compileData: NoCompileData): Boolean {
|
||||
val player = data.player ?: return false
|
||||
|
||||
val task = Tasks[config.getString("task")] ?: return false
|
||||
val xp = config.getDoubleFromExpression("xp", data)
|
||||
|
||||
task.giveExperience(player, xp)
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.willfp.ecoquests.libreforge
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.Config
|
||||
import com.willfp.ecoquests.quests.Quests
|
||||
import com.willfp.ecoquests.tasks.Tasks
|
||||
import com.willfp.libreforge.NoCompileData
|
||||
import com.willfp.libreforge.arguments
|
||||
import com.willfp.libreforge.effects.Effect
|
||||
import com.willfp.libreforge.getDoubleFromExpression
|
||||
import com.willfp.libreforge.triggers.TriggerData
|
||||
import com.willfp.libreforge.triggers.TriggerParameter
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
object EffectStartQuest : Effect<NoCompileData>("start_quest") {
|
||||
override val parameters = setOf(
|
||||
TriggerParameter.PLAYER
|
||||
)
|
||||
|
||||
override val arguments = arguments {
|
||||
require("quest", "You must specify the quest!")
|
||||
}
|
||||
|
||||
override fun onTrigger(config: Config, data: TriggerData, compileData: NoCompileData): Boolean {
|
||||
val player = data.player ?: return false
|
||||
|
||||
val quest = Quests[config.getString("quest")] ?: return false
|
||||
|
||||
quest.start(player)
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.willfp.ecoquests.libreforge
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.Config
|
||||
import com.willfp.ecoquests.api.event.QuestEvent
|
||||
import com.willfp.libreforge.NoCompileData
|
||||
import com.willfp.libreforge.filters.Filter
|
||||
import com.willfp.libreforge.triggers.TriggerData
|
||||
|
||||
object FilterQuest : Filter<NoCompileData, Collection<String>>("quest") {
|
||||
override fun getValue(config: Config, data: TriggerData?, key: String): Collection<String> {
|
||||
return config.getStrings(key)
|
||||
}
|
||||
|
||||
override fun isMet(data: TriggerData, value: Collection<String>, compileData: NoCompileData): Boolean {
|
||||
val event = data.event as? QuestEvent ?: return true
|
||||
|
||||
return value.any { questID ->
|
||||
questID.equals(event.quest.id, ignoreCase = true)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.willfp.ecoquests.libreforge
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.Config
|
||||
import com.willfp.ecoquests.api.event.QuestEvent
|
||||
import com.willfp.ecoquests.api.event.TaskEvent
|
||||
import com.willfp.libreforge.NoCompileData
|
||||
import com.willfp.libreforge.filters.Filter
|
||||
import com.willfp.libreforge.triggers.TriggerData
|
||||
|
||||
object FilterTask : Filter<NoCompileData, Collection<String>>("task") {
|
||||
override fun getValue(config: Config, data: TriggerData?, key: String): Collection<String> {
|
||||
return config.getStrings(key)
|
||||
}
|
||||
|
||||
override fun isMet(data: TriggerData, value: Collection<String>, compileData: NoCompileData): Boolean {
|
||||
val event = data.event as? TaskEvent ?: return true
|
||||
|
||||
return value.any { taskID ->
|
||||
taskID.equals(event.task.id, ignoreCase = true)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.willfp.ecoquests.libreforge
|
||||
|
||||
import com.willfp.ecoquests.api.event.PlayerQuestCompleteEvent
|
||||
import com.willfp.ecoquests.api.event.PlayerQuestStartEvent
|
||||
import com.willfp.libreforge.triggers.Trigger
|
||||
import com.willfp.libreforge.triggers.TriggerData
|
||||
import com.willfp.libreforge.triggers.TriggerParameter
|
||||
import org.bukkit.event.EventHandler
|
||||
|
||||
object TriggerCompleteQuest : Trigger("complete_quest") {
|
||||
override val parameters = setOf(
|
||||
TriggerParameter.PLAYER,
|
||||
TriggerParameter.EVENT
|
||||
)
|
||||
|
||||
@EventHandler
|
||||
fun handle(event: PlayerQuestCompleteEvent) {
|
||||
val player = event.player
|
||||
|
||||
this.dispatch(
|
||||
player,
|
||||
TriggerData(
|
||||
player = player,
|
||||
event = event
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.willfp.ecoquests.libreforge
|
||||
|
||||
import com.willfp.ecoquests.api.event.PlayerTaskCompleteEvent
|
||||
import com.willfp.libreforge.triggers.Trigger
|
||||
import com.willfp.libreforge.triggers.TriggerData
|
||||
import com.willfp.libreforge.triggers.TriggerParameter
|
||||
import org.bukkit.event.EventHandler
|
||||
|
||||
object TriggerCompleteTask : Trigger("complete_task") {
|
||||
override val parameters = setOf(
|
||||
TriggerParameter.PLAYER,
|
||||
TriggerParameter.EVENT
|
||||
)
|
||||
|
||||
@EventHandler
|
||||
fun handle(event: PlayerTaskCompleteEvent) {
|
||||
val player = event.player
|
||||
|
||||
this.dispatch(
|
||||
player,
|
||||
TriggerData(
|
||||
player = player,
|
||||
event = event
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.willfp.ecoquests.libreforge
|
||||
|
||||
import com.willfp.ecoquests.api.event.PlayerTaskExpGainEvent
|
||||
import com.willfp.libreforge.triggers.Trigger
|
||||
import com.willfp.libreforge.triggers.TriggerData
|
||||
import com.willfp.libreforge.triggers.TriggerParameter
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.EventPriority
|
||||
|
||||
object TriggerGainTaskXp : Trigger("gain_task_xp") {
|
||||
override val parameters = setOf(
|
||||
TriggerParameter.PLAYER,
|
||||
TriggerParameter.EVENT,
|
||||
TriggerParameter.VALUE
|
||||
)
|
||||
|
||||
@EventHandler
|
||||
fun handle(event: PlayerTaskExpGainEvent) {
|
||||
val player = event.player
|
||||
|
||||
this.dispatch(
|
||||
player,
|
||||
TriggerData(
|
||||
player = player,
|
||||
event = event,
|
||||
value = event.amount
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.willfp.ecoquests.libreforge
|
||||
|
||||
import com.willfp.ecoquests.api.event.PlayerQuestStartEvent
|
||||
import com.willfp.libreforge.triggers.Trigger
|
||||
import com.willfp.libreforge.triggers.TriggerData
|
||||
import com.willfp.libreforge.triggers.TriggerParameter
|
||||
import org.bukkit.event.EventHandler
|
||||
|
||||
object TriggerStartQuest : Trigger("start_quest") {
|
||||
override val parameters = setOf(
|
||||
TriggerParameter.PLAYER,
|
||||
TriggerParameter.EVENT
|
||||
)
|
||||
|
||||
@EventHandler
|
||||
fun handle(event: PlayerQuestStartEvent) {
|
||||
val player = event.player
|
||||
|
||||
this.dispatch(
|
||||
player,
|
||||
TriggerData(
|
||||
player = player,
|
||||
event = event
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -83,6 +83,10 @@ class Quest(
|
||||
)
|
||||
|
||||
init {
|
||||
PlayerlessPlaceholder(plugin, "quest_${id}_name") {
|
||||
this.name
|
||||
}
|
||||
|
||||
PlayerPlaceholder(plugin, "quest_${id}_started") {
|
||||
hasStarted(it).toNiceString()
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.willfp.eco.util.formatEco
|
||||
import com.willfp.eco.util.lineWrap
|
||||
import com.willfp.eco.util.toNiceString
|
||||
import com.willfp.ecoquests.api.event.PlayerTaskCompleteEvent
|
||||
import com.willfp.ecoquests.api.event.PlayerTaskExpGainEvent
|
||||
import com.willfp.ecoquests.quests.Quests
|
||||
import com.willfp.libreforge.ViolationContext
|
||||
import com.willfp.libreforge.counters.Accumulator
|
||||
@@ -44,7 +45,7 @@ class Task(
|
||||
|
||||
private val accumulator = object : Accumulator {
|
||||
override fun accept(player: Player, count: Double) {
|
||||
this@Task.giveExperience(player, count)
|
||||
this@Task.gainExperience(player, count)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,6 +115,24 @@ class Task(
|
||||
return config.getDoubleFromExpression("required-xp", player)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gain experience naturally.
|
||||
*/
|
||||
fun gainExperience(player: Player, amount: Double) {
|
||||
val event = PlayerTaskExpGainEvent(player, this, amount)
|
||||
|
||||
Bukkit.getPluginManager().callEvent(event)
|
||||
|
||||
if (event.isCancelled) {
|
||||
return
|
||||
}
|
||||
|
||||
giveExperience(player, event.amount)
|
||||
}
|
||||
|
||||
/**
|
||||
* Give experience directly
|
||||
*/
|
||||
fun giveExperience(player: Player, amount: Double) {
|
||||
val requiredXp = getExperienceRequired(player)
|
||||
val newXp = player.profile.read(xpKey) + amount
|
||||
|
||||
Reference in New Issue
Block a user