无法检查在 Minecraft Forge 中破坏了哪种方块

Can't check what kind of block was broken in Minecraft Forge

我是 Java 的编程新手,我正在尝试学习如何使用 Forge 创建 Minecraft 模组。我正在关注 Arun Gupta 和 Aditya Gupta 写的一本名为 Minecraft Modding With Forge 的书,并使用 Minecraft 1.7.10。当我这样做时:

import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.init.Blocks;
import net.minecraftforge.event.world.BlockEvent.BreakEvent;

public class DiamondOreTrap {
    @SubscribeEvent
    public void explode(BreakEvent event){
        if(event.state.getBlock() != Blocks.diamond_ore){
            return;
        }
        event.world.createExplosion(null,event.pos.getX(),event.pos.getY(),event.pos.getZ(),10,true);
    }
}

弹出两个错误:"pos" 无法解析为字段,"state" 无法解析为字段。

好吧,问题是这些字段是针对 MC 1.10+

event.state.getBlock() 引用了 1.10 中添加的 IBlockState,这样模组制作者就不必记住神奇的元数据数字,而是可以使用 FACING:NORTHLIT:true 等值.

对于 1.7.10 及更早版本,您必须手动使用块/元数据组合。可能这里的替换是event.block或者event.getBlock(),我没有设置1.7.10的环境,所以没法去查看。使用您的 IDE 检查事件对象并查看可用的属性以及它们是否需要 getter 函数。

同样地,event.pos.getX() 引用 BlockPos 对象,这些对象是围绕 X、Y、Z 坐标的不可修改的包装器,其中发生了某些事情。替换应该是 event.getX()event.posX 或类似的。

(如果有人碰巧使用 1.8 或 1.9,我不知道这些版本的代码库处于什么状态,在很多方面它与 1.7 相似,但在其他方面更像 1.10 和我没有为 1.8 或 1.9 做任何修改我只是完全无知)。

不过,我确实建议您更新到较新的版本。

您正在寻找仅存在于 minecraft Forge v1.8+ 中的 BlockEvent.BreakEvent 字段。

这里是the documentation for the event in 1.7。如您所见,pos 被分解为 xyz,您有 blockblockMetadata 而不是 state 在这个旧版本的 Minecraft 和 Forge 中。

我同意其他人的看法,如果您想进入 minecraft 模组,最好使用在线教程并使用 v1.12 模组,因为使用 1.7 的人数正在急剧下降。