Furnace NBT Recipes
Minecraft datapack library for handling custom furnace recipes with advanced NBT / component support!
介绍
📖 Furnace NBT Recipes
🔥 Minecraft datapack library for handling custom furnace recipes with advanced NBT / component support!
Enables creation of complex smelting recipes using NBT tags / components. 🛠️
📚 How to Use
🔧 Function Tags
The library provides several function tags that you can use to add your custom recipes:
🔨 Smelting, Blasting, Smoking
The function tags are the following:
#furnace_nbt_recipes:v1/smelting_recipes: 🔥 Recipes in a classic furnace#furnace_nbt_recipes:v1/blasting_recipes: ⚒️ Recipes in a blast furnace (e.g. ores)#furnace_nbt_recipes:v1/smoking_recipes: 🍖 Recipes in a smoker (e.g. food)
📝 In any of these function tags, you must add a call to a function you created that will handle the recipe.
✅ Each line should check if the #found score is 0 and the input matches your recipe.
🔄 If so, it will run a loot table command in the container.3 slot.
⚡ Taken example from SimplEnergy:
# Smelt 'Raw Simplunium' into 'Simplunium Ingot'
execute if score #found furnace_nbt_recipes.data matches 0 store result score #found furnace_nbt_recipes.data if data storage furnace_nbt_recipes:main input{"components": {"minecraft:custom_data": {"simplenergy": {"raw_simplunium": true}}}} run loot replace block ~ ~ ~ container.3 loot simplenergy:i/simplunium_ingot
#furnace_nbt_recipes:v1/disable_cooking
🔧 As the library stands on fake recipes, we need to prevent the default vanilla items from smelting ⚠️
Therefore, you should use this function tag to disable them with the following syntax ⬇️:
# For instance, if a custom recipe uses command block as a base item:
execute if score #reset furnace_nbt_recipes.data matches 0 store success score #reset furnace_nbt_recipes.data if data storage furnace_nbt_recipes:main input{"id":"minecraft:command_block"}
♻️ Like the recipe tags, it runs once per ingredient and furnace type, and its answer is reused by every furnace holding that ingredient: decide from input and #type only.
#furnace_nbt_recipes:v1/recipes_used
⚡ Configure XP rewards for your custom recipes when a player retrieves items from the furnace.
🎯 The XP amount can be customized based on the input item and furnace type (🔥 regular furnace, ⚒️ blast furnace, or 🍖 smoker).
✨ Taken example from SimplEnergy:
# Give 0.8 XP for smelting 'Raw Simplunium'
execute if score #found furnace_nbt_recipes.data matches 0 store result score #found furnace_nbt_recipes.data if data storage furnace_nbt_recipes:main input{"components": {"minecraft:custom_data": {"simplenergy": {"raw_simplunium": true}}}} run function simplenergy:calls/furnace_nbt_recipes/xp_reward/0.8
#furnace_nbt_recipes:v1/configure_furnace
⚡ Configure a furnace once, the tick the library starts tracking it, so a configured furnace costs nothing extra afterwards.
🏃 It runs as the furnace’s marker entity, at the furnace, and sets furnace_nbt_recipes.speed, given per thousand: 1000 is the vanilla pace, 8000 cooks eight times faster, and 1200 cooks 1.2 times faster.
🧮 Thousandths exist so a furnace can cook at a fraction of a tick per tick; the leftover is carried between ticks, so even 1050 stays exact over a whole recipe.
🔄 The progress arrow stays smooth at any speed, because the library scales progress onto the clock it holds rather than onto the recipe duration.
✨ Example, an electric smelter that smelts eight times faster:
# Run as the marker, at the furnace: check whatever identifies your block
execute if entity @e[tag=simplenergy.electric_smelter,distance=..1] run scoreboard players set @s furnace_nbt_recipes.speed 8000
🧩 A block that already has an entity inside the furnace can be tracked through it instead of a marker: add the furnace_nbt_recipes.furnace tag to it, set its furnace_nbt_recipes.speed, and kill any marker the library already placed within 0.75 blocks of it.
📝 Recipe Format
📝 For each custom recipe you make, you’ll need to add a recipe that take the base item ingredient as ingredient and result the base item of the result.
⏱️ The cookingtime field is mandatory, and the game divides it by the speed multiplier of the fuel: write 200 and a furnace takes ten seconds, while a blast furnace or a smoker on vanilla fuel takes five.
⚠️ This part is really wanky and I don’t want people to use this library so here is a link to <a href="https://github.com/Stoupy51/SimplEnergy/blob/main/build/datapack/data/furnace_nbt_recipes/recipe/vanilla_items/smeltingcommand_blockminecraft_diamond.json” target=”_blank” rel=”noopener nofollow”>SimplEnergy’s example.
⚙️ How the cooking is driven
🕐 The library owns the furnace clock: it holds the cooking time high enough that the vanilla recipe can never complete on its own, and swaps in your result once the recipe has had its full duration.
⛽ The pace comes from the fuel, whatever it is: a custom fuel with a speed_multiplier of 10 cooks ten times faster, exactly as it would for a vanilla recipe.
🔥 Vanilla refuses to light a furnace whose output slot holds an item its own recipe result cannot stack with. The library hands it a free slot for one tick so it lights itself and burns its fuel normally, then puts the item back.
🧱 Two custom results never merge: while the output slot holds a different item, or the same one without room for the result, the furnace stops instead of stacking them, and resumes once the slot is cleared.
🧪 Tests
🔬 The Ward tests in tests/ run against the built pack: uvx "mcward[cli]" test -p build/FurnaceNbtRecipes_datapack.zip -p tests -v 26.3 "furnace_nbt_recipes_test:*"
🔁 Use -v 26.4-snapshot-7 for the 26.4 snapshot. The first run starts a Ward server that stays up so the next runs take a second, and uvx "mcward[cli]" stop --all stops it.
⭐ Star History
常见问题
Furnace NBT Recipes 支持哪些 Minecraft 版本?
Furnace NBT Recipes 支持 Minecraft Java 版 1.21.2–26.3,共 14 个版本。下载时注意选择和你游戏版本一致的文件。
Furnace NBT Recipes 怎么安装?
新建世界时在「数据包」里把下载的 .zip 拖进去;已有的存档,把文件放进存档目录下的 datapacks 文件夹,进游戏输入 /reload 即可生效。服务器同样放在世界目录的 datapacks 里。
Stoupy51 的其他作品
查看全部 →
Realistic Item Drops
This datapack makes dropped items display with physics and rest nicely on the ground (using fun stuff with armor stands)!
LifeSteal FR
Life Steal FR is a simple datapack configurable aiming to add life steal behaviours from the original Lifesteal SMP: https://lifesteal.fandom.com/wiki/Season_1
Cauldron Concrete Powder
CauldronConcretePowder is a simple Datapack created to add to possibility for players to drop concrete powders directly in water cauldrons to transform them. Datapack optimized as much as possible. Working faster than VanillaTweaks' one.
Random Mob Sizes
Random all the mob sizes in your world. (You can configure it as you want) [Optimized + Compatibility]
评论
登录后评论和评分