Back to mods
NBTcompat project artwork

CurseForge · Minecraft mod

NBTcompat

compressed, RAM friendly version of Every Compat

Choose a version Pick your version below, then grab the matching file.

Quick answer

Which NBTcompat release should I use?

Updated last month
Latest stable file nbtcompat 1.1.0.jar
Game version 1.21.1
Loader NeoForge

nbtcompat 1.1.0.jar targets 1.21.1 with NeoForge. The project page does not say whether this file belongs on the client, dedicated server, or both. No extra mods listed for this file.

Where it goes

Is NBTcompat required on the client, server, or both?

The project page does not say whether this file belongs on the client, dedicated server, or both.

Client Source doesn’t say
Dedicated server Source doesn’t say
Loader for this release NeoForge
Required install it here Optional supported, not mandatory Not supported do not install here Source doesn’t say do not assume

The source does not explicitly classify this release as client-only or server-only.

What else does nbtcompat 1.1.0.jar need?

nbtcompat 1.1.0.jar. Change the file and its required mods may change too.

No extra mods listed for this file

This file does not list any required mods. Do not add a library just because a different file uses it.

6 listed on this file 18 pulled in by those mods
KubeJS Optional for nbtcompat 1.1.0.jar
optional
Matching file found Matched file: KubeJS NeoForge 2101.7.2-build.377
Chipped Optional for nbtcompat 1.1.0.jar
optional
Matching file found Matched file: [NeoForge] Chipped 4.0.2
Custom Tiers Optional for nbtcompat 1.1.0.jar
optional
Matching file found Matched file: custom_tiers 1.0.5.jar
Create Optional for nbtcompat 1.1.0.jar
optional
Matching file found Matched file: Create 6.0.10 for mc1.21.1
Artisan Ported Optional for nbtcompat 1.1.0.jar
optional
Matching file found Matched file: artisanworktables-1.0.0.jar
Macaw's Roofs Optional for nbtcompat 1.1.0.jar
optional
Matching file found Matched file: v2.3.2 / mc1.21.1 - NeoForge
Better Advanced Tooltips Needed by KubeJS
pulled in
Matching file found Matched file: better-advanced-tooltips-2101.1.0-build.5.jar
Rhino Needed by KubeJS
pulled in
Matching file found Matched file: Rhino 2101.2.7-build.85
Resourceful Lib Needed by Chipped
pulled in
Matching file found Matched file: [NeoForge] Resourceful Lib 3.0.12
Athena Needed by Chipped
pulled in
Matching file found Matched file: [NeoForge] Athena 4.0.6
Sophisticated Storage Needed by Custom Tiers
pulled in
Matching file found Matched file: sophisticatedstorage-1.21.1-1.6.5.2176.jar
Create More Machines Needed by Custom Tiers
pulled in
Matching file found Matched file: createmoremachines-1.21.1-2.7.jar
Mekanism Needed by Custom Tiers
pulled in
Matching file found Matched file: Mekanism-1.21.1-10.7.19.85.jar
TrashSlot Needed by Sophisticated Storage
pulled in
Matching file found Matched file: trashslot-neoforge-1.21.1-21.1.11.jar
Item Borders [Neo/Forge] Needed by Sophisticated Storage
pulled in
Matching file found Matched file: ItemBorders-1.21-neoforge-1.2.5.jar
Quark Needed by Sophisticated Storage
pulled in
Matching file found Matched file: Quark-4.1-487.jar
Crafting Tweaks Needed by Sophisticated Storage
pulled in
Matching file found Matched file: craftingtweaks-neoforge-1.21.1-21.1.11.jar
Sawmill Needed by Sophisticated Storage
pulled in
Matching file found Matched file: sawmill-1.21-1.8.1-neoforge
Just Enough Items (JEI) Needed by Sophisticated Storage
pulled in
Matching file found Matched file: 19.64.0.453 for NeoForge 1.21.1
Sophisticated Core Needed by Sophisticated Storage
pulled in
Matching file found Matched file: sophisticatedcore-1.21.1-1.5.11.2394.jar
The One Probe Needed by Mekanism
pulled in
Matching file found Matched file: TheOneProbe - 1.21_neo-12.0.8
JEITweaker Needed by Mekanism
pulled in
No matching file
Balm Needed by TrashSlot
pulled in
Matching file found Matched file: balm-neoforge-1.21.1-21.0.66.jar
Legendary Tooltips [Neo/Forge] Needed by Item Borders [Neo/Forge]
pulled in
Matching file found Matched file: LegendaryTooltips-1.21.1-neoforge-1.5.5.jar

18 extra mods were pulled in by other dependencies. Indented rows show who needs each one. We only count dependency files that match this setup. A file for another loader does not fill the gap.

Before you install it

Add NBTcompat without breaking your instance.

Built for nbtcompat 1.1.0.jar. Pick another file and the loader, install side or required mods may change.

  1. 01

    Stick to this file

    Use nbtcompat 1.1.0.jar. It targets 1.21.1 with NeoForge; another release may have different loader, side or dependency requirements.

  2. 02

    Bring the mods it needs

    This file does not list any required mods. Do not add a library just because a different file uses it.

  3. 03

    Put it on the correct side

    The project page does not say whether this file belongs on the client, dedicated server, or both.

  4. 04

    Pick the file you checked

    Use the “Get this file” button beside nbtcompat 1.1.0.jar. It opens that exact file at the source.

About this project

What does NBTcompat add?

Every Compat can fill in the gaps that often exist in large modpacks, though this is at the cost of a lot of RAM as it puts a heavy load on the registry and your system. This mod takes a different approach to completeness. Instead of one block ID per entry, this mod uses NBT data to store as few blocks in registry as possible and stores the textures within said NBT data or use alpha mapping to recreate the look out of existing textures.

This massivly reduces load on the server and client, only needing the memory to generate the textures. For a reference as to how much more RAM friendly this is, take a look at Productive Trees and the dyed planks support that this mod adds. A item or block in registry takes about 2KB of RAM. Productive Trees adds ~160 wood types to the game. With the 16 vanilla colors, you'd end up with 23040 blocks in the registry from Productive Tress if every compat did dyes. That would take up about 46 MB of RAM, vs the 18KB this would take. This mod only registers a small amount of blocks to the game, the rest is handled by NBT data and texture generation. But that same texture generation causes other issues as well, it can overfill the atlas or even your system's memory beyond what you've set. To get around this, we store block color for the dyed planks, cobbles, sands, gravels, and the chipped stone blocks in the block's NBT. For logs, create casings, and bookcases, we use uv mapping from existing textures. Crafting tables currently don't do any of this.

At current, this supports:

Vanilla: (crafting tables, bookshelves, cobblestones, gravels, sands)

Create: (casings (metal X wood combos), recipes for millstone and crushing wheels)

Chipped: (non CTM stone blocks, log variants + 2 custom ones with nether woods, planks, compat with dyed wood for the doors)

custom: (dyed wood sets (planks, fences, doors, trapdoors, buttons, and pressure plates), loot table overrides for cobblestones, world gen for gravels, smelting recipes for cobbles)

Macaw's series: (the entirety of the roofs mod at current)

Mekansim: (recipes for the crusher)

I am in need of gallery images as well as customization packs to add support or fix false entries with other mods. I only really add default support for popular mods or mods that have compat blocks in the code. use #NBTcompat on BlueSky or X or ping me in the post so I can discover and look it over more easily for packs. Also make sure to post your builds with the mod so I can feature it on the mod page. Credit is given in both instances.

You can define custom woods, metals, stones, and dyes with kubeJS like so (startup script):

NbtCompatEvents.defineWoods(event => {
  event.add('modid:wood', 'modid:wood_planks')
  event.add('modid:wood', 'modid:wood_planks', 'Pretty Name')
  event.remove('minecraft:bamboo')
})

NbtCompatEvents.defineMetals(event => {
  event.add('createmoremachines:netherite_alloy', {
    ingot: 'createmoremachines:netherite_alloy',
    block: 'createmoremachines:netherite_alloy_block', // preferred for trim textures
    nugget: 'createmoremachines:netherite_alloy_nugget',
    name: 'Netherite Alloy'
  })
  // shorthand
  event.add('modid:steel', 'modid:steel_ingot', 'modid:steel_block')
  event.remove('minecraft:gold')
})

NbtCompatEvents.defineStones(event => {
  event.add('mymod:slate', 'mymod:slate_rough', 'Slate')
  event.add('mymod:slate', {
    stone: 'mymod:slate_rough',
    cobble: 'mymod:slate_cobbled', // skip NBT cobble when set
    gravel: 'mymod:slate_gravel',
    sand: 'mymod:slate_sand',
    name: 'Slate'
  })
  event.remove('minecraft:netherrack')
})

NbtCompatEvents.defineDyes(event => {
  event.add('kubejs:neon', 'kubejs:neon_dye', 0xff00aa, 'Neon')
})

You can also edit the recipe generation like in this example. Artisian worktables is optional (server script):

NbtCompatEvents.defineRecipes(event => {
  const hasArtisan = Platform.isLoaded('artisanworktables')

  if (hasArtisan) {
    event.craftingTable()
      .shaped(
        ['AB', 'CA'],
        {
          A: 'wood:planks',
          B: 'artisanworktables:wood_handsaw',
          C: 'minecraft:flint'
        }
      )
  } else {
    event.craftingTable()
      .shaped(['AA', 'AA'], { A: 'wood:planks' })
  }

  const bookshelf = event.bookshelf()
    .shaped(
      ['PPP', 'BBB', 'PPP'],
      {
        P: 'wood:planks',
        B: 'minecraft:book'
      }
    )
  if (hasArtisan) {
    bookshelf.artisan('carpenter').removeCrafting()
  }

  const dyedPlanks = event.dyedPlanks()
    .shaped(
      ['PPP', 'PDP', 'PPP'],
      {
        P: 'wood:planks',
        D: 'dye'
      }
    )
  if (hasArtisan) {
    dyedPlanks
      .artisan('carpenter')
      .tool('#artisanworktables:tools/handsaw', 1)
      .removeCrafting()
  }

  const dyeFurniture = (builder) => {
    if (hasArtisan) {
      builder.artisan('carpenter').removeCrafting()
    }
  }

  dyeFurniture(event.dyedStairs()
    .shaped(['#  ', '## ', '###'], { '#': 'dyed:planks' }))

  dyeFurniture(event.dyedSlab()
    .shaped(['###'], { '#': 'dyed:planks' }))

  dyeFurniture(event.dyedFence()
    .shaped(['W#W', 'W#W'], { W: 'dyed:planks', '#': 'minecraft:stick' }))

  dyeFurniture(event.dyedFenceGate()
    .shaped(['#W#', '#W#'], { W: 'dyed:planks', '#': 'minecraft:stick' }))

  dyeFurniture(event.dyedDoor()
    .shaped(['##', '##', '##'], { '#': 'dyed:planks' }))

  dyeFurniture(event.dyedTrapdoor()
    .shaped(['###', '###'], { '#': 'dyed:planks' }))

  dyeFurniture(event.dyedPressurePlate()
    .shaped(['##'], { '#': 'dyed:planks' }))

  dyeFurniture(event.dyedButton()
    .shaped(['#'], { '#': 'dyed:planks' }))
})

// Hard-coded minecraft:crafting_table / bookshelf → convention tags (include nbtcompat via mod datapack).
ServerEvents.recipes(event => {
  event.replaceInput({}, 'minecraft:crafting_table', '#c:player_workstations/crafting_tables')
  event.replaceInput({}, 'minecraft:bookshelf', '#c:bookshelves')
})

Project description from CurseForge.

Pick your setup

NBTcompat by Minecraft version and loader

Choose the version and loader you play, then open the matching release.

1 available setups

Check the dependencies, then try the file in a copied instance before changing a world you care about.

Recent files

NBTcompat versions and loaders

13 of 13 releases match

Looking for an older file? The official CurseForge project page is in Resources.