当前版本 1.0.16(已构建、已回归;设备在安装前离线,这一版尚未装到词典笔,设备上仍是 1.0.15)。appid 6d696e6563726166。1.0.16 的两项修复已在设备上用独立专测验证通过。固定参考提交为
gstaaij/minecraft-console@09df8928eeb15328bca499d225e48ea95af6d119。
已接入并部署一部分原始游戏算法,但尚不是完整原版复刻,也不是原版存档格式。 环境搭建与一键打包见 开发与打包;功能、原代码依据与适配边界见 源码对照。本项目没有推送代码或发布资源到远端;原源码、纹理保留原有权利归属。
- 挖掉的方块不再直接进背包:生存模式破坏方块后,掉落按原版
Tile::popResource生成为地上的物品实体(格内随机偏移、向上小速度、10 刻后可拾取)。走近(玩家碰撞箱外扩 1×0.5×1)自动拾取,背包只装得下一部分时剩下的留在地上;创造模式拾取时装不下的直接消失(原版 instabuild)。DoTileDrops关闭时不掉落,创造模式破坏方块不掉落方块本身。背包满不再影响挖掘,miningInfo的inventoryFull恒为false。 - 物理与外观:重力 0.04、空气阻力 0.98、落地摩擦 0.6×方块摩擦(冰 0.98)、落地反弹、卡在方块里会被推出;相邻同种物品 0.5 格内合并;存在 6000 刻(5 分钟)后消失;进入岩浆/火会被烧掉。未加载的区块里的物品冻结不动。画面中方块显示为缩小的 3D 方块、物品显示为旋转的图标,上下浮动并自转,数量多时叠出 2–5 份(原版
ItemRenderer),按物品所在格的光照着色,被不透明方块遮挡,16 格外不画。 - 死亡掉落:关闭 KeepInventory 时,死亡把背包和盔甲全部抛到玩家周围(
Player::drop,40 刻后可拾取),重生后可以回去捡。写盘顺序防崩溃:先记待处理标记,再保存地上物品(带“已抛出”标记),然后清空并保存背包,最后清除标记;任何一步之间被杀都不会丢物品也不会复制。 - 拆箱子:非空的箱子、熔炉(包括正在燃烧的)和留有物品的工作台现在都能挖掉,里面的东西按原版
ChestTile::onRemove撒出(每格拆成 10–30 个一堆)。只有界面正开着的那个方块不能挖(protectedBlock:true)。 - 数量上限:最多 128 个物品实体,超出时最旧的先消失(原版
ServerLevel上限 200,同样删最旧的)。worldInfo的scene.itemCount给出当前数量。 - 存档:新增独立文件
items.bin(v1,校验和保护),scene.bin保持 v3 不变,旧版本仍能打开这个世界。没有掉落物的旧存档不会生成items.bin。 - 仍未实现:生物死亡掉落(场景里还没有战利品概念)、手动丢弃物品、水流推动物品、关闭合成格时放不下的物品掉到地上(仍保留在合成格里)。
- 快捷栏、背包、2×2/3×3合成、箱子、熔炉和生命/饥饿行统一从1.25倍放大到1.5倍(仍按整四分之一步、单一倍数,不拉伸纹理)。1.5倍是266像素高度能放下的最大一档:箱子面板168×1.5=252像素,1.75倍需要294像素。
- 坐标(960×266):快捷栏(343,233) 273×33,选中框x 341–618;生命/饥饿行y206、盔甲/氧气行y191;背包/工作台/熔炉面板(348,8) 264×249,箱子(348,7) 264×252。
- 右下世界按键右移让出快捷栏:左键(626,218) 104×40、右键(738,218) 104×40、跳跃(850,218) 98×40,原生多点触控区域同步(
CONTROL_BOUNDS)。左下移动键不变。 - 背包/容器右侧按钮列移到x=620(宽328);聊天记录框改为(200,100) 392×90,不再压到生命行。
- 生命与饥饿按原版
FoodData.cpp:生命 20、饱食 20、饱和度起始 5、消耗度满 4 扣饱和度(无饱和度再扣饱食,和平不扣)。饱食≥18 每 80 刻回 1 血并加 3 消耗;饱食为 0 每 80 刻受饿伤,简单停在 10、普通停在 1、困难可饿死。消耗来源:走路 .01/格、游泳 .015/格、跳跃 .2、攻击命中 .3、挖掉方块 .025、受到非穿甲伤害 .3。无疾跑,所以没有疾跑消耗。 - 伤害:坠落
ceil(距离-3)(穿甲);溺水氧气 300 刻,用尽后每 20 刻 2 点;岩浆 4、火焰接触 1、着火每秒 1;僵尸近战按原版Zombie.cpp攻击力 3、MeleeAttackGoal20 刻冷却,简单伤害/2+1、困难 ×1.5、和平 0。受击 20 刻无敌、后半段只结算更高伤害的差额。 - 盔甲减伤已生效:按
LivingEntity::getDamageAfterArmorAbsorb计算伤害×(25-护甲值)/25,护甲值为已穿戴盔甲防御之和;每次减伤命中按Inventory::hurtArmor给每件盔甲max(1, 伤害/4)点耐久。手持盔甲按右键穿上(与该槽位原有盔甲互换)。坠落、溺水、饥饿、着火按原版不受盔甲影响。 - 进食:苹果、面包、熟/生猪排、熟/生鱼、曲奇、西瓜片、牛排/生牛肉、熟鸡肉、烤马铃薯、金胡萝卜、南瓜派、胡萝卜、马铃薯共 16 种,营养与饱和度从
Item.cpp/FoodConstants.cpp提取。按住右键 32 刻(1.6 秒)吃完一个,期间移速降为 0.2,松手或切换物品即取消;饱食满不能吃;创造模式不进食。没有药水效果,所以生鸡肉、腐肉、蜘蛛眼、毒马铃薯、金苹果和要还碗的蘑菇煲都不可食用(生鸡肉仍作为物品收录,供熔炼使用)。 - 界面:生命、盔甲、饱食、水下氧气由原生按
Gui.cpp布局在快捷栏上方绘制,与快捷栏同为 1.5 倍;创造模式与打开背包时隐藏。贴图取运行时实际使用的1_2_2/gui/icons.png(旧gui/icons.png没有饱食图标)。注意这一版控制台的旧 HUD 代码被RENDER_HUD 0关闭、实际用 Flash 界面,所以布局是按旧代码复刻,数值逻辑按IUIScene_HUD.cpp。 - 死亡与重生:死亡后画面盖上原版
DeathScreen红色渐变,显示「你死了!」与「重生」按钮,期间无法移动和操作。关闭 KeepInventory 时死亡会把背包和盔甲掉在地上(见上面“掉落物实体”)。重生点为首次进入生存时的位置,没有床。 - 存档:
survival.bin升到 v2(116 字节,增加一个标志字),旧 v1(112 字节)照常打开,保存时才写新格式。死亡清包前先落盘一个待处理标记,进程被杀也不会出现「物品没了但人没死」。 - 物品目录增加 14 种食物与煤炭、木炭、黏土球、仙人掌绿、生鸡肉,共 195 项,均有原版图标;合成表因此多出火把(煤/木炭)与黏土块,共 83 条。
仍未实现:药水效果、疾跑、床与重生点、经验、和平模式清除怪物、僵尸寻路(僵尸直线追击并做视线判断,不绕墙)、受伤镜头晃动。
- 2×2合成:背包界面里原版
InventoryMenu位置(InventoryMenu.cpp:35,41)出现4格合成格和结果格。先点背包里的物品,再点合成格,每点一次放1个,并且原物品保持选中,可以连续“刷”配方;再点一次原物品取消选中。点结果格合成一次(ResultSlot::onTake,ResultSlot.cpp:60-66:每个有物品的合成格各减1),产物直接进背包;放不下就整次拒绝,不扣材料。关闭背包时合成格的物品按InventoryMenu::removed退回背包。 - 3×3工作台:右键工作台打开原版
crafting.png界面(CraftingMenu.cpp:29,35)。右侧按钮在“每次放1个/整组放入”之间切换。关闭时物品退回背包(CraftingMenu::removed)。 - 箱子:右键打开27格单箱界面(
ContainerMenu.cpp:23,ContainerScreen.cpp:37-38),两次点击在箱子与背包之间整组移动;连点同一个箱子格是“快速移动”(类似Shift点击)进背包。内容随存档保存。 - 熔炉:输入/燃料/输出三格,燃烧时间和熔炼表逐条照抄
FurnaceTileEntity.cpp:188-330与FurnaceRecipes.cpp:18-44(木质方块300刻、木台阶150、木棍/树苗100、木质工具200、煤1600、煤块16000、岩浆桶20000、烈焰棒2400;每次熔炼200刻)。熔炉在所在区块已加载时每帧按20刻/秒推进,界面关着也在烧;火焰与箭头按FurnaceScreen.cpp:31-37绘制。输出格只能取不能放。燃烧剩余、燃烧总长和熔炼进度都随存档保存。 - 现在铁矿石、金矿石可以炼成铁锭、金锭,沙子炼玻璃、圆石炼石头,铁/金装备在生存模式下可以获得了。
- 拆箱子的约定:非空箱子、熔炉、工作台可以挖掉,内容掉成地上的物品实体(见上面“掉落物实体”)。界面正开着的那个方块不能挖(
protectedBlock:true)。 - 存档:
containers.bin升到第2版:在第1版的末尾追加玩家2×2合成格(4格)。新版本仍能读取第1版;旧程序读到第2版会拒绝打开(不会覆盖)。关闭工作台时,空工作台的记录会被删除。若某个容器记录所在的方块已经不是同类方块(例如旧版本没有拦截挖掉非空箱子),该记录会被保留而不是让整个世界打不开,在原位置重新放同类方块就能取回物品。 - 贴图:
crafting.png、furnace.png、container.png从上游Common/res/gui原样复制到port/assets/inventory/,来源和哈希记录在port/assets/inventory/sources.json,由tools/extract-containers.py校验并嵌入。
仍未实现:煤和木炭不在当前物品目录里,所以煤矿石挖出的煤会丢失,原木只能当燃料,不能炼成木炭;生肉、黏土、仙人掌等原料也不在目录中,相应配方保留在表里但不会触发。熔炉点燃后方块外观不变(亮炉状态不在渲染目录里)。双箱、漏斗、发射器界面、无序配方都没有做。熔炼不给经验。界面上不显示标题文字。箱子非空而拒绝挖掘时,界面上暂时没有提示文字。
1.0.15 只修了窗口大小,可视距离仍按设置档位计算,所以 4 档以上还会露边界。这一版修两处:
- 可视距离跟随实际发布的窗口。原先按设置档位算:4 档是 56 格,而补载期间窗口可能只有 48 或 80 格,射线看到了已加载范围之外,交界处就成了边界。改为按已发布窗口推导后,实测 4、6、8、12 档在刚设置、补载中、完全填满三个阶段,可视距离都不超过窗口半宽,未加载区域全程 0%。回归里加了这条断言防止退回。
- 按可用内存封顶档位。窗口、区块缓存与光照都随半径增长:4 档约 40MB、8 档约 145MB、12 档约 313MB,而设备当时只有约 157MB 可用,高档位必然耗尽内存——设备上 12 档的专测程序确实直接段错误退出。现在运行时读可用内存并取放得下的最大档位,设备实测请求 6、8、12 档都安全降到 4 档,不再崩溃;实际生效值如实上报,不假装请求已生效。
所以在这台设备上,滑条虽可拖到 12,实际生效上限约 4 档,这是内存决定的而非界面限制;主机内存充足时 12 档可完整生效。
排查中也修正了我自己的两个错误:一次构建命令重复链接了同一模块的新旧代码,产生误导性的段错误;读取内存信息时用 sscanf 又带回设备不支持的 GLIBC 2.38 依赖,已改为手工解析。
- 症状:在设置里把区块范围调大后,画面出现一道像"世界尽头"的断层。
- 原因:改范围会立刻把渲染窗口按新半径放大,但远处区块还没加载。实测从 1 档调到 12 档时,窗口瞬间从 48 格扩到 400 格,而此时只有 9 个区块就位,窗口里 98.6% 的区域是未加载的。未加载区域按设计不发光、显示为空白,于是在已加载与未加载的交界处形成明显断层;按每 0.25 秒补一块计算,填满需要约两分半。
- 修复:渲染窗口不再立刻跳到目标半径,而是只扩展到实际已连续加载的那一圈,随补载推进逐步变大,并保证不小于原有最小窗口、也不会缩回。实测调到 12 档后窗口按 48 → 80 → 144 → 400 格增长,全过程窗口内未加载区域始终为 0%。
- 该修复不改变加载总量、生成结果与存档格式,只改变"何时把扩大的范围显示出来"。远处地形仍需要时间补齐,这一点没有变。
- 修好设置里的滑条。原因是词典笔的 Falcon 把
pageX/pageY作为控件内坐标、screenX/screenY才是全屏坐标,而旧代码优先取 page 当全屏坐标去做命中判断,控件内的 y 值(0..32)永远落不进全屏判定区间,于是按下从不生效、拖动直接返回。现在滑条改用专用归一化:有 screen 用 screen,只有 page/client 时按控件原点换算。依据是随仓库安装的官方 seekbar 组件实现,测试也补了「同一事件同时给出两种坐标」的真实情形。 - 显示范围与预加载范围都扩到 1–12 档(原 1–3),预加载仍不小于显示。界面标注周围 N×N 与总数,12 档即 25×25、625 个区块。
- 工具手持会显示了。原因是手持渲染只接受方块索引,而工具的方块索引是 -1,于是被当成空手。现在非方块物品走独立的持物绘制,用原版物品图标按原版第一人称变换逐像素挤出;实测钻石镐绘制了 418 个像素。
- 工具对方块和生物真的起作用。挖掘改为按原版 20 刻累计进度,速度来自工具材质与方块硬度(
playerSpeed / hardness / 30,无法收获时/100),水下速度降为五分之一。锄头按原版HoeItem::useOn把草方块或泥土变成耕地,只在非底面且上方为空气时成立,成功后扣 1 耐久。攻击伤害按原版玩家基础 1 加物品加成:钻石剑总 8、铁剑 7、锄 1;受击无敌帧按原版只结算更强伤害的差额。 - 生存与创造模式可切换,在设置面板内。创造:一击即破、不损耗耐久、不掉落、可用创造物品栏。生存:按硬度耗时、工具损耗(挖掘镐1剑2、攻击剑1镐2)、方块掉落为地上的物品实体(后续版本;1.0.14 时是直接进背包)、禁止创造给予。模式与耐久都写入存档,重开保留。
- 耐久已落存档。物品槽新增独立损耗字段,不写进物品标识,旧 v1/v2 存档读取时默认创造模式且损耗为 0,只有显式保存才写新格式;原有受保护的旧记录不变。
- 背包与快捷栏显示耐久条。
未实现(截至 1.0.14;盔甲减伤、生命与饥饿已在后续版本实现):附魔与耐久附魔判定、熔炼、完整农田水分与作物生长、实体掉落物拾取、精准采集与时运。掉落只覆盖已核对的方块,未核对的方块在生存模式下会拒绝破坏而不是凭空给掉落。创造模式持剑不挖方块(与原版一致)。
- 设置增加可拖动/点按的“显示范围”和“预加载范围”两条滑条,各为1–3档,预加载不会小于显示。拖动仅修改草稿,点“应用”一次生效。显示窗口仍为48/80/112宽,预加载总目标为9/25/49区块;显示1、预加载3可只显示3×3而准备7×7。
- 优先中心与显示内的区块,再做外圈预加载。隐藏预载进入缓存但不触发可见窗口光照重建;游戏继续运行,不显示普通补载红色通知。原源码中能确认的是近距脏渲染块与视锥规则,不是完整地形异步加载队列,详见源码对照的边界说明。
- 挖掘/放置附近立即更新光照,视线附近先刷新;随后有预算的全窗口计算继续完成,局部结果不再假装整个窗口已经算完。未知区块不产生天光、块光,也不从相邻区域漏入光,包括顶部采样。原版opacity/emission、天光/块光衰减和AO仍是当前阴影依据,不增加现代shadowmap;不是完整原Level光引擎。
- 修正钻石剑、钻石等新增物品在背包/快捷栏中空白:原先已注册176项/175可选,但图标表仅13项。现补全新增45件工具盔甲与5种材料的原PNG图标,共63项;所有非方块物品保持正确的
renderIndex=-1,不伪装成方块。特殊物品第一人称手持仍未实现。 - GPU实查:有RK3562的Mali内核节点,但未找到EGL/GLES/libmali用户态运行库,设备
dlopen探针均失败。未建立3D上下文、没有启用GPU渲染;未替换系统库、未接管Falcon显示。驱动节点存在不等于3D可用。
本轮验证:25/25原生回归通过;15项按键、10项后台补载、5项背包布局、10项双范围滑条界面检查及严格TypeScript检查通过。真机独立专测验证显示1/预载2对应显示9块、加载25块,并在生成时继续81次World更新;50个新增非方块物品图标全部可见,钻石剑与钻石保存重开身份不变;即时照明、未知区域无光及最终完整结果一致性通过。AMR已上传、校验、安装、启动成功。真机有同时触摸,滑条逐项GUI验收未作独立确认;系统日志出现parentControl模块错误,未归因于本应用也未掩去。
产物:dist/minecraft-native-aarch64.amr,1203281字节,SHA-256 dd15a5e95cc800e029301c37f42328f7546d4e389f17a32f578c2aa0a9bbdd4e。记录:dist/native-tests-1.0.13.log、dist/device-ranges-icons-probe-1.0.13.log、dist/device-gpu-runtime-1.0.13.log、dist/device-install-1.0.13.log。
-
区块限速加载,宁可延迟也不卡画面。接收区块时不再整份复制渲染窗口(半径3约6MB),改为只原地写入该区块所在列,实测半径3单次提交最差1.73ms。补载提交之间强制至少间隔0.25秒。
-
光照重建改为跨帧分摊。原先每接收一个区块就整窗重算天光和方块光(半径3约320万格),实测一次553ms,足以明显卡住画面。现在按每帧256列推进,实测单帧最差5.98ms,收敛需148帧,且收敛结果与一次性重建逐格完全一致。代价是光照会比地形晚几帧跟上,这是有意的取舍,不是原版异步光照引擎。
-
合并效果实测(半径2、每批8块、持续补载242帧):首帧622ms属冷启动预热(光照首建与渲染缓存),随后稳定帧最差3.58ms,补载期间无卡顿尖峰。首次进入世界仍有明显预热耗时,这一点没有变。
-
方块交互(右键)。按原版
Tile::use顺序实现"先交互、没有交互行为才放置"。木门可右键开关,按原版只改下半格data并保留上半格铰链位,两格原子提交,不会出现半开的门;铁门按原版DoorTile.cpp:197吞掉点击但不动作(副作用是铁门面上也放不了方块)。拉杆、按钮、中继器未实现:当前渲染目录里它们只有未通电一个状态,翻转后的状态没有对应渲染索引,与其假装支持不如明确拒绝。箱子、熔炉、工作台、发射器、炼药锅需要容器或界面,本轮一律不响应。作物右键催熟在原版属于骨粉物品行为,不是方块交互。 -
工具与盔甲物品。按原版注册加入45件:剑/锹/镐/斧/锄各5种材质,以及皮革/锁链/铁/钻石/金盔甲共20件,物品ID、堆叠上限1、防御值与耐久数值都按原版
Item.cpp与ArmorItem.cpp核对。物品目录从126项增至176项。 -
背包界面放大到1.25倍,面板220×208、热键栏228×28,按整四分之一步放大以免纹理变形;更大的倍数会与左键按钮区域重叠。
-
背包内加入角色小人,复用已有的Steve皮肤与原版人体模型,按原版
InventoryScreen.cpp:38-84的锚点、缩放30、镜像与180°旋转参数复刻。注意该段代码在4J版里被#if 0关闭,所以这是按那段参数复刻,不是该版本运行时的原生行为。词典笔没有鼠标,不实现随鼠标转头;盔甲模型层未移植,小人不显示已装备盔甲。 -
合成表:按原版子注册表提取80条配方(工具20、剑5、盔甲16,另加工作台、熔炉、木板、木棍、楼梯、栅栏、门等),实现3×3带偏移与左右镜像匹配,1825项检查通过。锁链盔甲在原版配方被注释掉,所以保留物品但不给配方。另有106条未覆盖配方已逐条记录原因。
-
保存退出已移入设置面板,世界模式不再常驻该按钮,原先为它预留的触控忽略区一并清除。
未实现(不要误认为已支持):耐久消耗与损坏、挖掘速度与采集等级门槛、附魔、盔甲减伤、剑的战斗加成、锄耕地与剪刀。这些都依赖完整Item引擎——当前物品槽没有损伤字段,且挖掘是创造式即时移除。合成目前只有后端匹配能力,还没有合成界面,玩家暂时无法在界面里合成。 本轮也不做熔炼,而铁锭/金锭在原版只能靠熔炼获得,因此铁/金装备在生存路径下不可达,只能靠创造栏取得。
-
世界操作键按原版鼠标语义合并:左键在准星对准生物时攻击、否则挖掘;右键放置。删除了原先分开的「放置/攻击/挖掘」三键和「第一人称/角色预览」切换键及背包内多余说明;设置、背包、保存退出、创造物品等功能入口保留,视角固定第一人称。原生多点触控区域同步为左键600、右键730、跳跃872(y218,高40),手指滑出按钮后角色仍保持到松手。
-
运行时后台线程只持有复制的区块请求和独立生成器,生成完成后由主线程接收区块;不再把整份活动世界交给后台线程。已加载区域的移动、转向、画面、生物和交互继续执行,正常保存也不等待补载线程。
-
区块队列先保人物中心安全,再优先当前70°垂直视角内的区块,之后按距离排序。转向仅重排尚未派发的请求;移动/切换半径后,过期结果不会写入新的加载目标。
-
接收结果时合并主线程最新修改并验证延迟校验的存档数据,不用后台旧快照覆盖玩家挖掘/放置。世界切换/销毁仍必须收束后台线程,不会detach或在后台访问QuickJS。
-
正常补载不显示红色通知、不冻结操控;设置中保留加载数量及简短非红错误。真正的新建/打开世界仍使用独占任务和真实进度条。
-
主机专测样本:半径2共25区块、每批8块,177帧中有174帧在后台实际生成期间完成了移动、场景tick、渲染和读取,其中2次保存也发生在生成进行中。
-
区块限速加载(宁可延迟也不卡画面):接收区块时不再整份复制渲染窗口(半径3约6MB),改为只原地写入该区块所在列,实测半径3下单次提交最差1.73ms。另外补载提交之间强制至少间隔0.25秒,画面吃紧时宁可晚一点填上远处地形,也不在一帧里挤进多次提交。
1.0.11验证:21/21完整原生回归通过(新增并发补载与方块碰撞两项);界面按键12项、补载不中断9项mock与TypeScript检查通过;碰撞与放置源码审计分别核对60与32个原函数。安装包dist/minecraft-native-aarch64.amr,1167227字节,SHA-256:
31c2df54150a8d61689446ff9dcb1dd25f7a052ff3c5b5e001041e7001425056。记录:dist/live-streaming-collision-validation-1.0.11.json、dist/native-live-tests-1.0.11.log、dist/host-live-streaming-probe-1.0.11.log、dist/device-install-1.0.11.log。
初次回归暴露并已修正三处:存档格式的基岩校验被错误地套用到运行时低层编辑;站在地面时梯子判定读到脚下地板而非梯子格;旧测试假定人物所在格必须是空气或液体。按键逐一的真机GUI验收未单独取得(注入期间设备同时有其他触摸),按键行为以12项界面检查为准。
- 玩家碰撞独立依据原
getAABB/addAABBs规则,不从可见模型推断:草丛、火把、水、岩浆等不再作为整格墙;草方块仍实心。梯子保留贴墙2/16薄箱,接入原脚所在格的梯子/藤蔓判断及按秒适配的限落/碰墙攀爬。 - 半砖、楼梯、门、栅栏等按已审局部/组合碰撞箱处理,未加载区域仍为安全边界。保持当前玩家尺寸和简化运动引擎,未实现完整液体流动、游泳、伤害、所有实体物理;旧无效metadata仍按保守策略处理。
- 背包按原始
Item ID + 合法aux保存,不再使用渲染状态作为物品身份。当前已有312个渲染状态全部分类,形成126个物品变体,按原Iggy创造清单筛选其中125项;这不是完整原版全部物品清单。 - 楼梯朝向/倒置、台阶上下、门上下/开关/铰链、作物年龄、原木轴向、积雪厚度不列为独立物品。羊毛16色、木材树种、砂岩/石砖和台阶材质等真正物品aux保留。
- 创造选取与独立“渲染状态预览”使用不同目录;界面传完整物品索引,原生按各物品堆叠上限填槽,门为1件。
- 门、种子、线、红石粉、甘蔗、可可豆、中继器、地狱疣、炼药锅、花盆、胡萝卜和马铃薯使用原item atlas二维图标,不把门下半/作物年龄模型当物品图。其余方块图标仍为canonical代表模型的CPU缩略图;第一人称持物目前仍只绘制完整cube/grass,不冒充全部特殊物品已支持。
- 放置使用物品ID、aux、实际命中面/点击高度和玩家朝向生成世界状态,不再直接写背包选中的任意状态。已审子集支持楼梯、石台阶上下与合并、原木轴向、两格门/铰链、部分安装面、单箱/熔炉、作物种植和积雪;未实现规则明确拒绝,不假放默认方向。
- 旧
inventory.binv1仅在内存归一,显式保存写v2。不能映射的旧状态及超出新堆叠上限的余量保留为受保护记录,不出现在可选物品栏,也不静默删除。世界调色板、状态key和旧生成基准不变。 - 仍不是完整Item/Tile引擎:工具、桶、合成、装备效果、完整生长/邻居更新/红石、双箱等没有完成,物品可见性不代表其所有使用行为均已实现。
1.0.10验证:19/19完整原生回归通过;UI真实125项mock、22项新旧契约回归、TypeScript与Falcon模板检查通过;独立词典笔进程实际验证canonical库存、四向楼梯/台阶/两格门规则、自然地形放置及保存重开。实际AMR已生成v2 item:…库存;逐项GUI验收因设备同时存在其他触摸未算通过,不用mock代替真机声明。
1.0.10安装包记录:1157657字节,SHA-256:
84b056e62c141aafe860926e69d39c54793ab855f94d23dc141d6fb697ece8af。
记录:dist/native-items-tests-1.0.10.log、dist/ui-items-validation-1.0.10.json、dist/device-items-probe-1.0.10.log、dist/device-install-items-1.0.10.log。
- 新建与世界设置提供渲染半径1/2/3,默认1。目标分别为玩家区块周围3×3、5×5、7×7(9/25/49个区块),渲染窗口48/80/112宽、高256;视距随档位为8/24/40格。
- 只排队玩家附近最终区块,按距离优先、去重;跨区块后取消过期队列并淘汰远处最终区块。必要的原结构/树木BASE依赖仍会生成,但不暴露成远处驻留最终区块,也不生成整张地图。
- 生物/碰撞/读取不再偷偷生成远区块。未知区域按物理边界阻挡移动,挖掘/放置不命中;部分加载窗口的光照边界可能暂时漏光。
- 创建/继续改为独占后台任务,界面每100ms读取同步状态;百分比来自真实阶段和加载区块数,100只在worker退出、可接管世界后显示。支持取消,已完整创建的目录不随意删除。
- 1.0.9当时的运行时补载步会独占世界并维持旧帧;这一暂停机制已在1.0.11改为独立生成与主线程接收,见上节。仍不保证生成、光照重建和CPU争用完全没有单帧耗时波动。
- 存档没有合并成大文件。 原始世界仍使用每修改区块一个
chunk-<key>.bin,level.json/state.bin/scene.bin/inventory.bin独立。旧custom格式的单chunks.bin仅保留兼容读取,未强制迁移。 - 打开存档仍先验证文件类型、大小、头部、ID和校验和,但远处修改区块的昂贵基准生成验证延迟到首次需要时;坏区块不会静默丢弃,实际加载会报错。
- 默认不新增完整baseline磁盘缓存:未修改区块仍由确定性生成器重建,不承诺重新进入零生成耗时。
本地验证:16/16完整联合测试通过,另真实structures+decoration的WorldJob测试通过,UI15组mock/类型/模板检查通过。主机样本单v3补载20.96ms、远修改存档打开2.49ms且只生成1个安全区块;仅为fixture样本,不是设备性能承诺。
本轮AMR:dist/minecraft-native-aarch64.amr,1134165字节,SHA-256:
176a92a3437e1c1d3f0b5e4dabc22ba10ee5cfa7715fbd8aceb87497bae9e530。
真机安装与验证:1.0.9已通过scp上传,校验一致,install/start返回0;截图中的真实进度条从空条推进到216/400像素后进入世界。独立设备进程以原structures+decoration、种子12345、Large5120验证:创建1.239s、重开1.240s,实际radius1/loaded9/target9/resident9,切换radius只调整目标不在设置调用内生成远区块。单次poll最大0.351ms。样本不含完整屏幕渲染,不保证所有种子/存档/设备负载相同速度。应用首次进入样本22提交FPS,不当作稳定帧率承诺。
验证截图:dist/device-stream-world-1.0.9.png;进度截图dist/progress-early.png、dist/world-or-progress.png;真实区块任务记录dist/device-streaming-probe-1.0.9.log。设置面板交互仍以本地15组mock验证为主,本次触摸期间页面有其他操作,未取得隔离一致的设置面板截图。
- 补齐并按 Git blob 核对 24 份关键客户端文件,包括原第一人称、Gui、GameMode、GameRenderer、LevelRenderer、HumanoidModel、PlayerRenderer 和 Polygon。
- 新建 v3 世界在原始地层和结构之后接入原树木 Feature 与选种/数量规则子集,包含橡树、白桦、针叶树、丛林树、沼泽树,以及部分植物。不是完整 BiomeDecorator/postProcess 调度等价。
- 空手使用原 ItemInHandRenderer → PlayerRenderer → HumanoidModel 变换顺序、原右臂尺寸/枢轴、Polygon UV 内缩与 70° 手部投影;不再用猜测的屏幕百分比摆手。
- 世界与生物统一原 70° 基础垂直 FOV。攻击摆臂使用原默认六 tick 周期,手部与世界相机分别投影。
- 太阳/月亮改为原纹理方形 quad,原旋转、太阳半尺寸30、月亮半尺寸20、8月相和加法混合;不再用圆形命中判定。
- 加入按区块窗口缓存的天光、方块光和 AO;遮顶会变暗,挖开天窗会使缓存更新。不是完整原 Level 光引擎。
- 加入36主物品槽、4装备状态槽、9格快捷栏,原GUI纹理和布局比例,库存按key安全保存。当前为方块库存,不含全部物品、工具、合成与装备属性。
- 加入创造方块选取、背包转移、持普通完整方块与放置保存。创造模式放置不消耗数量,不冒充生存掉落/硬度系统。
- 原距离已分开核对:当前创造方块距离5;创造实体选取6。原本地 SurvivalMode 是4,联机非创造方块是4.5,普通实体选取3,不能混称一种距离。
- 预览页点“创建新世界”,选择尺寸和种子。
- 世界模式左下四向移动,拖动画面看向,右下跳跃、挖掘、攻击、放置;支持原生多触点。
- 顶部“背包”打开原生面板;点槽,再点另一槽进行转移/交换。
- 背包内“创造物品”打开独立物品目录,填入当前快捷栏槽;默认新库存为空。预览页的“渲染状态预览”不用于填背包。
- 点击底部快捷栏选择0–8槽。默认1×原纹理比例是本机触屏适配选择,不代表已还原原控制台GUI缩放设置。
- “保存退出”回预览,“继续本次世界”恢复当前会话最近世界。页面隐藏/退出和定期自动保存。
世界位于设备 /tmp/mc/world-…/。/tmp 是临时目录,重启可能丢失存档。
四档宽度:Classic864、Small1024、Medium3072、Large5120,默认Large;建造高度256、基础地形生成128、海平面63。源坐标以世界中心为零,应用逻辑坐标有明确偏移。
按区块懒生成并限制缓存;1.0.9按渲染半径使用48/80/112×256窗口,默认48×256×48,不一次性分配整个世界。独立旧调用仍可使用原96×256×96窗口。
- 原始 RNG、噪声、biome Layer/Voronoi、密度和表层已接入。
- 村庄、沙漠/丛林神庙、沼泽小屋采用原选址与建筑函数,存在记录过的 canonical whole-piece 高度与RNG调度差异;无战利品、村民、女巫AI或红石机关模拟。
- v3加入原树/植物 Feature 子集;未运行完整原生成装饰阶段。
- v4(新建世界默认)加入原
LargeCaveFeature/CanyonFeature洞穴峡谷及BiomeDecorator::decorateOres矿物(煤/铁/金/红石/钻石/青金石及泥土/沙砾团)。矿物使用原重播种链后的独立随机流,省略湖泊/地牢等前置消耗,因此矿脉数量、大小与深度按原规则,具体位置与完整原世界不同;湖泊、地牢、废弃矿井、要塞及其余装饰仍未移植。 - v1地层、v2结构、v3装饰、旧64×48×64自写世界打开时保持原基准,不自动加树、洞穴、矿物或升级地形。
- 地形修改按原存档调色板key重新映射;支持旧mine-only记录和新版放置记录。目录链接、坏头、无效数据和外部文件替换会被拒绝。
猪/牛/羊/鸡/僵尸默认生命值为10/10/8/4/20 point。普通徒手基础伤害1,默认僵尸护甲减伤后为0.92;有原规则的受伤间隔和受伤反馈,死亡/血量可保存。
生物游走、出生人口及物理是轻量平台适配,不是完整原Mob/Goal系统;夜间僵尸会直线追击并近战玩家(攻击力3、20刻冷却、需视线),但没有寻路、装备、药水、掉落或20tick死亡动画。完整Steve“角色预览”仍不是第三人称跟随相机。
ARM64 Linux本机 gcc/g++,不交叉编译。依赖 CMake、GCC、Python3/Pillow、Node.js、pnpm。
cd ~/1234/Minecraft
pnpm install --frozen-lockfile
bash tools/build.sh --native
pnpm -C ui exec tsc --noEmit
cmake -S tests/native -B jsapi/build/native-tests -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build jsapi/build/native-tests --parallel 4
ctest --test-dir jsapi/build/native-tests --output-on-failure1.0.10最终联合回归 19/19通过(1.0.9为16/16、1.0.8为13/13)。新增物品归一/安全迁移、放置metadata和真实物品图标回归。长生成测试因完整装饰、缓存、存档验证耗时较长,timeout为600秒。
独立模块还有源函数字节/资源哈希审计与UBSan验证;ASan在当前宿主main之前因地址空间映射失败,没有计为通过。
产物:dist/minecraft-native-aarch64.amr。
scp -O dist/minecraft-native-aarch64.amr root@192.168.161.167:/tmp/minecraft.amr
ssh root@192.168.161.167 'miniapp_cli install /tmp/minecraft.amr'
ssh root@192.168.161.167 'miniapp_cli start 6d696e6563726166'1.0.8已实际安装/启动,均返回0,两端SHA-256一致:
43007e2f488ac4aed71143ab89cf004fba42717486ce92150c8429f8257f2926。
dist/device-latest-1.0.8.png:设备最新画面。dist/device-inventory-1.0.8.png:设备原纹理背包。dist/device-held-1.0.8.png:设备持物。dist/original-presentation-validation-1.0.8.json:完整验证及限制。
实际真机v3存档副本已重新加载:窗口122原木、1283树叶、2809交叉植物;第0槽snow×64,9处非空气放置和6处移除记录。数字是该次副本采样,不是固定世界内容。
首次新建/跨区块/光照重建可能有明显停顿,设备首次世界窗口曾记录1.1提交FPS;这不是稳定帧率。当前没有给出可信的最终设备稳定FPS。主机同存档热帧约7.1ms,不能代替设备性能或面板刷新率。
旧GitHub workflow尚未针对这些原模块更新/运行;已验证入口是本机--native。