Question:
Comment pré-générer un monde Minecraft?
Fox32
2011-10-12 20:36:27 UTC
view on stackexchange narkive permalink

Je veux créer un nouveau monde sur notre serveur Minecraft, mais l'exploration d'une nouvelle carte et la génération de terrain provoque un décalage énorme.

Existe-t-il un moyen de pré-générer les morceaux (avec le générateur de carte par défaut) dans un rayon spécifique autour du spawn?

Je recherche un plugin ou un outil Bukkit que je peux utiliser sur notre machine Linux. Un outil hors ligne que je peux exécuter sur ma machine locale est également acceptable.

Dix réponses:
#1
+28
Brant
2011-10-12 20:57:06 UTC
view on stackexchange narkive permalink

Dans ce fil sur Reddit, j'ai trouvé un script de ligne de commande qui générera un terrain en redémarrant à plusieurs reprises un serveur avec des points d'apparition différents jusqu'à ce que la zone que vous spécifiez soit remplie. Cela semble être exactement ce que vous recherchez.

Il existe également un plugin Bukkit nommé WorldGenerationControl qui peut le faire sur un serveur en direct.

pour les futurs lecteurs, le script de ligne de commande (gist) n'existe pas et WGC est obsolète
Huer. C'est décevant.
le script de ligne de commande se trouve sur https://github.com/DMBuce/mcexplore
Merci beaucoup @glob!J'avais besoin d'un script comme celui-ci qui fonctionne très mal avec les serveurs modifiés hier soir.
Le [lien WorldGenerationControl] (http://dev.bukkit.org/server-mods/worldgenerationcontrol/) ne fonctionne plus
#2
+8
John Hopkins
2013-12-08 10:52:03 UTC
view on stackexchange narkive permalink

C'est lent, mais vous pouvez vous téléporter automatiquement sur tous les morceaux dans une zone spécifique de la carte pour les générer en utilisant Python et le module pexpect (que j'ai utilisé pour envoyer les commandes de téléportation).

Tout d'abord, faites une copie de vos données de jeu à des fins de test, puis ouvrez une invite de commande dans ce répertoire et procédez comme suit:

$ virtualenv venv

$ source venv / bin / activate

$ pip install pexpect

Collez ce code dans teleport-expect. py (ajustez le nom d'utilisateur et les plages xcoord et zcoord):

  #! / usr / bin / pythonimport sysimport pexpectimport time # définissez ceci sur votre nom d'utilisateur minecraftplayername = 'yourplayername'child = pexpect.spawn ( 'java -Xms2048M -Xmx2048M -jar minecraft_server.jar nogui') child.logfile = sys.stdoutchild.expect ('% s a rejoint le jeu'% playername) child.sendline ('gamemode 1% s'% playername) pour xcoord dans range (1000000, 1005000, 16): pour zcoord in range (1000000, 1005000, 16): ch ild.sendline ('tp% s% i 255% i'% (playername, xcoord, zcoord)) child.expect ('Teleported% s'% playername) # Temps entre les téléports. Une valeur plus petite signifie plus de stress pour le serveur. time.sleep (0.5) child.sendline ('dis tout fait!')  

$ python teleport-expect.py

Une fois le serveur démarre, connectez-vous au jeu. Vous devriez voir votre joueur se téléporter automatiquement un morceau à la fois dans la zone d'intérêt. La visite d'une zone de 5000 x 5000 prendra plusieurs heures.

Ce n'est pas un moyen rapide de générer une carte, mais bien de voir le paysage voler. Je voulais principalement tester le fonctionnement du serveur Minecraft dans une session pexpect. Beaucoup de potentiel pour d'autres automatisations (par exemple, surveiller les commandes créées par l'utilisateur sur un serveur vanilla)!

#3
+5
Morlok8k
2012-06-20 01:22:34 UTC
view on stackexchange narkive permalink

Minecraft Land Generator:

étend votre monde vanille actuel (ou modifié si vous avez les mods de serveur).

http://www.minecraftforum.net/ topic / 187737-générateur-de-terres-minecraft /

N'est plus pris en charge :( http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-tools/1261072-minecraft-land-generator?comment=1257
#4
+3
Zsub
2011-10-12 20:50:58 UTC
view on stackexchange narkive permalink

Une manière totalement vanille serait de générer un monde en solo et de l'explorer manuellement. Ce sera bien sûr beaucoup de travail :)

Je ne connais aucune autre méthode.

Si vous faites cela, il est beaucoup plus rapide de le faire en mode Créatif, où vous pouvez voler et créer des cartes à tout moment pour suivre vos progrès. Remplir une carte prend environ 10 minutes en vol pour environ 25 Mo de morceaux.
Ceci peut être combiné avec les commandes de téléportation [Single Player Commands '] (http://www.minecraftforum.net/topic/94310-181-single-player-commands-v2121-mcp-pack-updated/) pour réduire considérablement le temps nécessaire.
Je ne sais pas pourquoi c'est une réponse.OP est évidemment à la recherche d'une méthode pour pré-générer automatiquement son monde.L'explorer manuellement, même en mode créatif, est essentiellement l'exact opposé de cela.
#5
+2
Saiboogu
2011-12-10 18:42:11 UTC
view on stackexchange narkive permalink

Le plug-in WorldBorder pour Bukkit vous permet de définir une taille de carte prédéfinie (mesurée en rayon à partir du point d'apparition) et, éventuellement, générer automatiquement le terrain à l'intérieur de vos frontières.

Il génère automatiquement un terrain en arrière-plan pendant que le serveur fonctionne. Il a fallu environ 24 heures pour générer mon monde autour de 3000 blocs de rayon sur un serveur quad core avec 4 Go alloués à Minecraft. Il semblait que la mémoire était le facteur limitant - elle évoluerait plus vite que les routines GC de Java et devait faire une pause périodiquement pour attendre que la mémoire se libère à nouveau. Forcer un redémarrage du serveur lorsque l'utilisation de la mémoire était élevée l'a accéléré, mais à la fin, je l'ai simplement ignoré et il a réussi à se terminer seul.

Je recommande d'utiliser WorldGenerationControl, c'est beaucoup plus rapide! Nous avons combiné des plugins de stand sur notre serveur, WorldGenerationControl pour générer le monde et WorldBorder pour le garder en taille.
@Fox32 Je vais devoir vérifier cela, merci.
Le plugin WorldBorder est maintenant obsolète
#6
+1
Aqueries
2014-08-17 10:46:58 UTC
view on stackexchange narkive permalink

Une meilleure façon de faire cela maintenant, est de vous procurer une copie de mcedit sur http://www.mcedit.net/ et d'ouvrir votre monde avec cela. téléchargez une copie du fichier jar du serveur minecraft (car celui fourni avec MCedit provient de la version 1.5.2) et placez-le dans \ ServerJarStorage \ release. assurez-vous que le fichier jar s'appelle "minecraft_server.jar". Ensuite, utilisez simplement l'outil générateur de morceaux pour générer de nouveaux morceaux d'une carte existante. Ou vous pouvez utiliser mcedit pour générer une nouvelle carte complètement.

#7
+1
juliantjan
2017-06-17 09:37:34 UTC
view on stackexchange narkive permalink

enter image description here

  #! / usr / bin / python

import sys
import pexpect
temps d'importation

# définissez ceci sur votre nom d'utilisateur Minecraft
playername = 'yourplayername'

enfant = pexpect.spawn ('java -Xms2048M -Xmx2048M -jar serveur_minecraft.jar nogui')
child.logfile = sys.stdout
child.expect ('% s a rejoint le jeu'% playername)
child.sendline ('gamemode 1% s'% playername)

pour xcoord dans la plage (1000000, 1005000, 16):
    pour zcoord dans la gamme (1000000, 1005000, 16):
        child.sendline ('tp% s% i 255% i'% (nom de jeu, xcoord, zcoord))
        child.expect ('Teleported% s'% playername)
        # Temps entre les téléports.Une valeur plus petite signifie plus de stress pour le serveur.
        temps de sommeil (0,5)
child.sendline ('dis tout fait!')
 
#8
+1
Matthew
2020-03-09 10:21:18 UTC
view on stackexchange narkive permalink

Il n'y a aucun moyen de pré-générer les morceaux.Les morceaux sont générés UNIQUEMENT lorsqu'un joueur se trouve dans ce bloc et à une distance de rendu visuelle.Quant au décalage qui ne dure généralement que quelques jours de jeu et n'est généralement pas si grave sur les serveurs dotés d'un matériel adéquat.Dans tous les cas, la pré-génération du monde entier prendrait beaucoup de place.Une carte 50k x 50k représente environ 400 Go d'espace disque dur et le préréglage 29999984 prendrait environ 100 To d'espace disque dur.Faites simplement une grille tp de la zone que vous souhaitez générer et laissez le reste se produire au fur et à mesure que le jeu progresse.Vous pouvez utiliser des blocs de commande pour ce faire.Recherchez la vidéo sur YouTube.

#9
  0
abstrus
2019-05-20 07:50:27 UTC
view on stackexchange narkive permalink

Voici une version, inspirée de celle pexpect ci-dessus.

Pour exécuter, utilisez Python 3 et installez click (peut-être dans un environnement virtuel). Ensuite, trouvez de l'aide dans la ligne de commande:

  $ python explore.py --help
Utilisation: explore.py [OPTIONS]

  Parcourez votre monde Minecraft

Options:
  -p, --player TEXT Définit ceci comme un nom de joueur Minecraft connecté
  -s, --start TEXT Point de départ x: z
  -r, --radius INTEGER Largeur du monde que vous voulez générer
  --help Afficher ce message et quitter.
 

À partir d'un point, il téléportera un joueur dans une spirale extérieure par étape jusqu'à ce qu'une certaine largeur soit atteinte.

Le code ci-dessous suppose que votre monde s'exécute dans une image docker. Modifiez la fonction run_mc_command en fonction de votre hébergement.

C'est lent: générer un monde 1000x1000 équivaut à (1000/16) ^ 2 = 3906 se téléporte à au moins une demi-seconde chacun.

Voici le code:

  #! / usr / bin / python

à partir de l'exécution d'import de sous-processus

à partir du cycle d'importation d'itertools, compter

import clic


@ click.command ()
@ click.option ("- p", "--player",
              help = "Définir ceci comme un nom de joueur Minecraft connecté")
@ click.option ("- s", "--start",
              help = "Point de départ x: z",
              par défaut = "0: 0")
@ click.option ("- r", "--radius",
              help = "Largeur du monde que vous souhaitez générer",
              par défaut = 5000)
def main (joueur: str, début: str, rayon):
    "" "Parcourez votre monde Minecraft" ""
    start = start.split (":", 2)
    parsed_start = float (début [0]), float (début [1])

    click.echo ("Explorer le monde")
    click.echo (f "Puppeteering {player! s}")
    click.echo (f "À partir de {parsed_start! s}")
    click.echo (f "Jusqu'à ce que vous atteigniez {rayon! s} mètres de rayon (carré, bien sûr)")
    explore (joueur, parsed_start, float (rayon))


def explorer (player: str, start: tuple, width: float, step: float = 16) -> Aucun:
    "" "
    Voyagez dans le monde minecaft

    Args:
joueur: un joueur connecté sera téléporté. C'est son pseudo.
        start: Coordonnée de départ (x, z).
        width: Largeur du carré que vous souhaitez explorer.
        step: longueur des sauts. Par défaut, 16 blocs minecraft.
    "" "
    run_mc_command (f "création en mode jeu {player! s}")
    pour la position dans walk_spiral (start, step):
        run_mc_command (f "tp {player! s} {position [0]! s} 255 {position [1]! s}")
        distance = position [0] - début [0], position [1] - début [1]
        si distance [0] Largeur >:
            Pause


def run_mc_command (commande: str) -> Aucun:
    "" "
    Exécutez une commande de console Minecraft.

    Ici, vous pouvez personnaliser la base en fonction de l'endroit où votre monde est hébergé. Ce
    implémentation utilise l'image docker itzg / minecraft-server.

    Args:
        commande: une commande Minecraft, telle que "dire bonjour"
    "" "
    courir(
        [
            "docker", "exec", "mc", "rcon-cli",
            commander
        ]
    )


def walk_spiral (start: tuple, step: float = 16) -> tuple:
    "" "
    Générez des positions vers lesquelles vous téléporter.

    C'est un générateur infini.

    Args:
        start: Position de départ
        step: longueur des sauts.

    Rendements:
        Position pour se téléporter dans une spirale.
    "" "
    current_movement_x, current_movement_z = début
    mouvements = mouvements_spirales ()

    tandis que Vrai:
        rendement current_movement_x, current_movement_z
        next_x_movement, next_y_movement = next (mouvements)
        current_movement_x + = next_x_movement * étape
        current_movement_z + = next_y_movement * étape


def spiral_movements ():

    def _spiral_distances ():
        pour les pas en compte (1):
            pour _ dans (0, 1):
                étapes de rendement

    def _directions_horaire ():
        gauche = (-1, 0)
        droite = (1, 0)
        haut = (0, -1)
        bas = (0, 1)
        cycle de retour ((droite, bas, gauche, haut))

    pour la distance, direction dans zip (_spiral_distances (), _clockwise_directions ()):
        pour _ dans la plage (distance):
            direction d'élasticité


si __name__ == "__main__":
principale()
 
#10
  0
Steffen Bauer
2020-06-23 21:03:25 UTC
view on stackexchange narkive permalink

Dans cette vidéo, un script Datapack / Commandblock est montré qui téléporte un joueur pour générer des morceaux.Cette méthode n'est pas très rapide mais elle fait le travail.

Ici, vous pouvez le télécharger.

La version 1.15 V2 a fonctionné pour moi en 1.16



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...