【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分钟恶魔之星也消失了。

2019-04-13_19.11.00.png

得出结论

调用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
广告
将在 10 秒后关闭
bannerAds