1

I'm trying to add a new drop, 'Dark Quartz', as a rare drop for the nether quartz ore, using a datapack. I want to replace the old loot table and add a new one, so I've copied the vanilla one out of the vanilla datapack and put it in the minecraft namespace in my datapack:

{
  "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"
            }
          ]
        }
      ]
    }
  ]
}

As you can see, there is one entry of the type minecraft:alternatives. This will select one entry from a list of "children": sub-entries. There are two sub-entries: one for if the player uses a silk touch pick, and one for if they use a pickaxe with fortune (including Fortune 0). I want to make the second entry, with the Fortune, have a 1/20 chance of additionally dropping a Dark Quartz item.

I know that to do this I can't add a third entry, because it would drop the Dark Quartz instead of the normal quartz, so therefore I need to nest two sub-sub-entries in the second sub-entry, and have the normal quartz sub-sub-entry get picked always and the other sub-sub-entry get picked 1/20 times.

This is where I'm stuck, because I don't know if nesting in this way is possible, or how to make one entry always be selected and the other be selected a certain portion of the time. Additionally, I would ideally have it where if there was no fortune on the pick, the only drop would be either quartz (19/20) or dark quartz (1/20). If there was a fortune great enough to have multiple drops, only one of the normal quartzes would have a 1/20 percent chance of being a Dark Quartz, while the rest would stay the same. However, I would be content with just getting the dark quartz to additionally be selected 5% of the time, as I originally detailed. If you need it for reference, the entry for my Dark Quartz should look something like this:

{
  "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"
}

Any help is appreciated.

  • I don't know much about loot tables, but can't you do it like this? quartz OR (quartz AND dark_quartz) You would need to either specify the regular quartz twice or include a sub-loot-table. – Fabian Röling Aug 3 at 22:01
  • Oh, good tag! I should go through all old questions one day and add it when necessary. – Fabian Röling Aug 3 at 22:02
  • 1
    @FabianRöling I think, in terms of the use of this tag, it should be applied to all datapack things except functions, so tags, loot_tables, advancements, structures, and recipes. minecraft-commands should be used for functions that don't use any special function behavior, but minecraft-datapack should apply when raycasting or recursion (or /schedule) is involved. Finally, I think if anyone has a question about CustomModelData it should have minecraft-resourcepack and minecraft-datapack. – Nik3141 Aug 3 at 23:15
  • @FabianRöling So I don't know why I didn't think of this before, but your mention of AND reminded me of the "sequence" type of entry, which is basically AND. Just gotta get the probability to work and I'll post the solution as an answer. – Nik3141 Aug 4 at 0:01
1

Ok, so after a bit of thinking time I got it. Here is the file:

{
  "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"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

And now for an explanation: The loot table has one pool, with one roll, meaning that only one entry will be selected. That one entry is of the type "minecraft:alternatives", which means that the first entry with successful conditions out of several children sub-entries will be the one choosen. There are two children pools: one for silk touch picks and one for non silk touch picks. The first is of type "minecraft:item", meaning it just has an item, while the second is of the type "minecraft:sequence", meaning it has a few sub-entries of its own. If the first is chosen, one nether quartz ore is dropped and that's the end of things. If the first is NOT chosen, we go into the second entry, which as we said earlier is a "minecraft:sequence" type. This means that out of several children entries, items will be chosen from all entries in a row until an entry fails the conditions, at which point everything stops. We have two entries: the first with no conditions (meaning it will always give an item, provided we have not used a silk touch pick and are therefore in the "minecraft:sequence" entry) and the second with a "random_chance" condition (meaning it only gives an item when a randomly generated number between 0 and 1 is below the "chance" value,in this case 0.05). Testing shows it works: mining 20 nether quartz ores with a normal pick, I get 20 nether quartz and 1 dark quartz. With a silk touch pick I get 20 nether quartz ore, and with a fortune III pick I get 39 nether quartz and 1 dark quartz.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.