import assert from 'node:assert/strict' import { test } from 'node:test' import { CanvasTexture, LinearFilter, NearestFilter } from 'three' import { configureSchematicTexture, resolveSchematicBlockName, resolveSchematicMaterialTexture, } from './resources.ts' test('block names follow the current locale and fall back without exposing internal IDs', () => { const names = { en_us: { 'block.minecraft.stone': 'Stone', 'block.example.machine.frame': 'Machine Frame', }, zh_cn: { 'block.minecraft.stone': '\u77f3\u5934' }, } assert.equal(resolveSchematicBlockName('minecraft:stone', names, 'zh-CN'), '\u77f3\u5934') assert.equal(resolveSchematicBlockName('example:machine/frame', names, 'zh-CN'), 'Machine Frame') assert.equal(resolveSchematicBlockName('example:polished_tile', names, 'zh-CN'), 'Polished Tile') }) test('schematic textures preserve Deepslate atlas row coordinates', () => { const texture = new CanvasTexture({} as HTMLCanvasElement) texture.flipY = true texture.magFilter = LinearFilter texture.minFilter = LinearFilter texture.generateMipmaps = true const previousVersion = texture.version configureSchematicTexture(texture) assert.equal(texture.flipY, false) assert.equal(texture.magFilter, NearestFilter) assert.equal(texture.minFilter, NearestFilter) assert.equal(texture.generateMipmaps, false) assert.ok(texture.version > previousVersion) }) test('material previews resolve blockstate models and texture variables', () => { const sideUv: [number, number, number, number] = [0.25, 0.5, 0.5, 0.75] const resources = { blockDefinitions: { 'minecraft:grass_block': { variants: { 'snowy=false': [{ model: 'minecraft:block/grass_block' }] }, }, }, blockModels: { 'minecraft:block/grass_block': { parent: 'minecraft:block/cube_bottom_top', textures: { side: '#side_texture', side_texture: 'minecraft:block/grass_block_side', top: 'minecraft:block/grass_block_top', }, }, 'minecraft:block/cube_bottom_top': { textures: { particle: 'minecraft:block/dirt' }, }, }, defaultBlockProperties: {}, textureUvs: { 'minecraft:block/grass_block_side': sideUv, 'minecraft:block/grass_block_top': [0, 0, 0.25, 0.25] as [number, number, number, number], 'minecraft:block/dirt': [0.5, 0.5, 0.75, 0.75] as [number, number, number, number], }, missingTextureUv: [0, 0, 0.1, 0.1] as [number, number, number, number], } assert.deepEqual(resolveSchematicMaterialTexture('minecraft:grass_block', resources), sideUv) }) test('material previews fall back to conventional texture names', () => { const uv: [number, number, number, number] = [0, 0.25, 0.25, 0.5] const resources = { blockDefinitions: {}, blockModels: {}, defaultBlockProperties: {}, textureUvs: { 'example:block/polished_tile': uv }, missingTextureUv: [0, 0, 0.1, 0.1] as [number, number, number, number], } assert.deepEqual(resolveSchematicMaterialTexture('example:polished_tile', resources), uv) })