普特莫斯维基 (Purtmars Wikipedia 📖)

“Chemdah 开发者文档:ink.ptms.chemdah.api.event.PartyHookEvent”的版本间的差异

来自Purtmars Wikipedia —— 普特莫斯维基
(建立内容为“{{:Chemdah 开发者文档目录}} = ink.ptms.chemdah.api.event.PartyHookEvent = 通过该事件对接自定义组队插件,但需要注意的是这个事件会…”的新页面)
 
 
(未显示同一用户的2个中间版本)
第1行: 第1行:
 
{{:Chemdah 开发者文档目录}}
 
{{:Chemdah 开发者文档目录}}
 
= ink.ptms.chemdah.api.event.PartyHookEvent =
 
= ink.ptms.chemdah.api.event.PartyHookEvent =
通过该事件对接自定义组队插件,但需要注意的是这个事件会频繁执行,需缓存 Party 实现类以免造成内存泄漏。
+
通过该事件对接自定义组队插件,该事件并非在插件启动时或任务加载时触发,而是在使用时触发,且只触发一次。
  
 
使用方法如下所示
 
使用方法如下所示
第16行: 第16行:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Party 接口实现样例(使用 Parties 插件)
+
使用 Parties 插件对接样例如下
 
<syntaxhighlight lang="kotlin" line="line">
 
<syntaxhighlight lang="kotlin" line="line">
 
object PartiesHook : Party {
 
object PartiesHook : Party {

2021年4月28日 (三) 00:29的最新版本

目录

ink.ptms.chemdah.api.event.PartyHookEvent

通过该事件对接自定义组队插件,该事件并非在插件启动时或任务加载时触发,而是在使用时触发,且只触发一次。

使用方法如下所示

@EventHandler
fun e(e: PartyHookEvent) {
    e.party = when (e.plugin) {
        "Parties" -> PartiesHook
        "PartyAndFriends" -> PartyAndFriendsHook
        "QuantumRPG", "PRORPG" -> QuantumHook
        else -> return
    }
}

使用 Parties 插件对接样例如下

object PartiesHook : Party {

    override fun getParty(player: Player): Party.PartyInfo? {
        val id = Parties.getApi().getPartyPlayer(player.uniqueId)?.partyId ?: return null
        val team = Parties.getApi().getParty(id) ?: return null
        return object : Party.PartyInfo {

            /**
             * 队伍的队长可以不存在
             */
            override fun getLeader(): Player? {
                return Bukkit.getPlayer(team.leader ?: return null)
            }

            /**
             * 队伍的队员中必须不包含队长
             */
            override fun getMembers(): List {
                val members = team.onlineMembers.filter { team.leader != it.playerUUID }
                return members.mapNotNull { Bukkit.getPlayer(it.playerUUID) }
            }
        }
    }
}