Skip to content

Commit 90d8cc3

Browse files
authored
feat: add apply_random_scroll effect. (#14)
Applies a random scroll to the trigger item - adhering to targets, limits, types, conflicts, and requirements. Optional args: type: only scrolls matching type scroll: only scrolls in list allow_unsafe: bypass limits, conflicts and requirements - only adhering to target (and other args above)
1 parent a1d81c6 commit 90d8cc3

3 files changed

Lines changed: 46 additions & 0 deletions

File tree

eco-core/core-plugin/src/main/kotlin/com/willfp/ecoscrolls/EcoScrollsPlugin.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import com.willfp.ecoscrolls.config.TypesYml
1414
import com.willfp.ecoscrolls.display.ScrollDisplay
1515
import com.willfp.ecoscrolls.gui.updateInscribeMenu
1616
import com.willfp.ecoscrolls.libreforge.ConditionHasScroll
17+
import com.willfp.ecoscrolls.libreforge.EffectApplyRandomScroll
1718
import com.willfp.ecoscrolls.libreforge.EffectInscribeItem
1819
import com.willfp.ecoscrolls.libreforge.EffectUninscribeItem
1920
import com.willfp.ecoscrolls.libreforge.FilterScroll
@@ -58,6 +59,7 @@ class EcoScrollsPlugin : LibreforgePlugin() {
5859
Conditions.register(ConditionHasScroll)
5960
Effects.register(EffectInscribeItem)
6061
Effects.register(EffectUninscribeItem)
62+
Effects.register(EffectApplyRandomScroll)
6163
Filters.register(FilterScroll)
6264
Triggers.register(TriggerInscribe)
6365
Triggers.register(TriggerTryInscribe)
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.willfp.ecoscrolls.libreforge
2+
3+
import com.willfp.eco.core.config.interfaces.Config
4+
import com.willfp.ecoscrolls.scrolls.Scroll
5+
import com.willfp.ecoscrolls.scrolls.ScrollTypes
6+
import com.willfp.ecoscrolls.scrolls.Scrolls
7+
import com.willfp.libreforge.NoCompileData
8+
import com.willfp.libreforge.effects.Effect
9+
import com.willfp.libreforge.triggers.TriggerData
10+
11+
object EffectApplyRandomScroll : Effect<NoCompileData>("apply_random_scroll") {
12+
override val isPermanent = false
13+
14+
override fun onTrigger(config: Config, data: TriggerData, compileData: NoCompileData): Boolean {
15+
val item = data.foundItem ?: return false
16+
17+
val allowUnsafe = config.getBool("allow_unsafe")
18+
19+
val scrollList = config.getStrings("scrolls")
20+
var candidates: Collection<Scroll> = if (scrollList.isNotEmpty()) {
21+
scrollList.mapNotNull { Scrolls[it] }
22+
} else {
23+
Scrolls.values()
24+
}
25+
26+
val typeId = config.getStringOrNull("type")
27+
if (typeId != null) {
28+
val type = ScrollTypes[typeId] ?: return false
29+
candidates = candidates.filter { it.type == type }
30+
}
31+
32+
val applicable = candidates.filter {
33+
if (allowUnsafe) it.matchesTarget(item) else it.canInscribe(item)
34+
}
35+
36+
val scroll = applicable.randomOrNull() ?: return false
37+
38+
scroll.inscribe(item)
39+
40+
return true
41+
}
42+
}

eco-core/core-plugin/src/main/kotlin/com/willfp/ecoscrolls/scrolls/Scroll.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,8 @@ class Scroll(
222222

223223
fun canInscribe(itemStack: ItemStack): Boolean = getDenialReason(itemStack) == null
224224

225+
fun matchesTarget(itemStack: ItemStack): Boolean = targets.any { it.matches(itemStack) }
226+
225227
fun getDenialReason(itemStack: ItemStack): InscriptionDenialReason? {
226228
if (targets.none { it.matches(itemStack) }) {
227229
return InscriptionDenialReason.OTHER

0 commit comments

Comments
 (0)