外观
氛围动效
外观
氛围动效
物品转换成功,不代表复杂生物和家具也成功。Java 的实体模型常由数据包、ModelEngine、EliteMobs、BetterModel、Armor Stand、Display Entity 或多个技术实体组合出来;Bedrock 需要自己的 entity definition、geometry、render controller、animation 和材质文件。Geyser 只负责把 Java 侧实体状态翻译给 Bedrock,不能把 Java 客户端渲染规则原样传过去。
| Java 侧实现 | Bedrock 路线 | 自动转换结论 |
|---|---|---|
| 原版实体,仅替换全局贴图 | 覆盖对应 Bedrock 原版实体资源 | 可手工完成,但会影响所有同类型实体。 |
| 原版实体 + Java 名称/装备/CMD 选择模型 | Geyser Entity API 或可识别的客户端状态 | 不要假定名称/PDC 会自动成为 Bedrock 条件。 |
| CEM/OptiFine/EMF 模型 | 重新制作 Bedrock geometry/animation | 没有通用 Geyser JSON 转换路线。 |
| ModelEngine/EliteMobs/BetterModel 生物 | 查明其使用的实体、技术实体和包资源,再分别适配 | 插件名称不能决定兼容性。 |
item_display | GeyserDisplayEntity 等社区扩展,或改为自定义实体 | 官方 Geyser 当前不原生支持 Display Entity。 |
block_display | 手工 Bedrock 实体/方块映射或第三方扩展 | 复杂旋转、缩放和碰撞需单独设计。 |
text_display | Bedrock text/UI/实体文字回退 | 不要期待 Java 字体和文字实体自动保留。 |
| Java 服务器自定义实体类型 | Geyser Entity API 注册 Bedrock 类型并在生成事件替换 | 需要 Geyser extension 和配套 Bedrock RP。 |
转换清单的 route 必须写出上表中的具体路线。写成“Rainbow 已完成”只能说明物品/方块等已导出,不表示实体已完成。
官方文档当前将 Custom Entity API 标记为实验性。它在 Geyser API 2.11.0(26.2 更新)引入,未来可能改写;GeyserDefineEntityPropertiesEvent 虽然更早存在,但在 2.11.0 起使用的是 Bedrock 实体标识符,不是 Java 标识符。
官方路线需要两部分:
entity/、models/entity/、贴图、动画和渲染控制器。只放资源包不注册实体,Bedrock 不会凭文件名自动把某个 Java zombie 变成自定义实体;只注册扩展不提供资源包,玩家也只会看到缺失模型或默认模型。
以下是给 AI 的结构提示,具体 API 包名和方法签名必须以当前 Geyser API Javadoc/编译结果为准:
public final class MiragEdgeEntities implements Extension {
private final CustomEntityDefinition boss =
CustomEntityDefinition.of(Identifier.of("miragedge:boss_alpha"));
@Subscribe
public void onDefineEntities(GeyserDefineEntitiesEvent event) {
event.register(boss);
}
@Subscribe
public void onSpawn(ServerSpawnEntityEvent event) {
if (isBoss(event)) {
event.definition(boss);
}
}
}约束:
minecraft namespace,且必须全局唯一。entity/*.entity.json 一致。ServerSpawnEntityEvent 能看到 Geyser 翻译链上的实体信息,但它不会自动把所有 Paper/CE/数据包内部状态暴露为可查询字段。特别是:
isBoss 判断。官方 API 支持将 Java 侧状态暴露为 Bedrock Molang query.property(...) 可查询的属性。属性数量和类型受 API 限制;当前文档要求每个实体类型最多 32 个属性,枚举和名称也有额外限制。
设计时把属性当作稳定协议:
miragedge:phase = idle | enraged | dying
miragedge:health_fraction = 0.0 .. 1.0
miragedge:variant = 0 .. N每个属性都要记录:Java 来源、默认值、更新时机、Molang 使用位置、失联时的回退值和性能成本。不要把每 tick 的大量 Java 状态都同步到 Bedrock;先证明动画确实需要它,再选择事件或低频更新。
复杂生物通常需要:
manifest.json
entity/miragedge_boss.entity.json
models/entity/miragedge_boss.geo.json
textures/entity/miragedge_boss.png
animations/miragedge_boss.animation.json
animation_controllers/miragedge_boss.controller.json
render_controllers/miragedge_boss.render_controller.json具体文件名由 Bedrock 资源包规范与模型工具决定,不能从 Java assets/<namespace>/models/... 直接改目录名。至少检查:
不要用 java2bedrock.sh 的旧行为包输出作为 Geyser 生产方案。它可以帮助理解早期 Java 模型转换和 sprite 映射思路,但其 README 已明确依赖旧 Bedrock 版本、实验开关和客户端行为包;当前 Geyser 资源包路线应以官方 custom content、Rainbow 和目标 Bedrock 规范为准。
Geyser 官方当前文档明确说明,Java item_display/block_display 等 Display Entity 仍不是 Geyser 原生支持对象。GeyserDisplayEntity 是社区 Geyser extension,README 说明它主要为 Item Display 提供支持,使玩家能看到 Nexo、CraftEngine、ItemsAdder 等物品展示;其 README 还将一个外部 converter(Kafal)作为生成 mapping/resource 的辅助工具。
使用它时必须把风险写进发布记录:
block_display、text_display、复杂骨骼动画或所有 CE 家具都支持。| 场景 | 通过条件 |
|---|---|
| 初次生成 | Bedrock 在实体出现的同一 tick/随后短时间看到正确模型。 |
| 旋转和缩放 | 与 Java 参考视角一致,没有轴翻转或比例漂移。 |
| 区块重载 | 远离再返回、重新加载区块后模型仍存在。 |
| 传送/跨维度 | 传送后没有残留旧实体或重复实体。 |
| 资源包缓存 | 新 release 能替换旧 pack,不出现旧贴图。 |
| 交互 | 若对象设计为装饰,点击/碰撞行为与 Java 预期一致;不兼容时明确标记装饰-only。 |
| 多对象组合 | 家具由多个 display/技术实体组成时,所有零件同时出现且相对位置稳定。 |
当 AI 看到一个“数据包 Boss”时,按以下顺序定位,而不是直接说“用 Rainbow”:
entity、models、textures、optifine/cem、emf 和动画目录。coverage.json,并给玩家可接受的回退(原版实体、2D 图标、无动画装饰或 Java-only)。数据包可以继续在 Java 服务端运行,哪怕 Bedrock 只得到简化模型。转换的最小成功标准应拆成:
Java 逻辑继续触发
+ Java 玩家视觉不回归
+ Bedrock 玩家看到明确的可接受表示
+ 不会因 Bedrock 资源包加载失败导致 Geyser 登录失败若一个 Boss 的攻击依赖 Java 函数,Bedrock 只需要正确看到阶段和伤害反馈,不应把函数搬进一个未经验证的 Bedrock behavior pack。
复杂实体不要把扩展 jar、实体 pack 和 Rainbow 普通物品输出散落在服务器目录。建议在 release 中保留:
entities/<release-id>/
├── extension/
│ └── miragedge-geyser-entities-<version>.jar
├── pack/
│ └── miragedge-entities-<release-id>.zip
├── source/
│ ├── geometry/
│ ├── animations/
│ └── bridge-contract.yml
├── report.md
└── coverage.jsonbridge-contract.yml 记录 Java entity signal、Bedrock identifier、property、默认值和扩展版本。更新扩展时同时更新资源包;不允许“只换 jar 不换 pack”或反过来。
以下情况应直接标记为 manual、unsupported 或 java-only,不要让 AI 伪造“自动转换成功”:
“Bedrock 看到一个模型”与“Bedrock 获得 Java 的完整生物功能”是两个不同交付等级,必须在文档和验收记录中分开。