JugonesTop

(Java Minecraft 1.14) ¿Cómo establecer la probabilidad de entradas anidadas en una tabla de botín? minecraft minecraft-datapack

Estoy tratando de agregar una nueva caída, 'Oscuro de Cuarzo", como una caída poco común para los países de cuarzo mineral, utilizando un pack de datos. Quiero reemplazar la vieja tabla de botín y agregar uno nuevo, así que lo he copiado el de vainilla de la vainilla pack de datos y ponerlo en la minecraft de espacio de nombres en mi pack de datos:

{
  "type": "minecraft:block",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:alternatives",
          "children": [
            {
              "type": "minecraft:item",
              "conditions": [
                {
                  "condition": "minecraft:match_tool",
                  "predicate": {
                    "enchantments": [
                      {
                        "enchantment": "minecraft:silk_touch",
                        "levels": {
                          "min": 1
                        }
                      }
                    ]
                  }
                }
              ],
              "name": "minecraft:nether_quartz_ore"
            },
            {
              "type": "minecraft:item",
              "functions": [
                {
                  "function": "minecraft:apply_bonus",
                  "enchantment": "minecraft:fortune",
                  "formula": "minecraft:ore_drops"
                },
                {
                  "function": "minecraft:explosion_decay"
                }
              ],
              "name": "minecraft:quartz"
            }
          ]
        }
      ]
    }
  ]
}

Como usted puede ver, hay una entrada del tipo minecraft:alternatives. Esto se seleccione una entrada de una lista de "children": sub-entradas. Hay dos sub-entradas: una para si el jugador utiliza una seda toque de selección, y uno para si utilizan un pico con fortuna (incluidas en la lista Fortune 0). Quiero hacer la segunda entrada, con la Fortuna, tiene un 1/20 oportunidad de además de caer en un Oscuro Cuarzo elemento.

Sé que para hacer esto no se puede agregar una tercera entrada, porque se iba a caer la Oscuridad de Cuarzo en lugar de la normal de cuarzo, por lo tanto necesito para anidar dos sub-sub-entradas en el segundo sub-entrada, y de la normal de cuarzo sub-sub-entrada recogido siempre y los otros sub-sub-entrada rescatan a 1/20 de veces.

Esto es donde estoy atascado, porque no sé si de anidación de esta manera es posible, o cómo hacer una entrada siempre será seleccionado y la otra ser seleccionado de una parte determinada del tiempo. Además, yo lo ideal sería tenerlo en la que si no hubo fortuna en la selección, la única caída sería de cuarzo (19/20) o oscuro de cuarzo (1/20). Si hubo una fortuna lo suficientemente grande como para tener varias gotas, sólo uno de los normal cuarzos tendría un 1/20 por ciento de probabilidad de ser Oscuro de Cuarzo, mientras que el resto quedaría igual. Sin embargo, yo estaría contento con sólo llegar la oscuridad de cuarzo, además de ser seleccionado 5% del tiempo, como originalmente detallada. Si usted lo necesita para su referencia, la entrada de mi Oscuro de Cuarzo debe ser algo como esto:

{
  "type": "minecraft:item",
  "functions": [
    {
      "function": "set_name",
      "name": {"text":"Dark Quartz","color":"dark_gray","italic":"false"}
    },
    {
      "function": "set_nbt",
      "tag": "{DarkQuartz:1b,CustomModelData:1}"
    },
    {
      "function": "minecraft:explosion_decay"
    }
  ],
  "name": "minecraft:quartz"
}

Cualquier ayuda es muy apreciada.

Respuesta

Ok, así que después de un poco de tiempo para pensar lo tengo. Aquí está el archivo:

{
  "type": "minecraft:block",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:alternatives",
          "children": [
            {
              "type": "minecraft:item",
              "conditions": [
                {
                  "condition": "minecraft:match_tool",
                  "predicate": {
                    "enchantments": [
                      {
                        "enchantment": "minecraft:silk_touch",
                        "levels": {
                          "min": 1
                        }
                      }
                    ]
                  }
                }
              ],
              "name": "minecraft:nether_quartz_ore"
            },
            {
              "type": "minecraft:sequence",
              "children": [
                {
                  "type": "minecraft:item",
                  "functions": [
                    {
                      "function": "minecraft:apply_bonus",
                      "enchantment": "minecraft:fortune",
                      "formula": "minecraft:ore_drops"
                    },
                    {
                      "function": "minecraft:explosion_decay"
                    }
                  ],
                  "name": "minecraft:quartz"
                },
                {
                  "type": "minecraft:item",
                  "conditions": [
                    {
                      "condition": "random_chance",
                      "chance": 0.05
                    }
                  ],
                  "functions": [
                    {
                      "function": "set_name",
                      "name": {"text":"Dark Quartz","color":"dark_gray","italic":"false"}
                    },
                    {
                      "function": "set_nbt",
                      "tag": "{DarkQuartz:1b,CustomModelData:1}"
                    },
                    {
                      "function": "minecraft:explosion_decay"
                    }
                  ],
                  "name": "minecraft:quartz"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

Y ahora una explicación: La tabla de botín tiene una piscina, con un rollo, lo que significa que sólo una será la entrada seleccionada. Que una entrada del tipo "minecraft:alternatives", lo que significa que la primera entrada con éxito las condiciones de varios niños sub-entradas será el elegido. Hay dos piscinas para niños: uno para la seda toque picks y uno no seda toque picks. La primera es de tipo "minecraft:item", lo que significa que sólo tiene un punto, mientras que la segunda es del tipo "minecraft:sequence", lo que significa que tiene un par de sub-entradas de su propio. Si el primero es elegido, uno abisal de cuarzo mineral se ha caído y que el fin de las cosas. Si el primero NO está elegido, entramos en la segunda entrada, que como hemos dicho anteriormente es un "minecraft:sequence" tipo. Esto significa que de los varios niños entradas, los artículos serán elegidos de todas las entradas en una fila hasta que una entrada de falla de las condiciones, momento en el que todo se detiene. Tenemos dos entradas: la primera con ninguna de las condiciones (lo que significa que siempre va a dar un elemento, siempre hemos utilizado la seda toque de selección y, por tanto, de la "minecraft:sequence" de entrada) y el segundo con un "random_chance" condición (lo que significa que sólo da un elemento cuando un número generado al azar entre 0 y 1 está por debajo de la "chance" del valor,en este caso, 0.05). Las pruebas muestran que funciona: la minería de 20 países de cuarzo minerales con una normal de selección, tengo 20 abisal de cuarzo y 1 oscuro de cuarzo. Con un toque de seda pick puedo conseguir 20 abisal de mineral de cuarzo, y con una fortuna III pick puedo conseguir 39 abisal de cuarzo y 1 oscuro de cuarzo.

X