当你在Minecraft里遇到十二进制ID时
凌晨三点半,界进咖啡杯已经见底,制物我盯着工作台上散落的界进红石粉突然笑出声——这玩意儿在代码里居然是用十二进制ID"55"表示的。得,制物今晚又别想睡了,界进干脆把Minecraft里这些隐藏的制物数字密码全扒出来聊聊。
为什么是界进十二进制?
2009年Notch刚开始写Minecraft时,估计自己都没想到这游戏能火成这样。制物当时为了省内存,界进物品ID直接用十六进制数字表示,制物后来物品爆炸式增长到400多种,界进官方才在1.7.2版本搞了个全局物品ID系统。制物但老玩家都知道,界进游戏底层至今还留着些十二进制的制物幽灵。
举个例子,界进你绝对想不到:
- 圆石在代码里叫"3"
- 火把是"50"
- 最离谱的是水桶——"326"这个数字看着就头大
这些数字怎么来的?
根据Mojang早期技术文档《Minecraft Code Book》记载(这书现在绝版了),最初是按物品添加顺序直接赋值。木头是1号,石头是2号...到第12种物品时,程序员偷懒直接用了"C",结果某些代码段就残留了这种混合进制。
物品 | 十进制ID | 十二进制ID |
泥土 | 3 | 3 |
工作台 | 58 | 4A |
钻石剑 | 276 | 1B0 |
现在还能看到这些ID吗?
去年帮表弟装模组时意外发现,按住F3+H调出高级提示框,快速切换物品栏还是能看到一闪而过的原始ID。不过要我说,与其折腾这些,不如记住几个实用的:
- 末影珍珠:368(十二进制的"268")
- 附魔台:116(十二进制的"98")
- 命名牌:421(这个在十二进制里是"2B1",念出来像"土鳖"...)
数据包作者的噩梦
上周在Reddit看到个暴躁老哥的帖子:"写数据包时用/give @p minecraft:12 居然给的是火把!"笑死,这就是踩到十二进制的坑了。现在官方推荐用命名空间ID,比如minecraft:torch
,但有些老模组还是沿用数字ID。
这些数字有什么用?
说实话,对普通玩家屁用没有。但对做红石机械的硬核玩家来说,知道发射器是"23"(十二进制1B)可以快速计算物品过滤器;模组作者改json文件时也常要查这些老ID。有次我在服务器用/give
命令,输错成十六进制ID给了自己64组钻石块,差点被当作弊封号...
窗外天都快亮了,最后分享个冷知识:Notch的猫叫Newton,所以早期版本里猫的ID"98"其实是纪念牛顿在《自然哲学的数学原理》里用的十二进制计算。当然,这可能是社区编的段子——毕竟现在连苦力怕的ID都改成minecraft:creeper
了。
咖啡机又开始作响,突然发现工作台上的红石比较器显示着"404"——这可不是网页错误,在十二进制里它代表...算了,改天再聊这个。