Frage:
Wie generiere ich eine Minecraft-Welt vor?
Fox32
2011-10-12 20:36:27 UTC
view on stackexchange narkive permalink

Ich möchte eine neue Welt auf unserem Minecraft-Server erstellen, aber das Erkunden einer neuen Karte und das Generieren von Gelände führt zu massiven Verzögerungen.

Gibt es eine Möglichkeit, die Chunks vorab zu generieren (mit dem Standardkartengenerator)? in einem bestimmten Radius um den Spawn?

Ich suche ein Bukkit-Plugin oder -Tool, das ich auf unserem Linux-Computer verwenden kann. Ein Offline-Tool, das ich auf meinem lokalen Computer ausführen kann, ist ebenfalls in Ordnung.

Zehn antworten:
Brant
2011-10-12 20:57:06 UTC
view on stackexchange narkive permalink

In diesem Thread auf Reddit habe ich ein Befehlszeilenskript gefunden, das durch wiederholtes Neustarten eines Servers mit unterschiedlichen Spawnpunkten Terrain generiert, bis der von Ihnen angegebene Bereich gefüllt ist. Dies scheint genau das zu sein, wonach Sie suchen.

Es gibt auch ein Bukkit-Plugin namens WorldGenerationControl, das dies auf einem Live-Server ausführen kann.

Für zukünftige Leser gibt es kein Befehlszeilenskript (Gist) und WGC ist veraltet
Boo. Das ist enttäuschend.
Das Befehlszeilenskript befindet sich unter https://github.com/DMBuce/mcexplore
Vielen Dank @glob!Ich brauchte ein solches Skript, das letzte Nacht sehr schlecht mit modifizierten Servern funktioniert.
Der [WorldGenerationControl-Link] (http://dev.bukkit.org/server-mods/worldgenerationcontrol/) funktioniert nicht mehr
John Hopkins
2013-12-08 10:52:03 UTC
view on stackexchange narkive permalink

Es ist langsam, aber Sie können sich automatisch über alle Blöcke in einem bestimmten Bereich der Karte teleportieren, um sie mit Python und dem pexpect-Modul (mit dem ich die Teleport-Befehle gesendet habe) zu generieren.

Erstellen Sie zunächst eine Kopie Ihrer Spieldaten zu Testzwecken, öffnen Sie dann eine Eingabeaufforderung in diesem Verzeichnis und führen Sie die folgenden Schritte aus:

$ virtualenv venv

$ source venv / bin / enabled

$ pip install pexpect

Fügen Sie diesen Code in teleport-expected ein. py (passen Sie den Spielernamen und die Bereiche xcoord und zcoord an):

  #! / usr / bin / pythonimport sysimport pexpectimport time # Setzen Sie dies auf Ihren Minecraft-Benutzernamenplayername = 'yourplayername'child = pexpect.spawn ( 'java -Xms2048M -Xmx2048M -jar minecraft_server.jar nogui') child.logfile = sys.stdoutchild.expect ('% s ist dem Spiel beigetreten'% playername) child.sendline ('gamemode 1% s'% playername) für xcoord in Bereich (1000000, 1005000, 16): für zcoord im Bereich (1000000, 1005000, 16): ch ild.sendline ('tp% s% i 255% i'% (Spielername, xcoord, zcoord)) child.expect ('Teleportiert% s'% Spielername) # Zeit zwischen Teleports. Ein kleinerer Wert bedeutet mehr Stress für den Server. time.sleep (0.5) child.sendline ('sag alles erledigt!')  

$ python teleport-expect.py

Einmal Der Server startet und meldet sich beim Spiel an. Sie sollten sehen, dass Ihr Spieler automatisch Stück für Stück über den interessierenden Bereich teleportiert wird. Der Besuch eines 5000x5000-Gebiets dauert mehrere Stunden.

Es ist keine schnelle Möglichkeit, eine Karte zu erstellen, aber es ist ordentlich, die Landschaft vorbeifliegen zu sehen. Ich wollte hauptsächlich testen, wie der Minecraft-Server in einer Pexpect-Sitzung ausgeführt wird. Viel Potenzial für andere Automatisierung (z. B. nach benutzerdefinierten Befehlen auf einem Vanilla-Server suchen)!

Morlok8k
2012-06-20 01:22:34 UTC
view on stackexchange narkive permalink

Minecraft Land Generator:

erweitert Ihre aktuelle Vanille-Welt (oder modifiziert, wenn Sie die Server-Mods haben).

http://www.minecraftforum.net/ Thema / 187737-Minecraft-Land-Generator /

Nicht länger unterstützt :( http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-tools/1261072-minecraft-land-generator?comment=1257
Zsub
2011-10-12 20:50:58 UTC
view on stackexchange narkive permalink

Ein total vanilliger Weg wäre, eine Welt im Einzelspielermodus zu generieren und diese manuell zu erkunden. Dies wird natürlich eine Menge Arbeit sein :)

Mir sind keine anderen Methoden bekannt.

Wenn Sie dies tun, ist dies im Kreativmodus viel schneller, wo Sie an beliebigen Stellen fliegen und Karten erstellen können, um Ihren Fortschritt zu verfolgen. Das Ausfüllen einer Karte dauert ungefähr 10 Minuten im Flug für ~ 25 MB Chunks.
Dies kann mit [Einzelspieler-Befehlen] (http://www.minecraftforum.net/topic/94310-181-single-player-commands-v2121-mcp-pack-updated/) kombiniert werden, um die Zeit drastisch zu verkürzen erforderlich.
Ich bin mir nicht sicher, warum dies eine Antwort ist.OP sucht offensichtlich nach einer Methode, um seine Welt automatisch vorab zu generieren.Das manuelle Erkunden, selbst im Kreativmodus, ist im Wesentlichen das genaue Gegenteil davon.
Saiboogu
2011-12-10 18:42:11 UTC
view on stackexchange narkive permalink

Mit dem WorldBorder -Plugin für Bukkit können Sie eine vordefinierte Kartengröße festlegen (gemessen im Radius vom Spawn) und optional das Gelände innerhalb Ihrer Grenzen automatisch generieren.

Es generiert automatisch Gelände im Hintergrund, während der Server ausgeführt wird. Es dauerte ungefähr 24 Stunden, um meine runde Welt mit einem Radius von 3000 Blöcken auf einem Quad-Core-Server mit 4 GB für Minecraft zu generieren. Es schien, als sei der Speicher der begrenzende Faktor - er tuckerte schneller als die GC-Routinen von Java und musste regelmäßig pausieren, um darauf zu warten, dass der Speicher wieder frei wird. Das Erzwingen eines Neustarts des Servers, wenn die Speichernutzung hoch wurde, hat ihn zwar beschleunigt, aber am Ende habe ich ihn einfach ignoriert und er konnte von alleine beendet werden.

Ich empfehle WorldGenerationControl zu verwenden, es ist viel schneller! Wir haben Stand-Plugins auf unserem Server WorldGenerationControl kombiniert, um die Welt zu generieren, und WorldBorder, um sie in der Größe zu halten.
@Fox32 Ich muss das überprüfen, danke.
Das WorldBorder-Plugin ist jetzt veraltet
Aqueries
2014-08-17 10:46:58 UTC
view on stackexchange narkive permalink

Eine bessere Möglichkeit, dies jetzt zu tun, besteht darin, sich eine Kopie von mcedit von http://www.mcedit.net/ zu schnappen und damit Ihre Welt zu öffnen. Laden Sie eine Kopie des Minecraft-Server-JARs herunter (da das mit MCedit gelieferte aus Version 1.5.2 stammt) und platzieren Sie es in \ ServerJarStorage \ release. Stellen Sie sicher, dass das Glas "minecraft_server.jar" heißt. Verwenden Sie dann einfach das Chunk-Generator-Tool, um neue Chunks einer vorhandenen Karte zu generieren. Oder Sie können mcedit verwenden, um eine vollständig neue Karte zu erstellen.

juliantjan
2017-06-17 09:37:34 UTC
view on stackexchange narkive permalink

enter image description here

  #! / usr / bin / python

sys importieren
pexpect importieren
Importzeit

# Setzen Sie dies auf Ihren Minecraft-Benutzernamen
playername = 'deinplayername'

child = pexpect.spawn ('java -Xms2048M -Xmx2048M -jar minecraft_server.jar nogui')
child.logfile = sys.stdout
child.expect ('% s ist dem Spiel beigetreten'% playername)
child.sendline ('gamemode 1% s'% playername)

für xcoord im Bereich (1000000, 1005000, 16):
    für zcoord im Bereich (1000000, 1005000, 16):
        child.sendline ('tp% s% i 255% i'% (Spielername, xcoord, zcoord))
        child.expect ('Teleportierter% s'% Spielername)
        # Zeit zwischen Teleports.Ein kleinerer Wert bedeutet mehr Stress für den Server.
        Zeitschlaf (0,5)
child.sendline ('sag alles erledigt!')
 
Matthew
2020-03-09 10:21:18 UTC
view on stackexchange narkive permalink

Es gibt keine Möglichkeit, die Chunks vorab zu generieren.Chunks werden NUR generiert, wenn sich ein Spieler in diesem Chunk- und visuellen Renderabstand befindet.Die Verzögerung dauert normalerweise nur ein paar Tage und ist auf Servern mit ausreichender Hardware normalerweise nicht so schlecht.In jedem Fall würde die Vorgenerierung der ganzen Welt viel Platz in Anspruch nehmen.Eine 50k x 50k-Karte bietet ungefähr 400 GB Festplattenspeicher, und die Voreinstellung 29999984 würde ungefähr 100 TB Festplattenspeicher beanspruchen.Machen Sie einfach ein TP-Raster des Bereichs, den Sie erstellen möchten, und lassen Sie den Rest im Verlauf des Spiels geschehen.Sie können dazu Befehlsblöcke verwenden.Durchsuche YouTube nach dem Video.

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

Hier ist eine Version, die von der obigen pexpect inspiriert ist.

Verwenden Sie zum Ausführen Python 3 und installieren Sie click (möglicherweise in einer virtuellen Umgebung). Suchen Sie dann in der Befehlszeile nach Hilfe:

  $ python explore.py --help
Verwendung: explore.py [OPTIONEN]

  Bereise deine Minecraft-Welt

Optionen:
  -p, --player TEXT Setzt diesen Namen auf einen angemeldeten Minecraft-Spieler
  -s, --start TEXT Startpunkt x: z
  -r, --radius INTEGER Breite der Welt, die Sie generieren möchten
  --help Diese Nachricht anzeigen und beenden.
 

Ab einem Punkt teleportiert es einen Spieler schrittweise in einer nach außen gerichteten Spirale, bis eine bestimmte Breite erreicht ist.

Der folgende Code setzt voraus, dass Ihre Welt in einem Docker-Image ausgeführt wird. Bearbeiten Sie die Funktion run_mc_command entsprechend Ihrem Hosting.

Es ist langsam: Das Erzeugen einer 1000x1000-Welt ist (1000/16) ^ 2 = 3906 Teleports mit jeweils mindestens einer halben Sekunde.

Hier ist der Code:

  #! / usr / bin / python

aus dem Subprozess-Importlauf

Zählen Sie aus dem Importzyklus von itertools

Importklick


@ click.command ()
@ click.option ("- p", "--player",
              help = "Setze einen Namen für einen angemeldeten Minecraft-Spieler")
@ click.option ("- s", "--start",
              help = "Startpunkt x: z",
              Standard = "0: 0")
@ click.option ("- r", "--radius",
              help = "Breite der Welt, die generiert werden soll",
              Standard = 5000)
def main (Spieler: str, Start: str, Radius):
    "" Reisen Sie durch Ihre Minecraft-Welt "" "
    start = start.split (":", 2)
    parsed_start = float (Start [0]), float (Start [1])

    click.echo ("Welt erkunden")
    click.echo (f "Puppenspiel {Spieler! s}")
    click.echo (f "Ausgehend von {parsed_start! s}")
    click.echo (f "Bis zum Erreichen des Radius von {Radius! s} Metern (natürlich quadratisch)")
    erkunden (Spieler, parsed_start, float (Radius))


def explore (Spieler: str, Start: Tupel, Breite: float, Schritt: float = 16) -> Keine:
    "" "
    Reisen Sie Ihre Minecaft-Welt

    Argumente:
Spieler: Ein angemeldeter Spieler wird teleportiert. Dies ist der Spielername.
        Start: Startkoordinate (x, z).
        width: Breite des Quadrats, das Sie erkunden möchten.
        Schritt: Länge der Sprünge. Der Standardwert ist 16 Minecraft-Blöcke.
    "" "
    run_mc_command (f "gamemode creative {player! s}")
    für Position in walk_spiral (Start, Schritt):
        run_mc_command (f "tp {player! s} {position [0]! s} 255 {position [1]! s}")
        Entfernung = Position [0] - Start [0], Position [1] - Start [1]
        wenn Abstand [0] > Breite:
            Unterbrechung


def run_mc_command (Befehl: str) -> Keine:
    "" "
    Führen Sie einen Minecraft-Konsolenbefehl aus.

    Hier können Sie die Basis anpassen, wo Ihre Welt gehostet wird. Diese
    Implementierung Verwenden Sie das Docker-Image itzg / minecraft-server.

    Argumente:
        Befehl: Ein Minecraft-Befehl, z. B. "Hallo sagen"
    "" "
    Lauf(
        [
            "Docker", "Exec", "Mc", "Rcon-Cli",
            Befehl
        ]]
    )


def walk_spiral (Start: Tupel, Schritt: float = 16) -> Tupel:
    "" "
    Generieren Sie Positionen, zu denen Sie teleportieren möchten.

    Dies ist ein unendlicher Generator.

    Argumente:
        Start: Ausgangsposition
        Schritt: Länge der Sprünge.

    Ausbeuten:
        Position zum Teleportieren in einer Spirale.
    "" "
    current_movement_x, current_movement_z = start
    Bewegungen = spiral_movements ()

    während wahr:
        Ausbeute current_movement_x, current_movement_z
        next_x_movement, next_y_movement = next (Bewegungen)
        current_movement_x + = next_x_movement * step
        current_movement_z + = next_y_movement * step


def spiral_movements ():

    def _spiral_distances ():
        für Schritte in Zählung (1):
            für _ in (0, 1):
                Fließschritte

    def _clockwise_directions ():
        links = (-1, 0)
        rechts = (1, 0)
        up = (0, -1)
        down = (0, 1)
        Rücklaufzyklus ((rechts, unten, links, oben))

    für Entfernung, Richtung in zip (_spiral_distances (), _clockwise_directions ()):
        für _ in Reichweite (Entfernung):
            Fließrichtung


if __name__ == "__main__":
Main()
 
Steffen Bauer
2020-06-23 21:03:25 UTC
view on stackexchange narkive permalink

In diesem Video wird ein Datenpaket / Befehlsblock-Skript gezeigt, das einen Spieler teleportiert, um Chunks zu generieren.Diese Methode ist nicht sehr schnell, erledigt aber die Aufgabe.

Hier können Sie es herunterladen.

Die Version 1.15 V2 hat in 1.16

für mich funktioniert


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...