Bauhöhe in Minecraft wurde nun erhöht, aber wie haben die das programmiertechnisch gemacht?



  • 314159265358979 schrieb:

    Programmierersicht schrieb:

    Die Bauhöhe war ursprünglich ja vom Levelboden aus gezählt schon 256 Blöcke hoch, was genau 1 Byte für die y-Achse entspricht.

    Nö. Die Welten waren immer schon 128 Blöcke hoch.

    Dann probiers aus.

    Drück F3 und bau nen Turm, dann schau den Wert an.
    In der alten Version lag der dann bei 128. Mit der neuen Version sind 256 möglich.

    Anschließend geh wieder auf Meereshöhe und dann grab dich bis zum Bedrock runter,
    nun dürfte y beim Wert -127 stehen.

    Insofern gab es einen Bereich zwischen -127 und +128, also genau 256 Blöcke.

    täusch ich mich, oder kennt java keine unsigned typen 😕

    Der setzt den Wert wahrscheinlich künstlich um, damit die Meereshöhe in der y Achse bei 0 liegt.
    An der Speicherung der Daten dürfte dies aber nichts ändern.



  • Pro Block wird doch ohnehin mehr als ein Bit gespeichert, wer weiß was der Multiplikator ist?!

    MfG SideWinder



  • Beim oben verlinkten Artikel gibt es übrigens einen Link zum Download eines Converters, der im Quellcode vorliegt.
    Daran müßte man das Format näher untersuchen können.
    http://www.mojang.com/2012/02/new-minecraft-map-format-anvil/



  • Dieser Thread wurde von Moderator/in TravisG aus dem Forum Gaming-Corner in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Programmierersicht schrieb:

    Anschließend geh wieder auf Meereshöhe und dann grab dich bis zum Bedrock runter,
    nun dürfte y beim Wert -127 stehen.

    Nein. Der y-Wert ist dann 0...



  • Es gibt Versuche von 1024 oder 2048 Blocks Höhe also wird es wohl nicht nur ein Byte sein.

    Die größen werden übrigens implizit gespichert. Also bis vor 1.2 war ein Chunk die gespeicherte Datenstruktur (vermutlich auch die zur Runtime verwendete). Dies war ein Array eher wie BlockData[CHUNK_X_SIZE][CHUNK_Z_SIZE][CHUNK_Y_SIZE /* Höhe */] und da ist die Höhe nicht per Block festgelegt. 32x32 Chunks ergeben eine Region, die angespeichert werden.

    Neuerdings sind die Chunks noch einmal in der Höhe geteilt zu 16x16x16 Blöcke und diese können beliebig gestapelt werden.

    Das Problem waren nur Bithacks an verschieden Stellen die eine Änderung der Höhe erschweren.



  • Rhombicosidodecahedron schrieb:

    Es gibt Versuche von 1024 oder 2048 Blocks Höhe also wird es wohl nicht nur ein Byte sein.

    Die größen werden übrigens implizit gespichert. Also bis vor 1.2 war ein Chunk die gespeicherte Datenstruktur (vermutlich auch die zur Runtime verwendete). Dies war ein Array eher wie BlockData[CHUNK_X_SIZE][CHUNK_Z_SIZE][CHUNK_Y_SIZE /* Höhe */] und da ist die Höhe nicht per Block festgelegt. 32x32 Chunks ergeben eine Region, die angespeichert werden.

    Neuerdings sind die Chunks noch einmal in der Höhe geteilt zu 16x16x16 Blöcke und diese können beliebig gestapelt werden.

    Das Problem waren nur Bithacks an verschieden Stellen die eine Änderung der Höhe erschweren.

    Ich habe leider kein Minecraft und frage mich daher: Wie kommt man an den code ran?



  • Decompilieren.



  • MisterX schrieb:

    Ich habe leider kein Minecraft und frage mich daher: Wie kommt man an den code ran?

    Selbst schreiben (wenn es um das einlesen von Region und Chunk geht.

    http://www.minecraftwiki.net/wiki/Development_Resources
    http://www.minecraftwiki.net/wiki/Anvil_file_format
    http://www.minecraftwiki.net/wiki/Region_file_format

    Bitte auch Links weiterverfolgen.



  • Minecraft ist in Java programmiert.
    Java wird, nicht wie C++ in Maschinencode kompiliert,
    sondern in einen Zwischencode.
    Den kannn man ganz einfach dekompilieren,
    und alle Variablen Namen und die kommentare bleiben auch.
    Deshalb ist Java auch langsamer als C++.

    Außerdem wurde immer ein Open Source Programm erstellt, dass das Alte LVL-Format (MC-Region) und das neue LVL-Format erklärt gemacht



  • Deshalb ist Java auch langsamer als C++.

    😃 👍



  • Ich hoffe ich füttere nicht.

    Exponator schrieb:

    Minecraft ist in Java programmiert.
    Java wird, nicht wie C++ in Maschinencode kompiliert, sondern in einen Zwischencode.

    Und?

    Exponator schrieb:

    Den kannn man ganz einfach dekompilieren, und alle Variablen Namen und die kommentare bleiben auch.

    Stimmt nicht, Minecraft besitzt eine leichte Obfuscation, indem alle Klassen-, Methoden- und Feldernamen ersetzt werden. Kommentare werden natürlich nicht mit übersetzt! Dies wird ersichtlich, wenn man die ".jar" (z.B.: von den weekly snapshots) mit einem fast beliebigem Entpackungspragramm öffnet. Dann dann sind alle Klassen durchnummeriert.
    "a", "b", ... "z", "aa", "ab", ... "zz", "aaa" ... - kann man das durchnummeriert nennen? Durchalphabetisiert?

    Exponator schrieb:

    Deshalb ist Java auch langsamer als C++.

    Stimmt nicht.
    🙄
    Deshalb ist Java nicht langsamer als C++.


  • Mod

    ich finde ja gut dass ihr hier relativ objektiv seit, aber frueher oder spaeter wird sowas immer in flame abgleiten, deswegen loesche ich ab hier jegliches "java is...", denn hier geht es um Minecraft und desgleichen.



  • arbeite gerade mit minecraft region und chunks und die höhe ist in einem byte gespeichert.



  • Patrickssj6 schrieb:

    arbeite gerade mit minecraft region und chunks und die höhe ist in einem byte gespeichert.

    Vom Bedrock bis zu maximalen Höhe sind es 256+128 Klötze.
    Wie paßt das in ein Byte?



  • Es sind 256.



  • naja es waren mal 128 jetzt sind es 256
    das was du mit wahrscheinlich betrachtet hast bei F3 ist der map-spawnpoint der sich natürlich verschoben hat wenn du dich unter den meeresspiegel gräbst und deswegen einen negativen wert erreicht hat. zudem liegt meeresspiegel bei 64 und da lag er schon immer ^^



  • Hast du mal aufs Datum gesehen?!


Anmelden zum Antworten