技术性更新日志(精简版)
⚠️本文正文部分翻译自misode的“技术性更新日志”页面: https://misode.github.io/changelog
本文为精简版,仅列出对旧版本有破坏性的改动(即breaking)参阅完整文档
前言
由于最近数个版本对技术侧的改动较多,对数据包兼容性的影响较大,可能会出现一个教程或资源只能在特定版本使用的情况,对于还不熟悉这些数据包特性的开发者来说可能会有些困惑。因此在此列出会导致旧版特性不兼容的破坏性更新。
读者可借此参阅教程在你的目标版本的可用性。
改动日志以正式版本为分类条目,降序排列。
迁移指南
正文
1.21.4
数据包:
- 命令:
trial粒子加入必选字段duration;
- nbt:
- 修改了TNT矿车的NBT:
- 将
TNTFuse重命名为fuse;
- 将
custom_model_data组件更改为复合标签,set_custom_model_data修饰器同步更新;
- 修改了TNT矿车的NBT:
- 数据包其他组分:
- 移除了
#trim_templates物品标签。 - 移除了
trim_material注册表中的item_model_index字段; equippable组件中的model字段现已重命名为asset_id。
- 移除了
资源包:
引入新格式以描述物品模型;
toast/system精灵图外观现在已更新至使用标准九宫格划分方式;toast/tutorial精灵图现在被缩放为更高的弹窗;advancements/box_obtained和advancements/box_unobtainedGUI纹理现在使用九宫格划分方式变换尺寸;- 与物品栏中盔甲槽一类的空槽位纹理现已从
item移动到gui/sprites/container/slot目录,并重命名; - 织布机、酿造台、马和羊驼物品栏GUI中的空槽位精灵图现已从背景拆分并移动;
1.21.2
数据包:
- 命令:
- 栓绳结,浮漂和闪电不再能通过
/ride骑乘; - 属性id不再有
generic.,player.,zombie.前缀;
- 栓绳结,浮漂和闪电不再能通过
- nbt:
- 重命名
fire_resistant物品组件为damage_resistant,并加入types字段; potion_contents物品组件加入custom_name字段;- 将船和箱船的实体类型拆分为每种材质独立实体;
- 容器方块实体的
Lock字段被重命名为lock,并支持物品谓词;
- 重命名
- 数据包组分:
- 进度:
- 重命名
killed_by_crossbow判据为killed_by_arrow;
- 重命名
- 附魔:
- 重命名附魔类型
damage_item为change_item_damage,并支持负值;
- 重命名附魔类型
- 战利品表、谓词、物品修饰器:
- 移除战利品表
empty; - 移除了
minecraft:boat实体子谓词;
- 移除战利品表
- 配方:
- 配方原料格式修改:
{ "item": "<item id>" }修改为"<item id>"{ "tag": "<tag id>" }修改为"#<tag id>"- 列表格式不再支持tag
- 配方原料格式修改:
- 世界生成:
- 移除了雕刻器类型carvers,现在可直接列出雕刻器;
- 进度:
资源包:
- 纹理:
- 所有与装备相关的纹理现移动到了
textures/entity/equipment的子目录中。
- 所有与装备相关的纹理现移动到了
- 着色器:
rendertype_entity_glint_direct重命名为rendertype_entity_glint;rendertype_entity_translucent_cull重命名为rendertype_item_entity_translucent_cull;- 用于后处理效果的程序定义(
assets/<命名空间>/shaders/program/<名称>.json)现与核心着色器定义(assets/<命名空间>/shaders/core/<名称>.json)一致化:- 移除了没有实际作用的
blend字段。 - 移除了
attributes字段,其顶点属性Position将永被绑定。 Uniform现与为核心着色器提供的Uniform合并,其中Time被重命名为GameTime;
- 移除了没有实际作用的
- 现在后处理管线程序由
assets/<命名空间>/shaders/post移动到assets/<命名空间>/post_effect。 - 后处理管线使用的顶点和片段着色器现由
assets/<命名空间>/shaders/program移动到assets/<命名空间>/shaders/post。 - 后处理渲染过程
name现被重命名为program,且需要命名空间ID。
1.21
数据包:
- nbt:
- 移除了箭类实体的
ShotFromCrossbow字段
- 移除了箭类实体的
- 数据包组分:
- 战利品表、谓词、物品修饰器:
- 诸如谓词的entity键的值重命名:
killer->attackerdirect_killer->direct_attackerkiller_player->attacking_player
- 谓词中的
enchantment字段重命名为enchantments; - 重命名
random_chance_with_looting条件为random_chance_with_enchanted_bonus,并修改如下字段:- 移除
looting_multiplier字段; chance现在为等级依赖函数;- 加入
enchantment字段;
- 移除
- 加入
enchantment_active_check条件; - 重命名
looting_enchant函数为enchanted_count_increase,并加入enchantment字段; - 在
enchant_randomly函数下修改如下字段:enchantments字段重命名为options;- 加入布尔值字段
only_compatible;
enchant_with_levels函数下修改:- 移除了
treasure字段; - 加入
options字段;
- 移除了
copy_name函数更改:重命名了字段source的枚举值:- 将
killer重命名为attacking_entity。 - 将
killer_player重命名为last_damage_player
- 将
- 诸如谓词的entity键的值重命名:
- 战利品表、谓词、物品修饰器:
1.20.5
数据包:
- 命令:
- 粒子:
/particle指令格式修改,太多了懒得列,去wiki看吧- 拆分粒子
gust_emitter为gust_emitter_large和gust_emitter_small
- 属性:
- 重命名属性:
- generic.block_interaction_range → player.block_interaction_range
- generic.entity_interaction_range → player.entity_interaction_range
- 移除属性:
horse.jump_strength
- 重命名属性:
- 命令最大长度现在为2000000(2百万)字符;
- 粒子:
- 实体和NBT:
- 修改了区域效果云实体的
Particle字段以和命令/世界生成格式一致; - 药水箭的
Potion和custom_potion_effects字段被合并在item标签内; - 修改药水效果云的效果字段以与
potion_contents组件匹配; - 修改旗帜的方块实体字段以和
banner_patterns组件匹配; - 修改蜂巢的方块实体字段以和
bees组件匹配; - 重命名部分方块和实体的NBT字段:
- 位置nbt:
{X:1,Y:2,Z:3}→[I;1,2,3] - 蜜蜂:
FlowerPosandHivePos→flower_posandhive_pos - 蜂巢:
FlowerPos→flower_pos - 末影水晶:
BeamTarget→beam_target - 可被栓绳牵引的生物:
Leash→leash - 袭击生物:
PatrolTarget→patrol_target - 末地传送门:
ExitPortal→exit_portal - 流浪商人:
WanderTarget→wander_target
- 位置nbt:
- 移除了部分药水效果在大于127级时产生的反效果行为;
- 修改了区域效果云实体的
- 物品组件:
物品的NBTtags由新的结构化物品组件替代:
Damage:12->damage=12RepairCost:12->repair_cost=12Unbreakable:1b->unbreakable={}Enchantments:[{id:"sharpness",lvl:2}]->enchantments={levels:{sharpness:2}}StoredEnchantments->stored_enchantmentsdisplay:{Name:'"hello"'}->custom_name='"hello"'display:{Lore:['"hello"']}->lore=['"hello"']CanDestroy:["stone"]->can_break={blocks:"stone"}CanPlaceOn:["stone"]->can_place_on={blocks:"stone"}display:{color:16711680}->dyed_color={rgb:16711680}AttributeModifiers:[]->attribute_modifiers={modifiers=[]}Charged:1b,ChargedProjectiles:[{id:"arrow"}]->charged_projectiles=[{id:"arrow"}]Items:[](bundle) ->bundle_contents=[]display:{MapColor:16711680}->map_color=16711680Decorations:[](filled map) ->map_decorations={}map:1->map=1CustomModelData->custom_model_dataPotion:"invisibility",CustomPotionColor:16711680,custom_potion_effects:[]->potion_contents={potion:"invisibility",custom_color:16711680,custom_effects:[]}pages:["hello"](book and quill) ->writable_book_content={pages:["hello"]}pages:['"hello"'],title:"Title",author:"Misode",generation:1,resolved:1b(written book) ->written_book_content={pages:['"hello"'],title:"Title",author:"Misode",generation:1,resolved:true}Trim={...}->trim={...}effects:[](suspicious stew) ->suspicious_stew=[]HideFlags-> split to the different components as well ashide_additional_tooltipcomponentDebugProperty->debug_stick_stateEntityTag:{...}->entity_data={...}- bucketed mobs data ->
bucket_entity_data={...} instrument:"ponder_goat_horn"->instrument="ponder_goat_horn"Recipes:[](knowledge book) ->recipes=[]LodestonePos,LodestoneDimension, andLodestoneTracked->lodestone_target={pos:[13,64,-43],dimension:"the_nether"}Explosion(firework star) ->firework_exlosion={}Fireworks:{Explosions:[],Flight:1}(firework rocket) ->fireworks={explosions:[],flight_duration:1}SkullOwner:{Name:"Steve"}->profile={name:"Steve"}BlockEntityTag:{note_block_sound:"ambient.cave"}->note_block_sound="ambient.cave"BlockEntityTag:{Base:2}->base_color="magenta"BlockEntityTag:{Patterns:[]}->banner_patterns=[]BlockEntityTag:{sherds:[]}->pot_decorations=[]BlockEntityTag:{Items:[]}(shulker box) ->container=[]BlockEntityTag:{Bees:[]}->bees=[]BlockEntityTag:{Lock:"test"}->lock="test"BlockEntityTag:{LootTable:"foo",LootTableSeed:123}->container_loot={loot_table:"foo",seed:123}BlockEntityTag:{...}->block_entity_data={...}BlockStateTag:{...}->block_state={...}
- 加入了物品组件
enchantment_glint_override; - 物品格式
Count重命名为count
- 数据包组分:
- 战利品表:
- Nested lists are no longer supported in loot function lists.
- 战利品表抽取项loot_table(从提供的嵌套战利品表返回所有物品)现在有以下语法:value可以是:
- 一个命名空间ID,指对另一个战利品表的引用。
- 完整的战利品表,格式与独立文件的战利品表相同。
- 谓词:
- 物品谓词修改:
- 移除了 tag 字段,items 字段现在支持标签;
- potion 字段重命名为 potions;
- nbt 字段重命名为 custom_data;
- 方块谓词修改
- 移除 tag 字段,blocks 字段现在支持标签;
- 流体谓词
fluid重命名为fluids - 实体谓词
type支持标签; - 位置谓词修改:
biome重命名为biomes,并支持群系标签;structure重命名为structures,并支持结构标签;
- 修改物品谓词的
predicates下的子谓词:durability->damage子谓词;enchantments->enchantments子谓词;stored_enchantments->stored_enchantments子谓词;potions->potion_contents子谓词;custom_data->custom_data子谓词;
- 物品谓词修改:
- 物品修饰器:
- 重命名物品修饰器函数
set_nbt→set_custom_datacopy_nbt→copy_custom_data
- 重命名
/attribute命令的operation字段:add→add_valuemultiply_base→add_multiplied_basemultiply→add_multiplied_total
- 移除了
set_contents物品修饰器函数中的type字段,并加入component字段; - 为
set_attributes物品修饰器函数加入replace字段; set_lore物品修饰器函数下replace字段重命名为mode;set_written_book_pages函数:pages现在是一个JSON对象而不再是一个JSON文本。
- 重命名物品修饰器函数
- 配方:
- 配方的产物栏现在支持指定物品组件;
- 标签:
- 修改:
- 实体标签
punchable_projectiles重命名为redirectable_projectile; - 重命名
axolotl_tempt_items为axolotl_food;
- 实体标签
- 移除:
- 移除物品标签
tools - 移除实体标签
deflects_arrows,deflects_tridents
- 移除物品标签
- 修改:
- 世界生成:
- 用于
worldgen定义的整数和浮点数提供器不再包装在type旁的额外value字段中。
- 用于
- 战利品表:
资源包:
- 纹理:
- 将地图装饰图标从以前的
map_icons.png中分离为从textures/map/decorations/目录中加载的图集;
- 将地图装饰图标从以前的
- 字体:
- ttf字体提供器的
shift字段的值现在被限制在-512到512之间;
- ttf字体提供器的
- 着色器:
- 后处理着色器
blur重命名为box_blur; - 新增
entity_outline_box_blur着色器;
- 后处理着色器
1.20.3
数据包:
- 命令:
/function命令不再返回执行的命令条数;- 游戏规则
maxCommandChainLength现在更严格计数;
- NBT:
- 重命名方块草及其对应物品的注册名,从minecraft:grass重命名为minecraft:short_grass
- 将三叉戟(实体)的
Trident字段重命名为item; - TNT实体的nbt数据:
Fuse重命名为fuse; 添加block_state字段;
资源包:
- 纹理:
.png现在是唯一支持的纹理格式;
1.20.2
数据包:
- 命令:
- 加入了函数宏,可以在函数中加入宏参数传入函数,以实现动态函数;
- 可以在一行命令的末尾用反斜杠
\表示换行,以支持多行单指令,增加可读性;
- 调试:
- 现在命令记忆功能跨存档保存50条,可在游戏文件夹的
command_history.txt文件中找到;
- 现在命令记忆功能跨存档保存50条,可在游戏文件夹的
- NBT:
- 生物NBT的状态效果id由数字id改为命名空间id(字符串);
- 许多状态效果相关的实体NBT键名从驼峰格式改为蛇形格式:
- 生物状态效果字段:
Id->idAmbient->ambientAmplifier->amplifierDuration->durationShowParticles->show_particlesShowIcon->show_iconHiddenEffect->hidden_effectFactorCalculationData->factor_calculation_data
- 药水和药水箭:
CustomPotionEffects->custom_potion_effects
- 状态效果云和迷之炖菜:
Effects->effectsEffectId->idEffectDuration->duration
- 哞菇:
EffectIdandEffectDuration->stew_effects
- 生物状态效果:
ActiveEffects->active_effects- 信标:
Primary->primary_effectSecondary->secondary_effect
- 生物状态效果字段:
资源包:
- 纹理:
- 文本编辑框现在是一张位于
widget/text_field和widget/text_field_highlighted的九宫格切分的精灵图。 - 列表和编辑框的滚动条现在是一张位于
widget/scroller的九宫格切分的精灵图。 realms命名空间的纹理被移入minecraft命名空间内;- 所有含有多个部件贴图的GUI纹理现在都被拆分为单独的贴图,位于
textures/gui/sprites目录下。 villager2.png被重命名为villager.png- 辅助功能、语言和Realms新闻的按钮图标现在是单独的文件,不再各自附于按钮的纹理之上。
- 文本编辑框现在是一张位于
1.20
数据包:
- 数据包组分:
- 进度:
placed_block,item_used_on_block, 和allay_drop_item_on_block进度触发器下所有字段并入location字段;现在该字段接受战利品表谓词。
- 战利品表、谓词、物品修饰器:
- 加入
all_of条件,alternative条件重命名为any_of
- 加入
- 标签:
- 方块标签
replaceable_plants拆分为replaceable和replaceable_by_trees
- 方块标签
- 世界生成:
- 移除了结构后处理器
rule的output_nbt字段,新增了block_entity_modifier作为替代。
- 移除了结构后处理器
- 进度:
资源包:
- 字体:
- 移除字符提供器
legacy_unicode;
- 移除字符提供器
1.19.4
数据包:
- 实体和NBT
- 加入(方块、物品、文本)展示实体、交互实体;
- 数据包组分
- 战利品表、谓词、物品修饰器:
- 伤害类型谓词修改,移除了原先判据,改用新的伤害类型数据判定,使用
tags字段判定;
- 伤害类型谓词修改,移除了原先判据,改用新的伤害类型数据判定,使用
- 战利品表、谓词、物品修饰器:
1.19.3
数据包:
- 命令:
- 修改了命令
/publish的格式;
- 修改了命令
- 数据包组分:
- 配方:
- 配方文件内加入必选字段
category;
- 配方文件内加入必选字段
- 标签:
- 移除方块标签
overworld_natural_logs;
- 移除方块标签
- 世界生成:
- 移除
template_pool的name字段;
- 移除
- 配方:
资源包:
- 纹理:
- 在
entity/player/(slim|wide)新增了各默认玩家皮肤;移除了entity/steve和entity/alex; - 修改了
gui/container/creative_inventory/tabs纹理;
- 在
1.19.1
1.19
数据包:
- 命令:
- 猫变种由数字id改为命名空间id;
- 状态效果
ID的类型由字节型改为整型;
- 进度:
- 进度触发器
location,slept_in_bed,hero_of_the_village和voluntary_exile下location字段被移入player.location位置;
- 进度触发器
- 战利品表、谓词、物品修饰器:
- 位置谓词字段
feature重命名为structure;
- 位置谓词字段
- 世界生成:
- 移除地物
ice_patch,ice_patch并由地物disk代替; - 树根放置器格式修改:
y_offset重命名为trunk_offset_y;- 字段
max_root_width,max_root_length,random_skew_chance,can_grow_through,muddy_roots_in,muddy_roots_provider移入mangrove_root_placement对象下; - 加入字段
above_root_placement;
- 地物
glow_lichen重命名为multiface_growth; block_rot处理器的字段rottable_blocks现在需要一个#前缀;- 移除结构字段
adapt_noise; - 移除密度函数
slide,由add,mul,y_clamped_gradient代替; - 移除噪声设置字段
noise.sampling,noise.top_slide,noise.bottom_slide,并移入密度函数; - 维度类型不再内联于维度数据中;
- 移除区块噪声生成器的
seed字段; - 移除密度函数
terrain_shaper_spline并移除密度函数spline的min_value和max_value字段; - 移除生物群系字段
category; - 将
worldgen/configured_structure_feature文件夹移入worldgen/structure文件夹;
- 移除地物
1.18.2
数据包:
- 命令
locate命令现在接受已配置的结构地物ID作为参数而不是结构类型;locate命令和locatebiome命令现在支持标签作为参数;
- 世界生成
- 加入结构集JSON文件,取代了噪声字段中的
structures字段; - 移除了噪声设置中的字段
noise_caves_enabled,noodle_caves_enabled; - 一些标签字段现在要求在ID前面加上
#,但是它们暂不接受元素列表:dimension_type中的infiniburnfeature.geode配置中的blocks.cannot_replace和blocks.invalid_blocksfeature.vegetation_patch和feature.waterlogged_vegetation_patch配置中的replaceablefeature.root_system配置中的root_replaceablestructure_processor.protected_blocks中的value
- 修改了噪声设置中
structures的格式;
- 加入结构集JSON文件,取代了噪声字段中的
1.18
数据包:
命令
- 移除了记分项、记分板名称、队伍名称的名称长度限制;
NBT
- 将刷怪笼的
SpawnPotentials格式更改为:snbt{ weight: <int>, data: { entity: {...}, custom_spawn_rules: {...} } } - 将刷怪笼的
SpawnData字段的内容移动到SpawnData.entity;
- 将刷怪笼的
进度
- 将进度谓词中的
nether_travel的entered重命名为start_position,移除了字段exit;
- 将进度谓词中的
物品修饰器
- 现在
set_contents和set_loot_table物品修饰器函数需要type字段
- 现在
标签
- 将方块标签
lava_pool_stone_replaceables重命名为lava_pool_stone_cannot_replace;
- 将方块标签
世界生成
- 加入用于地物放置的方块谓词;
- 加入了已放置的地物;
- 加入了表面规则;
- 加入噪声JSON数据文件;
- 移除了地表生成器;
- 移除了方块放置器;
1.17
数据包:
- 命令
- 加入
/item命令,取代了/replaceitem命令; /give命令能给予的物品上限现在是100;
- 加入
- 进度
- 在触发器
effects_changed中加入条件source;
- 在触发器
- 战利品表和谓词
- 把谓词中的所有物品条件字段的名称从
item修改为了items,所有方块条件字段的名称从block修改为了blocks;
- 把谓词中的所有物品条件字段的名称从
- 加入了物品修饰器
- NBT
fireball的字段ExplosionPower现在是byte而不是int;- 史莱姆的字段
Size现在上限是126; - 药水云的字段
Radius现在上限是32;
- 标签
- 重命名方块标签:
snow_step_sounds→inside_snow_step_sounds
- 重命名方块标签:
- 方块
- 铁轨能含水了,水不再破坏铁轨;
- 将炼药锅拆分为
cauldron(空的炼药锅),water_cauldron(装水的)和lava_cauldron(装岩浆的); - 重命名
grass_path→dirt_path,grimstone→deepslate;
- 实体
- 加入了
marker
- 加入了
- 其他
- 加入了游戏事件;
- 使用
F3+L可以生成一份性能报告,储存在.minecraft/debug/profiling/下; - 文本组件中的目标选择器组件和NBT组件可以使用字段
separator指定分隔符;
资源包:
- 着色器
- 现在使用OpenGL 3.2渲染,可使用资源包替换原版着色器;
- 新增资源包目录
shaders/core和shaders/include;
- 其他
- 制作者名单现在是json格式储存而不是txt;
1.16.2
数据包:
- 世界生成:
- 自定义世界生成和维度设置现在在数据包中使用相同的文件夹模式(namespace/<类型>/resource.json),与其他资源保持一致。
1.16
数据包:
- 命令:
- 属性命名由驼峰命名改为下划线命名;
- NBT:
- 实体的UUID值现在改为4元素整数数组;;
- 数据包组分:
- 进度:
- 移除进度触发器
safely_harvest_honey; - 进度内容
location,slept_in_bed,hero_of_the_village,voluntary_exile字段被放入location字段下;
- 移除进度触发器
- 世界生成:
- 加入实验性玩法“自定义世界”;
- 进度:
- 其他:
- 数据包加载优化:
- 若加载失败,则修改不会被应用;
- 如果进入世界时,已加载的数据包出错,会弹出“安全模式”选项;
- 仅在数据包成功加载后修改数据包列表;
- 数据包现在可以在世界生成之前指定;
- 现在若数据包组分缺失(如卸载了
vanilla数据包),将阻止玩家加载世界。
- 数据包加载优化: