我试图让我的自定义项目在使用时放置水:
{{1}}
然而,当我右键单击时,项目被使用(动画播放)但没有放置水,我使用的是Minecraft 1.12.2和Forge 14.23.2.2613。
答案 0 :(得分:1)
hitX
hitY
和hitZ
与执行操作的世界位置无关。它们是单击块中的部分值,用于根据单击块执行操作(例如,数字键盘上的哪个按钮)。
如果我们查看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
的实例),那么它用于执行操作的代码可能仍然是