simplified-mojang-jsons 0.0.5 → 0.0.7

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.
@@ -7,6 +7,20 @@ import { BehaviorEntityBuilder } from "./EntityBuilder";
7
7
  * @author HaJuegos - 30-09-2026
8
8
  */
9
9
  export declare class FinalEntityBuilderTemplate extends BehaviorEntityBuilder {
10
+ /**
11
+ * Variable general para identificar un valor unico y completo para separar los valores a eliminar de la plantilla base.
12
+ * @type {symbol}
13
+ * @readonly
14
+ * @private
15
+ */
16
+ private readonly removedList;
17
+ /**
18
+ * Variable general para identificar los keys dentro de los eventos generales.
19
+ * @type {string[]}
20
+ * @readonly
21
+ * @private
22
+ */
23
+ private readonly metaKeys;
10
24
  /**
11
25
  * Argumentos principales para la creacion de una entidad a base de una plantilla en concreto.
12
26
  * @param {LoseDefinition} def Los valores definidos de la entidad en la plantilla.
@@ -77,6 +91,24 @@ export declare class FinalEntityBuilderTemplate extends BehaviorEntityBuilder {
77
91
  * @private
78
92
  */
79
93
  private validateEvents;
94
+ /**
95
+ * Metodo auxiliar que comprueba de forma recursiva si un nodo contiene, como subconjunto, todo lo indicado de la mascara. Comparando cada clave.
96
+ * @param {unknown} node Nodo real de la plantilla base a evaluar.
97
+ * @param {unknown} mask Mascara de los valroes que deben estar presentes en el nodo.
98
+ * @returns {boolean} Devuelve true si el nodo contiene una mascara, de lo contrario, sera false.
99
+ * @author HaJuegos - 26-10-2026
100
+ * @private
101
+ */
102
+ private matches;
103
+ /**
104
+ * Metodo auxiliar que elimina de forma no mutante, de un nodo, lo indicado en la mascara. Si la mascara es true se elimina el nodo por completo.
105
+ * @param {unknown} node Nodo real de la plantilla base a cual aplicar los cambios.
106
+ * @param {unknown} mask Mascara que describe lo que se debe eliminar.
107
+ * @returns {unknown} Devuelve el nodo resultante o el simbolo interno removedList si el nodo debe eliminarse por completo.
108
+ * @author HaJuegos - 26-10-2026
109
+ * @private
110
+ */
111
+ private prune;
80
112
  }
81
113
  /**
82
114
  * Funcion principal de fabrica para la creacion de una entidad custom o vanilla a partir de una definicion fija.
@@ -1 +1 @@
1
- {"version":3,"file":"EntityTemplateBuilder.d.ts","sourceRoot":"","sources":["../../../../src/builders/behaviors/entities/EntityTemplateBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,iBAAiB,EAAqD,iBAAiB,EAAE,sBAAsB,EAAE,UAAU,EAAe,cAAc,EAAE,QAAQ,EAAE,MAAM,oDAAoD,CAAC;AAC3R,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;;;GAKG;AACH,qBAAa,0BAA2B,SAAQ,qBAAqB;IACjE;;;;;;OAMG;IACH,YAAa,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EA+E/C;IAED;;;;;OAKG;IACI,UAAU,IAAI,MAAM,CAE1B;IAED;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,QAAQ;IAwBhB;;;;;;;;OAQG;IACH,OAAO,CAAC,IAAI;IAcZ;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,SAAS;IAUjB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,cAAc;CAmCzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC1B,KAAK,CAAC,KAAK,SAAS,SAAS,iBAAiB,EAAE,EAChD,KAAK,CAAC,EAAE,SAAS,sBAAsB,EACvC,EAAE,SAAS,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAC9C,GAAG,EAAE,qBAAqB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,IAEnC,KAAK,CAAC,EAAE,SAAS,SAAS,iBAAiB,EAAE,GAAG,EAAE,EAClD,KAAK,CAAC,EAAE,SAAS,sBAAsB,GAAG,EAAE,SACxC,0BAA0B,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAQ,0BAA0B,CAG9F"}
1
+ {"version":3,"file":"EntityTemplateBuilder.d.ts","sourceRoot":"","sources":["../../../../src/builders/behaviors/entities/EntityTemplateBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,iBAAiB,EAAqD,iBAAiB,EAAE,sBAAsB,EAAE,UAAU,EAAe,cAAc,EAAE,QAAQ,EAAE,MAAM,oDAAoD,CAAC;AAC3R,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;;;GAKG;AACH,qBAAa,0BAA2B,SAAQ,qBAAqB;IACjE;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IAEzD;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwD;IAEjF;;;;;;OAMG;IACH,YAAa,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAmI/C;IAED;;;;;OAKG;IACI,UAAU,IAAI,MAAM,CAE1B;IAED;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,QAAQ;IAwBhB;;;;;;;;OAQG;IACH,OAAO,CAAC,IAAI;IAcZ;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,SAAS;IAUjB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,cAAc;IAoCtB;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO;IAaf;;;;;;;OAOG;IACH,OAAO,CAAC,KAAK;CAmDhB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC1B,KAAK,CAAC,KAAK,SAAS,SAAS,iBAAiB,EAAE,EAChD,KAAK,CAAC,EAAE,SAAS,sBAAsB,EACvC,EAAE,SAAS,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAC9C,GAAG,EAAE,qBAAqB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,IAEnC,KAAK,CAAC,EAAE,SAAS,SAAS,iBAAiB,EAAE,GAAG,EAAE,EAClD,KAAK,CAAC,EAAE,SAAS,sBAAsB,GAAG,EAAE,SACxC,0BAA0B,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAQ,0BAA0B,CAG9F"}
package/dist/index.d.ts CHANGED
@@ -42,6 +42,7 @@ export type { BPLootTableTemplateDef, BPLootTableFinalOverDefinition, BPLootTabl
42
42
  export type { BPRecipeDefinition, BPRecipeOverrideDefinition } from "./types/behaviors/recipes/RecipeTemplate";
43
43
  export type { BPSpawnRuleDefinition, BPSpawnRuleOverride, BPSpawnRuleTemplateInstance } from "./types/behaviors/spawnRules/SpawnRuleTemplate";
44
44
  export type { BPTradingDefinition, BPTradingOverInstance, BPTradingOverride } from "./types/behaviors/trading/TradingTemplate";
45
+ export { SpawnCategoryEntities, FormatVersionEntities } from "./types/behaviors/entities/EntitiesEnums";
45
46
  export { EntityFilters } from './utils/EntityFilters';
46
47
  export { MoLang } from './utils/MoLang';
47
48
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -13223,6 +13223,30 @@ import { MinecraftEntityTypes } from "@minecraft/vanilla-data";
13223
13223
  // src/types/behaviors/entities/EntitiesTemplate.ts
13224
13224
  var BPEntityDefaultEventsNames = ["minecraft:entity_spawned", "minecraft:entity_transformed", "minecraft:entity_born", "minecraft:on_prime"];
13225
13225
 
13226
+ // src/types/behaviors/entities/EntitiesEnums.ts
13227
+ var FormatVersionEntities = /* @__PURE__ */ ((FormatVersionEntities2) => {
13228
+ FormatVersionEntities2["MostRecent"] = "1.26.50";
13229
+ FormatVersionEntities2["MostOlder"] = "1.21.90";
13230
+ FormatVersionEntities2["V1_26_0"] = "1.26.0";
13231
+ FormatVersionEntities2["V1_26_10"] = "1.26.10";
13232
+ FormatVersionEntities2["V1_26_20"] = "1.26.20";
13233
+ FormatVersionEntities2["V1_26_30"] = "1.26.30";
13234
+ FormatVersionEntities2["V1_26_40"] = "1.26.40";
13235
+ FormatVersionEntities2["V1_21_90"] = "1.21.90";
13236
+ return FormatVersionEntities2;
13237
+ })(FormatVersionEntities || {});
13238
+ var SpawnCategoryEntities = /* @__PURE__ */ ((SpawnCategoryEntities2) => {
13239
+ SpawnCategoryEntities2["Ambient"] = "ambient";
13240
+ SpawnCategoryEntities2["Axolotls"] = "axolotls";
13241
+ SpawnCategoryEntities2["Creature"] = "creature";
13242
+ SpawnCategoryEntities2["Misc"] = "misc";
13243
+ SpawnCategoryEntities2["Monster"] = "monster";
13244
+ SpawnCategoryEntities2["UndergroundWaterCreature"] = "underground_water_creature";
13245
+ SpawnCategoryEntities2["WaterAmbient"] = "water_ambient";
13246
+ SpawnCategoryEntities2["WaterCreature"] = "water_creature";
13247
+ return SpawnCategoryEntities2;
13248
+ })(SpawnCategoryEntities || {});
13249
+
13226
13250
  // src/builders/behaviors/entities/EntityBuilder.ts
13227
13251
  var BehaviorEntityBuilder = class {
13228
13252
  /**
@@ -13415,6 +13439,20 @@ var FinalEntityBuilderTemplate = class extends BehaviorEntityBuilder {
13415
13439
  */
13416
13440
  constructor(def, over) {
13417
13441
  super(def.id);
13442
+ /**
13443
+ * Variable general para identificar un valor unico y completo para separar los valores a eliminar de la plantilla base.
13444
+ * @type {symbol}
13445
+ * @readonly
13446
+ * @private
13447
+ */
13448
+ this.removedList = /* @__PURE__ */ Symbol("removed");
13449
+ /**
13450
+ * Variable general para identificar los keys dentro de los eventos generales.
13451
+ * @type {string[]}
13452
+ * @readonly
13453
+ * @private
13454
+ */
13455
+ this.metaKeys = ["weight", "filters", "target", "trigger"];
13418
13456
  const where = `[${def.id}]`;
13419
13457
  if (def.formatVersion) {
13420
13458
  this.setDefaultVersion(def.formatVersion);
@@ -13439,22 +13477,49 @@ var FinalEntityBuilderTemplate = class extends BehaviorEntityBuilder {
13439
13477
  }
13440
13478
  const baseComps = over.clearAllData ? {} : this.byID(def.components, `${where} components`);
13441
13479
  const comps = over.clearAllData ? {} : this.patchMap(baseComps, over.components, `${where} components`);
13480
+ if (!over.clearAllData) {
13481
+ for (const id of over.remove?.components ?? []) {
13482
+ if (!(id in comps)) {
13483
+ throw new Error(`${where} remove.components: "${id}" no existe en la plantilla base.`);
13484
+ }
13485
+ delete comps[id];
13486
+ }
13487
+ }
13442
13488
  this.addUnique(comps, over.add?.components, `${where} add.components`, "components");
13443
13489
  const compsGroups = {};
13444
- if (!over.clearAllData && def.componentsGroups) {
13490
+ if (!over.clearAllData) {
13445
13491
  for (const id of Object.keys(over.componentsGroups ?? {})) {
13446
- if (!(id in def.componentsGroups)) {
13492
+ if (!(id in (def.componentsGroups ?? {}))) {
13447
13493
  throw new Error(`${where} componentsGroups: el grupo "${id}" no existe en la plantilla base. Usa add.componentsGroups para crearlo y a\xF1adirlo a la plantilla base.`);
13448
13494
  }
13449
13495
  }
13450
- for (const [id, list] of Object.entries(def.componentsGroups)) {
13496
+ for (const [id, list] of Object.entries(def.componentsGroups ?? {})) {
13451
13497
  const groupOverride = over.componentsGroups?.[id];
13452
- if (groupOverride == null) {
13498
+ if (groupOverride === null) {
13453
13499
  continue;
13454
13500
  }
13455
- ;
13456
13501
  const path = `${where} componentsGroups."${id}"`;
13457
- compsGroups[id] = this.patchMap(this.byID(list, path), groupOverride, path);
13502
+ const baseGroup = this.byID(list, path);
13503
+ compsGroups[id] = groupOverride ? this.patchMap(baseGroup, groupOverride, path) : baseGroup;
13504
+ }
13505
+ for (const [id, ids] of Object.entries(over.remove?.componentsGroups ?? {})) {
13506
+ const path = `${where} remove.componentsGroups."${id}"`;
13507
+ if (!(id in compsGroups)) {
13508
+ throw new Error(`${path}: el grupo no existe en la plantilla base.`);
13509
+ }
13510
+ if (!Array.isArray(ids) || ids.length == 0) {
13511
+ delete compsGroups[id];
13512
+ continue;
13513
+ }
13514
+ for (const compId of ids) {
13515
+ if (!(compId in compsGroups[id])) {
13516
+ throw new Error(`${path}: el componente "${compId}" no existe en el grupo.`);
13517
+ }
13518
+ delete compsGroups[id][compId];
13519
+ }
13520
+ if (Object.keys(compsGroups[id]).length == 0) {
13521
+ delete compsGroups[id];
13522
+ }
13458
13523
  }
13459
13524
  }
13460
13525
  for (const [id, list] of Object.entries(over.add?.componentsGroups ?? {})) {
@@ -13463,6 +13528,19 @@ var FinalEntityBuilderTemplate = class extends BehaviorEntityBuilder {
13463
13528
  }
13464
13529
  const baseEvents = over.clearAllData ? {} : this.patchMap(def.events, over.events, `${where} events`, BPEntityDefaultEventsNames);
13465
13530
  const events = { ...baseEvents };
13531
+ if (!over.clearAllData) {
13532
+ for (const [name, mask] of Object.entries(over.remove?.events ?? {})) {
13533
+ if (!(name in events)) {
13534
+ throw new Error(`${where} remove.events: el evento "${name}" no existe en la plantilla base.`);
13535
+ }
13536
+ const res = mask === true || Object.keys(mask).length == 0 ? this.removedList : this.prune(events[name], mask);
13537
+ if (res === this.removedList) {
13538
+ delete events[name];
13539
+ } else {
13540
+ events[name] = res;
13541
+ }
13542
+ }
13543
+ }
13466
13544
  for (const [name, event] of Object.entries(over.add?.events ?? {})) {
13467
13545
  if (!over.clearAllData && name in events) {
13468
13546
  throw new Error(`${where} add.events: el evento "${name}" ya existe en la plantilla base. Usa events para reemplazarlo de la plantilla base.`);
@@ -13599,6 +13677,70 @@ var FinalEntityBuilderTemplate = class extends BehaviorEntityBuilder {
13599
13677
  walk(event, name);
13600
13678
  }
13601
13679
  }
13680
+ /**
13681
+ * Metodo auxiliar que comprueba de forma recursiva si un nodo contiene, como subconjunto, todo lo indicado de la mascara. Comparando cada clave.
13682
+ * @param {unknown} node Nodo real de la plantilla base a evaluar.
13683
+ * @param {unknown} mask Mascara de los valroes que deben estar presentes en el nodo.
13684
+ * @returns {boolean} Devuelve true si el nodo contiene una mascara, de lo contrario, sera false.
13685
+ * @author HaJuegos - 26-10-2026
13686
+ * @private
13687
+ */
13688
+ matches(node, mask) {
13689
+ if (Array.isArray(mask)) {
13690
+ return Array.isArray(node) && mask.every((m) => node.some((n) => this.matches(n, m)));
13691
+ }
13692
+ if (mask && typeof mask == "object") {
13693
+ return !!node && typeof node == "object" && !Array.isArray(node) && Object.entries(mask).every(([k, v]) => k in node && this.matches(node[k], v));
13694
+ }
13695
+ return node === mask;
13696
+ }
13697
+ /**
13698
+ * Metodo auxiliar que elimina de forma no mutante, de un nodo, lo indicado en la mascara. Si la mascara es true se elimina el nodo por completo.
13699
+ * @param {unknown} node Nodo real de la plantilla base a cual aplicar los cambios.
13700
+ * @param {unknown} mask Mascara que describe lo que se debe eliminar.
13701
+ * @returns {unknown} Devuelve el nodo resultante o el simbolo interno removedList si el nodo debe eliminarse por completo.
13702
+ * @author HaJuegos - 26-10-2026
13703
+ * @private
13704
+ */
13705
+ prune(node, mask) {
13706
+ if (mask === true) {
13707
+ return this.removedList;
13708
+ }
13709
+ if (Array.isArray(node) && Array.isArray(mask)) {
13710
+ const out = [];
13711
+ for (const item of node) {
13712
+ let current = item;
13713
+ for (const m of mask) {
13714
+ if (current === this.removedList) {
13715
+ break;
13716
+ }
13717
+ if (current && typeof current == "object" ? this.matches(current, m) : current === m) {
13718
+ current = typeof m == "object" && m != null ? this.prune(current, m) : this.removedList;
13719
+ }
13720
+ }
13721
+ if (current !== this.removedList) {
13722
+ out.push(current);
13723
+ }
13724
+ }
13725
+ return out.length ? out : this.removedList;
13726
+ }
13727
+ if (node && mask && typeof node == "object" && typeof mask == "object" && !Array.isArray(node) && !Array.isArray(mask)) {
13728
+ const out = { ...node };
13729
+ for (const [key, sub] of Object.entries(mask)) {
13730
+ if (!(key in out) || this.metaKeys.includes(key)) {
13731
+ continue;
13732
+ }
13733
+ const res = this.prune(out[key], sub);
13734
+ if (res === this.removedList) {
13735
+ delete out[key];
13736
+ } else {
13737
+ out[key] = res;
13738
+ }
13739
+ }
13740
+ return Object.keys(out).every((k) => this.metaKeys.includes(k)) ? this.removedList : out;
13741
+ }
13742
+ return node;
13743
+ }
13602
13744
  };
13603
13745
  function createBPEntity(def) {
13604
13746
  return (over = {}) => {
@@ -52356,7 +52498,6 @@ var TntTemplate = createBPEntity({
52356
52498
  }),
52357
52499
  new root_exports4.SetPhysics(),
52358
52500
  new root_exports4.SetPushableByBlock(),
52359
- new root_exports4.SetPushableByEntity(),
52360
52501
  new root_exports4.SetTypeFamily({
52361
52502
  family: ["tnt", "inanimate"]
52362
52503
  })
@@ -169836,7 +169977,9 @@ export {
169836
169977
  root_exports31 as BPSpawnRuleTemplates,
169837
169978
  root_exports33 as BPTradingTemplates,
169838
169979
  EntityFilters,
169980
+ FormatVersionEntities,
169839
169981
  MoLang,
169982
+ SpawnCategoryEntities,
169840
169983
  createBPAnimController,
169841
169984
  createBPBiome,
169842
169985
  createBPBlock,