@Override
    public void onNeighborBlockChange(Block blockChanged) {
        int meta = tileEntity.getBlockMetadata();
        boolean valid = isRailValid(getWorld(), tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord, meta);
        if (!valid) {
            Block blockTrack = getBlock();
            blockTrack.dropBlockAsItem(getWorld(), tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord, 0, 0);
            getWorld().setBlockToAir(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord);
            return;
        }

        if (blockChanged != null && blockChanged.canProvidePower()
                && isFlexibleRail() && RailTools.countAdjecentTracks(getWorld(), tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord) == 3)
            switchTrack(false);
        testPower();
    }