add null checks
nothing used isUnrouted and changeDestination is only used to clear...
add router getCachedPipe() that doesn't try to access world
move router.clearPipeCache() to onChunkUnload
clear pipe cache in destroy() before kicking neighbors' recheckAdjacent