Не работает стул. Сидение на блоке

Версия Minecraft
1.12.2
API
Forge
39
2
0
Пробовал копировать исходники mrcrayfish's со всеми его вспомогательными классами, не работает. При нажатии на блок немного дёргается камера, а псле нажатия на шифт телепортирует к блоку
Вот метод, который расположен в блоке
Метод onBlockActivated:
public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
    {
        if(!worldIn.isRemote) {
            EntitySeat sit = new EntitySeat(worldIn);
            sit.setPosition(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D);
            worldIn.spawnEntity(sit);
            playerIn.startRiding(sit);
        }
        return false;
    }
Вот код энтити
Код класса Entity:
public class EntitySeat extends Entity
{
    public int blockPosX;
    public int blockPosY;
    public int blockPosZ;

    public EntitySeat(World world)
    {
        super(world);
        setSize(0.5F,0.5F);
        this.noClip = true;
    }

    public EntitySeat(World world, double x, double y, double z, double y0ffset)
    {
        this(world);
        this.blockPosX = (int) x;
        this.blockPosY = (int) y;
        this.blockPosZ = (int) z;
        setPosition(x + 0.5D, y + y0ffset, z + 0.5D);
    }

    public EntitySeat(World world, double x, double y, double z, double y0ffset, int rotation, double rotationOffset)
    {
        this(world);
        this.blockPosX = (int) x;
        this.blockPosY = (int) y;
        this.blockPosZ = (int) z;
        setPostionConsideringRotation(x + 0.5D, y + y0ffset, z + 0.5D, rotation, rotationOffset);
    }

    public void setPostionConsideringRotation(double x, double y, double z, int rotation, double rotationOffset)
    {
        switch(rotation)
        {
            case 2:
                z += rotationOffset;
                break;
            case 0:
                z -= rotationOffset;
                break;
            case 3:
                x -= rotationOffset;
                break;
            case 1:
                x += rotationOffset;
                break;
        }
        setPosition(x, y, z);
    }

    @Override
    public double getMountedYOffset()
    {
        return this.height * 0.0D;
    }

    @Override
    protected boolean shouldSetPosAfterLoading()
    {
        return false;
    }

    @Override
    public void onEntityUpdate()
    {
        super.onEntityUpdate();

        if(!this.isBeingRidden() || this.world.isAirBlock(new BlockPos(blockPosX, blockPosY, blockPosZ)))
        {
            this.setDead();
            world.updateComparatorOutputLevel(getPosition(), world.getBlockState(getPosition()).getBlock());
        }

    }

    @Override
    protected void entityInit()
    {
    }

    @Override
    public void readEntityFromNBT(NBTTagCompound nbttagcompound)
    {
    }

    @Override
    public void writeEntityToNBT(NBTTagCompound nbttagcompound)
    {
    }

}
 
EntitySeat хоть зарегистрировали в игре?
Про это я забыл чё то, но теперь энтити умирает ещё до того как садишься на него, но если убрать код его убийства, то всё нормально, но он остаётся на месте. Как исправить? Вот код метода onEntityUpdate
Метод onEntityUpdate:
    @Override
    public void onEntityUpdate()
    {
        super.onEntityUpdate();

        if(!this.isBeingRidden() || this.world.isAirBlock(new BlockPos(blockPosX, blockPosY, blockPosZ)))
        {
            this.setDead();
            world.updateComparatorOutputLevel(getPosition(), world.getBlockState(getPosition()).getBlock());
        }
    }
 
Как исправить?
Уже разобрался, проблема была в том, что координата была то выше, то левее, то ещё где то, в итоге сделал такой вариант
Код метода onEntityUpdate:
        BlockPos pos = new BlockPos(this.getPosition());
        Block block = world.getBlockState(pos.down()).getBlock();
        if(!this.isBeingRidden() || block instanceof BlockAir)
        {
            this.setDead();
            world.updateComparatorOutputLevel(getPosition(), world.getBlockState(getPosition()).getBlock());
        }
 
Назад
Сверху