1
+ package ink.ptms.um.impl5
2
+
3
+ import ink.ptms.um.event.MobConditionLoadEvent
4
+ import ink.ptms.um.skill.condition.*
5
+ import io.lumine.mythic.api.adapters.AbstractEntity
6
+ import io.lumine.mythic.api.adapters.AbstractLocation
7
+ import io.lumine.mythic.api.config.MythicLineConfig
8
+ import io.lumine.mythic.api.skills.SkillCaster
9
+ import io.lumine.mythic.api.skills.SkillMetadata
10
+ import io.lumine.mythic.api.skills.conditions.*
11
+ import io.lumine.mythic.bukkit.events.MythicConditionLoadEvent
12
+ import io.lumine.mythic.core.skills.SkillCondition
13
+ import taboolib.common.platform.Ghost
14
+ import taboolib.common.platform.event.SubscribeEvent
15
+
16
+ /* * project name universal-mythic
17
+ * package ink.ptms.um.impl5
18
+ * time 2024/7/6
19
+ * author 劫
20
+ */
21
+ internal object MobListenerCondition {
22
+ @Ghost
23
+ @SubscribeEvent
24
+ fun onMythicConditionLoad (event : MythicConditionLoadEvent ) {
25
+ val e = MobConditionLoadEvent (event.conditionName, event.config.toUniversal()).fire()
26
+ val registerCondition = e.skillCondition ? : return
27
+ // 如果注册的条件,不在这些类型中,那么就是无效的技能类型
28
+ if (! BaseCondition .isSubclass(registerCondition)) {
29
+ error(" Unsupported skill: $registerCondition " )
30
+ }
31
+ event.register(ProxyCondition (registerCondition, event.config))
32
+
33
+ }
34
+
35
+ class ProxyCondition (private val skillCondition : BaseCondition , config : MythicLineConfig ) : SkillCondition(config.line),
36
+ ICasterCondition , IEntityComparisonCondition , IEntityCondition , IEntityLocationComparisonCondition ,
37
+ ILocationCondition , ISkillMetaCondition {
38
+ override fun check (p0 : SkillCaster ? ): Boolean {
39
+ return if (skillCondition is CasterCondition ) {
40
+ p0?.toUniversal()?.let { skillCondition.check(it) } ? : false
41
+ } else false
42
+ }
43
+
44
+ override fun check (p0 : AbstractEntity ? , p1 : AbstractEntity ? ): Boolean {
45
+ return if (skillCondition is EntityComparisonCondition ) {
46
+ skillCondition.check(p0?.bukkitEntity, p1?.bukkitEntity)
47
+ } else false
48
+ }
49
+
50
+ override fun check (p0 : AbstractEntity ? ): Boolean {
51
+ return if (skillCondition is EntityCondition ) {
52
+ p0?.let { skillCondition.check(it.bukkitEntity) } ? : false
53
+ } else false
54
+ }
55
+
56
+ override fun check (p0 : AbstractEntity ? , p1 : AbstractLocation ? ): Boolean {
57
+ return if (skillCondition is EntityLocationDistanceCondition ) {
58
+ p1?.let { skillCondition.check(p0?.bukkitEntity, it.toBukkit()) } ? : false
59
+ } else false
60
+ }
61
+
62
+ override fun check (p0 : AbstractLocation ? ): Boolean {
63
+ return if (skillCondition is LocationCondition ) {
64
+ p0?.toBukkit()?.let { skillCondition.check(it) } ? : false
65
+ } else false
66
+ }
67
+
68
+ override fun check (p0 : SkillMetadata ? ): Boolean {
69
+ return if (skillCondition is SkillMetadataCondition ) {
70
+ p0?.toUniversal()?.let { skillCondition.check(it) } ? : false
71
+ } else false
72
+ }
73
+
74
+
75
+ }
76
+ }
0 commit comments