# 1.0.4 and Minecraft 26.3

Shared release changes and migration from Minecraft 26.2 datapacks.

NTM 1.0.4 is the first release for both Minecraft 26.2 and 26.3, on Fabric and NeoForge. Select Minecraft in the version selector to open its complete reference. The [26.3 wiki](https://movblock.mov/ntm-next/26.3/wiki.md) starts at NTM 1.0.4; the [26.2 wiki](https://movblock.mov/ntm-next/wiki.md) retains earlier releases.

## Changes on both Minecraft versions

- [`world_config/worldgen.coltan_deposit`](https://movblock.mov/ntm-next/26.3/wiki/game-settings/world_config.md#worldgen) controls the coltan deposit independently of scattered `coltan_spawn` ore. It defaults to `true` and also requires `overworld_ores`. Placement modifiers accept `coltan_deposit` in `switches`.
- [`world_config/mode_528`](https://movblock.mov/ntm-next/26.3/wiki/game-settings/world_config.md#mode_528) adds `explosive_energistics` and `nether_burn`, both defaulting to `true`. Both require the server's 528 mode.
- [`machine_config/rtg`](https://movblock.mov/ntm-next/26.3/wiki/machine-settings/rtg.md) adds `decay`, default `true`, and `scale_power`, default `false`, which scales pellet output with remaining lifetime. 528 mode forces both on.
- [`machine_config/pumpjack`](https://movblock.mov/ntm-next/26.3/wiki/machine-settings/pumpjack.md) adds `oil_multiplier`, `gas_multiplier` and `drain_chance_multiplier` for addon fluid reserves.
- [Fluid property patches](https://movblock.mov/ntm-next/26.3/wiki/settings.md#fluid-property-patches) under `fluid_property_patch/` change, add or remove parts of another pack's fluid-property file.
- Toxin trait entries require `hazard`, and protection classes are lower-case: `"gas_lung"` replaces `"GAS_LUNG"`. See [Toxin](https://movblock.mov/ntm-next/26.3/wiki/fluid-traits/traits/toxin.md).
- `hbm:fluid_content` ingredients accept [`drain`](https://movblock.mov/ntm-next/26.3/wiki/ingredients-and-components.md#draining-containers); crafting then takes the fluid and returns the container. Generated crafting recipes use it.
- The component predicates [`hbm:consume_component`](https://movblock.mov/ntm-next/26.3/wiki/ingredients-and-components.md#the-hbmconsume_component-predicate) and [`hbm:unmodified_gun`](https://movblock.mov/ntm-next/26.3/wiki/ingredients-and-components.md#the-hbmunmodified_gun-predicate) claim a changed component. Generated recipes consuming charged batteries or upgrading guns use them.
- [Shredder](https://movblock.mov/ntm-next/26.3/wiki/recipe-types/shredder.md) outputs accept weighted lists of one item with different counts.
- Damage-type tags [`hbm:endermen_evade` and `hbm:endermen_cannot_evade`](https://movblock.mov/ntm-next/26.3/wiki/loot-tags-and-advancements.md#membership-tags) decide which damage endermen teleport away from.
- The [jungle dungeon](https://movblock.mov/ntm-next/26.3/wiki/world-generation/structures/jungle_dungeon.md#room-generation) generates its rooms procedurally. The old `jungle/room` and `jungle/wall_cap` pools and their room templates and processor lists are removed. Overrides of those resources no longer affect the dungeon.

## Pack metadata

| Minecraft | Data-pack format | `min_format` and `max_format` |
| - | - | - |
| 26.2 | 107.1 | `[107, 1]` |
| 26.3 | 121.0 | `[121, 0]` |

Use the target format in `pack.mcmeta`. A 26.3-only pack can declare:

```json
{"pack":{"description":"NTM 1.0.4 for Minecraft 26.3","min_format":[121,0],"max_format":[121,0]}}
```

Worldgen and loot overrides require the format changes below when moving to 26.3. The shared machine recipe fields, counted ingredients, loader-specific ingredient discriminators and NTM custom-registry paths retain their forms.

## Features

Move `data/<namespace>/worldgen/configured_feature/<path>.json` to `data/<namespace>/worldgen/feature/<path>.json`. Keep the resource ID and `type`; move fields from `config` into the top-level object. A feature with no configuration is `{"type":"hbm:barrel"}`.

26.2:

```json
{"type":"hbm:stratum","config":{"domain":"example:seam","state":{"Name":"hbm:stone_gneiss"},"replaceable":{"predicate_type":"minecraft:tag_match","tag":"minecraft:base_stone_overworld"},"scale":0.01,"threshold":5,"range_mult":3,"max_range":4,"y_level":30,"density":1.0}}
```

26.3:

```json
{"type":"hbm:stratum","domain":"example:seam","state":"hbm:stone_gneiss","replaceable":{"predicate_type":"minecraft:tag_match","tag":"minecraft:base_stone_overworld"},"scale":0.01,"threshold":5,"range_mult":3,"max_range":4,"y_level":30,"density":1.0}
```

Placed features keep `worldgen/placed_feature/` and their `feature` references. Inline feature definitions use the same flattened form. The editor schema is named `feature.json` for 26.3, with the new path glob.

## Block states

26.3 block-state JSON accepts a registered block ID for its default state, or an object with `id` and optional `properties`. This affects feature states, processor markers and replacements, and fallout outcomes.

| 26.2 | 26.3 |
| - | - |
| `{"Name":"minecraft:air"}` | `"minecraft:air"` |
| `{"Name":"hbm:waste_log","Properties":{"axis":"x"}}` | `{"id":"hbm:waste_log","properties":{"axis":"x"}}` |

Structure templates remain binary NBT resources. Use templates from the target Minecraft build as the starting point for an override.

## Loot and context providers

On 26.3, loot predicates and item modifiers use `type` as their discriminator. A pool, entry or conditional modifier uses `condition` in place of `conditions`; a list of predicates is expressed with `minecraft:all_of`. Loot tables, pools and entries use `modifier` in place of `functions`.

26.2 pool:

```json
{"rolls":1,"conditions":[{"condition":"minecraft:survives_explosion"}],"entries":[{"type":"minecraft:item","name":"minecraft:iron_ingot"}],"functions":[{"function":"minecraft:set_count","count":2}]}
```

26.3 pool:

```json
{"rolls":1,"condition":{"type":"minecraft:all_of","terms":[{"type":"minecraft:survives_explosion"}]},"entries":[{"type":"minecraft:item","name":"minecraft:iron_ingot"}],"modifier":[{"type":"minecraft:set_count","count":2}]}
```

`hbm:config_scaled` is a context integer provider on 26.3. Its `value` accepts an integer, an inline context integer provider, or a provider reference. `hbm:entity_enchantment_level` is a context float provider. Integer fields such as `rolls` can read it through `minecraft:from_float` with its `input` field. NTM's `hbm:random_slots` fill policy remains available.

Reusable integer and float providers live at `data/<namespace>/context_int_provider/<path>.json` and `data/<namespace>/context_float_provider/<path>.json`. These are reloadable resources.

## Cooking fuel

26.3 fuel items carry `minecraft:cooking_fuel`, with `burn_time` and `speed_multiplier` fields referencing context providers or constants. NTM's burn-time providers use `hbm:cooking/fuel/<item-path>`; their files live at `data/hbm/context_int_provider/cooking/fuel/<item-path>.json` on both loaders. The 26.2 NeoForge furnace-fuel data map is replaced by these providers on 26.3.

For `hbm:biomass`, the generated provider is:

```json
{"type":"minecraft:div","left":400,"right":{"type":"minecraft:conditional","condition":"minecraft:block/fast_cooking","on_false":"minecraft:cooking/normal_burn_time_reduction_factor","on_true":"minecraft:cooking/fast_burn_time_reduction_factor"}}
```

The default divisors are 1 for ordinary cooking and 2 for fast cooking. Copy this file to change biomass burn time while retaining that distinction.

## Advancements and block tags

The 26.3 `minecraft:recipe_crafted` trigger uses `conditions.recipes` in place of `conditions.recipe_id`. For one recipe, use `{"recipes":"hbm:nugget_am241_from_ingot"}`. `hbm:item_crafted` retains its item predicate.

The 26.3 generated block tags include `minecraft:blocks_motion`, `minecraft:blocks_motion_no_leaves` and `minecraft:washed_away_by_fluids`. They declare NTM block participation in the target version's heightmap and fluid rules. Preserve relevant NTM entries when replacing these tags.
