File tree Expand file tree Collapse file tree
eco-core/core-plugin/src/main/kotlin/com/willfp/ecoscrolls Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -14,6 +14,7 @@ import com.willfp.ecoscrolls.config.TypesYml
1414import com.willfp.ecoscrolls.display.ScrollDisplay
1515import com.willfp.ecoscrolls.gui.updateInscribeMenu
1616import com.willfp.ecoscrolls.libreforge.ConditionHasScroll
17+ import com.willfp.ecoscrolls.libreforge.EffectApplyRandomScroll
1718import com.willfp.ecoscrolls.libreforge.EffectInscribeItem
1819import com.willfp.ecoscrolls.libreforge.EffectUninscribeItem
1920import 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 )
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments