关于网易更新到 1.21.0 的开发内容更新汇总
首先也是恭喜我们的中国版终于跟上了国际版的步伐,很可能是自从 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 海龟鳞甲 scute
turtle_scute
草方块 grass
grass_block
树叶 leaves
、leaves2
oak_leaves
、spruce_leaves
、birch_leaves
、jungle_leaves
、acacia_leaves
、dark_oak_leaves
木头 wood
oak_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_slab
oak_slab
、spruce_slab
、birch_slab
、jungle_slab
、acacia_slab
、dark_oak_slab
双层木台阶 double_wooden_slab
oak_double_slab
、spruce_double_slab
、birch_double_slab
、jungle_double_slab
、acacia_double_slab
、dark_oak_double_slab
珊瑚扇 coral_fan
tube_coral_fan
、brain_coral_fan
、bubble_coral_fan
、fire_coral_fan
、horn_coral_fan
失活的珊瑚扇 coral_fan_dead
dead_tube_coral_fan
、dead_brain_coral_fan
、dead_bubble_coral_fan
、dead_fire_coral_fan
、dead_horn_coral_fan
花 red_flower
poppy
、blue_orchid
、allium
、azure_bluet
、red_tulip
、orange_tulip
、white_tulip
、pink_tulip
、oxeye_daisy
、cornflower
、lily_of_the_valley
树苗 sapling
oak_sapling
、spruce_sapling
、birch_sapling
、jungle_sapling
、acacia_sapling
、dark_oak_sapling
珊瑚块 coral_block
tube_coral_block
、brain_coral_block
、bubble_coral_block
、fire_coral_block
、horn_coral_block
、dead_tube_coral_block
、dead_brain_coral_block
、dead_bubble_coral_block
、dead_fire_coral_block
、dead_horn_coral_block
草和蕨 tallgrass
short_grass
、fern
石台阶等 stone_block_slab
smooth_stone_slab
、sandstone_slab
、petrified_oak_slab
、cobblestone_slab
、brick_slab
、stone_brick_slab
、quartz_slab
、nether_brick_slab
高草丛和大型花等 double_plant
sunflower
、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:
- 备注:键位字形(Input Key Glyphs)是预览版 1.20.60.25加入的一种可以渲染玩家设置的键位的代码。例如,当玩家在 Windows 游玩时,若其前进键设置为W,则输入
-
随着 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_version
为1.20.60
或更高版本下支持多个“子检测器”:event
、require_all
、minimum_count
、maximum_count
、range
和event_filter
现在是每个子检测器可单独配置的字段。- 子检测器拥有新的字段
cooldown
,用以定义每个子检测器检测实体的频率。
format_version
为1.20.70
或更高版本下的range
字段现在支持两个值,第一个值控制水平范围,第二个值控制垂直范围。
minecraft:interact
:format_version
为1.20.60
或更高版本下:- 现在支持
vibration
字段的entity_act
附加值。 - 加入了
drop_item_slot
字段,以允许指定物品栏槽位以移除和丢弃其中的物品。
- 现在支持
format_version
为1.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_filter
、minecraft:spawns_on_block_prevented_filter
、minecraft:spawns_above_block_filter
现在支持方块描述符。
模型
- 支持格式版本为
1.21.0
及更高版本的minecraft:geometry
,更新了实体几何结构以支持 UV 旋转。允许在应用于实体的立方体面前以 90 度的增量旋转指定 UV 矩形。
Molang
开放的 Molang 还挺多的哦,有你需要的吗?
- 以下 Molang 走出实验性玩法:
- 方块查询 Molang:
query.relative_block_has_any_tag
、query.relative_block_has_all_tags
、query.block_neighbor_has_any_tag
、query.block_neighbor_has_all_tags
、query.block_has_any_tag
、query.block_has_all_tags
。 - 骨骼:
query.bone_orientation_trs
、query.bone_orientation_matrix
。 - 物品冷却:
query.is_cooldown_type
、query.cooldown_time
、query.cooldown_time_remaining
。 - 记分板:
query.scoreboard
(仅限服务端)。 - 坐骑 & 乘客:
query.rider_body_x_rotation
、query.rider_body_y_rotation
、query.rider_head_x_rotation
、query.rider_head_y_rotation
、query.ride_body_x_rotation
、query.ride_body_y_rotation
、query.ride_head_x_rotation
、query.ride_head_y_rotation
、query.is_attached
、query.has_player_rider
。
- 方块查询 Molang:
- 新增
query.armor_slot_damage
以返回指定槽位中的盔甲物品的损坏值。
数据驱动物品(国际版)
没什么新组件,只有一些更改而已。
- 自定义盔甲附着物现在可以使用原版纹饰作为纹饰,经过修改的原版图案现在可以应用于自定义盔甲附着物和物品。
- 原版纹饰的纹理可通过
attachable
组件覆盖。 - 原版纹饰可通过
attachable
组件应用于使用自定义盔甲材料的盔甲。 - 经过修改(以适应使用新的盔甲材料的盔甲)的原版纹饰图案可通过
attachable
组件应用。 - 自定义盔甲上的盔甲纹饰图案要求附着物和物品的格式版本为
1.20.60+
。
- 原版纹饰的纹理可通过
数据驱动方块(国际版)
同样,没什么新组件,只有一些更改而已。
组件
minecraft:geometry
- 对于
format_version
为1.20.60
或更高版本,加入了minecraft:geometry.full_block
标识符。 - 对于
format_version
为1.21.0
或更高版本,更新了方块几何结构以支持 UV 旋转,且允许在应用于方块面前以 90 度的增量旋转指定 UV 矩形。
- 对于
minecraft:transformation
- 加入了轴心点缩放和旋转。
minecraft:crafting_table
- 在带有该组件的自定义方块的
crafting_tags
字段中,使用自定义标签的方块支持自定义可解锁配方。
- 在带有该组件的自定义方块的
配方
- 为有序配方加入了
assume_symmetry
属性,以允许对称的有序配方使用不同的输出方式。
生物群系
- 对于
format_version
为1.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
:- 爆炸事件:
ExplosionAfterEvent
、ExplosionAfterEventSignal
、ExplosionBeforeEvent
、ExplosionBeforeEventSignal
。 - 状态效果事件:
EffectAddBeforeEvent
、EffectAddBeforeEventSignal
、EffectAddAfterEvent
、EffectAddAfterEventSignal
。 - 数驱实体事件:
DataDrivenEntityTriggerAfterEvent
、DataDrivenEntityTriggerAfterEventSignal
、EntityDataDrivenTriggerEventOptions
、DefinitionModifier
、WorldAfterEvents.dataDrivenEntityTrigger
- 方块:
BlockType
、Block.getTags
、Block.hasTag
、FluidType
、BlockPermutation.withState
、BlockPermutation.getState
- 爆炸事件:
- 以下 API 开放至
1.9.0
:- 维度:
Dimension.createExplosion
、ExplosionOptions
、DimensionType
、DimensionTypes
。 - 方块:
BlockPermutation.matches
、BlockPermutation.getAllStates
、BlockStateType
、BlockStates
、DyeColor
、SignSide
。 - 活塞事件:
BlockPistonState
、PistonActivateAfterEvent
、PistonActivateAfterEventSignal
。 - 方块组件:
BlockSignComponent
、BlockPistonComponent
。 - 实体:
Entity.setOnFire
、Entity.extinguishFire
。 - 实体组件:
EntityOnFireComponent
、EntityEquippableComponent.getEquipmentSlot
- 物品堆叠的动态属性:
ItemStack.clearDynamicProperties
、ItemStack.getDynamicProperty
、ItemStack.getDynamicPropertyIds
、ItemStack.getDynamicPropertyTotalByteCount
、ItemStack.setDynamicProperty
- 物品组件:
ItemFoodComponent
、ItemDurabilityComponent
。 - 容器:
ContainerSlot
、InvalidContainerSlotError
、Container.getSlot
。 - 状态效果:
EffectType
、EffectTypes
。 - 原始 JSON 文本:
RawText
- 世界事件:
WorldAfterEvents.effectAdd
、WorldBeforeEvents.effectAdd
、WorldAfterEvents.explosion
、WorldBeforeEvents.explosion
。- 备注:这里是没有写错的,因为 1.8.0 版本中的脚本只开放了对应的事件,但是并没有开放对应爆炸事件和状态效果事件的方法,好诡异的更新。
- 维度:
- 以下 API 开放至
1.10.0
:- 组件枚举:
BlockComponentTypes
、EntityComponentTypes
、ItemComponentTypes
- 方块:
Block.getItemStack
、BlockPermutation.getItemStack
- 实体:
EntityType
、EntityTypes
- 玩家:
Player.playMusic
、Player.queueMusic
、Player.stopMusic
。
- 玩家:
- 实体组件:
EntityProjectileComponent
、EntityTypeFamilyComponent
、EntityComponent.entity
。 - 物品组件:
ItemCooldownComponent
- 世界事件:
WorldAfterEvents.worldInitialize
、WorldInitializeAfterEvent
、WorldInitializeAfterEventSignal
。 - 世界(结构管理器):全面开放结构管理器
World.structureManager
,包括:StructureManager.createEmpty
、StructureManager.delete
、StructureManager.get
、StructureManager.place
。Structure.id
、Structure.size
、Structure.getBlockPermutation
、Structure.getIsWaterlogged
、Structure.isValid
。StructureSaveMode
、StructureRotation
、StructureAnimationMode
、StructureMirrorAxis
、InvalidStructureError
、StructureCreateOptions
、StructurePlaceOptions
。
- 组件枚举:
- 以下 API 开放至
1.11.0
:- 维度:
Dimension.playSound
。 - 物品组件:
ItemEnchantableComponent
。 - 物品附魔:
Enchantment
。包括:Enchantment
接口、EnchantmentSlot
枚举、EnchantmentType
类、EnchantmentTypes
类。 - 玩家:
Player.startItemCooldown
、Player.getItemCooldown
、Player.getGameMode
、Player.setGameMode
、Player.selectedSlotIndex
。 - 实体组件:
- 寻路组件:
EntityNavigationComponent
、EntityNavigationClimbComponent
、EntityNavigationFloatComponent
、EntityNavigationFlyComponent
、EntityNavigationGenericComponent
、EntityNavigationHoverComponent
、EntityNavigationWalkComponent
。 - 驯服组件:
EntityTameMountComponent.tame
。 - 骑乘组件:
EntityAddRiderComponent
、EntityRideableComponent
。 - 颜色组件:
EntityColorComponent
、EntityColor2Component
、PaletteColor
枚举。
- 寻路组件:
- 实体:
Seat
- 方块:
ListBlockVolume
、BlockVolumeBase
、BlockLocationIterator
、Block.setType
、BlockType
、BlockTypes
、Block.type
。 - 显示:
ScreenDisplay.getHiddenHudElements
、ScreenDisplay.isForcedHidden
、ScreenDisplay.resetHudElements
、ScreenDisplay.setHudVisibility
、ScreenDisplay.hideAllExcept
。 - HUD 元素:
HudElements
枚举、HudElementsCounts
变量、HudVisibility
枚举、HudVisibilityCounts
变量 - 游戏规则:
GameRules
枚举、world.gameRules
、GameRuleChangeAfterEvent
、GameRuleChangeAfterEventSignal
- 世界事件:
WeatherChangeBeforeEvent
、WorldAfterEvents.gameRuleChange
、worldBeforeEvents.playerGameModeChange
、worldAfterEvents.playerGameModeChange
、PlayerGameModeChangeAfterEvent
、PlayerGameModeChangeAfterEventSignal
、PlayerGameModeChangeBeforeEvent
、PlayerGameModeChangeBeforeEventSignal
。 - 结构管理器:
Structure.saveToWorld
、Structure.saveAs
、StructureManager.createFromWorld
、StructureManager.getWorldStructureIds
- 其他:各接口的
volume
参数。
- 维度:
- 将
Scoreboard
的addObjective
中的显示名称参数更改为可选参数。 - 将
ItemReleaseUseAfterEvent
中的itemStack
更改为可选参数。 - 将
EntityMountTamingComponent
重命名为EntityTameMountComponent
,并将其中的方法setTamed
重命名为tame
。 - 将
Player
类中,getItemCooldown
和startItemCooldown
方法的itemCategory
参数重命名为cooldownCategory
。 - 将
EntityTameableComponent
类:getTameItems
的返回类型更改为ItemStack[]
。- 将
tame
更改为带动一个玩家。 - 加入了
tamedToPlayer
、tamedToPlayerId
和isTamed
方法。