Skip to content

Commit 88ed09b

Browse files
committed
deeper mcmmo integration
Utilises more of the available events to offer customers/users a more indepth McMMO integration
1 parent 6b8f9b7 commit 88ed09b

10 files changed

+327
-0
lines changed

Diff for: core/common/src/main/kotlin/com/willfp/libreforge/integrations/mcmmo/McMMOIntegration.kt

+21
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,36 @@
11
package com.willfp.libreforge.integrations.mcmmo
22

33
import com.willfp.eco.core.EcoPlugin
4+
import com.willfp.libreforge.conditions.Conditions
45
import com.willfp.libreforge.effects.Effects
6+
import com.willfp.libreforge.filters.Filters
57
import com.willfp.libreforge.integrations.LoadableIntegration
8+
import com.willfp.libreforge.integrations.mcmmo.impl.ConditionHasMcMMOLevel
9+
import com.willfp.libreforge.integrations.mcmmo.impl.ConditionMcMMOAbilityOnCooldown
610
import com.willfp.libreforge.integrations.mcmmo.impl.EffectGiveMcMMOXp
711
import com.willfp.libreforge.integrations.mcmmo.impl.EffectMcMMOXpMultiplier
12+
import com.willfp.libreforge.integrations.mcmmo.impl.FilterMcMMOAbility
13+
import com.willfp.libreforge.integrations.mcmmo.impl.FilterMcMMOSkill
14+
import com.willfp.libreforge.integrations.mcmmo.impl.TriggerGainMcMMOXp
15+
import com.willfp.libreforge.integrations.mcmmo.impl.TriggerLevelDownMcMMO
16+
import com.willfp.libreforge.integrations.mcmmo.impl.TriggerLevelUpMcMMO
17+
import com.willfp.libreforge.integrations.mcmmo.impl.TriggerMcMMOAbilityActivate
18+
import com.willfp.libreforge.integrations.mcmmo.impl.TriggerMcMMOAbilityDeactivate
19+
import com.willfp.libreforge.triggers.Triggers
820

921
object McMMOIntegration : LoadableIntegration {
1022
override fun load(plugin: EcoPlugin) {
1123
Effects.register(EffectMcMMOXpMultiplier)
1224
Effects.register(EffectGiveMcMMOXp)
25+
Triggers.register(TriggerGainMcMMOXp)
26+
Triggers.register(TriggerLevelUpMcMMO)
27+
Triggers.register(TriggerLevelDownMcMMO)
28+
Triggers.register(TriggerMcMMOAbilityActivate)
29+
Triggers.register(TriggerMcMMOAbilityDeactivate)
30+
Filters.register(FilterMcMMOSkill)
31+
Filters.register(FilterMcMMOAbility)
32+
Conditions.register(ConditionHasMcMMOLevel)
33+
Conditions.register(ConditionMcMMOAbilityOnCooldown)
1334
}
1435

1536
override fun getPluginName(): String {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.willfp.libreforge.integrations.mcmmo.impl
2+
3+
import com.gmail.nossr50.datatypes.skills.PrimarySkillType
4+
import com.gmail.nossr50.events.experience.McMMOPlayerLevelChangeEvent
5+
import com.gmail.nossr50.util.player.UserManager
6+
import com.willfp.eco.core.config.interfaces.Config
7+
import com.willfp.libreforge.Dispatcher
8+
import com.willfp.libreforge.NoCompileData
9+
import com.willfp.libreforge.ProvidedHolder
10+
import com.willfp.libreforge.arguments
11+
import com.willfp.libreforge.conditions.Condition
12+
import com.willfp.libreforge.get
13+
import com.willfp.libreforge.toDispatcher
14+
import com.willfp.libreforge.updateEffects
15+
import org.bukkit.entity.Player
16+
import org.bukkit.event.EventHandler
17+
import org.bukkit.event.EventPriority
18+
19+
object ConditionHasMcMMOLevel : Condition<NoCompileData>("has_mcmmo_skill_level") {
20+
override val arguments = arguments {
21+
require("skill", "You must specify the skill!")
22+
require("level", "You must specify the skill level!")
23+
}
24+
25+
override fun isMet(
26+
dispatcher: Dispatcher<*>,
27+
config: Config,
28+
holder: ProvidedHolder,
29+
compileData: NoCompileData
30+
): Boolean {
31+
val player = dispatcher.get<Player>() ?: return false
32+
val mcmmoPlayer = UserManager.getPlayer(player) ?: return false
33+
34+
val skillName = config.getString("skill").uppercase() ?: return false
35+
val skill = try {
36+
PrimarySkillType.valueOf(skillName)
37+
} catch (e: IllegalArgumentException) {
38+
return false
39+
}
40+
41+
return mcmmoPlayer.getSkillLevel(skill) >= config.getInt("level")
42+
}
43+
44+
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
45+
fun handle(event: McMMOPlayerLevelChangeEvent) {
46+
event.player.toDispatcher().updateEffects()
47+
}
48+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.willfp.libreforge.integrations.mcmmo.impl
2+
3+
import com.gmail.nossr50.datatypes.skills.SuperAbilityType
4+
import com.gmail.nossr50.util.player.UserManager
5+
import com.willfp.eco.core.config.interfaces.Config
6+
import com.willfp.libreforge.Dispatcher
7+
import com.willfp.libreforge.NoCompileData
8+
import com.willfp.libreforge.ProvidedHolder
9+
import com.willfp.libreforge.arguments
10+
import com.willfp.libreforge.conditions.Condition
11+
import com.willfp.libreforge.get
12+
import org.bukkit.entity.Player
13+
14+
object ConditionMcMMOAbilityOnCooldown : Condition<NoCompileData>("mcmmo_ability_on_cooldown") {
15+
override val arguments = arguments {
16+
require("abilities", "You must specify the ability!")
17+
}
18+
19+
override fun isMet(
20+
dispatcher: Dispatcher<*>,
21+
config: Config,
22+
holder: ProvidedHolder,
23+
compileData: NoCompileData
24+
): Boolean {
25+
val player = dispatcher.get<Player>() ?: return false
26+
val mcmmoPlayer = UserManager.getPlayer(player) ?: return false
27+
28+
val abilityNames = config.getStrings("abilities").map { it.uppercase() } ?: return false
29+
30+
return abilityNames.any { abilityName ->
31+
val ability = try {
32+
SuperAbilityType.valueOf(abilityName)
33+
} catch (e: IllegalArgumentException) {
34+
return@any false
35+
}
36+
mcmmoPlayer.isAbilityOnCooldown(ability)
37+
}
38+
}
39+
}
40+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.willfp.libreforge.integrations.mcmmo.impl
2+
3+
import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityEvent
4+
import com.willfp.eco.core.config.interfaces.Config
5+
import com.willfp.libreforge.NoCompileData
6+
import com.willfp.libreforge.filters.Filter
7+
import com.willfp.libreforge.triggers.TriggerData
8+
9+
object FilterMcMMOAbility : Filter<NoCompileData, Collection<String>>("mcmmo_ability") {
10+
override fun getValue(config: Config, data: TriggerData?, key: String): Collection<String> {
11+
return config.getStrings(key)
12+
}
13+
14+
override fun isMet(data: TriggerData, value: Collection<String>, compileData: NoCompileData): Boolean {
15+
val event = data.event as? McMMOPlayerAbilityEvent ?: return true
16+
17+
return value.contains(event.ability.name)
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.willfp.libreforge.integrations.mcmmo.impl
2+
3+
import com.gmail.nossr50.events.experience.McMMOPlayerExperienceEvent
4+
import com.gmail.nossr50.events.skills.McMMOPlayerSkillEvent
5+
import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityEvent
6+
import com.willfp.eco.core.config.interfaces.Config
7+
import com.willfp.libreforge.NoCompileData
8+
import com.willfp.libreforge.filters.Filter
9+
import com.willfp.libreforge.triggers.TriggerData
10+
11+
object FilterMcMMOSkill : Filter<NoCompileData, Collection<String>>("skill") {
12+
override fun getValue(config: Config, data: TriggerData?, key: String): Collection<String> {
13+
return config.getStrings(key)
14+
}
15+
16+
override fun isMet(data: TriggerData, value: Collection<String>, compileData: NoCompileData): Boolean {
17+
val event = data.event
18+
19+
if (event is McMMOPlayerSkillEvent) {
20+
return value.any { skillName ->
21+
skillName.equals(event.skill.name, ignoreCase = true)
22+
}
23+
}
24+
25+
if (event is McMMOPlayerAbilityEvent) {
26+
return value.any { skillName ->
27+
skillName.equals(event.skill.name, ignoreCase = true)
28+
}
29+
}
30+
31+
if (event is McMMOPlayerExperienceEvent) {
32+
return value.any { skillName ->
33+
skillName.equals(event.skill.name, ignoreCase = true)
34+
}
35+
}
36+
37+
return true
38+
}
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.willfp.libreforge.integrations.mcmmo.impl
2+
3+
import com.gmail.nossr50.events.experience.McMMOPlayerXpGainEvent
4+
import com.willfp.libreforge.toDispatcher
5+
import com.willfp.libreforge.triggers.Trigger
6+
import com.willfp.libreforge.triggers.TriggerData
7+
import com.willfp.libreforge.triggers.TriggerParameter
8+
import org.bukkit.event.EventHandler
9+
10+
object TriggerGainMcMMOXp : Trigger("gain_mcmmo_xp") {
11+
override val parameters = setOf(
12+
TriggerParameter.PLAYER,
13+
TriggerParameter.LOCATION,
14+
TriggerParameter.EVENT
15+
)
16+
17+
@EventHandler(ignoreCancelled = true)
18+
fun handle(event: McMMOPlayerXpGainEvent) {
19+
val player = event.player
20+
val location = event.player.location
21+
22+
this.dispatch(
23+
player.toDispatcher(),
24+
TriggerData(
25+
player = player,
26+
location = location,
27+
event = event,
28+
value = event.rawXpGained.toDouble()
29+
)
30+
)
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.willfp.libreforge.integrations.mcmmo.impl
2+
3+
import com.gmail.nossr50.events.experience.McMMOPlayerLevelDownEvent
4+
import com.willfp.libreforge.toDispatcher
5+
import com.willfp.libreforge.triggers.Trigger
6+
import com.willfp.libreforge.triggers.TriggerData
7+
import com.willfp.libreforge.triggers.TriggerParameter
8+
import org.bukkit.event.EventHandler
9+
10+
object TriggerLevelDownMcMMO : Trigger("level_down_mcmmo") {
11+
override val parameters = setOf(
12+
TriggerParameter.PLAYER,
13+
TriggerParameter.LOCATION,
14+
TriggerParameter.EVENT
15+
)
16+
17+
@EventHandler(ignoreCancelled = true)
18+
fun handle(event: McMMOPlayerLevelDownEvent) {
19+
val player = event.player
20+
val location = event.player.location
21+
22+
this.dispatch(
23+
player.toDispatcher(),
24+
TriggerData(
25+
player = player,
26+
location = location,
27+
event = event,
28+
value = event.skillLevel.toDouble()
29+
)
30+
)
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.willfp.libreforge.integrations.mcmmo.impl
2+
3+
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent
4+
import com.willfp.libreforge.toDispatcher
5+
import com.willfp.libreforge.triggers.Trigger
6+
import com.willfp.libreforge.triggers.TriggerData
7+
import com.willfp.libreforge.triggers.TriggerParameter
8+
import org.bukkit.event.EventHandler
9+
10+
object TriggerLevelUpMcMMO : Trigger("level_up_mcmmo") {
11+
override val parameters = setOf(
12+
TriggerParameter.PLAYER,
13+
TriggerParameter.LOCATION,
14+
TriggerParameter.EVENT
15+
)
16+
17+
@EventHandler(ignoreCancelled = true)
18+
fun handle(event: McMMOPlayerLevelUpEvent) {
19+
val player = event.player
20+
val location = event.player.location
21+
22+
this.dispatch(
23+
player.toDispatcher(),
24+
TriggerData(
25+
player = player,
26+
location = location,
27+
event = event,
28+
value = event.skillLevel.toDouble()
29+
)
30+
)
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.willfp.libreforge.integrations.mcmmo.impl
2+
3+
import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityActivateEvent
4+
import com.willfp.libreforge.toDispatcher
5+
import com.willfp.libreforge.triggers.Trigger
6+
import com.willfp.libreforge.triggers.TriggerData
7+
import com.willfp.libreforge.triggers.TriggerParameter
8+
import org.bukkit.event.EventHandler
9+
10+
object TriggerMcMMOAbilityActivate : Trigger("mcmmo_ability_activate") {
11+
override val parameters = setOf(
12+
TriggerParameter.PLAYER,
13+
TriggerParameter.LOCATION,
14+
TriggerParameter.EVENT
15+
)
16+
17+
@EventHandler(ignoreCancelled = true)
18+
fun handle(event: McMMOPlayerAbilityActivateEvent) {
19+
val player = event.player
20+
val location = event.player.location
21+
22+
this.dispatch(
23+
player.toDispatcher(),
24+
TriggerData(
25+
player = player,
26+
location = location,
27+
event = event
28+
)
29+
)
30+
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.willfp.libreforge.integrations.mcmmo.impl
2+
3+
import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityDeactivateEvent
4+
import com.willfp.libreforge.toDispatcher
5+
import com.willfp.libreforge.triggers.Trigger
6+
import com.willfp.libreforge.triggers.TriggerData
7+
import com.willfp.libreforge.triggers.TriggerParameter
8+
import org.bukkit.event.EventHandler
9+
10+
object TriggerMcMMOAbilityDeactivate : Trigger("mcmmo_ability_deactivate") {
11+
override val parameters = setOf(
12+
TriggerParameter.PLAYER,
13+
TriggerParameter.LOCATION,
14+
TriggerParameter.EVENT
15+
)
16+
17+
@EventHandler(ignoreCancelled = true)
18+
fun handle(event: McMMOPlayerAbilityDeactivateEvent) {
19+
val player = event.player
20+
val location = event.player.location
21+
22+
this.dispatch(
23+
player.toDispatcher(),
24+
TriggerData(
25+
player = player,
26+
location = location,
27+
event = event
28+
)
29+
)
30+
31+
}
32+
}

0 commit comments

Comments
 (0)