bedrock-kit 0.0.3

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.
Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +32 -0
  3. package/dist/bedrockKit.d.ts +32 -0
  4. package/dist/bedrockKit.d.ts.map +1 -0
  5. package/dist/bedrockKit.js +33 -0
  6. package/dist/bedrockKit.js.map +1 -0
  7. package/dist/internal/addon.d.ts +198 -0
  8. package/dist/internal/addon.d.ts.map +1 -0
  9. package/dist/internal/addon.js +562 -0
  10. package/dist/internal/addon.js.map +1 -0
  11. package/dist/internal/animation.d.ts +53 -0
  12. package/dist/internal/animation.d.ts.map +1 -0
  13. package/dist/internal/animation.js +47 -0
  14. package/dist/internal/animation.js.map +1 -0
  15. package/dist/internal/attachable.d.ts +31 -0
  16. package/dist/internal/attachable.d.ts.map +1 -0
  17. package/dist/internal/attachable.js +35 -0
  18. package/dist/internal/attachable.js.map +1 -0
  19. package/dist/internal/biome.d.ts +62 -0
  20. package/dist/internal/biome.d.ts.map +1 -0
  21. package/dist/internal/biome.js +75 -0
  22. package/dist/internal/biome.js.map +1 -0
  23. package/dist/internal/block.d.ts +55 -0
  24. package/dist/internal/block.d.ts.map +1 -0
  25. package/dist/internal/block.js +75 -0
  26. package/dist/internal/block.js.map +1 -0
  27. package/dist/internal/entity.d.ts +107 -0
  28. package/dist/internal/entity.d.ts.map +1 -0
  29. package/dist/internal/entity.js +148 -0
  30. package/dist/internal/entity.js.map +1 -0
  31. package/dist/internal/item.d.ts +72 -0
  32. package/dist/internal/item.d.ts.map +1 -0
  33. package/dist/internal/item.js +103 -0
  34. package/dist/internal/item.js.map +1 -0
  35. package/dist/internal/itemStack.d.ts +27 -0
  36. package/dist/internal/itemStack.d.ts.map +1 -0
  37. package/dist/internal/itemStack.js +23 -0
  38. package/dist/internal/itemStack.js.map +1 -0
  39. package/dist/internal/lootTable.d.ts +38 -0
  40. package/dist/internal/lootTable.d.ts.map +1 -0
  41. package/dist/internal/lootTable.js +57 -0
  42. package/dist/internal/lootTable.js.map +1 -0
  43. package/dist/internal/particle.d.ts +35 -0
  44. package/dist/internal/particle.d.ts.map +1 -0
  45. package/dist/internal/particle.js +42 -0
  46. package/dist/internal/particle.js.map +1 -0
  47. package/dist/internal/recipe.d.ts +89 -0
  48. package/dist/internal/recipe.d.ts.map +1 -0
  49. package/dist/internal/recipe.js +198 -0
  50. package/dist/internal/recipe.js.map +1 -0
  51. package/dist/internal/renderController.d.ts +24 -0
  52. package/dist/internal/renderController.d.ts.map +1 -0
  53. package/dist/internal/renderController.js +19 -0
  54. package/dist/internal/renderController.js.map +1 -0
  55. package/dist/internal/sound.d.ts +85 -0
  56. package/dist/internal/sound.d.ts.map +1 -0
  57. package/dist/internal/sound.js +64 -0
  58. package/dist/internal/sound.js.map +1 -0
  59. package/dist/internal/spawnRule.d.ts +44 -0
  60. package/dist/internal/spawnRule.d.ts.map +1 -0
  61. package/dist/internal/spawnRule.js +57 -0
  62. package/dist/internal/spawnRule.js.map +1 -0
  63. package/dist/internal/tag.d.ts +43 -0
  64. package/dist/internal/tag.d.ts.map +1 -0
  65. package/dist/internal/tag.js +8 -0
  66. package/dist/internal/tag.js.map +1 -0
  67. package/dist/internal/tradingTable.d.ts +34 -0
  68. package/dist/internal/tradingTable.d.ts.map +1 -0
  69. package/dist/internal/tradingTable.js +62 -0
  70. package/dist/internal/tradingTable.js.map +1 -0
  71. package/dist/internal/types.d.ts +97 -0
  72. package/dist/internal/types.d.ts.map +1 -0
  73. package/dist/internal/types.js +3 -0
  74. package/dist/internal/types.js.map +1 -0
  75. package/dist/internal/utils.d.ts +39 -0
  76. package/dist/internal/utils.d.ts.map +1 -0
  77. package/dist/internal/utils.js +137 -0
  78. package/dist/internal/utils.js.map +1 -0
  79. package/package.json +35 -0
@@ -0,0 +1,43 @@
1
+ import type { Item } from "./item.js";
2
+ /**
3
+ * Represents a Bedrock tag ingredient in a recipe (e.g. "minecraft:planks").
4
+ * Use instanceof Tag to distinguish from Item in resolve results.
5
+ */
6
+ export declare class Tag {
7
+ /** The tag identifier without any prefix, e.g. "minecraft:planks". */
8
+ readonly id: string;
9
+ constructor(id: string);
10
+ }
11
+ /**
12
+ * A single ingredient slot in a recipe.
13
+ * - `Item` — a resolved item from the addon.
14
+ * - `Tag` — a tag reference (e.g. `minecraft:planks`) that may match multiple items.
15
+ * - `null` — an empty slot (shaped recipes only).
16
+ *
17
+ * Use `instanceof Item` or `instanceof Tag` to distinguish at runtime.
18
+ */
19
+ export type Ingredient = Item | Tag | null;
20
+ /** A single ingredient in a shapeless recipe, with its required count. */
21
+ export interface ShapelessIngredient {
22
+ /** The resolved ingredient — either a specific Item or a Tag. */
23
+ ingredient: Item | Tag;
24
+ /** How many of this ingredient are required. Defaults to 1 if not specified in the file. */
25
+ count: number;
26
+ }
27
+ /** The resolved form of a furnace recipe. */
28
+ export interface FurnaceResolved {
29
+ /** The item or tag to smelt. */
30
+ input: Item | Tag;
31
+ /** The item produced by smelting. */
32
+ output: Item | Tag;
33
+ }
34
+ /** The resolved form of a brewing recipe. */
35
+ export interface BrewingResolved {
36
+ /** The base potion being brewed. */
37
+ input: Item | Tag;
38
+ /** The ingredient added to the brewing stand. */
39
+ reagent: Item | Tag;
40
+ /** The resulting potion. */
41
+ output: Item | Tag;
42
+ }
43
+ //# sourceMappingURL=tag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/internal/tag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC;;;GAGG;AACH,qBAAa,GAAG;IACd,sEAAsE;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBACR,EAAE,EAAE,MAAM;CACvB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;AAE3C,0EAA0E;AAC1E,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,UAAU,EAAE,IAAI,GAAG,GAAG,CAAC;IACvB,4FAA4F;IAC5F,KAAK,EAAE,MAAM,CAAC;CACf;AAED,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,KAAK,EAAE,IAAI,GAAG,GAAG,CAAC;IAClB,qCAAqC;IACrC,MAAM,EAAE,IAAI,GAAG,GAAG,CAAC;CACpB;AAED,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,KAAK,EAAE,IAAI,GAAG,GAAG,CAAC;IAClB,iDAAiD;IACjD,OAAO,EAAE,IAAI,GAAG,GAAG,CAAC;IACpB,4BAA4B;IAC5B,MAAM,EAAE,IAAI,GAAG,GAAG,CAAC;CACpB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Represents a Bedrock tag ingredient in a recipe (e.g. "minecraft:planks").
3
+ * Use instanceof Tag to distinguish from Item in resolve results.
4
+ */
5
+ export class Tag {
6
+ constructor(id) { this.id = id; }
7
+ }
8
+ //# sourceMappingURL=tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/internal/tag.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,GAAG;IAGd,YAAY,EAAU,IAAI,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;CAC1C"}
@@ -0,0 +1,34 @@
1
+ import type { Trade, TradeTier, TradeItem } from "./types.js";
2
+ export type { Trade, TradeTier, TradeItem };
3
+ /**
4
+ * Represents a villager trading table from the behavior pack's `trading/` directory.
5
+ * Trading tables define the tiers of trades available for a villager profession.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * const table = addon.getTradingTable("armorer_trades");
10
+ * console.log(table?.tiers[0].trades[0]);
11
+ * ```
12
+ */
13
+ export declare class TradingTable {
14
+ /** The raw parsed JSON of the trading table file. */
15
+ readonly data: Record<string, unknown>;
16
+ /**
17
+ * Absolute path to the trading table file on disk.
18
+ * Empty string when loaded from browser `File[]`.
19
+ */
20
+ readonly filePath: string;
21
+ /** The file name without extension, used as the lookup key. e.g. `"armorer_trades"`. */
22
+ readonly name: string;
23
+ /** The ordered list of trade tiers. Players unlock higher tiers by completing trades. */
24
+ readonly tiers: TradeTier[];
25
+ constructor(data: Record<string, unknown>, filePath: string, name: string);
26
+ /**
27
+ * Returns a flat deduplicated list of every item identifier referenced
28
+ * across all tiers and trades, including both wanted and given items.
29
+ */
30
+ getAllItemIdentifiers(): string[];
31
+ private _parseTiers;
32
+ private _parseTradeItems;
33
+ }
34
+ //# sourceMappingURL=tradingTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tradingTable.d.ts","sourceRoot":"","sources":["../../src/internal/tradingTable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE9D,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAE5C;;;;;;;;;GASG;AACH,qBAAa,YAAY;IACvB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wFAAwF;IACxF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;gBAEhB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAOzE;;;OAGG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAUjC,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,gBAAgB;CAOzB"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Represents a villager trading table from the behavior pack's `trading/` directory.
3
+ * Trading tables define the tiers of trades available for a villager profession.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * const table = addon.getTradingTable("armorer_trades");
8
+ * console.log(table?.tiers[0].trades[0]);
9
+ * ```
10
+ */
11
+ export class TradingTable {
12
+ constructor(data, filePath, name) {
13
+ this.data = data;
14
+ this.filePath = filePath;
15
+ this.name = name;
16
+ this.tiers = this._parseTiers(data);
17
+ }
18
+ /**
19
+ * Returns a flat deduplicated list of every item identifier referenced
20
+ * across all tiers and trades, including both wanted and given items.
21
+ */
22
+ getAllItemIdentifiers() {
23
+ const ids = [];
24
+ for (const tier of this.tiers)
25
+ for (const trade of tier.trades) {
26
+ for (const w of trade.wants)
27
+ ids.push(w.item);
28
+ for (const g of trade.gives)
29
+ ids.push(g.item);
30
+ }
31
+ return [...new Set(ids)];
32
+ }
33
+ _parseTiers(data) {
34
+ const raw = data["tiers"];
35
+ if (!Array.isArray(raw))
36
+ return [];
37
+ return raw.map((t) => {
38
+ const tier = t;
39
+ const tradeSource = Array.isArray(tier["trades"])
40
+ ? tier["trades"]
41
+ : Array.isArray(tier["groups"])
42
+ ? tier["groups"].flatMap((g) => Array.isArray(g["trades"])
43
+ ? g["trades"]
44
+ : [])
45
+ : [];
46
+ const trades = tradeSource.map((tr) => ({
47
+ wants: this._parseTradeItems(tr["wants"]),
48
+ gives: this._parseTradeItems(tr["gives"]),
49
+ }));
50
+ return { trades };
51
+ });
52
+ }
53
+ _parseTradeItems(raw) {
54
+ if (!Array.isArray(raw))
55
+ return [];
56
+ return raw.map((r) => ({
57
+ item: r["item"] ?? "",
58
+ quantity: r["quantity"] ?? 1,
59
+ }));
60
+ }
61
+ }
62
+ //# sourceMappingURL=tradingTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tradingTable.js","sourceRoot":"","sources":["../../src/internal/tradingTable.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AACH,MAAM,OAAO,YAAY;IAavB,YAAY,IAA6B,EAAE,QAAgB,EAAE,IAAY;QACvE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,qBAAqB;QACnB,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;YAC3B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK;oBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC9C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK;oBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC;QACH,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,CAAC;IAEO,WAAW,CAAC,IAA6B;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QACnC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAU,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,CAA4B,CAAC;YAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC/C,CAAC,CAAE,IAAI,CAAC,QAAQ,CAA+B;gBAC/C,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC7B,CAAC,CAAE,IAAI,CAAC,QAAQ,CAA+B,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1D,KAAK,CAAC,OAAO,CAAE,CAA6B,CAAC,QAAQ,CAAC,CAAC;wBACrD,CAAC,CAAG,CAA6B,CAAC,QAAQ,CAA+B;wBACzE,CAAC,CAAC,EAAE,CACP;oBACH,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,MAAM,GAAY,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC/C,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;gBACzC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;aAC1C,CAAC,CAAC,CAAC;YACJ,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,GAAY;QACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QACnC,OAAQ,GAAiC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpD,IAAI,EAAG,CAAC,CAAC,MAAM,CAAY,IAAI,EAAE;YACjC,QAAQ,EAAG,CAAC,CAAC,UAAU,CAA2B,IAAI,CAAC;SACxD,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * The parsed structure of a resource pack's `textures/item_texture.json`.
3
+ * Maps shortnames (e.g. `"iron_sword"`) to texture file paths.
4
+ */
5
+ export interface ItemTextureMap {
6
+ resource_pack_name: string;
7
+ texture_name: string;
8
+ /** Map of shortname → texture path(s). Used internally to resolve item icon paths. */
9
+ texture_data: Record<string, {
10
+ textures: string | string[];
11
+ }>;
12
+ }
13
+ /**
14
+ * The parsed structure of a resource pack's `textures/terrain_texture.json`.
15
+ * Maps shortnames to block texture file paths.
16
+ */
17
+ export interface TerrainTextureMap {
18
+ resource_pack_name: string;
19
+ texture_name: string;
20
+ /** Map of shortname → texture path(s). Used internally to resolve block face texture paths. */
21
+ texture_data: Record<string, {
22
+ textures: string | string[];
23
+ }>;
24
+ }
25
+ /**
26
+ * The type of a recipe as determined by its root JSON key.
27
+ * - `"shaped"` — crafting table recipe with a fixed pattern grid.
28
+ * - `"shapeless"` — crafting table recipe with an unordered ingredient list.
29
+ * - `"furnace"` — smelting recipe for a furnace or blast furnace.
30
+ * - `"brewing_mix"` — potion brewing recipe (input potion + reagent → output potion).
31
+ * - `"brewing_container"` — brewing recipe that modifies the container item.
32
+ * - `"unknown"` — unrecognised recipe type.
33
+ */
34
+ export type RecipeType = "shaped" | "shapeless" | "furnace" | "brewing_mix" | "brewing_container" | "unknown";
35
+ /** A single entry within a loot pool, representing one possible drop. */
36
+ export interface LootEntry {
37
+ /** The entry type — typically `"item"`, `"loot_table"`, or `"empty"`. */
38
+ type: string;
39
+ /** The item or nested loot table identifier. Null for `"empty"` type entries. */
40
+ name: string | null;
41
+ /** Relative drop weight. Higher values are more likely. */
42
+ weight: number;
43
+ /** Optional function modifiers such as `set_count`, `enchant_randomly`, etc. */
44
+ functions: Record<string, unknown>[];
45
+ }
46
+ /** A single roll group within a loot table. Each pool rolls independently. */
47
+ export interface LootPool {
48
+ /** How many times this pool is rolled. Can be a fixed number or a min/max range. */
49
+ rolls: number | {
50
+ min: number;
51
+ max: number;
52
+ };
53
+ /** The possible entries for each roll. */
54
+ entries: LootEntry[];
55
+ }
56
+ /** A single item entry in a villager trade — either wanted or given. */
57
+ export interface TradeItem {
58
+ /** The namespaced item identifier, e.g. `"minecraft:emerald"`. */
59
+ item: string;
60
+ /** How many of this item are required or given. Can be a fixed number or a min/max range. */
61
+ quantity: number | {
62
+ min: number;
63
+ max: number;
64
+ };
65
+ }
66
+ /** A single villager trade exchange. */
67
+ export interface Trade {
68
+ /** Items the player must provide. */
69
+ wants: TradeItem[];
70
+ /** Items the villager gives in return. */
71
+ gives: TradeItem[];
72
+ }
73
+ /** A single unlock tier in a villager trading table. */
74
+ export interface TradeTier {
75
+ trades: Trade[];
76
+ }
77
+ /**
78
+ * A single audio file entry within a sound definition.
79
+ * Entries in `sound_definitions.json` can be plain path strings or full objects.
80
+ */
81
+ export interface SoundFile {
82
+ /** Path to the audio file relative to the resource pack root, no extension. */
83
+ name: string;
84
+ /** Relative playback volume. Absent means use the definition-level default. */
85
+ volume?: number;
86
+ /** Pitch multiplier. Absent means use the definition-level default. */
87
+ pitch?: number;
88
+ /** Relative selection weight. Higher = more likely to be chosen. */
89
+ weight?: number;
90
+ /** Whether this sound is positional (3D). */
91
+ is3D?: boolean;
92
+ /** Whether this sound streams from disk rather than loading into memory. */
93
+ stream?: boolean;
94
+ /** Whether this sound loads on low-memory devices. */
95
+ loadOnLowMemory?: boolean;
96
+ }
97
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/internal/types.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,sFAAsF;IACtF,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,+FAA+F;IAC/F,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC/D;AAID;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAClB,QAAQ,GAAG,WAAW,GAAG,SAAS,GAClC,aAAa,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAIpD,yEAAyE;AACzE,MAAM,WAAW,SAAS;IACxB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACtC;AAED,8EAA8E;AAC9E,MAAM,WAAW,QAAQ;IACvB,oFAAoF;IACpF,KAAK,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,0CAA0C;IAC1C,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAID,wEAAwE;AACxE,MAAM,WAAW,SAAS;IACxB,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,6FAA6F;IAC7F,QAAQ,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACjD;AAED,wCAAwC;AACxC,MAAM,WAAW,KAAK;IACpB,qCAAqC;IACrC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,0CAA0C;IAC1C,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,wDAAwD;AACxD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAID;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B"}
@@ -0,0 +1,3 @@
1
+ // ─── Texture maps ─────────────────────────────────────────────────────────────
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/internal/types.ts"],"names":[],"mappings":"AAAA,iFAAiF"}
@@ -0,0 +1,39 @@
1
+ export declare function walkDir(dir: string, filter?: (f: string) => boolean): string[];
2
+ export declare function readJSONFromDisk<T = Record<string, unknown>>(filePath: string): T | null;
3
+ export declare function stripComments(raw: string): string;
4
+ export declare function parseJSONString<T = Record<string, unknown>>(text: string): T | null;
5
+ /**
6
+ * Parse a raw ingredient value from a recipe key or ingredients array entry
7
+ * into a prefixed identifier string.
8
+ * item → "minecraft:stick"
9
+ * tag → "tag:minecraft:planks"
10
+ * empty → ""
11
+ */
12
+ export declare function parseIngredient(raw: unknown): string;
13
+ /**
14
+ * A parsed in-memory representation of a pack's files, keyed by their
15
+ * slash-normalised path relative to the pack root.
16
+ * e.g. `"textures/item_texture.json"` → `Record<string, unknown>`
17
+ *
18
+ * Used internally by `AddOn.fromFileList`.
19
+ */
20
+ export type PackData = Map<string, Record<string, unknown>>;
21
+ /**
22
+ * Read a `File[]` from a browser folder picker and return a `PackData` map.
23
+ * The relative path is taken from `file.webkitRelativePath`, which browsers
24
+ * set automatically when using `<input webkitdirectory>` or `showDirectoryPicker()`.
25
+ * The first path segment (the folder name itself) is stripped so all keys are
26
+ * relative to the pack root, matching what the disk loader produces.
27
+ */
28
+ export declare function packDataFromFiles(files: File[]): Promise<PackData>;
29
+ export type PackEntry = {
30
+ filePath: string;
31
+ relativePath: string;
32
+ data: Record<string, unknown>;
33
+ };
34
+ export declare function diskEntries(packRoot: string, subdir: string): PackEntry[];
35
+ export declare function browserEntries(packData: PackData, subdir: string): PackEntry[];
36
+ export declare function extractIdentifier(data: Record<string, unknown>, rootKey: string): string | null;
37
+ /** Strips the namespace from an identifier, e.g. `"minecraft:zombie"` → `"zombie"`. */
38
+ export declare function shortname(identifier: string): string;
39
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/internal/utils.ts"],"names":[],"mappings":"AAKA,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,EAAE,CAS9E;AAED,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAIxF;AAID,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAyBjD;AAED,wBAAgB,eAAe,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAInF;AAID;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAOpD;AAID;;;;;;GAMG;AACH,MAAM,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE5D;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAWxE;AAID,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAElG,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CAOzE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CAQ9E;AAID,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK/F;AAID,uFAAuF;AACvF,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,137 @@
1
+ import { join, relative } from "node:path";
2
+ import { readdirSync, statSync, readFileSync } from "node:fs";
3
+ // ─── Disk I/O ─────────────────────────────────────────────────────────────────
4
+ export function walkDir(dir, filter) {
5
+ try {
6
+ statSync(dir);
7
+ }
8
+ catch {
9
+ return [];
10
+ }
11
+ const results = [];
12
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
13
+ const full = join(dir, entry.name);
14
+ if (entry.isDirectory())
15
+ results.push(...walkDir(full, filter));
16
+ else if (!filter || filter(full))
17
+ results.push(full);
18
+ }
19
+ return results;
20
+ }
21
+ export function readJSONFromDisk(filePath) {
22
+ try {
23
+ return JSON.parse(stripComments(readFileSync(filePath, "utf8")));
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ // ─── JSON parsing ─────────────────────────────────────────────────────────────
30
+ export function stripComments(raw) {
31
+ let result = "";
32
+ let i = 0;
33
+ let inString = false;
34
+ while (i < raw.length) {
35
+ if (raw[i] === '"' && (i === 0 || raw[i - 1] !== "\\")) {
36
+ inString = !inString;
37
+ result += raw[i++];
38
+ continue;
39
+ }
40
+ if (!inString) {
41
+ if (raw[i] === "/" && raw[i + 1] === "/") {
42
+ while (i < raw.length && raw[i] !== "\n")
43
+ i++;
44
+ continue;
45
+ }
46
+ if (raw[i] === "/" && raw[i + 1] === "*") {
47
+ i += 2;
48
+ while (i < raw.length && !(raw[i] === "*" && raw[i + 1] === "/"))
49
+ i++;
50
+ i += 2;
51
+ continue;
52
+ }
53
+ }
54
+ result += raw[i++];
55
+ }
56
+ return result;
57
+ }
58
+ export function parseJSONString(text) {
59
+ try {
60
+ return JSON.parse(stripComments(text));
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }
66
+ // ─── Recipe ingredient parsing ────────────────────────────────────────────────
67
+ /**
68
+ * Parse a raw ingredient value from a recipe key or ingredients array entry
69
+ * into a prefixed identifier string.
70
+ * item → "minecraft:stick"
71
+ * tag → "tag:minecraft:planks"
72
+ * empty → ""
73
+ */
74
+ export function parseIngredient(raw) {
75
+ if (!raw)
76
+ return "";
77
+ if (typeof raw === "string")
78
+ return raw;
79
+ const r = raw;
80
+ if (typeof r["tag"] === "string")
81
+ return `tag:${r["tag"]}`;
82
+ if (typeof r["item"] === "string")
83
+ return r["item"];
84
+ return "";
85
+ }
86
+ /**
87
+ * Read a `File[]` from a browser folder picker and return a `PackData` map.
88
+ * The relative path is taken from `file.webkitRelativePath`, which browsers
89
+ * set automatically when using `<input webkitdirectory>` or `showDirectoryPicker()`.
90
+ * The first path segment (the folder name itself) is stripped so all keys are
91
+ * relative to the pack root, matching what the disk loader produces.
92
+ */
93
+ export async function packDataFromFiles(files) {
94
+ const map = new Map();
95
+ await Promise.all(files.map(async (file) => {
96
+ const rel = file.webkitRelativePath
97
+ ? file.webkitRelativePath.split("/").slice(1).join("/")
98
+ : file.name;
99
+ const text = await file.text();
100
+ const data = parseJSONString(text);
101
+ if (data)
102
+ map.set(rel, data);
103
+ }));
104
+ return map;
105
+ }
106
+ export function diskEntries(packRoot, subdir) {
107
+ return walkDir(join(packRoot, subdir), (f) => f.endsWith(".json")).flatMap((file) => {
108
+ const data = readJSONFromDisk(file);
109
+ if (!data)
110
+ return [];
111
+ const relativePath = relative(packRoot, file).replace(/\\/g, "/");
112
+ return [{ filePath: file, relativePath, data }];
113
+ });
114
+ }
115
+ export function browserEntries(packData, subdir) {
116
+ const prefix = subdir.endsWith("/") ? subdir : subdir + "/";
117
+ const out = [];
118
+ for (const [key, data] of packData) {
119
+ if (key.startsWith(prefix) && key.endsWith(".json"))
120
+ out.push({ filePath: "", relativePath: key, data });
121
+ }
122
+ return out;
123
+ }
124
+ // ─── Shared identifier extraction ────────────────────────────────────────────
125
+ export function extractIdentifier(data, rootKey) {
126
+ const root = data[rootKey];
127
+ if (!root)
128
+ return null;
129
+ const desc = root["description"];
130
+ return desc?.["identifier"] ?? root["identifier"] ?? null;
131
+ }
132
+ // ─── Namespace stripping ──────────────────────────────────────────────────────
133
+ /** Strips the namespace from an identifier, e.g. `"minecraft:zombie"` → `"zombie"`. */
134
+ export function shortname(identifier) {
135
+ return identifier.includes(":") ? identifier.split(":")[1] : identifier;
136
+ }
137
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/internal/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE9D,iFAAiF;AAEjF,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,MAA+B;IAClE,IAAI,CAAC;QAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;IAC3C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,WAAW,EAAE;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;aAC3D,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAA8B,QAAgB;IAC5E,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAM,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YACvD,QAAQ,GAAG,CAAC,QAAQ,CAAC;YACrB,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACzC,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;oBAAE,CAAC,EAAE,CAAC;gBAC9C,SAAS;YACX,CAAC;YACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACzC,CAAC,IAAI,CAAC,CAAC;gBACP,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;oBAAE,CAAC,EAAE,CAAC;gBACtE,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAA8B,IAAY;IACvE,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAM,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAED,iFAAiF;AAEjF;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;IAC3D,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,MAAM,CAAW,CAAC;IAC9D,OAAO,EAAE,CAAC;AACZ,CAAC;AAaD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAa;IACnD,MAAM,GAAG,GAAa,IAAI,GAAG,EAAE,CAAC;IAChC,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB;YACjC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACvD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC,CAAC;IACJ,OAAO,GAAG,CAAC;AACb,CAAC;AAMD,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,MAAc;IAC1D,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAClF,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAkB,EAAE,MAAc;IAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC;IAC5D,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QACnC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;YACjD,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gFAAgF;AAEhF,MAAM,UAAU,iBAAiB,CAAC,IAA6B,EAAE,OAAe;IAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAwC,CAAC;IAClE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAwC,CAAC;IACxE,OAAQ,IAAI,EAAE,CAAC,YAAY,CAAY,IAAK,IAAI,CAAC,YAAY,CAAY,IAAI,IAAI,CAAC;AACpF,CAAC;AAED,iFAAiF;AAEjF,uFAAuF;AACvF,MAAM,UAAU,SAAS,CAAC,UAAkB;IAC1C,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AAC1E,CAAC"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "bedrock-kit",
3
+ "version": "0.0.3",
4
+ "description": "A typed API for navigating Minecraft Bedrock addon files. Works in Node.js and browsers.",
5
+ "type": "module",
6
+ "main": "./dist/bedrockKit.js",
7
+ "types": "./dist/bedrockKit.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/bedrockKit.js",
11
+ "types": "./dist/bedrockKit.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "test": "node test/bedrockKit.test.js",
20
+ "docs": "typedoc"
21
+ },
22
+ "devDependencies": {
23
+ "@types/node": "^22.0.0",
24
+ "typescript": "^5.0.0",
25
+ "typedoc": "^0.28.0"
26
+ },
27
+ "keywords": [
28
+ "minecraft",
29
+ "bedrock",
30
+ "addon",
31
+ "behavior-pack",
32
+ "resource-pack"
33
+ ],
34
+ "license": "MIT"
35
+ }