《我的世界》基岩版和《我的世界》Java 版之间的差异

表面看,基岩版和 Java 版似乎非常相似,但内部却大相径庭。 不同的代码库创建了不同的开发环境。 本教程概述了您作为内容创建者应该注意的主要区别。

在本教程中,您将学习以下内容:

  • Java 版和基岩版的简史。
  • 两个版本有何不同以及它对内容创作的影响。

《我的世界》有两个主要版本。

《我的世界》Java 版

该版本最初于 2009 年发布。 这个版本曾经被称为《我的世界》,直到 2017 年 9 月更名为《我的世界》Java 版。 顾名思义,它是用 Java 开发的,在很大程度上与当前版本的《我的世界》不兼容。 此版本通常简称为 Java 版

《我的世界》基岩版

基岩版于 2017 年 9 月 20 日推出,基于 2011 年发布的 Minecraft: Pocket Edition。 它将九种主要设备平台汇集在一个称为基岩引擎的单一代码库下。 它从头开始对《我的世界》进行了重写,并带来了平台的一些根本性变化,为令人兴奋的新开发社区铺平了道路。 此版本通常简称为基岩版

世界差异

两个版本之间最明显的区别是世界格式。 基岩版使用 LevelDB 格式存储世界,而 Java 版使用 Anvil 格式。 因此,大多数为 Java 版世界编辑创建的第三方工具将无法在基岩版上运行。

这两个版本还使用了完全不同的方块格式。 Java 版已将其方块格式扁平化,为每个单独的块使用唯一的字符串并分别存储该方块的状态。 而基岩版的方块状态改用一个类似基于字符串的系统,但保留了一些由数据值定义的方块组合。 这也就意味着方块的命名在版本之间是不同的。 在基岩版中,花岗岩将是 stone 1,而在 Java 版中,则为 granite

另一个关键区别是世界是如何生成的。 尽管两个版本都使用类似的生成地形过程,但它们使用不同的随机数生成器。 这意味着种子在版本之间不能交叉兼容。 基岩版中生成的种子与 Java 版中不同。 这使得在 Java 版中创建针对基岩版的内容更加困难。

红石和命令的区别

两个版本之间命令的结构和实现也有所不同。 基岩版的命令结构类似于 Java 版 1.13 之前版本中使用的系统。 它还弃用了在基于组件的系统命令中使用的原始 JSON 字符串。 您可以通过触发事件来召唤实体,并在单个命令中为其命名,而不是使用冗长复杂的 JSON 字符串来自定义实体。

summon <entityType: EntityType> [spawnPos: x y z] [spawnEvent: String] [named: String]

目前,在基岩版中无法像在 Java 版中那样 /give(给予)玩家自定义物品。 该物品需要事先创建并传送给玩家。 最常见的实现方法是将物品放在箱子中并打破箱子,或者通过战利品表让实体在死亡时掉落该物品。

除此之外,基岩版和 Java 版 1.13 之前版本的命令应该非常相近。 基岩版不支持 Java 版 1.13 中引入的执行格式。

计分板 在两个版本之间的运作方式相同,但基岩版目前不支持 Java 版所支持的广泛标准。 目前,基岩版支持的唯一标准是 dummy 标准。 基岩版没有实现 Java 版中可用的其他标准。 也不支持诸如 /stats/team 之类的命令。

Schedule 命令在两个版本中不同。 在 Java 版中,/schedule 命令的语法如下:

/schedule function <function> <time> [append|replace]
/schedule clear <function>

一个函数将被安排在一段时间后运行,在安排新函数之前,可以选择使用 "append" 再次安排相同的函数或使用 "replace" 取消函数的先前安排。 在此之上,可以使用 "clear" 选项将已安排的函数取消安排。

在基岩版中,/schedule 命令的语法如下:

/schedule on_area_loaded add <from: x y z> <to: x y z> <function: filepath>
/schedule on_area_loaded add circle <center: x y z> <radius: int> <function: filepath>
/schedule on_area_loaded add tickingarea <name: string> <function: filepath>

这种方式并非在特定时间段后运行函数,而是将函数安排为在加载世界上的某个区域时运行。 "tickingarea" 选项将在加载指定名称的常加载区域时运行指定的函数。 如果常加载区域已经处于活动状态,则该函数将立即运行。 但如果常加载区域尚不存在,则该函数将一直处于不确定状态,直到常加载区域被创建(如使用 /tickingarea 命令),随后该函数将运行。

可以为同一位置或常加载区域安排多个函数。 但是,与 Java 版不同,无法清除已安排的函数。

红石的功能也略有不同。 与 Java 版不同,基岩版不支持准连接。 使用方块更新检测器 (BUD) 开关等机制的系统将无法工作。 活塞也需要一个节拍才能缩回,如果有一个节拍的脉冲,就不会留下方块。 甚至更新的方式也略有不同。 虽然绝大多数红石电路在两个版本之间都能很好地工作,但更复杂的电路可能不会。

资源包

就资源包而言,基岩版和 Java 版之间有很多相似之处,但它们确实存在一些差异。 明显的一个区别是在基岩版中将 .mcmeta 文件换成 .json 文件。 这些文件用于定义界面不同部分的属性,并且用法在很大程度上相同,但两种格式之间存在明显的语法差异。 您还将看到材质文件格式的巨大差异,主要是使用 TGA 文件处理 alpha 通道而不是 PNG。 一些材质(主要是实体)的布局也略有不同。

行为包

基岩版和 Java 版之间最大的区别之一是行为包的使用。 尽管在功能上与 Java 版中的数据包相似,但行为包的实际实现和使用却大不相同。

行为包引入了新的功能,如从头开始构建您自己的实体、添加新方块和物品,以及使用 JavaScript API 访问事件。 它提供了极大的灵活性和控制,与 Java 版相比,它是基岩版中最强大的部分之一。

游戏玩法和玩家输入

一个容易被遗忘的主要区别是不同版本的玩家使用的平台类型。 对于 Java 版,您可以确定您的玩家正在使用键盘和鼠标;在基岩版中,您的玩家很可能不是。

目前,控制台控制是基岩版上最常见的输入方式,其次是触摸控制。 使用键盘和鼠标控制的玩家只占一小部分。

这意味着在基岩版中设计体验时,您应该了解玩家将使用的不同类型的输入。 另外,要留意您的玩家如何玩游戏。 虽然使用鼠标甚至控制器随便点击可能没问题,但它会给使用触摸控制的玩家带来糟糕的体验。 键盘玩家可能在搭弓射箭时很好地瞄准,但使用控制器或触摸控件时要困难得多。 对于移动玩家来说,复杂的跑酷甚至可能会打破游戏规则。

永远记住您的游戏内容面向的玩家是谁。 Java 版的受众群体可能会年长一些,而基岩版的目标受众要年轻得多。 很有可能他们从未在 PC 上玩过基岩版。

性能

性能方面难以一概而论。 由于基岩版引擎被设计为可在 PC、移动设备和主机上播放,因此它通常是一个更宽容的平台,并且在低端硬件上的性能比 Java 版要好得多。 不过,它也不是没有缺点。

除了导致问题的一般性错误(会有不含错误的《我的世界》吗?),该平台提供的高级功能也意味着更多导致游戏问题的可能性。 许多具有复杂行为的实体可能会减慢某些设备的速度。 使用过于复杂模型的自定义实体可能会耗尽 RAM。 甚至在移动设备等低端设备上,可以一次加载的区块数量也可能大幅减少。

为了解决这些性能问题,基岩版将区块的渲染和节拍控制分开了。 与 Java 版中二者直接关联(即任何可见的内容均被加载)不同,基岩版将允许您设置渲染距离(可以看到多远),使其与模拟距离(区块节拍距离)不同。 这使您能够在区块无节拍控制的情况下直观地渲染远处区域。 节拍控制区块对性能有直接影响,在任何给定时刻节拍控制的区块越多,低端设备上出现问题的可能性就越大。


总体而言,如果您准备充分并了解差异,那么从 Java 版到基岩版的转换将是非常轻松的。 Java 版创建者过去依赖于通过命令实现的许多功能已移至行为包中。 游戏的大多数方面都被改造成数据驱动,非常注重灵活性。 随着游戏的不断发展,游戏体验将保持不变,但驱动这种体验的因素将大不相同。

下一步内容?

如果您刚从 Java 版转换过来,在基岩版中的第一步将是加载项开发。 这是在基岩上创建内容的必经之路。