【Minecraft Forge 2768】setNoDespawn, the process where items do not despawn, actually despawns them (bug?). 【Minecraft Forge 2768】setNoDespawn的处理,物品实际上会消失(有 bug 吗?)
环境
-
- Minecraft 1.12.2
- forgeBin-1.12.2-14.23.5.2768.jar
背景 – 背景信息
为了防止物品消失,处理被写入在EntityItem.setNoDespawn中。
在原版游戏中,只适用于凋零掉落物品,其写法如下。
protected void dropFewItems(boolean p_dropFewItems_1_, int p_dropFewItems_2_) {
EntityItem entityitem = this.dropItem(Items.NETHER_STAR, 1);
if(entityitem != null) {
entityitem.setNoDespawn();
}
}
在维基百科上有关于无尽之星不会消失的信息。
https://minecraft-ja.gamepedia.com/%E3%82%A6%E3%82%A3%E3%82%B6%E3%83%BC#.E3.83.89.E3.83.AD.E3.83.83.E3.83.97
这个下界之星不会消失或因爆炸而消失。
中文版本也有
枯萎了的怪物在死亡时会掉落下界之星,直到被拾起之前,它不能消失或被爆炸摧毁。
某个地方。
请问您有任何问题吗?
顺便提一下,我对setNoDespawn的内容有些疑问。
public void setNoDespawn() {
this.age = -6000;
}
年龄(age)是指从生成物品实体开始经过的游戏刻数,从0开始每刻自增一次。但如果它的值为-32768,则不会增加(就像“勇者斗恶龙”游戏一样)。当调用EntityItem.setAgeToCreativeDespawnTime时,年龄会被设置为4800(即4分钟)。也就是说,在创造模式下,投掷的物品将在1分钟内消失。
此外,还有一个名为”lifespan”的变量存在,并初始化为6000。当age超过lifespan时,会触发消失效果。
将年龄设置为-32768将变得永葆青春,但不知为何在setNoDespawn中将其设为-6000。这似乎表示经过12000计数(10分钟)后会消失。
实验结果
我尝试击败巫妖之后,确实是先消失了比恶魔之星更早坏掉的地狱砖,然后大约过了5分钟恶魔之星也消失了。
得出结论
调用setNoDespawn时,当前年龄将减少5分钟,结果将导致等待时间直到消失为10分钟。除非将lifespan设为一个非常大的数,否则将发生消失。击败凋零怪后,下界之星将消失(目前适用于Forge14.23.5.2768)。
这种现象有时候是众所周知的。
-
- https://github.com/MinecraftForge/MinecraftForge/issues/5628
- https://github.com/ModCoderPack/MCPBot-Issues/issues/607
有一个调用这个MOD的存在。
- https://github.com/BluSunrize/ImmersiveEngineering/blob/3f111fcb1965c64d7dad98f14a709cbcdc270b0f/src/main/java/blusunrize/immersiveengineering/common/blocks/metal/TileEntityConveyorVertical.java#L77
然而,实际上不知道是因为不工作,还是出于其他原因,在另一个地方,他们采取了一种策略,只要接触到他们,就会将年龄固定在四分钟内。
- https://github.com/BluSunrize/ImmersiveEngineering/blob/34750c830469f61dd0caed4b8a010eff1be29cea/src/main/java/blusunrize/immersiveengineering/common/blocks/metal/conveyors/ConveyorVertical.java#L224