Purtmars Plugins
插件adyeshach开始开发文档单位相关

管理器

管理器

本文只介绍管理器 API 的使用方式,对于管理器的详细说明,请参考 技术文档 中的管理器部分。

公共管理器

公共管理器获取方式如下,省略储存类型时默认为 TEMPORARY 类型。

val manager = Adyeshach.api().getPublicEntityManager()

私有管理器

私有管理器获取方式如下,省略储存类型时默认为 TEMPORARY 类型。

val manager = Adyeshach.api().getPrivateEntityManager(player)

:::caution

在未启用数据库的情况下,访问 PERSISTENT 类型的私有管理器会抛出异常。

:::

创建单位

下面列举几种创建单位的方式。

使用常规方法

使用最普通的方法创建单位,返回值固定为 EntityInstance 类型。

val entity: EntityInstance = manager.create(EntityTypes.PLAYER, location)
val entity: EntityInstance = manager.create(EntityTypes.PLAYER, location) {
    // 在单位生成前把它设置成傻子
    it.isNitwit = true
}

使用扩展方法

使用顶层函数创建单位,返回值根据单位类型而定。

val entity: AdyHuman = manager.create<AdyHuman>(location)
val entity: AdyHuman = manager.create<AdyHuman>(location) {
    // 在单位生成前把它设置成傻子
    it.isNitwit = true
}

单位类型均为 AdyEntity 的子类,可以通过代码补全查看所有可用的单位类型。

使用类 Bukkit 方法

使用与 Bukkit 相同的方法创建单位,上手难度低。

val entity: EntityInstance = world.spawnEntity(location, EntityTypes.PLAYER)
val entity: AdyHuman = world.spawn(location, AdyHuman::class.java)
val entity: AdyHuman = world.spawn<AdyHuman>(location)

编辑单位

单位的编辑方式与 Bukkit 的 Entity 十分相似,如下所示:

val armorStand = world.spawn<AdyArmorStand>(location)
armorStand.setSmall(true)
armorStand.setMarker(true)
armorStand.setBasePlate(false)
armorStand.setInvisible(true)
armorStand.setCustomName("我是傻逼")
armorStand.setCustomNameVisible(true)

删除单位

对于单位的删除有两种说法,分别为 despawnremove

  • despawn: 销毁虚拟实体,但在管理器中保留,可通过 respawn 方法重新生成。
  • remove: 销毁虚拟实体,并从管理器中移除。

源代码中的解释如下:

package ink.ptms.adyeshach.core.entity

...

interface EntityInstance {

    ...
    
    /**
     * 销毁实体
     * @param destroyPacket 是否销毁数据包
     * @param removeFromManager 是否从管理器中移除
     */
    fun despawn(destroyPacket: Boolean = true, removeFromManager: Boolean = false)

    /**
     * 重新生成实体
     * 如果实体已从管理器中移除则会抛出异常
     */
    fun respawn()

    /**
     * 销毁实体,并从管理器中移除
     */
    fun remove() = despawn(removeFromManager = true)
    
    ...
}

On this page