I currently have the following script:
//TODO - Add more biomes and somehow have the player underground
// Also somehow prevent floating structures in giant caves
const spawnableBiomes = [
"minecraft:lush_caves"
]
// Need to prevent fake players from generating structures if fake players even call this
NativeEvents.onEvent('net.neoforged.neoforge.event.entity.player.PlayerSetSpawnEvent', event => {
/**
* @type {import('net.minecraft.world.entity.player')} player
*/
const player = event.getEntity()
const blockPos = event.getNewSpawn()
player.persistentData.spawnInfo = {NewSpawn: { x: blockPos.x, y: blockPos.y, z: blockPos.z }}
})
PlayerEvents.loggedIn(event => {
const player = event.player
if (!player.persistentData.firstSpawned) {
player.persistentData.firstSpawned = true
// user safety
player.setNoGravity(true)
player.invulnerable = true
//TODO - make the list random for spawns
const blockPos = MoreUtils.findBiome(player.position, player.level, spawnableBiomes, 128)
player.runCommandSilent(`tp ${blockPos.x} ${blockPos.y} ${blockPos.z}`)
player.persistentData.spawnInfo = {DefaultSpawn: { x: blockPos.x, y: blockPos.y, z: blockPos.z }}
//TODO - summon structure here
player.setNoGravity(false)
player.invulnerable = false
player.runCommandSilent('spawnpoint @s')
}
})
// Change maybe?
BlockEvents.broken(event => {
if (event.block.getId().contains("_bed")) {
const player = event.getEntity()
if (player.persistentData.spawnInfo.contains("NewSpawn")) {
player.persistentData.spawnInfo.remove("NewSpawn")
}
}
})
Currently that script does what it's intended: find a biome to go to and spawn there. I do spawn underground. However how do I make spawns more around the world and create a structure around them?

