mc-assets 0.2.48 → 0.2.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33,7 +33,16 @@ export declare class AtlasParser {
33
33
  atlasHasLegacyImage: boolean;
34
34
  constructor(atlasJson: any, latestImage: string, legacyImage?: string | undefined);
35
35
  get atlas(): ItemsAtlases;
36
- getTextureInfo(itemName: string, version?: string): any;
36
+ getTextureInfo(itemName: string, version?: string): {
37
+ su: number;
38
+ sv: number;
39
+ getLoadedImage: () => Promise<HTMLImageElement>;
40
+ u: number;
41
+ v: number;
42
+ tileIndex: number;
43
+ imageType: "latest" | "legacy";
44
+ version: string;
45
+ } | undefined;
37
46
  makeNewAtlas(version: string, getCustomImage?: (itemName: string) => DataUrl | HTMLImageElement | boolean | void, _unusedTileSize?: number, getTextureSortRankOrTopTextures?: string[] | ((key: string) => number), addTextures?: string[]): Promise<{
38
47
  canvas: HTMLCanvasElement;
39
48
  atlas: import("./atlasCreator").JsonAtlas;
@@ -101,14 +101,37 @@ export class ItemsRenderer {
101
101
  let model;
102
102
  {
103
103
  model = resolveModel(cleanFullModelPath);
104
- if (!exactItemResolve) {
105
- model ??= resolveModel(itemModelPath);
104
+ if (!exactItemResolve && !model) {
105
+ // todo resolve deep!
106
+ const itemModel = resolveModel(itemModelPath);
107
+ if (itemModel && itemModel.textures?.layer0) {
108
+ model = itemModel;
109
+ }
106
110
  }
107
111
  let blockModel = model?.parent?.includes('block/');
108
112
  if (!model) {
109
- model = resolveModel(blockModelPath);
110
- if (model)
111
- blockModel = true;
113
+ if (onlyResolveBlockModel && !namespace) {
114
+ const [resolvedModel] = this.assetsParser.getResolvedModelFirst({ name: name, properties: {} }, true) ?? [];
115
+ if (resolvedModel) {
116
+ return {
117
+ resolvedModel,
118
+ get top() {
119
+ throw new Error('Was called with onlyResolveBlockModel = true');
120
+ },
121
+ get left() {
122
+ throw new Error('Was called with onlyResolveBlockModel = true');
123
+ },
124
+ get right() {
125
+ throw new Error('Was called with onlyResolveBlockModel = true');
126
+ }
127
+ };
128
+ }
129
+ }
130
+ else {
131
+ model = resolveModel(blockModelPath);
132
+ if (model)
133
+ blockModel = true;
134
+ }
112
135
  }
113
136
  if (blockModel || model?.elements) {
114
137
  return onlyResolveBlockModel ? this.resolveBlockModel(model, cleanFullModelPath) : this.tryGetFullBlock(model, cleanFullModelPath);
@@ -12,8 +12,8 @@ describe('ItemsRenderer', () => {
12
12
  const blocksAtlasParser = new AtlasParser(blocksAtlases, '');
13
13
  const version = '1.21.4';
14
14
  const renderer = new ItemsRenderer(version, blockstatesModels, itemsAtlasParser, blocksAtlasParser);
15
- const getItemTexture = (item) => {
16
- const result = renderer.getItemTexture(item);
15
+ const getItemTexture = (item, onlyBlockModel = false) => {
16
+ const result = renderer.getItemTexture(item, undefined, undefined, onlyBlockModel);
17
17
  if (!result)
18
18
  return result;
19
19
  const replaceSliceDeep = (obj) => {
@@ -23,6 +23,13 @@ describe('ItemsRenderer', () => {
23
23
  obj.slice = obj['slice'].length === 4;
24
24
  Object.values(obj).forEach(replaceSliceDeep);
25
25
  };
26
+ if (onlyBlockModel) {
27
+ delete result['top'];
28
+ delete result['bottom'];
29
+ delete result['right'];
30
+ delete result['left'];
31
+ result['textures'] = result['resolvedModel']['textures'];
32
+ }
26
33
  replaceSliceDeep(result);
27
34
  result['resolvedModel'] = !!result['resolvedModel'];
28
35
  return result;
@@ -92,6 +99,18 @@ describe('ItemsRenderer', () => {
92
99
  }
93
100
  `);
94
101
  });
102
+ it('chest', () => {
103
+ expect(getItemTexture('chest')).toMatchInlineSnapshot(`undefined`);
104
+ expect(getItemTexture('chest', true)).toMatchInlineSnapshot(`
105
+ {
106
+ "resolvedModel": true,
107
+ "textures": {
108
+ "chest": "block/entity/chest/normal",
109
+ "particle": "block/birch_planks",
110
+ },
111
+ }
112
+ `);
113
+ });
95
114
  it('not implemented logic', () => {
96
115
  expect(getItemTexture('cut_copper_slab')).toMatchInlineSnapshot(`undefined`);
97
116
  expect(getItemTexture('bla_bla')).toMatchInlineSnapshot(`undefined`);
@@ -11,7 +11,7 @@ export declare class VersionedStore<T = string> {
11
11
  get versionsSorted(): string[];
12
12
  /** The order is important: from newest to oldest */
13
13
  push(version: string, key: string, data: T): void;
14
- get(version: string, key: string, inclusive?: boolean): any;
14
+ get(version: string, key: string, inclusive?: boolean): T | undefined;
15
15
  semverToNumber(version: string): number;
16
16
  loadData(data: typeof this.data): void;
17
17
  }
@@ -6,11 +6,11 @@ export default function worldBlockProvider(blockstatesModels: any, blocksAtlas:
6
6
  faces: {
7
7
  [k: string]: {
8
8
  texture: {
9
- u: any;
10
- v: any;
9
+ u: number;
10
+ v: number;
11
11
  su: number;
12
12
  sv: number;
13
- tileIndex: any;
13
+ tileIndex: number;
14
14
  debugName: string;
15
15
  };
16
16
  uv?: number[];
@@ -46,11 +46,11 @@ export default function worldBlockProvider(blockstatesModels: any, blocksAtlas:
46
46
  faces: {
47
47
  [k: string]: {
48
48
  texture: {
49
- u: any;
50
- v: any;
49
+ u: number;
50
+ v: number;
51
51
  su: number;
52
52
  sv: number;
53
- tileIndex: any;
53
+ tileIndex: number;
54
54
  debugName: string;
55
55
  };
56
56
  uv?: number[];
@@ -69,6 +69,15 @@ export default function worldBlockProvider(blockstatesModels: any, blocksAtlas:
69
69
  };
70
70
  }[];
71
71
  } & Omit<T, "textures" | "elements">;
72
- getTextureInfo: (textureName: string) => any;
72
+ getTextureInfo: (textureName: string) => {
73
+ su: number;
74
+ sv: number;
75
+ getLoadedImage: () => Promise<HTMLImageElement>;
76
+ u: number;
77
+ v: number;
78
+ tileIndex: number;
79
+ imageType: "latest" | "legacy";
80
+ version: string;
81
+ } | undefined;
73
82
  };
74
83
  export type WorldBlockProvider = ReturnType<typeof worldBlockProvider>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mc-assets",
3
- "version": "0.2.48",
3
+ "version": "0.2.50",
4
4
  "author": "Vitaly Turovsky <vital2580@icloud.com>",
5
5
  "license": "MIT",
6
6
  "files": [