= 创作分享 =
编程开发
为啥物品耐久最大是32767?
sxjeru

为啥物品耐久最大是32767?

 关闭
sxjeru 于 2016-5-31 20:51 ( 7年前 ) [复制链接] [显示全部楼层] [打印]
10351 1
ueyudicd
没有分清楚stackTagCompound和meta的区别;
MC原生的meta值是以NBTTagShort的形式储存,正整数范围只到32767,超出的部分尽管可以强制设置,但是在储存游戏时这部分数据会丢失;
然而meta和itemDamage不同,meta是MC提供的一种附加值,ItemDamage由一个method获得,这使得任何一个int值(无论来源于哪里)都可以作为“damage”返回,这主要体现在工具的耐久,物品附加值等属性上,也可以用于渲染耐久条等;
但是上述功能都可以被复写,例如IC2的电量条就没有使用原版的meta,而是从NBT中获取电量后按百分比设置了物品的meta值(0~15),这时这个meta其实就不是独立的了。
发表于 2017-10-28 19:41:50 | 显示全部楼层

回复 | 举报

ueyudicd
GregoriusT 发表于 2017-10-28 19:58
问一下,附加值、metadata、耐久值是一个东西吗?如果不是那应该怎么区分

meta是ItemStack的一个不能直接访问的field,然后哦Item将这个封包成了damage【1】;
附加值这个概念在源码中不体现,就这样……

事实上MC有些代码很恶心的,因为把很多概念混杂在了一起,弄得乱七八糟的;

如果只是要玩游戏(甚至是魔改,写资源包,汉化什么的),只需要知道“damage”是经过物品处理过一个区分同id物品的值;“meta”是用来区分同id方块的值就可以了【2】。

【1】:例如GT的耐久不是原版的那套系统,他自己写了一套;
【2】:其实我觉得meta和damage的区别的存在是一个历史遗留问题,不过现在也不重要了;
发表于 2017-11-5 13:46:54 | 显示全部楼层

回复 | 举报

百科目前不允许匿名发帖哦~ 请先 [ 登陆 ][ 注册 ] 吧~

本版积分规则

发新帖
  • 回复
  • 点评
  • 评分

[ MC百科(mcmod.cn) 除另有声明,所有开放公共编辑的内容均使用 BY-NC-SA 3.0 协议 ]

Minecraft百科CC协议
快速回复 返回顶部 返回列表