跳到主要内容

标记 v2

下载

本包用于创建 Java 版中的辅助实体:标记

现在的地图或服务器常常使用盔甲架作为辅助实体。虽然盔甲架足够稳定且无行为,然而其可交互性、可见性和重力效果却常常影响实际效果。Java 版中存在一种实体叫做标记,这种实体存在一些良好的性质,包括:

  • 无碰撞箱,因此玩家不会和这种实体误接触或误伤。
  • 无外观,因此无需使用循环/effect强行为标记隐身,它本身就是不可见的。
  • 无重力,因此无需使用循环/tp强行定位标记的位置,即使在空中它也不会掉落。
  • 行为少,它只具有最基础的实体属性,这使得它在较大量存在的时候也不会影响太多性能。

因此,标记在绝大多数情况下能够成为盔甲架的良好替代。

本包为行为包资源包组合的包。

温馨提示

本文假定您已经能够独立编写属于自己的自定义实体。如果您还不能编写自定义实体,请阅读模块 2 的教程:5.3.1 数据驱动实体


文件架构

下面的文件架构中,粗体部分代表本包的核心文件。在您合并包时应当着重关注下面被粗体的文件。

其中可能会出现多个文件冲突。如果在粘贴过程中遇到冲突,请务必选择跳过这些文件而非覆盖您原有的文件,并按照下面可能需要修改的文件列表进行选择性粘贴。

  • BP_marker 文件图标BP_marker:行为包根目录
    • entities 文件图标entities:实体服务端定义
      • template 文件图标template:(建议换名)分类
        • marker.server_entity.json 文件图标marker.server_entity.json标记的行为包定义
    • manifest.json 文件图标manifest.json:(有冲突风险)清单文件
    • pack_icon.png 文件图标pack_icon.png:包图标
  • RP_marker 文件图标RP_marker:资源包根目录
    • entity 文件图标entity:实体客户端定义
      • marker.client_entity.json 文件图标marker.client_entity.json标记的资源包定义
    • render_controllers 文件图标render_controllers:渲染控制器
      • marker.render_controllers.json 文件图标marker.render_controllers.json标记的渲染控制器
    • texts 文件图标texts:文本
      • zh_CN.lang 文件图标zh_CN.lang有冲突风险)中文翻译文本
      • en_US.lang 文件图标en_US.lang有冲突风险)英文翻译文本
    • sounds.json 文件图标sounds.json有冲突风险)音效定义
    • manifest.json 文件图标manifest.json:(有冲突风险)清单文件
    • pack_icon.png 文件图标pack_icon.png:包图标

合并时可能需要修改的文件

以下文件可能和您已有的包产生冲突。在复制这些文件时,如果产生冲突,请注意以下文件不能直接复制,需要视情况手动粘贴其中的内容

  • RP/texts/*.lang
  • RP/sounds.json

以下文件中的自定义内容使用了字段template,然而我们不推荐您在您的作品中使用该字段。在正式使用本包之前,您应当将这些字段按您的需求进行改动。

  • 全部核心文件。

使用方法

合并完成之后,您就可以使用下面的功能。

生成标记

标记被设置为不可使用刷怪蛋生成的,您必须使用命令/summon来生成标记。示例如下:

summon template:marker ~~~

请注意命名空间应当随着您使用的命名空间而变动。这样您就生成了一个标记。

标记可以命名。您可以使用命令/summon直接生成一个带有名称的标记。这个名字无法因玩家的指向而显现,所以可以用一个特殊的名字直接指向一个唯一的标记。示例如下:

summon template:marker facingPosition 10 10 10

这样,使用下面的命令时将把您的视角改为面向该实体。

tp @s ~~~ facing @e[name=facingPosition,c=1]

移除标记

您当然可以直接使用/kill命令直接清除一个标记。然而,这会导致其在死亡不久后产生一个死亡白雾,可能会影响视觉效果。

如果您不希望其在死亡时产生白雾,可以调用下面的事件直接移除之。

事件名描述
template:remove_immediately立刻移除该实体。

这样,该实体会在调用该事件时毫无声息地被立刻移除。示例如下:

event entity @e[type=template:marker] template:remove_immediately

实例

制作一个视角旋转动画

使用一个一次性执行的函数init.mcfunction来定义一个标记facingPos

init.mcfunction
summon template:marker facingPos 10 10 10

然后,基于教程模块 1,3.5 的旋转视角的原理,使用一个循环执行的函数main.mcfunction来定义玩家的相机旋转行为。假设手持钻石时旋转相机。

main.mcfunction
execute as @e[name=facingPos] at @s run tp @s ~~~ ~1
execute as @e[name=facingPos] at @s positioned ^^^5 run camera @a[hasitem={item=diamond,location=slot.weapon.mainhand}] set minecraft:free ease 0.1 linear pos ~~~ facing @s
camera @a[hasitem={item=diamond,location=slot.weapon.mainhand,quantity=0}] clear

因为标记本身不可见,因此无需特意添加隐身效果,也无需使用/tp固定标记的位置。

更新日志

相比于 v1 版本,v2 版本主要进行了如下更改:

  • 提升了最低版本需求为 1.20.50。
  • 不再使用runtime_identifier来移除标记的死亡动画及音效,而是使用更稳定的minecraft:instant_despawn
  • 将标记与文本展示实体分离,不再使用同一个文档。

过往版本下载

您可以在这里下载到过往版本。然而,我们已不再推荐使用这些旧版本。

下载 v1 版本

备注:v1 版本将同时下载标记和文本展示实体