# 1.0.4 and Minecraft 26.3

Shared release changes and migration from Minecraft 26.2 datapacks.

**since NTM 1.0.4**

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/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/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/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/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/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/wiki/fluid-traits/traits/toxin.md).
- `hbm:fluid_content` ingredients accept [`drain`](https://movblock.mov/ntm-next/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/wiki/ingredients-and-components.md#the-hbmconsume_component-predicate) and [`hbm:unmodified_gun`](https://movblock.mov/ntm-next/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/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/wiki/loot-tags-and-advancements.md#membership-tags) decide which damage endermen teleport away from.
- The [jungle dungeon](https://movblock.mov/ntm-next/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.
