JugonesTop

Cuando se trabaja con NBTs en los comandos, ¿qué tipo de datos se asume cuando los valores no tienen una carta sufijo? minecraft minecraft-commands

Digamos que usted quiere convocar a una oveja que brilla. Usted probablemente iba a ir a por /summon minecraft:sheep ~ ~ ~ {Glowing:1b}. Y hey-ho, que funciona como se espera. Brillante ovejas.

A continuación, atornillar en torno a algunos más y averiguar acerca de los tipos de datos, se trate de {Glowing:2b}. La oveja todavía brilla, así como otros lenguajes booleanos realmente funcionan más como 0 y not 0. Así que para seguir pasándolo bien—ejem, 'prueba'—cambio 2b a 2. Ningún cambio. Así que el juego funciona con recta los números enteros cuando se espera bytes. Lo que si nos exceden el rango de un byte?

{Glowing:127}, brillante ovejas. {Glowing:128}... todavía brilla como una oveja? El número no termina de envolver alrededor de 0 hasta 256. Obligar a que en un byte, se ajusta a 0 en 128b y -129b. Más pruebas con colores ovejas confirma el sin marcar número sin signo.

La página esta en el Oficial Minecraft Wiki no muestra los tipos de datos sin signo. ¿Alguien tiene más información?

Respuesta

Al entrar en NBT, el tipo de datos en su mayoría no importa. Ella se convierte al tipo correcto para el campo automáticamente.

Números regulares se vuelven ints, por lo tanto, ingresando por ejemplo, 3 minecraft resultados en el valor desbordante y convertirse en negativo, incluso si después se convierte a un long.

Los números con puntos decimales convertido double, .0 y 0..

Sólo un . parece ser aceptada como un número, pero no he sido capaz de averiguar de qué tipo. Juega junto con otros números de la etiqueta "i", pero eso no debería ser un sufijo numérico. Extraño.

En las matrices (como Motion) sólo un tipo de número es aceptado, incluso si son compatibles para la conversión. Por lo [1.0,2.,3d] es aceptado, pero [0.0,0.0,0.0f] no lo es.

Al parecer, las matrices de no convertir de todo el número de tipos para los tipos de punto flotante. La convocatoria a una entidad con Motion:[1,0,0] no le dan movimiento.


El resto de tipos son triviales: Matriz, compuesto y de cadena. Ellos no tienen el tipo de sufijos.


Ahora para el otro lado de las cosas: Cuando la lectura de NBT, usted no tiene que coincidir con el tipo correcto. Debido a que su entrada consigue convertir implícitamente int o double si no proporcionan formato de sufijo y sólo entonces se compara con la existente NBT, a menudo falla.
Así que incluso si usted convocar a una entidad con Motion[0.0f,0.0f,0.0f], aún no se puede probar con Motion[0.0f,0.0f,0.0f], usted necesita Motion[0.0d,0.0d,0.0d].