Minecraft Forge - 将块放在onItemUse上

时间:2018-02-12 22:55:37

标签: minecraft minecraft-forge

我试图让我的自定义项目在使用时放置水:

{{1}}

然而,当我右键单击时,项目被使用(动画播放)但没有放置水,我使用的是Minecraft 1.12.2和Forge 14.23.2.2613。

1 个答案:

答案 0 :(得分:1)

hitX hitYhitZ与执行操作的世界位置无关。它们是单击块中的部分值,用于根据单击块执行操作(例如,数字键盘上的哪个按钮)。

如果我们查看ItemBlockSpecial(处理Cake,Repeater,Brewing Stands和Cauldrons等项目),我们会找到以下代码:

public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
{
    IBlockState iblockstate = worldIn.getBlockState(pos);
    Block block = iblockstate.getBlock();

    // snow layer stuff we don't care about
    if (!block.isReplaceable(worldIn, pos))
    {
        pos = pos.offset(facing);
    }
    // placement code
}

这里需要注意的重要一点是pos参数是直接使用的,而如果点击的块不可替换,则由facing参数修改(例如Tall Grass是可替换的,石不是。)

如果ItemBlockSpecial对您来说不够(即您无法将您的项目设为ItemBlockSpecial的实例),那么它用于执行操作的代码可能仍然是