NBTcompat
RAM- и I/O-дружелюбная версия Every Compat, использующая предгенерацию текстур, перекраску и UV-маппинг.
- Загрузчики
- NeoForge
- Скачиваний на Modrinth
- 172
- Подписчиков на Modrinth
- 1
- версии
- 2
- Обновлён
- 13 октября 202613 окт.
- Опубликован
- в 2026
Коротко о моде
Нужен и в игре, и на сервере
Этот мод использует иной подход к полноте. Вместо одного ID блока на каждую запись мод применяет NBT-данные, чтобы хранить как можно меньше блоков в реестре, а текстуры хранит внутри этих NBT-данных или использует альфа-маппинг для воссоздания внешнего вида из существующих текстур. Это значительно снижает нагрузку на сервер и клиент, требуя память только для генерации текстур. Мы храним цвет блока в NBT блока и используем UV-маппинг из существующих текстур. Так что в атлас текстур добавляется совсем немного. На данный момент поддерживается: Vanilla: (верстаки, книжные полки, булыжники, гравий, пески) Create: (корпуса (комбинации металл X дерево), рецепты для жёрнова и дробильных колёс) Chipped: (каменные блоки без CTM, варианты брёвен + 2 собственных с Nether-древесиной, доски, совместимость с окрашенной древесиной для дверей) custom: (наборы окрашенной древесины (доски, заборы, двери, люки, кнопки и нажимные плиты), переопределения таблиц добычи для булыжников, генерация мира для гравия, рецепты переплавки для булыжников) Macaw's series: (полностью мод на крыши на данный момент) Mekanism: (рецепты для дробилки) Вы можете определить собственную древесину, металлы, камни и красители с помощью kubeJS вот так (startup-скрипт):
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')
})Вы также можете редактировать генерацию рецептов, как в этом примере. Artisian worktables опционален (серверный скрипт):
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')
})Частые вопросы
Как установить NBTcompat?
Установите NeoForge под свою версию Minecraft, скачайте NBTcompat под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть NBTcompat?
У NBTcompat есть сборки для Minecraft 1.21.1.
Нужен ли NBTcompat на сервере?
Нужен и в игре, и на сервере