Diferencia entre revisiones de «Formato alfa»
(Página creada con «{{Construcción}} {{about|Minecraft Alpha 1.2.6|Minecraft 1.0|Level Format}} Minecraft Indev introduced a new data storage challenge while under development: Te...») |
|||
Línea 1: | Línea 1: | ||
{{Construcción}} | {{Construcción}} | ||
{{about|[[Minecraft Alpha]] 1.2.6|[[Minecraft 1.0]]|Level Format}} | {{about|[[Minecraft Alpha]] 1.2.6|[[Minecraft 1.0]]|Level Format}} | ||
− | + | Minecraft Indev introdujo un nuevo sistema de almacenado mientras se encontraba en desarrollo. El terreno generado en Infdev tiene el potencial de ocupar casi 235 petabytes, lo cual serian 240,640 terabytes en tamaño mientras este almacenado en memoria debido al tamaño del mapa (el cual es varias veces más grande que la superficie de la Tierra). Para reducir el tamaño de este archivo y el uso de memoria, Notch decide dividir el terreno en segmentos de 16 X 128 x 16 y grabarlos cuando no estén visibles. Ademas, el terreno solo es generado cuando se encuentra dentro del rango de visión del jugador, reduciendo considerablemente el espacio de guardado, ya que casi todos los jugadores solo lograran explorar una muy pequeña fracción del mapa en un tiempo razonable. Minecraft Alpha usa esta técnica, Minecraft Beta y [[Minecraft 1.0]] usan este concepto general debido al éxito que tuvo. | |
− | == | + | == Estructura del mundo en carpeta == |
− | + | El nivel alfa es una única carpeta que contiene al menos un archivo llamado “level.dat” y un archivo llamado “sesión.lock” que asegura que solo un Minecraft abra ese nivel por vez. | |
− | + | La carpeta de nivel puede tener hasta 64 carpetas y este a su vez puede contener 64 subcarpetas. Estas carpetas contienen los segmentos o “chunks” que mantienen el terreno y las entidades. Cada archivo de segmento o “chunk” es identificado por su posición en xPos y zPos. Las partes variantes del nombre del archivo de cada chunk son obtenidas tomando la base36 de xPos y zPos. Los nombres de las carpetas en los cuales se encuentra el archivo del chunk se encuentran al tomar xPos y zPos, modulo 64 y convirtiéndolo a base 36. Las coordenadas negativas deben ser interpretadas como números positivos, bitwise mediante complemento a 2. De forma que -13 es interpretado como si fuese 243 (si su tamaño fuese en bytes) | |
− | + | Como ejemplo, para encontrar el chunk en la posición (-13, 44): | |
− | * | + | * El primer nombre de la carpeta es la base36(-13 % 64). Esto es base36(243 % 64 = 51) , el cual es 1f. |
− | * | + | * El segundo nombre de carpeta es base36(44 % 64). Esto es base36(44) el cual es “18”. |
− | * | + | * El nombre de archivo del chunk es “c.” + base36(-13) + "." + base36(44) + ".dat". Esto se evalúa como "c.-d.18.dat". |
− | * | + | * De esta forma, el chunk en la posición (-13, 44) es guardada en el archivo “1f/18/c.-d.18.dat" |
− | + | Cada chunk recuerda la posición independiente del archivo y los nombres de carpeta. | |
− | + | Minecraft Beta 1.3 introdujo MCRegion, donde los chunks son guardados en grupos de 32x32 en los archivos de región. | |
− | |||
− | |||
− | + | === Dimensiones === | |
+ | Las dimensiones son guardadas de la misma forma que los mundos, pero en lugar de mezclar los archivos del mundo en la carpeta de guardado, son guardados en subcarpetas con sus propias regiones e información de chunks. Los nombres empiezan con “DIM” seguido por la ID de la dimensión. | ||
+ | |||
+ | Estas eran las ID’s que eran usadas en Minecraft Alfa | ||
{| class="wikitable" | {| class="wikitable" | ||
! ID !! Folder !! Dimension | ! ID !! Folder !! Dimension | ||
|- | |- | ||
− | | 0 || <code>saves/[World]/</code> || | + | | 0 || <code>saves/[World]/</code> || Mundo normal (Overworld), siempre es guardado en la carpeta <code>DIM</code> |
|- | |- | ||
− | | -1 || <code>saves/[World]/DIM-1/</code> || [[ | + | | -1 || <code>saves/[World]/DIM-1/</code> || [[El Nether]], añadido en la Actualizacion de Halloween |
|} | |} | ||
− | === | + | === Formato de sesión.lock === |
− | + | Session.lock contiene registro de tiempo de la última vez que el mundo a sido alterado. El archivo tiene 8 bytes de largo y contiene una única integral firmada de 64-bits en formato endian. El valor de esta integral corresponde al registro de tiempo, que representa el numero de milisegundos transcurridos desde 1970,en UTC. | |
− | + | A diferencia de los típicos archivos de bloqueo, sesión.lock se asegura que el último programa que abrió ese mundo es el que es dueño de este. El proceso ocurre de la siguiente forma: | |
− | # | + | # El programa abre sesión.lock. |
− | # | + | # El programa crea el registro de tiempo en sesión.lock. |
− | # | + | # El programa monitorea sesión.lock en busca de cambios. |
− | # | + | # Si los contenidos de sesión.lock cambian, el programa aborta y abandona el bloqueo en el mundo. |
=== level.dat Format === | === level.dat Format === | ||
− | + | El archivo de '''level.dat''' esta comprimido en GZip en formato NBT que almacena la información del nivel de forma global (tiempo, salud del jugador, inventario, velocidad, posición en el mapa, etc) Lo más importante, almacena la semilla que es usada para generar el terreno de ese mismo mundo. | |
− | + | El archivo contiene la siguiente estructura: | |
<div class="treeview"> | <div class="treeview"> | ||
− | * {{nbt|compound}} | + | * {{nbt|compound}} La etiqueta raíz. |
− | ** {{nbt|compound|Data}}: | + | ** {{nbt|compound|Data}}: Información global. |
− | *** {{nbt|long|LastPlayed}}: | + | *** {{nbt|long|LastPlayed}}: Guarda el registro de tiempo Unix de la ultima vez que el jugador grabo la partida. |
− | *** {{nbt|long|SizeOnDisk}}: | + | *** {{nbt|long|SizeOnDisk}}: Es el tamaño estimado del mundo entero en bytes. |
− | *** {{nbt|long|RandomSeed}}: | + | *** {{nbt|long|RandomSeed}}: Numero aleatorio (o escogido por el jugador) que es usada para la generación del terreno. |
− | *** {{nbt|int|SpawnX}}: X | + | *** {{nbt|int|SpawnX}}: Coordenada X de la posición del Spawn del mundo. |
− | *** {{nbt|int|SpawnY}}: | + | *** {{nbt|int|SpawnY}}: Coordenada X de la posición del Spawn del mundo. |
− | *** {{nbt|int|SpawnZ}}: | + | *** {{nbt|int|SpawnZ}}: Coordenada X de la posición del Spawn del mundo. |
− | *** {{nbt|long|Time}}: | + | *** {{nbt|long|Time}}: Guarda el ultimo “tiempo del dia” en ticks. Cada 20 ticks corresponde a 1 segundo, y 24000 ticks corresponden a un Ciclo de día/noche, haciendo que este ciclo dure 20 minutos. Habran transcurrido 0 ticks al inicio del dia, 12000 en el atardecer, 13800 correspondera al anochecer y 22200 el comienzo del amanecer y por ultimo 24000 es el inicio del siguiente día e inmediatamente empieza un nuevo clico en 0 ticks. |
− | *** {{nbt|compound|Player}}: | + | *** {{nbt|compound|Player}}: El jugador en Singleplayer. |
− | **** {{nbt|int|Dimension}}: | + | **** {{nbt|int|Dimension}}: La dimensión en la cual el jugador se encuentra, 0 para el mundo normal [[Overworld]] y -1 para [[el Nether]]. |
− | **** {{nbt|list|Pos}}: | + | **** {{nbt|list|Pos}}: Lista de las coordenadas X, Y y Z donde se encuentra el jugador. |
− | **** {{nbt|list|Rotation}}: | + | **** {{nbt|list|Rotation}}: Lista de la rotación en las coordenadas Y y Z. |
− | **** {{nbt|list|Motion}}: | + | **** {{nbt|list|Motion}}: Lista que abarca el movimiento de los ejes X, Y y Z. |
− | **** {{nbt|byte|OnGround}}: 1 | + | **** {{nbt|byte|OnGround}}: 1 o 0 (verdadero/falso) Es Verdadero si el jugador está pisando suelo. |
− | **** {{nbt|float|FallDistance}}: | + | **** {{nbt|float|FallDistance}}: Durante cuánto tiempo el jugador a estado cayendo. |
− | **** {{nbt|short|Health}}: | + | **** {{nbt|short|Health}}: La cantidad de vida que conserva el jugador, representada en hitpoints, donde 20 hitpoints son 10 corazones. |
− | **** {{nbt|short|AttackTime}}: | + | **** {{nbt|short|AttackTime}}: Tiempo en el que el jugador es inmune a ser atacado |
− | **** {{nbt|short|HurtTime}}: | + | **** {{nbt|short|HurtTime}}: Numero de ticks en los que el jugador se muestra rojo por haber sido atacado. |
− | **** {{nbt|short|DeathTime}}: | + | **** {{nbt|short|DeathTime}}: Numero de ticks en los que el jugador a estado muerto. (Usado para controlar la animación de muerte). |
− | **** {{nbt|short|Air}}: | + | **** {{nbt|short|Air}}: El número de ticks que le faltan al jugador para ahogarse. Inicia en 300. |
− | **** {{nbt|short|Fire}}: | + | **** {{nbt|short|Fire}}: Cuando este valor esta negativo representa el número de ticks que han pasado para que el jugador pueda volver a ser incendiado. Cuando positivo, el número de ticks que le faltan para que el fuego se extinga. |
− | **** {{nbt|int|Score}}: | + | **** {{nbt|int|Score}}: El puntaje del jugador. Este valor nunca fue utilizado en la versión Alpha o en la Beta, este valor es irrelevante. |
− | **** {{nbt|list|Inventory}}: | + | **** {{nbt|list|Inventory}}: Lista de conjuntos de Tag’s que representan los ítem en el inventario del jugador. |
− | ***** {{nbt|compound}} | + | ***** {{nbt|compound}} Un ítem en el inventario. |
− | ****** {{nbt|byte|Slot}}: | + | ****** {{nbt|byte|Slot}}: La casilla en la cual se encuentra el ítem. |
− | ****** {{nbt|short|id}}: | + | ****** {{nbt|short|id}}: La [[ID]] del ítem. |
− | ****** {{nbt|short|Damage}}: | + | ****** {{nbt|short|Damage}}: El valor específico del ítem, o el valor de daño para herramientas. |
****** {{nbt|short|Count}}: The number of this item in the stack. Range -128 to 127. Values less than 2 are not displayed in-game. | ****** {{nbt|short|Count}}: The number of this item in the stack. Range -128 to 127. Values less than 2 are not displayed in-game. | ||
</div> | </div> | ||
− | === Chunk | + | === Formato de Chunk === |
− | + | Los archivos de chunk, antes descritos arriba, son archivos comprimidos en GZip en formato NBT. Tienen la siguiente estructura: | |
<div class="treeview"> | <div class="treeview"> | ||
− | * {{nbt|compound}} | + | * {{nbt|compound}} La etiqueta raíz. |
− | ** {{nbt|compound|Level}}: | + | ** {{nbt|compound|Level}}: Los datos de nivel en este chunk. |
− | *** {{nbt|int|xPos}}: | + | *** {{nbt|int|xPos}}: La coordenada X de este chunk |
− | *** {{nbt|int|zPos}}: | + | *** {{nbt|int|zPos}}: La coordenada Z de este chunk |
− | *** {{nbt|byte|TerrainPopulated}}: 1 | + | *** {{nbt|byte|TerrainPopulated}}: 1 o 0 (Verdadero/Falso) El valor es verdaero si el chunk está ocupado por estructuras generadas como Calabozos y sistemas de cavernas. |
− | *** {{nbt|long|LastUpdate}}: | + | *** {{nbt|long|LastUpdate}}: El tick de la última vez que el chunk fue actualizado. |
− | *** {{nbt|byte-array|Blocks}}: 32768 bytes | + | *** {{nbt|byte-array|Blocks}}: 32768 bytes de ID’s de los bloques, 8 bits para cada Bloque. |
− | *** {{nbt|byte-array|Data}}: 16384 bytes | + | *** {{nbt|byte-array|Data}}: 16384 bytes de datos de los bloques, 4 bits por cada Bloque. |
− | *** {{nbt|byte-array|BlockLight}}: 16384 | + | *** {{nbt|byte-array|BlockLight}}: 16384 bites de información de iluminación, 4 bits por cada Bloque. |
− | *** {{nbt|byte-array|SkyLight}}: 16384 | + | *** {{nbt|byte-array|SkyLight}}: 16384 bites de luz del cielo, 4 bits por Bloque. |
− | *** {{nbt|byte-array|HeightMap}}: 256 bytes | + | *** {{nbt|byte-array|HeightMap}}: 256 bytes de información sobre la altura del mapa, 8 bits por cada columna XZ. Usado para agilizar los cálculos sobre SkyLight. |
− | *** {{nbt|list|Entities}}: | + | *** {{nbt|list|Entities}}: Lista de conjuntos de TAG’s , uno por cada entidad en el chunk. |
− | **** {{nbt|compound}} | + | **** {{nbt|compound}} Una entidad. |
***** See [[Chunk format#Entity_Format|Chunk format → Entity Format]] - not all information is applicable to Minecraft Alpha. | ***** See [[Chunk format#Entity_Format|Chunk format → Entity Format]] - not all information is applicable to Minecraft Alpha. | ||
− | *** {{nbt|list|TileEntities}}: | + | *** {{nbt|list|TileEntities}}: Lista de conjuntos de TAG’s, uno por cada Titulo de Entidad en el chunk. |
**** {{nbt|compound}} A tile entity. | **** {{nbt|compound}} A tile entity. | ||
***** See [[Chunk format#Tile_Entity_Format|Chunk format → Tile Entity Format]] - not all information is applicable to Minecraft Alpha. | ***** See [[Chunk format#Tile_Entity_Format|Chunk format → Tile Entity Format]] - not all information is applicable to Minecraft Alpha. | ||
</div> | </div> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{minecraft}} | {{minecraft}} | ||
[[Category:Development]] | [[Category:Development]] |
Revisión del 01:17 25 sep 2014
Minecraft Indev introdujo un nuevo sistema de almacenado mientras se encontraba en desarrollo. El terreno generado en Infdev tiene el potencial de ocupar casi 235 petabytes, lo cual serian 240,640 terabytes en tamaño mientras este almacenado en memoria debido al tamaño del mapa (el cual es varias veces más grande que la superficie de la Tierra). Para reducir el tamaño de este archivo y el uso de memoria, Notch decide dividir el terreno en segmentos de 16 X 128 x 16 y grabarlos cuando no estén visibles. Ademas, el terreno solo es generado cuando se encuentra dentro del rango de visión del jugador, reduciendo considerablemente el espacio de guardado, ya que casi todos los jugadores solo lograran explorar una muy pequeña fracción del mapa en un tiempo razonable. Minecraft Alpha usa esta técnica, Minecraft Beta y Minecraft 1.0 usan este concepto general debido al éxito que tuvo.
Contenido
Estructura del mundo en carpeta
El nivel alfa es una única carpeta que contiene al menos un archivo llamado “level.dat” y un archivo llamado “sesión.lock” que asegura que solo un Minecraft abra ese nivel por vez.
La carpeta de nivel puede tener hasta 64 carpetas y este a su vez puede contener 64 subcarpetas. Estas carpetas contienen los segmentos o “chunks” que mantienen el terreno y las entidades. Cada archivo de segmento o “chunk” es identificado por su posición en xPos y zPos. Las partes variantes del nombre del archivo de cada chunk son obtenidas tomando la base36 de xPos y zPos. Los nombres de las carpetas en los cuales se encuentra el archivo del chunk se encuentran al tomar xPos y zPos, modulo 64 y convirtiéndolo a base 36. Las coordenadas negativas deben ser interpretadas como números positivos, bitwise mediante complemento a 2. De forma que -13 es interpretado como si fuese 243 (si su tamaño fuese en bytes)
Como ejemplo, para encontrar el chunk en la posición (-13, 44):
- El primer nombre de la carpeta es la base36(-13 % 64). Esto es base36(243 % 64 = 51) , el cual es 1f.
- El segundo nombre de carpeta es base36(44 % 64). Esto es base36(44) el cual es “18”.
- El nombre de archivo del chunk es “c.” + base36(-13) + "." + base36(44) + ".dat". Esto se evalúa como "c.-d.18.dat".
- De esta forma, el chunk en la posición (-13, 44) es guardada en el archivo “1f/18/c.-d.18.dat"
Cada chunk recuerda la posición independiente del archivo y los nombres de carpeta.
Minecraft Beta 1.3 introdujo MCRegion, donde los chunks son guardados en grupos de 32x32 en los archivos de región.
Dimensiones
Las dimensiones son guardadas de la misma forma que los mundos, pero en lugar de mezclar los archivos del mundo en la carpeta de guardado, son guardados en subcarpetas con sus propias regiones e información de chunks. Los nombres empiezan con “DIM” seguido por la ID de la dimensión.
Estas eran las ID’s que eran usadas en Minecraft Alfa
ID | Folder | Dimension |
---|---|---|
0 | saves/[World]/ |
Mundo normal (Overworld), siempre es guardado en la carpeta DIM
|
-1 | saves/[World]/DIM-1/ |
El Nether, añadido en la Actualizacion de Halloween |
Formato de sesión.lock
Session.lock contiene registro de tiempo de la última vez que el mundo a sido alterado. El archivo tiene 8 bytes de largo y contiene una única integral firmada de 64-bits en formato endian. El valor de esta integral corresponde al registro de tiempo, que representa el numero de milisegundos transcurridos desde 1970,en UTC.
A diferencia de los típicos archivos de bloqueo, sesión.lock se asegura que el último programa que abrió ese mundo es el que es dueño de este. El proceso ocurre de la siguiente forma:
- El programa abre sesión.lock.
- El programa crea el registro de tiempo en sesión.lock.
- El programa monitorea sesión.lock en busca de cambios.
- Si los contenidos de sesión.lock cambian, el programa aborta y abandona el bloqueo en el mundo.
level.dat Format
El archivo de level.dat esta comprimido en GZip en formato NBT que almacena la información del nivel de forma global (tiempo, salud del jugador, inventario, velocidad, posición en el mapa, etc) Lo más importante, almacena la semilla que es usada para generar el terreno de ese mismo mundo.
El archivo contiene la siguiente estructura:
- La etiqueta raíz.
- Data: Información global.
- LastPlayed: Guarda el registro de tiempo Unix de la ultima vez que el jugador grabo la partida.
- SizeOnDisk: Es el tamaño estimado del mundo entero en bytes.
- RandomSeed: Numero aleatorio (o escogido por el jugador) que es usada para la generación del terreno.
- SpawnX: Coordenada X de la posición del Spawn del mundo.
- SpawnY: Coordenada X de la posición del Spawn del mundo.
- SpawnZ: Coordenada X de la posición del Spawn del mundo.
- Time: Guarda el ultimo “tiempo del dia” en ticks. Cada 20 ticks corresponde a 1 segundo, y 24000 ticks corresponden a un Ciclo de día/noche, haciendo que este ciclo dure 20 minutos. Habran transcurrido 0 ticks al inicio del dia, 12000 en el atardecer, 13800 correspondera al anochecer y 22200 el comienzo del amanecer y por ultimo 24000 es el inicio del siguiente día e inmediatamente empieza un nuevo clico en 0 ticks.
- Player: El jugador en Singleplayer.
- Dimension: La dimensión en la cual el jugador se encuentra, 0 para el mundo normal Overworld y -1 para el Nether.
- Pos: Lista de las coordenadas X, Y y Z donde se encuentra el jugador.
- Rotation: Lista de la rotación en las coordenadas Y y Z.
- Motion: Lista que abarca el movimiento de los ejes X, Y y Z.
- OnGround: 1 o 0 (verdadero/falso) Es Verdadero si el jugador está pisando suelo.
- FallDistance: Durante cuánto tiempo el jugador a estado cayendo.
- Health: La cantidad de vida que conserva el jugador, representada en hitpoints, donde 20 hitpoints son 10 corazones.
- AttackTime: Tiempo en el que el jugador es inmune a ser atacado
- HurtTime: Numero de ticks en los que el jugador se muestra rojo por haber sido atacado.
- DeathTime: Numero de ticks en los que el jugador a estado muerto. (Usado para controlar la animación de muerte).
- Air: El número de ticks que le faltan al jugador para ahogarse. Inicia en 300.
- Fire: Cuando este valor esta negativo representa el número de ticks que han pasado para que el jugador pueda volver a ser incendiado. Cuando positivo, el número de ticks que le faltan para que el fuego se extinga.
- Score: El puntaje del jugador. Este valor nunca fue utilizado en la versión Alpha o en la Beta, este valor es irrelevante.
- Inventory: Lista de conjuntos de Tag’s que representan los ítem en el inventario del jugador.
- Un ítem en el inventario.
- Slot: La casilla en la cual se encuentra el ítem.
- id: La ID del ítem.
- Damage: El valor específico del ítem, o el valor de daño para herramientas.
- Count: The number of this item in the stack. Range -128 to 127. Values less than 2 are not displayed in-game.
- Un ítem en el inventario.
- Data: Información global.
Formato de Chunk
Los archivos de chunk, antes descritos arriba, son archivos comprimidos en GZip en formato NBT. Tienen la siguiente estructura:
- La etiqueta raíz.
- Level: Los datos de nivel en este chunk.
- xPos: La coordenada X de este chunk
- zPos: La coordenada Z de este chunk
- TerrainPopulated: 1 o 0 (Verdadero/Falso) El valor es verdaero si el chunk está ocupado por estructuras generadas como Calabozos y sistemas de cavernas.
- LastUpdate: El tick de la última vez que el chunk fue actualizado.
- Blocks: 32768 bytes de ID’s de los bloques, 8 bits para cada Bloque.
- Data: 16384 bytes de datos de los bloques, 4 bits por cada Bloque.
- BlockLight: 16384 bites de información de iluminación, 4 bits por cada Bloque.
- SkyLight: 16384 bites de luz del cielo, 4 bits por Bloque.
- HeightMap: 256 bytes de información sobre la altura del mapa, 8 bits por cada columna XZ. Usado para agilizar los cálculos sobre SkyLight.
- Entities: Lista de conjuntos de TAG’s , uno por cada entidad en el chunk.
- Una entidad.
- See Chunk format → Entity Format - not all information is applicable to Minecraft Alpha.
- Una entidad.
- TileEntities: Lista de conjuntos de TAG’s, uno por cada Titulo de Entidad en el chunk.
- A tile entity.
- See Chunk format → Tile Entity Format - not all information is applicable to Minecraft Alpha.
- A tile entity.
- Level: Los datos de nivel en este chunk.