MC百科社群

标题: 为啥物品耐久最大是32767? [打印本页]

作者: sxjsxj    时间: 2016-5-31 20:51
标题: 为啥物品耐久最大是32767?
本帖最后由 sxjsxj 于 2019-7-5 21:14 编辑

RT
难道数据类型是用short的么?
(谅解我问题有点多。。)

远古更新:
该帖所说的“耐久”是指百科物品资料,并非MC,勿误解。


作者: youyihj    时间: 2016-5-31 22:29
32767(10)=11111111111111(2)
作者: Enterman    时间: 2016-11-11 23:38
因为设置最高是32767
作者: sxjsxj    时间: 2016-11-12 13:42
Enterman 发表于 2016-11-11 23:38
因为设置最高是32767

不见得,话说现在该bug已经好了。
作者: 圣之光dd    时间: 2016-11-13 15:14
应该是函数的极限值
作者: 1911226481    时间: 2017-1-11 22:41
32768是2的15次方,32767是32768-1了吧
作者: Zi_Min    时间: 2017-2-2 21:28
因为32767是二进制的11111111111111
作者: lzh1104    时间: 2017-2-3 20:58
数据类型最大值, 显然使用了short.

  1. short shmax = Short.MAX_VALUE;
  2. System.out.println("short max="+shmax);

  3. 输出:
  4. short max=32767
复制代码

作者: 中兴安岭    时间: 2017-2-4 09:10
现在已经突破这个限制了,比如我把小型锂电池的耐久设置为100000
作者: 中兴安岭    时间: 2017-2-19 18:23
现在这个帖子可以改成“为啥物品耐久最大是2147483647”了233,不过真的有耐久超过这个值的物品……这该怎么办
2147483647是32位操作系统中最大的符号型整型常量……

作者: NoNamePlay    时间: 2017-2-20 12:15
耐久超过这个值的物品应该就是无限耐久的东西了?
作者: 封兽·鵺    时间: 2017-2-24 22:31
NoNamePlay 发表于 2017-2-20 12:15
耐久超过这个值的物品应该就是无限耐久的东西了?

并不是
作者: NoNamePlay    时间: 2017-2-24 22:42
封兽·鵺 发表于 2017-2-24 22:31
并不是

举个栗子?qvq mod见得不多 记得比较清楚的耐久值感人的东西就是ic2的转子了
作者: 封兽·鵺    时间: 2017-2-24 22:53
NoNamePlay 发表于 2017-2-24 22:42
举个栗子?qvq mod见得不多 记得比较清楚的耐久值感人的东西就是ic2的转子了 ...

超过是无效的 会炸
作者: NoNamePlay    时间: 2017-2-24 23:13
封兽·鵺 发表于 2017-2-24 22:53
超过是无效的 会炸

那可能是耐久显示mod卖萌... 把转子拿在手上用耐久显示看会看到六位数的耐久
作者: 中兴安岭    时间: 2017-3-4 21:09
NoNamePlay 发表于 2017-2-24 23:13
那可能是耐久显示mod卖萌... 把转子拿在手上用耐久显示看会看到六位数的耐久 ...

我们格雷科技的零点模块,耐久2000000000000
作者: NoNamePlay    时间: 2017-3-4 22:51
中兴安岭 发表于 2017-3-4 21:09
我们格雷科技的零点模块,耐久2000000000000

那大概就是显示mod卖萌了
作者: 1911226481    时间: 2017-6-29 14:31
中兴安岭 发表于 2017-3-4 21:09
我们格雷科技的零点模块,耐久2000000000000

那应该算储电量吧,毕竟还有更高的
作者: ueyudicd    时间: 2017-10-28 19:41
没有分清楚stackTagCompound和meta的区别;
MC原生的meta值是以NBTTagShort的形式储存,正整数范围只到32767,超出的部分尽管可以强制设置,但是在储存游戏时这部分数据会丢失;
然而meta和itemDamage不同,meta是MC提供的一种附加值,ItemDamage由一个method获得,这使得任何一个int值(无论来源于哪里)都可以作为“damage”返回,这主要体现在工具的耐久,物品附加值等属性上,也可以用于渲染耐久条等;
但是上述功能都可以被复写,例如IC2的电量条就没有使用原版的meta,而是从NBT中获取电量后按百分比设置了物品的meta值(0~15),这时这个meta其实就不是独立的了。
作者: GregoriusT    时间: 2017-10-28 19:58
ueyudicd 发表于 2017-10-28 19:41
没有分清楚stackTagCompound和meta的区别;
MC原生的meta值是以NBTTagShort的形式储存,正整数范围只到3276 ...

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

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

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

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

【1】:例如GT的耐久不是原版的那套系统,他自己写了一套;
【2】:其实我觉得meta和damage的区别的存在是一个历史遗留问题,不过现在也不重要了;
作者: DF_Frenk    时间: 2019-7-1 12:29
ic2的转子就是这样,很迷我也没找到解决办法,总不能把转子ban了吧
作者: 坩埚(钨钢)    时间: 2019-7-17 22:23
中兴安岭 发表于 2017-2-19 18:23
现在这个帖子可以改成“为啥物品耐久最大是2147483647”了233,不过真的有耐久超过这个值的物品……这该怎 ...

有的,gt吊炸天电池是2∧64-1,不过那不是损伤值,那只是单纯的一个数组
作者: newbee    时间: 2019-8-14 06:47
龙之进化:8级能量核心储能:2^63-1RF
作者: shaokeyibb    时间: 2019-10-5 22:19
因为Java int值最高只能是32767.....
作者: 洞穴夜莺    时间: 2020-8-22 10:50
shaokeyibb 发表于 2019-10-5 22:19
因为Java int值最高只能是32767.....
  1. jshell> Integer.MAX_VALUE
  2. $1 ==> 2147483647
复制代码

怎么说?
作者: 赤刃泉润CQR    时间: 2020-8-29 00:43
洞穴夜莺 发表于 2020-8-22 10:50
怎么说?

32767是16位整型数(int16)能表达的最大数,而你这个是32位的
作者: 洞穴夜莺    时间: 2020-10-5 16:25
赤刃泉润CQR 发表于 2020-8-29 00:43
32767是16位整型数(int16)能表达的最大数,而你这个是32位的

对呀,所以是short不是int嘛

作者: Xiaolu    时间: 2021-3-6 20:41
解释一下,2147483647是2^31-1,即 2^(32-1) - 1,所以是32位整数的最大值,也是32位操作系统中最大的符号型整型最大值。
之后说32767,是较老电脑的限制,以前有16位电脑,16位整数最大值是 2^(16-1) - 1 = 2^15 - 1 = 32768 - 1 = 32767,所以最早的时候物品耐久最大时32767.
作者: 混沌飞龙    时间: 2021-3-14 14:27
应该是在配置文件里有吧,一个极限,就像高度限制一样
作者: 死念    时间: 2021-7-28 12:06
32768-1(二进制11111111111111)
作者: heipiao    时间: 2021-8-18 13:46
中兴安岭 发表于 2017-2-19 18:23
现在这个帖子可以改成“为啥物品耐久最大是2147483647”了233,不过真的有耐久超过这个值的物品……这该怎 ...

32位系统用两个寄存器表示64位数
作者: QQ酱250698    时间: 2021-9-5 11:05
youyihj 发表于 2016-5-31 22:29
32767(10)=11111111111111(2)

32767 + 1 = 2 ^ 15 =32768




欢迎光临 MC百科社群 (https://bbs.mcmod.cn/) MC百科|最大的MineCraft中文模组百科