Позиция блока как вычислять

Версия Minecraft
1.11+
93
1
1
Здравствуйте, я не могу понять как работает передача позиции блока:
Java:
   @Override
    public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
        if() {
            worldIn.setWorldTime(0);
        }
        return super.onBlockActivated(worldIn, pos, state, playerIn, hand, facing, hitX, hitY, hitZ);
    }
мне в if нужно записать проверку например: мне нужно включить день если справа от моего блока стоит алмазный блок, как это сделать?
я расковырял кучу исходников, но чот тупенький и так и не допер как это работает...
 
Решение
@vixtor, примерно так:
Java:
    @Override
    public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {

        IBlockState posPlusX = worldIn.getBlockState(new BlockPos(pos.getX() + 1, pos.getY(), pos.getZ()));
        if (posPlusX != null && posPlusX.getBlock() == Blocks.DIAMOND_BLOCK) {
            worldIn.setWorldTime(0);
        }
        /*
        IBlockState eastBlock = worldIn.getBlockState(pos.east());
        if (eastBlock != null && eastBlock.getBlock() == Blocks.DIAMOND_BLOCK) {
            worldIn.setWorldTime(0);
        }
         */
        return super.onBlockActivated(worldIn, pos, state, playerIn...
Ты знаешь относительно чего у него лево? Если это записано в мете или в блок стейте, то доставай это и смотри на какой вектор он повернут. Потом вектор поворачиваешь на 90 градусов и смотришь что там за блок
 
@vixtor, примерно так:
Java:
    @Override
    public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {

        IBlockState posPlusX = worldIn.getBlockState(new BlockPos(pos.getX() + 1, pos.getY(), pos.getZ()));
        if (posPlusX != null && posPlusX.getBlock() == Blocks.DIAMOND_BLOCK) {
            worldIn.setWorldTime(0);
        }
        /*
        IBlockState eastBlock = worldIn.getBlockState(pos.east());
        if (eastBlock != null && eastBlock.getBlock() == Blocks.DIAMOND_BLOCK) {
            worldIn.setWorldTime(0);
        }
         */
        return super.onBlockActivated(worldIn, pos, state, playerIn, hand, facing, hitX, hitY, hitZ);
    }
 
timaxa007

Спасибо большое, как раз то что мне было нужно, но вроде так тоже работает и не лишних переменных:
Java:
    @Override
    public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {

        if(worldIn.getBlockState(new BlockPos(pos.getX() + 1, pos.getY() , pos.getZ())).getBlock() == Blocksmy.testBlock) {
            worldIn.setWorldTime(0);
        }
        return super.onBlockActivated(worldIn, pos, state, playerIn, hand, facing, hitX, hitY, hitZ);
    }
 
Назад
Сверху