#How to make players spawn farther and spawn a structure around them?

22 messages · Page 1 of 1 (latest)

analog pollen
#

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?

red sageBOT
#

Once your ticket has been resolved, please close it with </ticket close:1054771505520717835> command!

analog pollen
#

bump

analog pollen
#

bump once more

analog pollen
analog pollen
#

I'm bumping with random gifs now

#

I still refuse to ask some AI for this as they are stupid

analog pollen
#

bump

hexed holly
#

i sure do hope someone helps you

rich otter
#

for safe spawn locations take a look at this /rtp example script, you'll need to teleport them to a safe location randomly in a radius (might need to tie it in to your biome finder logic), then you just need to worry about the structure placement which would be done manually through StructurePlaceSettings and ServerLevel @analog pollen

var StructurePlaceSettings = Java.loadClass("net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings");
ItemEvents.rightClicked(event => {
    let { level, level: { random }, player } = event
    let /**@type {Internal.ServerLevel} */ serverLevel = level
    let pos = player.blockPosition();
    var manager = serverLevel.getStructureManager();
    var template = manager.getOrCreate(new ResourceLocation("minecraft:village/plains/houses/plains_small_house_1"));

    var settings = new StructurePlaceSettings()
        .setRotation("none")
        .setMirror("none")
        .setIgnoreEntities(false);
    template.placeInWorld(
        serverLevel,
        pos,
        pos,
        settings,
        random,
        3
    );
})```
and if you want to do jigsaw structures then that would be a bit different with [JigsawPlacement](https://lexxie.dev/neoforge/1.21.1/net/minecraft/world/level/levelgen/structure/pools/JigsawPlacement.html) class.
analog pollen
#

Thanks :D
Will try that out

#

I should try using jigsaw placement stuff for once as I never used those before

#

youtube here I come

rich otter
#

np, thank @jade summit for bringing you back from the dead with a bumb heh

jade summit
#

das me