跳到主要内容

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

· 阅读需 13 分钟

首先也是恭喜我们的中国版终于跟上了国际版的步伐,很可能是自从 2017 年代理以来首次在次版本上和国际版保持一致。能看到中国版变得越来越好,我也很开心,祝贺祝贺!

现在摆在我们开发者面前的一个新问题就出现了:我们都能用什么新东西了呢?

首先,在 ModAPI 方面,我这里不再给出过多解释,直接看网易官方给出的文档即可。这里给一个链接:3.4 更新信息

那么在国际版的版本号上,这次是进了 4 个国际版的小版本号:1.20.60、1.20.70、1.20.80 和 1.21.0。更新内容上从狼铠到试炼密室,内容还是很多的,但本文的重点并不在这些普通的游戏内容上,主要是对国际版新支持的开发内容进行梳理。当然,也包括 SAPI,虽然中国版不能用 SAPI,但是对于像我这种双端开发者来说,了解 SAPI 都能做到哪些功能也还是有意义的嘛。


以下部分内容摘抄自中文 Minecraft Wiki 和微软文档

命令方面

  • 新增对/hud的支持。本文档也已经完成了相关教程的编写,感兴趣的读者可以在这里查阅

  • 新增对has_property目标选择器参数的支持。这个参数配合自定义附加包使用会相当有用,纯原版嘛……emmm,聊胜于无吧,哈哈。

  • ID 拆分,这是保留节目了。总之就是爆拆巨拆,大拆特拆

    物品或方块旧 ID新 ID
    海龟鳞甲scuteturtle_scute
    草方块grassgrass_block
    树叶leavesleaves2oak_leaves​spruce_leaves​birch_leaves​jungle_leavesacacia_leaves​dark_oak_leaves
    木头woodoak_wood​spruce_wood​birch_wood​jungle_wood​acacia_wood​dark_oak_wood​stripped_oak_wood​stripped_spruce_wood​stripped_birch_wood​stripped_jungle_wood​stripped_acacia_wood、​stripped_dark_oak_wood
    木台阶wooden_slaboak_slab​spruce_slab​birch_slab​jungle_slab​acacia_slab​dark_oak_slab
    双层木台阶double_wooden_slaboak_double_slab​spruce_double_slab​birch_double_slab​jungle_double_slab​acacia_double_slab​dark_oak_double_slab
    珊瑚扇coral_fantube_coral_fan​brain_coral_fan​bubble_coral_fan​fire_coral_fan​horn_coral_fan
    失活的珊瑚扇coral_fan_deaddead_tube_coral_fandead_​brain_coral_fandead_​bubble_coral_fandead_​fire_coral_fandead_​horn_coral_fan
    red_flowerpoppy​blue_orchid​allium​azure_bluet​red_tulip​orange_tulip​white_tulip​pink_tulip​oxeye_daisy​cornflower​lily_of_the_valley
    树苗saplingoak_sapling​spruce_sapling​birch_sapling​jungle_sapling​acacia_sapling​dark_oak_sapling
    珊瑚块coral_blocktube_coral_block​brain_coral_block​bubble_coral_block​fire_coral_block​horn_coral_blockdead_tube_coral_blockdead_​brain_coral_blockdead_​bubble_coral_blockdead_​fire_coral_blockdead_​horn_coral_block
    草和蕨tallgrassshort_grass​fern
    石台阶等stone_block_slabsmooth_stone_slab​sandstone_slab​petrified_oak_slab​cobblestone_slab​brick_slab​stone_brick_slab​quartz_slab​nether_brick_slab
    高草丛和大型花等double_plantsunflower​lilac​tall_grass​large_fern​rose_bush​peony
  • 将伤害类型suicide重命名为self_destruct,这对于部分附加包方面的需求也是适用的。

  • /titleraw/tellraw现在支持渲染输入键位字形。

    • 备注:键位字形(Input Key Glyphs)是预览版 1.20.60.25加入的一种可以渲染玩家设置的键位的代码。例如,当玩家在 Windows 游玩时,若其前进键设置为W,则输入:_input_key.forward:就会返回W。有以下几种键位字形受到支持:
      • :_input_key.forward:
      • :_input_key.back:
      • :_input_key.left:
      • :_input_key.right:
      • :_input_key.inventory:
      • :_input_key.use:
      • :_input_key.chat:
      • :_input_key.attack:
      • :_input_key.sprint:
  • 随着 1.20.80 和 1.21 的更新,新增了一些新物品、新方块、新状态效果等可用于命令的 ID。详情请见相关 Wiki 页面,这里不再赘述。

  • 新增游戏规则:

    • tntExplosionDropDecay:用于控制 TNT 爆炸后是否会 100% 掉落。
    • showDaysPlayed:在左上角显示游玩天数(游戏内天数)。
  • 新增粒子:breeze_ground_particle​infested_ambient​infested_emitter​ominous_spawning_particle​oozing_ambient​oozing_emitter​raid_omen_ambient​raid_omen_emitter​small_soul_fire_flame​trial_omen_ambient​trial_omen_emitter​trial_spawner_detection​trial_spawner_detection_ominous​smash_ground_particle​smash_ground_particle_center​vault_connection_particle​weaving_ambient​weaving_emitter​white_smoke_particle​wind_charged_emitter​wind_charged_ambient​wind_explosion_emitter。至于有什么效果,请读者自行尝试吧。

数据驱动实体

组件

  • minecraft:ageable
    • 加入了interact_filters字段,允许指定活动对象可以被喂食时的条件。
  • minecraft:damage_sensor
    • damage_modifier​damage_multiplier字段现在会在受击后伤害免疫计算过程中被考虑,以使被调整为低于或等于实体在免疫时间受到的最高伤害的伤害会被正确忽略。
  • minecraft:entity_sensor
    • format_version1.20.60或更高版本下支持多个“子检测器”:
      • event​require_all​minimum_count​maximum_count​range​event_filter现在是每个子检测器可单独配置的字段。
      • 子检测器拥有新的字段cooldown,用以定义每个子检测器检测实体的频率。
    • format_version1.20.70或更高版本下的range字段现在支持两个值,第一个值控制水平范围,第二个值控制垂直范围。
  • minecraft:interact
    • format_version1.20.60或更高版本下:
      • 现在支持vibration字段的entity_act附加值。
      • 加入了drop_item_slot字段,以允许指定物品栏槽位以移除和丢弃其中的物品。
    • format_version1.20.80或更高版本下:
      • equip_item_slot​drop_item_slot字段现在支持盔甲槽位(slot.armor.head​slot.armor.chest​slot.armor.legs​slot.armor.feet)和物品栏槽位(正数字符串,例如"1"):
      • 加入了repair_entity_item字段,允许修复实体物品栏或盔甲槽中的物品。
  • 新增minecraft:body_rotation_blocked组件,用于阻止生物在视觉上转身以与自身朝向相匹配。

事件

  • queue_command正式可用!终于不需要用动画控制器转一下了(泣
    • 用于直接使实体执行命令的事件。
    • 通过queue_command运行的命令可能会推迟至下一刻。
    • 若在命令运行前移除实体,则不会执行该命令。
  • emit_vibration
    • 允许实体以自身为振动源产生振动。

过滤器

  • is_panicking:检查实体是否在执行minecraft:behavior.panic组件。
  • is_sprinting:检查实体是否在疾跑。
  • was_last_hurt_by:检查对象是否为攻击过该实体的最后一个玩家或生物。
  • is_sitting:检查实体是否处于坐下状态。
  • has_damaged_equipment:检查实体的指定槽位中是否存在特定的已损坏装备。

生成规则

  • minecraft:spawns_on_block_filterminecraft:spawns_on_block_prevented_filterminecraft:spawns_above_block_filter现在支持方块描述符。

模型

  • 支持格式版本为1.21.0及更高版本的minecraft:geometry,更新了实体几何结构以支持 UV 旋转。允许在应用于实体的立方体面前以 90 度的增量旋转指定 UV 矩形。

Molang

开放的 Molang 还挺多的哦,有你需要的吗?

  • 以下 Molang 走出实验性玩法:
    • 方块查询 Molang:query.relative_block_has_any_tagquery.relative_block_has_all_tagsquery.block_neighbor_has_any_tagquery.block_neighbor_has_all_tagsquery.block_has_any_tagquery.block_has_all_tags
    • 骨骼:query.bone_orientation_trsquery.bone_orientation_matrix
    • 物品冷却:query.is_cooldown_typequery.cooldown_timequery.cooldown_time_remaining
    • 记分板:query.scoreboard(仅限服务端)。
    • 坐骑 & 乘客:query.rider_body_x_rotationquery.rider_body_y_rotationquery.rider_head_x_rotationquery.rider_head_y_rotationquery.ride_body_x_rotationquery.ride_body_y_rotationquery.ride_head_x_rotationquery.ride_head_y_rotationquery.is_attachedquery.has_player_rider
  • 新增query.armor_slot_damage以返回指定槽位中的盔甲物品的损坏值。

数据驱动物品(国际版)

没什么新组件,只有一些更改而已。

  • 自定义盔甲附着物现在可以使用原版纹饰作为纹饰,经过修改的原版图案现在可以应用于自定义盔甲附着物和物品。
    • 原版纹饰的纹理可通过attachable组件覆盖。
    • 原版纹饰可通过attachable组件应用于使用自定义盔甲材料的盔甲。
    • 经过修改(以适应使用新的盔甲材料的盔甲)的原版纹饰图案可通过attachable组件应用。
    • 自定义盔甲上的盔甲纹饰图案要求附着物和物品的格式版本为1.20.60+

数据驱动方块(国际版)

同样,没什么新组件,只有一些更改而已。

组件

  • minecraft:geometry
    • 对于format_version1.20.60或更高版本,加入了minecraft:geometry.full_block标识符。
    • 对于format_version1.21.0或更高版本,更新了方块几何结构以支持 UV 旋转,且允许在应用于方块面前以 90 度的增量旋转指定 UV 矩形。
  • minecraft:transformation
    • 加入了轴心点缩放和旋转。
  • minecraft:crafting_table
    • 在带有该组件的自定义方块的crafting_tags字段中,使用自定义标签的方块支持自定义可解锁配方。

配方

  • 为有序配方加入了assume_symmetry 数据类型图标assume_symmetry属性,以允许对称的有序配方使用不同的输出方式。

生物群系

  • 对于format_version1.20.60或更高版本的文件,现在 JSON 文件中的生物群系标签在tags数组中的minecraft:tags组件下指定,而不是作为松散 JSON 对象。

ScriptAPI

备注:直到 1.21.0,@minecraft/server可用的最新版本为1.11.0。从 1.20.50 的1.7.0到 1.21.0 的1.11.0,可以看到进步是不小的,开放了众多的事件、组件和接口,其中更是包括自定义附魔、方块 ID 等的获取方法,实用性可以说得到了进一步的增强。

小吐槽:ojng的更新日志是真的乱啊,真就学新三国编剧一样左脑打右脑是吧……

  • 以下 API 开放至1.8.0
    • 爆炸事件:ExplosionAfterEventExplosionAfterEventSignalExplosionBeforeEventExplosionBeforeEventSignal
    • 状态效果事件:EffectAddBeforeEventEffectAddBeforeEventSignalEffectAddAfterEventEffectAddAfterEventSignal
    • 数驱实体事件:DataDrivenEntityTriggerAfterEventDataDrivenEntityTriggerAfterEventSignalEntityDataDrivenTriggerEventOptionsDefinitionModifierWorldAfterEvents.dataDrivenEntityTrigger
    • 方块:BlockTypeBlock.getTagsBlock.hasTagFluidTypeBlockPermutation.withStateBlockPermutation.getState
  • 以下 API 开放至1.9.0
    • 维度:Dimension.createExplosionExplosionOptionsDimensionTypeDimensionTypes
    • 方块:BlockPermutation.matchesBlockPermutation.getAllStatesBlockStateTypeBlockStatesDyeColorSignSide
    • 活塞事件:BlockPistonStatePistonActivateAfterEventPistonActivateAfterEventSignal
    • 方块组件:BlockSignComponentBlockPistonComponent
    • 实体:Entity.setOnFireEntity.extinguishFire
    • 实体组件:EntityOnFireComponentEntityEquippableComponent.getEquipmentSlot
    • 物品堆叠的动态属性:ItemStack.clearDynamicPropertiesItemStack.getDynamicPropertyItemStack.getDynamicPropertyIdsItemStack.getDynamicPropertyTotalByteCountItemStack.setDynamicProperty
    • 物品组件:ItemFoodComponentItemDurabilityComponent
    • 容器:ContainerSlotInvalidContainerSlotErrorContainer.getSlot
    • 状态效果:EffectTypeEffectTypes
    • 原始 JSON 文本:RawText
    • 世界事件:WorldAfterEvents.effectAddWorldBeforeEvents.effectAddWorldAfterEvents.explosionWorldBeforeEvents.explosion
      • 备注:这里是没有写错的,因为 1.8.0 版本中的脚本只开放了对应的事件,但是并没有开放对应爆炸事件和状态效果事件的方法,好诡异的更新
  • 以下 API 开放至1.10.0
    • 组件枚举:BlockComponentTypesEntityComponentTypesItemComponentTypes
    • 方块:Block.getItemStackBlockPermutation.getItemStack
    • 实体:EntityTypeEntityTypes
      • 玩家:Player.playMusicPlayer.queueMusicPlayer.stopMusic
    • 实体组件:EntityProjectileComponentEntityTypeFamilyComponentEntityComponent.entity
    • 物品组件:ItemCooldownComponent
    • 世界事件:WorldAfterEvents.worldInitializeWorldInitializeAfterEventWorldInitializeAfterEventSignal
    • 世界(结构管理器):全面开放结构管理器World.structureManager,包括:
      • StructureManager.createEmptyStructureManager.deleteStructureManager.getStructureManager.place
      • Structure.idStructure.sizeStructure.getBlockPermutationStructure.getIsWaterloggedStructure.isValid
      • StructureSaveModeStructureRotationStructureAnimationModeStructureMirrorAxisInvalidStructureErrorStructureCreateOptionsStructurePlaceOptions
  • 以下 API 开放至1.11.0
    • 维度:Dimension.playSound
    • 物品组件:ItemEnchantableComponent
    • 物品附魔:Enchantment。包括:Enchantment接口、EnchantmentSlot枚举、EnchantmentType类、EnchantmentTypes类。
    • 玩家:Player.startItemCooldownPlayer.getItemCooldownPlayer.getGameModePlayer.setGameModePlayer.selectedSlotIndex
    • 实体组件:
      • 寻路组件:EntityNavigationComponentEntityNavigationClimbComponentEntityNavigationFloatComponentEntityNavigationFlyComponentEntityNavigationGenericComponentEntityNavigationHoverComponentEntityNavigationWalkComponent
      • 驯服组件:EntityTameMountComponent.tame
      • 骑乘组件:EntityAddRiderComponentEntityRideableComponent
      • 颜色组件:EntityColorComponentEntityColor2ComponentPaletteColor枚举。
    • 实体:Seat
    • 方块:ListBlockVolumeBlockVolumeBaseBlockLocationIteratorBlock.setTypeBlockTypeBlockTypesBlock.type
    • 显示:ScreenDisplay.getHiddenHudElementsScreenDisplay.isForcedHiddenScreenDisplay.resetHudElementsScreenDisplay.setHudVisibilityScreenDisplay.hideAllExcept
    • HUD 元素:HudElements枚举、HudElementsCounts变量、HudVisibility枚举、HudVisibilityCounts变量
    • 游戏规则:GameRules枚举、world.gameRulesGameRuleChangeAfterEventGameRuleChangeAfterEventSignal
    • 世界事件:WeatherChangeBeforeEventWorldAfterEvents.gameRuleChangeworldBeforeEvents.playerGameModeChangeworldAfterEvents.playerGameModeChangePlayerGameModeChangeAfterEventPlayerGameModeChangeAfterEventSignalPlayerGameModeChangeBeforeEventPlayerGameModeChangeBeforeEventSignal
    • 结构管理器:Structure.saveToWorldStructure.saveAsStructureManager.createFromWorldStructureManager.getWorldStructureIds
    • 其他:各接口的volume参数。
  • ScoreboardaddObjective中的显示名称参数更改为可选参数。
  • ItemReleaseUseAfterEvent中的itemStack更改为可选参数。
  • EntityMountTamingComponent重命名为EntityTameMountComponent,并将其中的方法setTamed重命名为tame
  • Player类中,getItemCooldownstartItemCooldown方法的itemCategory参数重命名为cooldownCategory
  • EntityTameableComponent类:
    • getTameItems的返回类型更改为ItemStack[]
    • tame更改为带动一个玩家。
    • 加入了tamedToPlayer​tamedToPlayerId​isTamed方法。