【问题标题】:Minecraft Forge - Place block onItemUseMinecraft Forge - 放置方块 onItemUse
【发布时间】:2018-02-13 14:03:19
【问题描述】:

我正在尝试让我的自定义物品在使用时放置水:

public class Beaker extends Item implements IHasModel {
  public Beaker(String name, CreativeTabs tab, int maxStackSize) {
    setUnlocalizedName(name);
    setRegistryName(name);
    setCreativeTab(tab);
    setMaxStackSize(maxStackSize);

    ItemInit.ITEMS.add(this);
  }

  @Override
  public void registerModels() {
    Main.proxy.registerItemRenderer(this, 0, "inventory");
  }

  @Override
  public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
    BlockPos clickedBlock = new BlockPos(hitX, hitY, hitZ);
    worldIn.setBlockState(clickedBlock, Blocks.WATER.getDefaultState());
    return EnumActionResult.SUCCESS;
  }
}

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

【问题讨论】:

    标签: minecraft minecraft-forge


    【解决方案1】:

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

    如果我们查看ItemBlockSpecial(它处理蛋糕、中继器、酿造台和大锅等物品),我们会发现以下代码:

    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参数修改(例如高草是可替换的,石头是不可替换的) .

    如果ItemBlockSpecial 对您来说还不够(即您不能让您的项目成为ItemBlockSpecial 的实例),那么它用来做事的代码可能仍然是。

    【讨论】:

    • canItemEditBlocks() 是否也需要被覆盖才能返回 true?
    • 我设法放置了水,但即使我使用的是 Blocks.FLOWING_WATER,它也是静止的。
    • 没关系,把EnumActionResult.PASS改成EnumActionResult.SUCCESS就行了。
    • @Skgland 也许,我自己并没有弄乱这些东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多