Использование предмета

Версия Minecraft
1.12.2
API
Forge
7
1
0
Уже есть код, который исполняется при команде из чата.
Как использовать предмет в руке? Например набрать ведро воды.
 
7,099
324
1,510
Если хочешь добавить свою логику в момент наливания ведра, то скорее всего подойдет PlayerInteractEvent или FluidEvent.FluidFillingEvent

Если хочешь по команде потратить ведро воды из инвентаря и налить в мир, то
для работы с инвентарем player.inventory.getStackInSlot, player.inventory.setInventorySlotContents
для работы с миром world.setBlockState(new BlockPos(x,y,z), Blocks.WATER.getDefaultState())
 
7
1
0
Это будет работать только со стороны клиента?
Я пока сам накопал playerController.processRightClickBlock.
Если использовать processRightClick, то всё работает: происходит клик правой кнопкой мыши и ведро набирается. Но для этого нужно смотреть на блок. Поэтому пробую processRightClickBlock, но он не работает.
Внятной документации и примеров я не нашёл, поэтому хотелось бы узнать что не так.
processRightClickBlock:
EnumActionResult res = mc.playerController.processRightClickBlock(mc.player, mc.world, waterBlock, EnumFacing.UP, vec, EnumHand.MAIN_HAND);
В vec нужна переменная Vec3d. Откуда её взять?
в waterBlock - BlockPos блока воды.
При исполнении ничего не происходит
res - PASS
Вопрос: как правильно использовать processRightClickBlock?
 
7,099
324
1,510
7
1
0
Нужно на клиенте
Vec3d аргумент - это, видимо, направление взгляда
Скорее всего, но вопрос: как его получить, имея позицию игрока и позицию блока воды?
processRightClickBlock:
public EnumActionResult processRightClickBlock(EntityPlayerSP player, WorldClient worldIn, BlockPos pos, EnumFacing direction, Vec3d vec, EnumHand hand)
    {
        this.syncCurrentPlayItem();
        ItemStack itemstack = player.getHeldItem(hand);
        float f = (float)(vec.x - (double)pos.getX());
        float f1 = (float)(vec.y - (double)pos.getY());
        float f2 = (float)(vec.z - (double)pos.getZ());
        boolean flag = false;
 
Сверху