跳到主要内容

关于网易更新到 1.21.90 的开发内容更新汇总

上次更新:2026 年 4 月 18 日

随着网易正式宣布加快更新节奏,这次网易将要正式发布 3.8 版本,并将版本进一步推进到 1.21.90,也正式拉近了和国际版的时间差距。这里将 1.21.60-1.21.90 的所有更新内容汇总到本文,供查阅本文的开发者参考!

关于网易的 3.8 版本的更新内容,参见3.8 - 我的世界开发者官网。我们在下文仅展示国际版重点更新内容。

:我们仍然只挑出了一些重点内容,涵盖不完全,若有需要,读者可以在中文 Minecraft 查阅!

游戏内容

命令

  • 现在嘎枝之心使用方块状态creaking_heart_state,可能的值为uprooteddormantawake

  • 新增游戏规则locatorBar

  • 新增了/loot的模拟挖掘重载mine

    /loot <目标> mine <目标方块位置: x y z> [<tool>|mainhand|offhand: string]
  • 新增了/aimassist,用于修改玩家的瞄准辅助。

    /aimassist <玩家: target> clear
    /aimassist <玩家: target> set [x角度: float] [y角度: float] [最远距离: float] [瞄准模式: AimAssistTargetMode] [预设ID: string]
  • 新增了/place,加入时仅可用于放置地物,但是权限等级为 2,代表此命令不能在命令方块和函数中使用

    /place feature <地物: features> [位置: x y z]
    /place featurerule <地物规则: featureRules> [位置: x y z]
    /place jigsaw <pool: filepath> <jigsawTarget: string> <maxDepth: int> [pos: x y z] [keepJigsaws: Boolean] [liquidSettings: LiquidSettings]
    /place structure <structure: string> [pos: x y z] [ignoreStartHeight: Boolean] [keepJigsaws: Boolean] [liquidSettings: LiquidSettings]
  • 新增了/controlscheme,用于修改相机预设的控制方案。此命令需要结合/camera使用。

    /controlscheme <玩家: target> set <控制方案: controlscheme>
    /controlscheme <玩家: target> clear

附加包

  • 现在可以通过在清单文件中指定元数据,使得安装附加包后仍可获得成就。

    "metadata": {
    "product_type": "addon"
    }

编辑器

  • 自 1.21.90 开始,Editor 在正式版可用。

物品

物品组件

自定义物品组件

版本适用性警告

请读者注意:自定义物品组件仍然只适用于国际版,并需要使用 ScriptAPI 定义其功能。

  • 1.21.90格式版本开始,自定义物品组件采用 V2 版本,不再使用minecraft:custom_components来指定自定义组件,而是使用类似于其他原版组件的写法,并可以在组件内部传入参数。例如:

    "components": {
    "minecraft:icon": "stick",
    "test:execute_command_on_use": {
    "command": "say 1"
    }
    }
  • 因此,minecraft:custom_components组件已被弃用。

物品组

  • 现在国际版正式支持自定义物品组。同时,1.21.60或更高格式版本的物品在指定物品组时必须指定命名空间。

战利品表

  • 现在战利品表条件match_tool可以使用物品标签筛选。

方块

方块组件

  • 开放了组件minecraft:item_visual,以定义方块在物品栏中的外观。
  • 开放了组件minecraft:liquid_detection,以定义方块在接触到液体后的行为。
  • 开放了组件minecraft:material_instances中的多个参数:
    • ambient_occlusion,定义方块的环境光遮挡。
    • isotropic,定义方块的各向同性(是否随机旋转 UV)。
    • tint_method,定义方块的着色方法。同时,手持此方块时也会着色(和平原群系一致)。
    • render_method,新增了 3 个预设渲染方法:blend_to_opaquealpha_test_to_opaquealpha_test_single_sided_to_opaque
  • 开放了组件minecraft:replaceable,以定义方块是否可被另一种方块在原位替代(类似于水、草丛或空气)。
  • 开放了组件minecraft:map_colortint_method属性,以定义方块的着色方法,将将颜色与预定义的色调相乘。
  • 开放了组件minecraft:destruction_particles,以定义方块被破坏后掉落的粒子。
  • 在格式版本1.21.80之后,使用minecraft:geometry组件或minecraft:material_instances组件时必须同时包含这两个组件。

自定义方块组件

版本适用性警告

请读者注意:自定义方块组件仍然只适用于国际版,并需要使用 ScriptAPI 定义其功能。

  • 1.21.90格式版本开始,自定义方块组件采用 V2 版本,不再使用minecraft:custom_components来指定自定义组件,而是使用类似于其他原版组件的写法,并可以在组件内部传入参数。例如:

    "components": {
    "test:execute_command_on_break": {
    "command": "say 1"
    }
    }
  • 因此,minecraft:custom_components组件已被弃用。

方块面剔除

  • 现在允许在资源包内通过block_culling文件夹指定面剔除规则,并能够通过minecraft:geometry组件的culling_layer参数进行方块面剔除。

方块资源包定义

  • blocks.json引入了material_instances_exponent以定义方块的环境光遮挡指数,并为损坏的brightness_gamma提供替代解决方案。

实体

实体组件

  • 在格式版本1.21.60开放了组件minecraft:renders_when_invisible,以保证实体在不可见(例如隐身)后仍然渲染。
  • 在格式版本1.21.60开放了组件minecraft:breedable的诸多属性,以使得子代实体可以继承父代的属性。
  • 在格式版本1.21.60开放了组件minecraft:looked_atmin_looked_at_duration属性,以使得子代实体可以继承父代的属性。
  • 一些使用效果持续时间的组件现在可以被设置为infinite
  • 在格式版本1.21.70开放了组件minecraft:is_collidable,以使得实体拥有不可穿过的碰撞箱(类似于船、快乐恶魂)。
  • 在格式版本1.21.70开放了组件minecraft:entity_sensor的 2 个参数y_offsetfind_players_only
  • 在格式版本1.21.70开放了组件minecraft:body_rotation_axis_aligned,以使得实体根据当前朝向自动旋转。
  • 在格式版本1.21.80开放了组件minecraft:rideable的 5 个参数dismount_modeon_rider_enter_eventon_rider_exit_event,在seats参数下开放了 2 个参数third_person_camera_radiuscamera_relax_distance_smoothing
  • 在格式版本1.21.80更新了组件minecraft:leashablepreset属性,设置拴住实体的预设。
  • 在格式版本1.21.80开放了组件minecraft:interact的参数drop_item_y_offset,以定义丢弃物品时的 y 轴偏移。
  • 在格式版本1.21.90开放了组件minecraft:remove_in_peaceful,以使得实体在和平难度下消失。
  • 在格式版本1.21.90开放了组件minecraft:leashable_to,以使得玩家可以将自己正拴住的实体拴在该实体上。
  • 在格式版本1.21.90开放了组件minecraft:input_air_controlled,以使得玩家可以控制可骑乘飞行实体。
  • 在格式版本1.21.90开放了组件minecraft:body_rotation_always_follow_head,以使得实体始终使自己的身体的旋转值对齐头部。

实体过滤器

  • 加入了新的实体过滤器home_distance,以检查实体与其原点的距离,需要minecraft:home组件。
  • 加入了新的实体过滤器is_bound_to_creaking_heart,以检查生成嘎枝的嘎枝之心是否存在。
  • 加入了新的实体过滤器has_equipment_tag,以检查实体是否装备了特定物品标签的物品。
  • 加入了新的实体过滤器is_riding_self,以检查实体是否被骑乘。
  • 加入了新的实体过滤器is_vehicle_family,以检查实体是否正骑乘特定家族的实体。

实体事件

  • 加入了新的实体事件stop_movement,使实体停止运动。可以指定stop_vertical_movementstop_horizontal_movement分别控制实体停止竖直方向和水平方向的运动。
  • 加入了新的实体事件set_home_position,设置实体的原点位置为当前位置。需要minecraft:home组件。
  • 加入了新的实体事件first_valid,选定第一个符合条件的过滤器并执行。

实体音效

  • sounds.json添加了可根据 Molang 数值读取特定变种音效的功能。可以在sounds 数据类型图标sounds - key 数据类型图标key中指定 Molang,在map 数据类型图标map中根据读取 Molang 的值使用音效变种。例如:

    {
    "entity_sounds": {
    "entities": {
    "test_mob": {
    "volume": 1.0,
    "pitch": 1.0,
    "events": {
    "ambient": "mob.test_mob.ambient",
    "death": "mob.test_mob.death",
    "step": { "sound": "mob.test_mob.step", "volume": 0.8, "pitch": 1.0 },
    "attack": "mob.test_mob.attack"
    },
    "variants": {
    "key": "query.property('minecraft:emotional_state')",
    "map": {
    "neutral": {
    "volume": 1.0,
    "pitch": 1.0,
    "events": { "death": "mob.test_mob.death.netural" }
    },
    "angry": {
    "volume": 1.0,
    "pitch": 1.0,
    "events": { "death": "mob.test_mob.death.angry", "ambient": "mob.test_mob.ambient.angry" }
    }
    }
    }
    }
    }
    }
    }

Molang

ScriptAPI(低于2.0.0版本)

SAPI 在从 1.21.60 到 1.21.90 的过程中,@minecraft/server的版本从1.16.0升级至2.0.0@minecraft/server-ui的版本从1.3.0升级至2.0.0。需要注意:升级到2.0.0的脚本运行底层机制发生了变化,因此,贸然从旧版本升级到新版本的脚本可能会出现运行问题,请您逐步进行适配。

以下为2.0.0之前的版本中的功能变化:

系统

  • 开放了System.sendScriptEvent()方法,以向脚本系统以服务器的名义发送脚本事件。

世界

  • 难度
    • 开放了Difficulty枚举。
    • 开放了World.getDifficulty()方法和World.setDifficulty()方法,以获取或设置玩家的难度。
  • 世界后事件
    • 输入模式改变事件:开放了PlayerInputModeChangeAfterEvent类、PlayerInputModeChangeAfterEventSignal类和WorldAfterEvents.playerInputModeChange属性,可监听玩家输入模式的变更。
    • 玩家输入事件:开放了PlayerButtonInputAfterEvent类、PlayerButtonInputAfterEventSignal类和WorldAfterEvents.PlayerButtonInput属性,可监听玩家输入。目前,可用于监听玩家是否按下潜行或跳跃按钮。
  • 结构
    • 开放了StructureManager.placeJigsaw()StructureManager.placeJigsawStructure()方法,以放置拼图和拼图结构。

维度

  • 开放了Dimension.placeFeature()Dimension.placeFeatureRule()方法,以放置地物。

方块

  • 与水等流体相关的接口
    • 开放了Block.isWaterlogged()方法和BlockPermutation.setWaterlogged()方法,以指定方块是否含水。
    • 开放了Block.canBeDestroyedByLiquidSpread()BlockPermutation.canBeDestroyedByLiquidSpread()方法,获取方块是否在接触水后被破坏。
    • 开放了Block.canContainLiquid()方法和BlockPermutation.canContainLiquid()方法,获取方块是否可以含水。
    • 开放了Block.isLiquidBlocking()方法和BlockPermutation.isLiquidBlocking()方法,获取方块是否会阻挡水的流动。
    • 开放了Block.liquidCanFlowFromDirection()方法和BlockPermutation.liquidCanFlowFromDirection()方法,获取水是否可以从给定方向流入此方块,或是否可以用水桶倒入此方块后从给定方向流出。
    • 开放了Block.liquidSpreadCausesSpawn()方法和BlockPermutation.liquidSpreadCausesSpawn()方法,获取方块接触水后是否会生成自身的掉落物。
    • 开放了LiquidType枚举。
  • 1.18.0版本开始,以下方法将使用泛型参数而非通用参数,这有助于编辑器的自动补全更好地计算。
    需注意这对自定义方块的适配不佳。如果你的脚本在更新到此版本后出现自动补全或 TypeScript 报错问题,可以使用// @ts-ignore忽略这些问题。
    • Block.getComponent()方法返回BlockComponentReturnType<T> | undefined泛型而非通用的BlockComponent
    • Block.getState()方法使用minecraftvanilladata.BlockStateSuperset[T] | undefined泛型参数而非通用的boolean | number | string
    • Block.matches()方法使用BlockStateArg<T>泛型参数而非通用的Record<string, boolean | number | string>
    • Block.resolve()方法使用BlockStateArg<T>泛型参数而非通用的Record<string, boolean | number | string>
    • Block.withState()方法使用minecraftvanilladata.BlockStateSuperset[T]泛型参数而非通用的boolean | number | string

实体

  • 1.18.0版本开始,以下方法将使用泛型参数而非通用参数,这有助于编辑器的自动补全更好地计算。
    • Entity.getComponent()方法返回EntityComponentReturnType<T> | undefined泛型而非通用的EntityComponent

玩家

  • 开放了Player.spawnParticle()方法,以生成仅对该玩家可见的粒子。
  • 玩家权限:现在InputPermissionCategory枚举支持更多值,开放了PlayerInputPermissions.isPermissionCategoryEnabled()方法和PlayerInputPermissions.setPermissionCategory()方法以获取和设置玩家权限状态。
  • 相机:开放了CameraTargetOptions接口。
  • 玩家输入
    • 开放了InputInfo类、InputMode枚举和Player.inputInfo属性,以获取玩家的输入操作信息。
    • 开放了ButtonState枚举、InputButton枚举。
  • 客户端实体属性覆写
    • 开放了Player.setPropertyOverrideForEntity()方法、Player.removePropertyOverrideForEntity()方法、Player.clearPropertyOverridesForEntity()方法,以覆写玩家客户端层面观察到特定实体的实体属性。注意必须指定同步到客户端(client_synctrue)的实体属性。

物品

  • 物品组件
    • 开放了在ItemCompostableComponent类,以获取物品的堆肥相关属性。
  • 1.18.0版本开始,以下方法将使用泛型参数而非通用参数,这有助于编辑器的自动补全更好地计算。
    • ItemStack.getComponent()方法返回ItemComponentReturnType<T> | undefined泛型而非通用的ItemComponent

ScriptAPI(2.0.0版本)

SAPI 在从 1.21.60 到 1.21.90 的过程中,@minecraft/server的版本从1.16.0升级至2.0.0@minecraft/server-ui的版本从1.3.0升级至2.0.0。需要注意:升级到2.0.0的脚本运行底层机制发生了变化,因此,贸然从旧版本升级到新版本的脚本可能会出现运行问题,请您逐步进行适配。

2.0.0版本引入了早期执行(Early-Execution) 机制,因为在世界完全加载完毕之前,多数功能还不能正常执行,在世界加载完毕之前贸然执行某些代码可能出现问题。在引入了早期执行机制之后,只有少量内容可以在早期执行期间执行,例如监听某些事件、运行循环代码。例如,在2.0.0版本之前,这段代码可以正常执行:

import { world } from "@minecraft/server";

world.getPlayers().forEach(player => {
player.sendMessage(`Hello, ${player.name}!`);
});

2.0.0版本后,早期执行阶段不能调用World.getPlayers()方法,这会导致报错。作为替代,开发者可以在世界加载后事件WorldLoadAfterEvent中执行代码:

import { world } from "@minecraft/server";

world.afterEvents.worldLoad.subscribe(event => {
world.getPlayers().forEach(player => {
player.sendMessage(`Hello, ${player.name}!`);
});
});

总体而言,2.0.0版本的脚本在世界加载时的变化如下图所示

2.0.0 版本的脚本在世界加载时的变化,图源来自脚本 V2 概述 - Microsoft Learn

2.0.0 版本的脚本在世界加载时的变化,图源来自脚本 V2 概述 - Microsoft Learn

以下为2.0.0的版本中的功能变化:

系统

  • 开放了System.isEditorWorld属性,以获取是否为编辑器世界。
  • 系统前事件:开放了系统前事件StartupEvent类和System.beforeEvent属性,在游戏引擎发生某些事件前执行。
    • 启动事件:将WorldInitializeBeforeEvent类、WorldInitializeBeforeEventSignal类和WorldBeforeEvents.worldInitialize属性分别重命名为StartupEvent类、StartupBeforeEventSignal类和SystemBeforeEvents.startUp属性,可在世界启动之前执行代码。
    • 关闭事件:开放了ShutdownEvent类、ShutdownBeforeEventSignal类和SystemBeforeEvents.shutdown属性,可在世界关闭之前执行代码。
  • 开放了TicksPerDay常量为24000

世界

  • 世界前事件
    • 玩家对方块使用物品事件:移除此事件,同时移除了ItemUseOnBeforeEvent类、ItemUseOnBeforeEventSignal类和WorldBeforeEvents.itemUseOn属性,因为该事件与玩家与方块交互事件PlayerInteractWithBlockBeforeEventSignal功能重复。开发者应使用WorldBeforeEvents.playerInteractWithBlock代替之。
  • 世界后事件
    • 按钮按下事件:移除了IButtonPushAfterEventSignal类,因为这个类是多余的,事实上该事件在使用ButtonPushAfterEventSignal类。
    • 拉杆拉下事件:移除了ILeverActionAfterEventSignal类,因为这个类是多余的,事实上该事件在使用LeverActionAfterEventSignal类。
    • 玩家进入事件:移除了IPlayerJoinAfterEventSignal类,因为这个类是多余的,事实上该事件在使用PlayerJoinAfterEventSignal类。
    • 玩家离开事件:移除了IPlayerLeaveAfterEventSignal类,因为这个类是多余的,事实上该事件在使用PlayerLeaveAfterEventSignal类。
    • 玩家生成事件:移除了IPlayerSpawnAfterEventSignal类,因为这个类是多余的,事实上该事件在使用PlayerSpawnAfterEventSignal类。
    • 玩家对方块使用物品事件:移除此事件,同时移除了ItemUseOnAfterEvent类、ItemUseOnAfterEventSignal类和WorldAfterEvents.itemUseOn属性,因为该事件与玩家与方块交互事件PlayerInteractWithBlockAfterEventSignal功能重复。开发者应使用WorldAfterEvents.playerInteractWithBlock代替之。
    • 世界加载事件:将WorldInitializeAfterEvent类、WorldInitializeAfterEventSignal类和WorldAfterEvents.worldInitialize属性分别重命名为WorldLoadAfterEvent类、WorldLoadAfterEventSignal类和WorldAfterEvents.worldLoad属性。
  • 移除了World.playSound()方法,开发者应使用Dimension.playSound()代替。
  • 通用
    • 对多个类加入了isValid属性,以检查其中的数据是否有效。这些类包括:
      • Block类。
      • Camera类。
      • Component类,包括其子类EntityComponentBlockComponentItemComponent和子类的子类均有效。
      • Container类。
      • ContainerSlot类。
      • Effect类。
      • Entity类,包括其子类Player类。
      • ScoreboardIdentity类。
      • ScoreboardObjective类。
      • ScreenDisplay类。
      • Structure类。
    • 开放了CustomComponentParameters类,返回自定义组件(包括物品自定义组件和方块自定义组件)的参数值。
  • 开放了TintMethod枚举。

维度

  • 移除了Dimension.runCommandAsync()方法,因为事实上这个方法从来没有等待命令执行完毕才进行异步操作。开发者应使用Dimension.runCommand()取代。
  • 开放了Dimension.getBlockAbove()Dimension.getBlockBelow()方法,以获取特定位置上方或下方的方块。
  • 更新了Dimension.spawnEntity(),更改了identifier参数的类型并提供了新的options参数。

方块

  • 方块组件
    • 开放了BlockMapColorComponent,以获取方块在地图中显示颜色的相关属性。
  • 自定义方块组件
    • BlockComponentPlayerDestroyEvent重命名为BlockComponentPlayerBreakEvent
    • 开放了BlockCustomComponentInstance类,当使用Block.getComponent()获取自定义组件时返回该类。
    • BlockFluidContainerComponent中的typeId只读属性由minecraft:fluidContainer重命名为minecraft:fluid_container

实体

  • 更新了Entity.applyKnockback()方法,合并了参数directionX: number, directionZ: number, horizontalStrength: numberhorizontalForce: VectorXZ以确定其水平方向的击退强度。
  • 现在Entity.hasComponent()方法、Entity.getComponent()方法和Entity.getComponents()方法可能会抛出错误。
  • 开放了Entity.loolAt()方法,使实体面向特定位置。
  • 移除了Entity.runCommandAsync()方法,因为事实上这个方法从来没有等待命令执行完毕才进行异步操作。开发者应使用Entity.runCommand()取代。
  • 移除了EntityDamageCause枚举中的suicide属性。
  • 实体组件
    • 现在调用EntityComponent.entity属性可能会因实体无效而抛出错误。其子类的所有属性现在都可能会因实体无效而抛出错误。
    • 现在EntityFrictionModifierComponent类、EntityMarkVariantComponent类、EntityPushThroughComponent类、EntityScaleComponent类和EntitySkinIdComponent类的value是只读属性,开发者现在不应当再寻求通过脚本更改这些值。
    • 移除了EntityGroundOffsetComponent组件。

玩家

  • 开放了GraphicsMode类和Player.graphicsMode属性,以获取玩家当前使用的画质设置。
  • GameMode枚举中的属性全部重命名为首字母大写。
  • 现在PlayAnimationOptions接口的players属性返回Player[],而非string[]了。
  • 相机
    • 移除了CameraDefaultOptions接口。
    • CameraEaseOptions接口重命名为EaseOptions接口。
    • 更改了Camera.setCamera()的类型要求。
    • 开放了Camera.setDefaultCamera()方法。
  • 屏幕显示
    • 开放了ScreenDisplay.resetHudElementsVisibility()方法,以重置玩家的 HUD 可见性。

物品

  • 自定义物品组件
    • 开放了ItemCustomComponentInstance类,当使用ItemStack.getComponent()获取自定义组件时返回该类。

脚本 UI

脚本 UI 的动作表单 UI 和模态表单 UI 现在都支持添加大标题、分割线和普通文本了,并且模态表单 UI 的元素还支持添加新的提示框。

新版脚本 UI 演示,包括大标题和分割线,图片来自 xKingDark(取自 JaylyMC 的 SAPI 文档)

新版脚本 UI 演示,包括大标题和分割线,图片来自 xKingDark(取自 JaylyMC 的 SAPI 文档)

  • 动作表单 UI
    • 开放了ActionFormUI.divider()方法,以在 UI 内添加分割线。
    • 开放了ActionFormUI.header()方法,以在 UI 内添加一级标题。
    • 开放了ActionFormUI.label()方法,以在 UI 内添加文本。
  • 模态表单 UI
    • 开放了ModalFormUI.divider()方法,以在 UI 内添加分割线。
    • 开放了ModalFormUI.header()方法,以在 UI 内添加一级标题。
    • 开放了ModalFormUI.label()方法,以在 UI 内添加文本。
    • 更新了ModalFormUI.dropdown()方法并开放了ModalFormDataDropdownOptions接口。
      • 将参数options更名为items
      • 添加了新参数dropdownOptions,把原来的参数defaultValueIndex移动到了该选项中,并且支持通过tooltip添加提示框。
    • 更新了ModalFormUI.slider()方法并开放了ModalFormDataSliderOptions接口。
      • 添加了新参数sliderOptions,把原来的参数valueStepdefaultValue移动到了该选项中,并且支持通过tooltip添加提示框。
    • 更新了ModalFormUI.textField()方法并开放了ModalFormDataTextFieldOptions接口。
      • 添加了新参数textFieldOptions,把原来的参数defaultValue移动到了该选项中,并且支持通过tooltip添加提示框。
    • 更新了ModalFormUI.toggle()方法并开放了ModalFormDataToggleOptions接口。
      • 添加了新参数toggleOptions,把原来的参数defaultValue移动到了该选项中,并且支持通过tooltip添加提示框。

参考文档