
Easy Origins API
这是origins模组的一个API,它为origins添加了几个新功能,极大增强了之前可行的能力,或直接实现了此前无法达成的事项。
EOrigins API
EOrigins API 是一个可复用的 Forge 1.20.1 版 Origins 与 Apoli 附属模组。它添加了有界实体查询、持久目标存储、移动工具、弹射物归属工具,以及其他数据包作者可直接通过 JSON 使用的基础构建模块。
它 不会 替代 Origins 或 Apoli,本身也不添加可游玩的起源。它扩展了 Apoli 现有的动作与条件注册表,使自定义起源可以在正常的 origins:* 功能之外,使用额外的 eorigins_api:* 工厂。
Wiki - https://evehaddox.site/eapi/
主要功能
有界实体查询
- 对附近的已加载实体执行动作,无需依赖宽泛的
@e选择器。 - 可配置半径、结果数量限制、球形或立方体范围、排序方式和 Apoli 条件。
- 通过可配置的辅助瞄准与方块遮挡检测,查找玩家视野中的实体。
- 使用独立的进入、停留和退出动作,维护可复用的实体字段。
- 仅查询已加载实体,绝不扫描整个维度。
持久目标、集合与检查点
- 在命名空间槽位中,通过 UUID 和维度存储目标。
- 在每个命名的实体集合中,最多存储 256 个唯一的实体引用。
- 稍后可对已加载的成员进行添加、移除、清空、计数和动作执行。
- 存储坐标和旋转,用于后续的传送。
- 存储数据在登出、重启和玩家死亡后依然保留。
- 解析实体引用时,绝不会强制加载其所在区块。
双实体移动与伤害
- 在同一维度中交换两个实体的位置。
- 将目标从施动者处推开。
- 将目标拉向施动者,并可配置停止距离。
- 相对于目标面对的方向传送施动者。
- 应用已注册的伤害类型,同时保留施动者归属和击杀判定。
弹射物工具
- 检测原版及兼容的模组弹射物。
- 检查弹射物是否拥有已加载的主人。
- 在弹射物与其主人之间执行双实体动作。
- 检查施动者是否拥有该目标弹射物。
- 分配或清除弹射物归属权。
- 立即停止弹射物,并通过有界动作稍后进行清理。
弹射物工具支持继承 Minecraft Projectile 类的实体。通过无关的自定义类实现弹射物实体的模组,可能需要单独的兼容性处理。
诊断
操作员无需安装单独的剖析附属模组即可检查 API:
/eapi status
/eapi debug queries
/eapi debug storage <player>
/eapi debug reset
查询诊断报告由 API 拥有的查询的累计调用次数、空间候选数、选中结果数、结果限制命中数、平均时间和最大耗时。存储诊断显示命名目标、位置和实体集合槽位,且不会打印原始 UUID。
调试命令需要权限等级 2。
性能与安全
本 API 专为多人整合包设计,在这些整合包中,起源可能依赖重复的命令选择器、标记实体或盔甲架。
- 实体搜索使用 Minecraft 的空间实体索引。
- 每个通用查询都有有界半径和结果数量限制。
- 任意顺序的搜索在达到其限制后可以立即停止。
- 最近和最远搜索仅保留请求数量的结果。
- 存储的实体引用不会创建区块加载票据。
- 实体集合每个槽位有 256 个引用的硬性限制。
- 玩家传送使用服务器正常的玩家连接处理方式。
- 跨维度行为仅在具有明确、安全策略的情况下启用。
API 无法自动将一个低效的起源变得高效:非常大的范围或故意每 tick 执行的动作仍然可能昂贵。内置的诊断功能有助于识别这些情况。
示例
将附近的活体实体捕获到持久集合中:
{
"type": "eorigins_api:collect_entities",
"slot": "example:targets",
"mode": "replace",
"radius": 16.0,
"limit": 32,
"shape": "sphere",
"sort": "nearest",
"include_self": false,
"bientity_condition": {
"type": "origins:target_condition",
"condition": {
"type": "origins:living"
}
}
}
稍后对当前已加载的成员执行动作:
{
"type": "eorigins_api:action_on_entity_set",
"slot": "example:targets",
"limit": 32,
"same_dimension": true,
"require_alive": true,
"bientity_action": {
"type": "eorigins_api:pull_target_toward",
"strength": 1.25,
"stop_distance": 1.5,
"include_vertical": true,
"set_velocity": true
}
}
为槽位标识符使用你自己的命名空间,以防止与其他数据包冲突。
环境要求
EOrigins API 0.5.0 的目标环境:
- Minecraft: 1.20.1
- Forge: 47.4.10
- Origins Forge: 1.10.0.9
- Apoli Forge: 2.9.0.8
- Calio Forge: 1.11.0.5
- Caelus Forge: 3.1.0+1.20
- Java: 17
在 服务器和每个客户端 上同时安装 EOrigins API 及其依赖项。本模组面向 Forge;此构建不支持 Fabric 版本的 Origins。
0.5.0 中的工厂表面
当前版本注册了:
- 15 个实体动作
- 6 个实体条件
- 9 个双实体动作
- 1 个双实体条件
值得注意的工厂包括:
for_each_entity
entity_count_in_range
action_on_entity_in_view
entity_field
collect_entities
action_on_entity_set
store_target
store_position
swap_positions
push_target_away
pull_target_toward
teleport_actor_relative_to_target
damage_target
projectile_has_owner
action_on_projectile_owner
set_projectile_owner
下载中包含一份详细的快速参考,包含字段定义和 JSON 示例。
面向整合包与起源作者
EOrigins API 主要是一个基础设施。它适用于以下机制:
- 锁定与最后一击目标选择;
- 弹射物屏障与反射系统;
- 持久化的捕获或被标记实体组;
- 无需永久性标记盔甲架的检查点传送;
- 拉拽、击退、交换和目标相对移动;
- 光环进入/停留/退出处理;
- 带归属的自定义伤害;
- 重复宽泛实体选择器的有界替代方案。
API 保持起源中立:特定于某个角色或整合包的机制应属于该起源的数据包,而不是核心库。
当前限制
- 可取消的时间线计划在后续版本中推出,并非 0.5.0 的一部分。
- 当引用的实体被卸载时,存储的实体引用依然存在;动作只会跳过未解析的成员。
- 弹射物归属分配不会自动重定向速度。
- 相对传送仅限于同维度。
- 不寻常的模组弹射物实现可能需要专门的兼容性。
问题反馈
反馈问题时,请包含:
- 完整的
latest.log或崩溃报告。 /eapi status的结果。- 相关的起源能力 JSON。
- 如果问题涉及性能,请提供
/eapi debug queries的结果。 - 问题发生在客户端、专用服务器,还是两者都有。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。