@adeficior/data-modifier 1.0.0-rc.9
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.
- package/dist/cli/codegen/registry.d.ts +3 -0
- package/dist/cli/codegen/registry.js +81 -0
- package/dist/cli/codegen/registry.js.map +1 -0
- package/dist/cli/config.d.ts +10 -0
- package/dist/cli/config.js +60 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +34 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/common/id.d.ts +15 -0
- package/dist/common/id.js +42 -0
- package/dist/common/id.js.map +1 -0
- package/dist/common/ingredient.d.ts +49 -0
- package/dist/common/ingredient.js +108 -0
- package/dist/common/ingredient.js.map +1 -0
- package/dist/common/predicates.d.ts +7 -0
- package/dist/common/predicates.js +32 -0
- package/dist/common/predicates.js.map +1 -0
- package/dist/common/registry.d.ts +12 -0
- package/dist/common/registry.js +36 -0
- package/dist/common/registry.js.map +1 -0
- package/dist/common/result.d.ts +48 -0
- package/dist/common/result.js +37 -0
- package/dist/common/result.js.map +1 -0
- package/dist/emit/assets/blockstates.d.ts +18 -0
- package/dist/emit/assets/blockstates.js +46 -0
- package/dist/emit/assets/blockstates.js.map +1 -0
- package/dist/emit/assets/lang.d.ts +33 -0
- package/dist/emit/assets/lang.js +103 -0
- package/dist/emit/assets/lang.js.map +1 -0
- package/dist/emit/assets/models.d.ts +24 -0
- package/dist/emit/assets/models.js +59 -0
- package/dist/emit/assets/models.js.map +1 -0
- package/dist/emit/blacklist.d.ts +32 -0
- package/dist/emit/blacklist.js +99 -0
- package/dist/emit/blacklist.js.map +1 -0
- package/dist/emit/content/blockDefinition.d.ts +58 -0
- package/dist/emit/content/blockDefinition.js +58 -0
- package/dist/emit/content/blockDefinition.js.map +1 -0
- package/dist/emit/content/innerBlockDefinition.d.ts +12 -0
- package/dist/emit/content/innerBlockDefinition.js +32 -0
- package/dist/emit/content/innerBlockDefinition.js.map +1 -0
- package/dist/emit/content/itemDefinition.d.ts +58 -0
- package/dist/emit/content/itemDefinition.js +54 -0
- package/dist/emit/content/itemDefinition.js.map +1 -0
- package/dist/emit/custom.d.ts +15 -0
- package/dist/emit/custom.js +42 -0
- package/dist/emit/custom.js.map +1 -0
- package/dist/emit/data/loot.d.ts +48 -0
- package/dist/emit/data/loot.js +108 -0
- package/dist/emit/data/loot.js.map +1 -0
- package/dist/emit/data/recipe.d.ts +46 -0
- package/dist/emit/data/recipe.js +106 -0
- package/dist/emit/data/recipe.js.map +1 -0
- package/dist/emit/data/tags.d.ts +38 -0
- package/dist/emit/data/tags.js +115 -0
- package/dist/emit/data/tags.js.map +1 -0
- package/dist/emit/index.d.ts +11 -0
- package/dist/emit/index.js +1 -0
- package/dist/emit/index.js.map +1 -0
- package/dist/emit/polytoneTabs.d.ts +65 -0
- package/dist/emit/polytoneTabs.js +101 -0
- package/dist/emit/polytoneTabs.js.map +1 -0
- package/dist/emit/rule/index.d.ts +10 -0
- package/dist/emit/rule/index.js +10 -0
- package/dist/emit/rule/index.js.map +1 -0
- package/dist/emit/rule/lootTable.d.ts +14 -0
- package/dist/emit/rule/lootTable.js +47 -0
- package/dist/emit/rule/lootTable.js.map +1 -0
- package/dist/emit/rule/recipe.d.ts +16 -0
- package/dist/emit/rule/recipe.js +29 -0
- package/dist/emit/rule/recipe.js.map +1 -0
- package/dist/emit/ruled.d.ts +18 -0
- package/dist/emit/ruled.js +47 -0
- package/dist/emit/ruled.js.map +1 -0
- package/dist/error.d.ts +12 -0
- package/dist/error.js +45 -0
- package/dist/error.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/loader/index.d.ts +16 -0
- package/dist/loader/index.js +40 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/lang.d.ts +7 -0
- package/dist/loader/lang.js +12 -0
- package/dist/loader/lang.js.map +1 -0
- package/dist/loader/loot.d.ts +7 -0
- package/dist/loader/loot.js +12 -0
- package/dist/loader/loot.js.map +1 -0
- package/dist/loader/pack.d.ts +62 -0
- package/dist/loader/pack.js +131 -0
- package/dist/loader/pack.js.map +1 -0
- package/dist/loader/recipe.d.ts +25 -0
- package/dist/loader/recipe.js +207 -0
- package/dist/loader/recipe.js.map +1 -0
- package/dist/loader/registry/dump.d.ts +19 -0
- package/dist/loader/registry/dump.js +74 -0
- package/dist/loader/registry/dump.js.map +1 -0
- package/dist/loader/registry/empty.d.ts +11 -0
- package/dist/loader/registry/empty.js +22 -0
- package/dist/loader/registry/empty.js.map +1 -0
- package/dist/loader/registry/index.d.ts +11 -0
- package/dist/loader/registry/index.js +1 -0
- package/dist/loader/registry/index.js.map +1 -0
- package/dist/loader/tags.d.ts +26 -0
- package/dist/loader/tags.js +131 -0
- package/dist/loader/tags.js.map +1 -0
- package/dist/parser/adAstra.d.ts +11 -0
- package/dist/parser/adAstra.js +6 -0
- package/dist/parser/adAstra.js.map +1 -0
- package/dist/parser/botania.d.ts +20 -0
- package/dist/parser/botania.js +11 -0
- package/dist/parser/botania.js.map +1 -0
- package/dist/parser/create.d.ts +4 -0
- package/dist/parser/create.js +3 -0
- package/dist/parser/create.js.map +1 -0
- package/dist/parser/farmersdelight.d.ts +4 -0
- package/dist/parser/farmersdelight.js +3 -0
- package/dist/parser/farmersdelight.js.map +1 -0
- package/dist/parser/index.d.ts +13 -0
- package/dist/parser/index.js +8 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/lootTable.d.ts +7 -0
- package/dist/parser/lootTable.js +70 -0
- package/dist/parser/lootTable.js.map +1 -0
- package/dist/parser/recipe/adAstra/conversion.d.ts +20 -0
- package/dist/parser/recipe/adAstra/conversion.js +33 -0
- package/dist/parser/recipe/adAstra/conversion.js.map +1 -0
- package/dist/parser/recipe/adAstra/hammering.d.ts +18 -0
- package/dist/parser/recipe/adAstra/hammering.js +27 -0
- package/dist/parser/recipe/adAstra/hammering.js.map +1 -0
- package/dist/parser/recipe/adAstra/index.d.ts +5 -0
- package/dist/parser/recipe/adAstra/index.js +1 -0
- package/dist/parser/recipe/adAstra/index.js.map +1 -0
- package/dist/parser/recipe/adAstra/inputOutput.d.ts +24 -0
- package/dist/parser/recipe/adAstra/inputOutput.js +42 -0
- package/dist/parser/recipe/adAstra/inputOutput.js.map +1 -0
- package/dist/parser/recipe/adAstra/nasaWorkbench.d.ts +20 -0
- package/dist/parser/recipe/adAstra/nasaWorkbench.js +30 -0
- package/dist/parser/recipe/adAstra/nasaWorkbench.js.map +1 -0
- package/dist/parser/recipe/adAstra/spaceStation.d.ts +19 -0
- package/dist/parser/recipe/adAstra/spaceStation.js +27 -0
- package/dist/parser/recipe/adAstra/spaceStation.js.map +1 -0
- package/dist/parser/recipe/botania/apothecary.d.ts +19 -0
- package/dist/parser/recipe/botania/apothecary.js +28 -0
- package/dist/parser/recipe/botania/apothecary.js.map +1 -0
- package/dist/parser/recipe/botania/brew.d.ts +18 -0
- package/dist/parser/recipe/botania/brew.js +24 -0
- package/dist/parser/recipe/botania/brew.js.map +1 -0
- package/dist/parser/recipe/botania/elvenTrade.d.ts +19 -0
- package/dist/parser/recipe/botania/elvenTrade.js +27 -0
- package/dist/parser/recipe/botania/elvenTrade.js.map +1 -0
- package/dist/parser/recipe/botania/gogWrapper.d.ts +22 -0
- package/dist/parser/recipe/botania/gogWrapper.js +34 -0
- package/dist/parser/recipe/botania/gogWrapper.js.map +1 -0
- package/dist/parser/recipe/botania/manaInfusion.d.ts +21 -0
- package/dist/parser/recipe/botania/manaInfusion.js +33 -0
- package/dist/parser/recipe/botania/manaInfusion.js.map +1 -0
- package/dist/parser/recipe/botania/nbtWrapper.d.ts +20 -0
- package/dist/parser/recipe/botania/nbtWrapper.js +30 -0
- package/dist/parser/recipe/botania/nbtWrapper.js.map +1 -0
- package/dist/parser/recipe/botania/orechid.d.ts +35 -0
- package/dist/parser/recipe/botania/orechid.js +74 -0
- package/dist/parser/recipe/botania/orechid.js.map +1 -0
- package/dist/parser/recipe/botania/pureDaisy.d.ts +19 -0
- package/dist/parser/recipe/botania/pureDaisy.js +30 -0
- package/dist/parser/recipe/botania/pureDaisy.js.map +1 -0
- package/dist/parser/recipe/botania/runicAltar.d.ts +19 -0
- package/dist/parser/recipe/botania/runicAltar.js +27 -0
- package/dist/parser/recipe/botania/runicAltar.js.map +1 -0
- package/dist/parser/recipe/botania/terraPlate.d.ts +19 -0
- package/dist/parser/recipe/botania/terraPlate.js +27 -0
- package/dist/parser/recipe/botania/terraPlate.js.map +1 -0
- package/dist/parser/recipe/create/assembly.d.ts +25 -0
- package/dist/parser/recipe/create/assembly.js +45 -0
- package/dist/parser/recipe/create/assembly.js.map +1 -0
- package/dist/parser/recipe/create/processing.d.ts +21 -0
- package/dist/parser/recipe/create/processing.js +27 -0
- package/dist/parser/recipe/create/processing.js.map +1 -0
- package/dist/parser/recipe/farmersdelight/cooking.d.ts +22 -0
- package/dist/parser/recipe/farmersdelight/cooking.js +29 -0
- package/dist/parser/recipe/farmersdelight/cooking.js.map +1 -0
- package/dist/parser/recipe/farmersdelight/cutting.d.ts +23 -0
- package/dist/parser/recipe/farmersdelight/cutting.js +38 -0
- package/dist/parser/recipe/farmersdelight/cutting.js.map +1 -0
- package/dist/parser/recipe/forge/conditional.d.ts +25 -0
- package/dist/parser/recipe/forge/conditional.js +45 -0
- package/dist/parser/recipe/forge/conditional.js.map +1 -0
- package/dist/parser/recipe/ignored.d.ts +10 -0
- package/dist/parser/recipe/ignored.js +16 -0
- package/dist/parser/recipe/ignored.js.map +1 -0
- package/dist/parser/recipe/index.d.ts +19 -0
- package/dist/parser/recipe/index.js +22 -0
- package/dist/parser/recipe/index.js.map +1 -0
- package/dist/parser/recipe/quark/exclusion.d.ts +20 -0
- package/dist/parser/recipe/quark/exclusion.js +32 -0
- package/dist/parser/recipe/quark/exclusion.js.map +1 -0
- package/dist/parser/recipe/roots/component.d.ts +18 -0
- package/dist/parser/recipe/roots/component.js +24 -0
- package/dist/parser/recipe/roots/component.js.map +1 -0
- package/dist/parser/recipe/roots/ritual.d.ts +22 -0
- package/dist/parser/recipe/roots/ritual.js +32 -0
- package/dist/parser/recipe/roots/ritual.js.map +1 -0
- package/dist/parser/recipe/sullys/polishing.d.ts +19 -0
- package/dist/parser/recipe/sullys/polishing.js +27 -0
- package/dist/parser/recipe/sullys/polishing.js.map +1 -0
- package/dist/parser/recipe/thermal/catalyst.d.ts +22 -0
- package/dist/parser/recipe/thermal/catalyst.js +24 -0
- package/dist/parser/recipe/thermal/catalyst.js.map +1 -0
- package/dist/parser/recipe/thermal/fuel.d.ts +18 -0
- package/dist/parser/recipe/thermal/fuel.js +24 -0
- package/dist/parser/recipe/thermal/fuel.js.map +1 -0
- package/dist/parser/recipe/thermal/index.d.ts +22 -0
- package/dist/parser/recipe/thermal/index.js +36 -0
- package/dist/parser/recipe/thermal/index.js.map +1 -0
- package/dist/parser/recipe/thermal/ingredient.d.ts +21 -0
- package/dist/parser/recipe/thermal/ingredient.js +43 -0
- package/dist/parser/recipe/thermal/ingredient.js.map +1 -0
- package/dist/parser/recipe/thermal/treeExtraction.d.ts +24 -0
- package/dist/parser/recipe/thermal/treeExtraction.js +47 -0
- package/dist/parser/recipe/thermal/treeExtraction.js.map +1 -0
- package/dist/parser/recipe/vanilla/shaped.d.ts +19 -0
- package/dist/parser/recipe/vanilla/shaped.js +28 -0
- package/dist/parser/recipe/vanilla/shaped.js.map +1 -0
- package/dist/parser/recipe/vanilla/shapeless.d.ts +18 -0
- package/dist/parser/recipe/vanilla/shapeless.js +27 -0
- package/dist/parser/recipe/vanilla/shapeless.js.map +1 -0
- package/dist/parser/recipe/vanilla/smelting.d.ts +19 -0
- package/dist/parser/recipe/vanilla/smelting.js +27 -0
- package/dist/parser/recipe/vanilla/smelting.js.map +1 -0
- package/dist/parser/recipe/vanilla/smithing.d.ts +19 -0
- package/dist/parser/recipe/vanilla/smithing.js +28 -0
- package/dist/parser/recipe/vanilla/smithing.js.map +1 -0
- package/dist/parser/recipe/vanilla/stonecutting.d.ts +20 -0
- package/dist/parser/recipe/vanilla/stonecutting.js +36 -0
- package/dist/parser/recipe/vanilla/stonecutting.js.map +1 -0
- package/dist/parser/roots.d.ts +4 -0
- package/dist/parser/roots.js +3 -0
- package/dist/parser/roots.js.map +1 -0
- package/dist/parser/thermal.d.ts +10 -0
- package/dist/parser/thermal.js +6 -0
- package/dist/parser/thermal.js.map +1 -0
- package/dist/schema/assets/blockstate.d.ts +10 -0
- package/dist/schema/assets/blockstate.js +1 -0
- package/dist/schema/assets/blockstate.js.map +1 -0
- package/dist/schema/assets/lang.d.ts +3 -0
- package/dist/schema/assets/lang.js +3 -0
- package/dist/schema/assets/lang.js.map +1 -0
- package/dist/schema/assets/model.d.ts +27 -0
- package/dist/schema/assets/model.js +1 -0
- package/dist/schema/assets/model.js.map +1 -0
- package/dist/schema/content/blockDefinition.d.ts +11 -0
- package/dist/schema/content/blockDefinition.js +1 -0
- package/dist/schema/content/blockDefinition.js.map +1 -0
- package/dist/schema/content/itemDefinition.d.ts +14 -0
- package/dist/schema/content/itemDefinition.js +1 -0
- package/dist/schema/content/itemDefinition.js.map +1 -0
- package/dist/schema/data/loot.d.ts +1151 -0
- package/dist/schema/data/loot.js +76 -0
- package/dist/schema/data/loot.js.map +1 -0
- package/dist/schema/data/recipe.d.ts +13 -0
- package/dist/schema/data/recipe.js +1 -0
- package/dist/schema/data/recipe.js.map +1 -0
- package/dist/schema/data/tag.d.ts +11 -0
- package/dist/schema/data/tag.js +6 -0
- package/dist/schema/data/tag.js.map +1 -0
- package/dist/stubTypes.d.ts +7 -0
- package/dist/stubTypes.js +1 -0
- package/dist/stubTypes.js.map +1 -0
- package/dist/textHelper.d.ts +3 -0
- package/dist/textHelper.js +20 -0
- package/dist/textHelper.js.map +1 -0
- package/package.json +96 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { createId, encodeId } from "../../common/id.js";
|
|
2
|
+
import { resolveIDTest } from "../../common/predicates.js";
|
|
3
|
+
import Registry from "../../common/registry.js";
|
|
4
|
+
import { entryId, orderTagEntries } from "../../loader/tags.js";
|
|
5
|
+
import { tagFolderOf } from "../../schema/data/tag.js";
|
|
6
|
+
import { toJson } from "../../textHelper.js";
|
|
7
|
+
class ScopedEmitter {
|
|
8
|
+
registry;
|
|
9
|
+
folder;
|
|
10
|
+
options;
|
|
11
|
+
constructor(registry, folder, options) {
|
|
12
|
+
this.registry = registry;
|
|
13
|
+
this.folder = folder;
|
|
14
|
+
this.options = options;
|
|
15
|
+
}
|
|
16
|
+
modifiers = new Registry();
|
|
17
|
+
getModified(consumer) {
|
|
18
|
+
const results = [];
|
|
19
|
+
this.modifiers.forEach((modifiers, id) => {
|
|
20
|
+
const modified = modifiers.reduce((previous, modifier) => modifier(previous), {
|
|
21
|
+
values: [],
|
|
22
|
+
replace: false,
|
|
23
|
+
});
|
|
24
|
+
results.push(consumer(createId(id), modified));
|
|
25
|
+
});
|
|
26
|
+
return results;
|
|
27
|
+
}
|
|
28
|
+
modify(id, modifier) {
|
|
29
|
+
this.modifiers.getOrPut(id, () => []).push(modifier);
|
|
30
|
+
}
|
|
31
|
+
add(id, value) {
|
|
32
|
+
this.modify(id, (previous) => {
|
|
33
|
+
return {
|
|
34
|
+
...previous,
|
|
35
|
+
values: [...(previous.values ?? []), value],
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
remove(id, test) {
|
|
40
|
+
if (this.options.advancedTags) {
|
|
41
|
+
if (test instanceof RegExp || typeof test === "function") {
|
|
42
|
+
throw new Error("advanced tag loader only accepts tag entries in removal");
|
|
43
|
+
}
|
|
44
|
+
this.modify(id, (previous) => {
|
|
45
|
+
return {
|
|
46
|
+
...previous,
|
|
47
|
+
remove: [...(previous.remove ?? []), test],
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const predicate = resolveIDTest(test, this.registry);
|
|
53
|
+
this.modify(id, (previous) => {
|
|
54
|
+
const defaultValues = (previous.replace ? undefined : this.registry.resolve(id)) ?? [];
|
|
55
|
+
return {
|
|
56
|
+
replace: true,
|
|
57
|
+
values: [...defaultValues, ...(previous.values ?? [])].filter((it) => {
|
|
58
|
+
return !predicate(encodeId(entryId(it)));
|
|
59
|
+
}),
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
clear() {
|
|
65
|
+
this.modifiers.clear();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export default class TagEmitter {
|
|
69
|
+
logger;
|
|
70
|
+
registry;
|
|
71
|
+
options;
|
|
72
|
+
emitters = new Map();
|
|
73
|
+
blocks;
|
|
74
|
+
items;
|
|
75
|
+
fluids;
|
|
76
|
+
constructor(logger, registry, options) {
|
|
77
|
+
this.logger = logger;
|
|
78
|
+
this.registry = registry;
|
|
79
|
+
this.options = options;
|
|
80
|
+
this.blocks = this.scoped("minecraft:block", "blocks");
|
|
81
|
+
this.items = this.scoped("minecraft:item", "items");
|
|
82
|
+
this.fluids = this.scoped("minecraft:fluid", "fluids");
|
|
83
|
+
}
|
|
84
|
+
clear() {
|
|
85
|
+
this.emitters.forEach((it) => it.clear());
|
|
86
|
+
}
|
|
87
|
+
async emit(acceptor) {
|
|
88
|
+
const emitters = Array.from(this.emitters.values());
|
|
89
|
+
await Promise.all(emitters.flatMap((scoped) => scoped.getModified(async (id, definition) => {
|
|
90
|
+
const path = `data/${id.namespace}/tags/${scoped.folder}/${id.path}.json`;
|
|
91
|
+
acceptor(path, await toJson({
|
|
92
|
+
...definition,
|
|
93
|
+
values: definition.values && orderTagEntries(definition.values),
|
|
94
|
+
remove: definition.remove && orderTagEntries(definition.remove),
|
|
95
|
+
}));
|
|
96
|
+
})));
|
|
97
|
+
}
|
|
98
|
+
add(registry, id, value) {
|
|
99
|
+
this.scoped(registry).add(id, value);
|
|
100
|
+
}
|
|
101
|
+
remove(registry, id, test) {
|
|
102
|
+
this.scoped(registry).remove(id, test);
|
|
103
|
+
}
|
|
104
|
+
scoped(registry, folder = tagFolderOf(registry)) {
|
|
105
|
+
const existing = this.emitters.get(registry);
|
|
106
|
+
if (existing)
|
|
107
|
+
return existing;
|
|
108
|
+
else {
|
|
109
|
+
const emitter = new ScopedEmitter(this.registry.registry(registry), folder, this.options);
|
|
110
|
+
this.emitters.set(registry, emitter);
|
|
111
|
+
return emitter;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../src/emit/data/tags.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Acceptor } from "@adeficior/pack-resolver";
|
|
2
|
+
import type { Id } from "../common/id.js";
|
|
3
|
+
export interface RegistryProvider<T> {
|
|
4
|
+
forEach(consumer: (recipe: T, id: Id) => void): void;
|
|
5
|
+
forEachAsync(consumer: (recipe: T, id: Id) => Promise<void>): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export type PathProvider = (id: Id) => string;
|
|
8
|
+
export interface ClearableEmitter {
|
|
9
|
+
clear(): void;
|
|
10
|
+
emit(acceptor: Acceptor): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/emit/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { CreativeModeTabId, ItemId } from "@adeficior/data-modifier/generated";
|
|
2
|
+
import type { Acceptor } from "@adeficior/pack-resolver";
|
|
3
|
+
import type { IdInput, NormalizedId } from "../common/id.js";
|
|
4
|
+
import type RegistryLookup from "../loader/registry/index.js";
|
|
5
|
+
import type { ClearableEmitter } from "./index.js";
|
|
6
|
+
interface TabModifications {
|
|
7
|
+
icon?: IdInput<ItemId>;
|
|
8
|
+
can_scroll?: boolean;
|
|
9
|
+
show_title?: boolean;
|
|
10
|
+
search_bar?: boolean;
|
|
11
|
+
before_tabs?: IdInput<CreativeModeTabId>[];
|
|
12
|
+
after_tabs?: IdInput<CreativeModeTabId>[];
|
|
13
|
+
name?: string;
|
|
14
|
+
}
|
|
15
|
+
interface TabOptions {
|
|
16
|
+
file?: IdInput;
|
|
17
|
+
mods?: string[];
|
|
18
|
+
}
|
|
19
|
+
interface TabOptionsWithAfter extends TabOptions {
|
|
20
|
+
after: IdInput<ItemId>;
|
|
21
|
+
}
|
|
22
|
+
interface TabOptionsWithBefore extends TabOptions {
|
|
23
|
+
before: IdInput<ItemId>;
|
|
24
|
+
}
|
|
25
|
+
type AddOptions = TabOptionsWithAfter | TabOptionsWithBefore | TabOptions;
|
|
26
|
+
export interface PolytoneTabs {
|
|
27
|
+
remove(tab: IdInput<CreativeModeTabId> | IdInput<CreativeModeTabId>[], items: IdInput<ItemId>[], options?: TabOptions): void;
|
|
28
|
+
add(tab: IdInput<CreativeModeTabId> | IdInput<CreativeModeTabId>[], items: IdInput<ItemId>[], options?: AddOptions): void;
|
|
29
|
+
create(id: IdInput, options?: TabModifications): CreativeModeTabId;
|
|
30
|
+
modify(id: IdInput, options: TabModifications): void;
|
|
31
|
+
}
|
|
32
|
+
interface ItemsMatchPredicate {
|
|
33
|
+
type: "items_match";
|
|
34
|
+
items: NormalizedId<ItemId>[];
|
|
35
|
+
}
|
|
36
|
+
type PolytonePredicate = ItemsMatchPredicate;
|
|
37
|
+
interface AdditionEntry {
|
|
38
|
+
items: ItemId[];
|
|
39
|
+
before?: boolean;
|
|
40
|
+
inverse?: boolean;
|
|
41
|
+
predicate?: PolytonePredicate;
|
|
42
|
+
}
|
|
43
|
+
export interface PolytoneTabModifier extends TabModifications {
|
|
44
|
+
icon?: NormalizedId<ItemId>;
|
|
45
|
+
before_tabs?: NormalizedId<CreativeModeTabId>[];
|
|
46
|
+
after_tabs?: NormalizedId<CreativeModeTabId>[];
|
|
47
|
+
targets: NormalizedId<CreativeModeTabId>[];
|
|
48
|
+
removals?: PolytonePredicate[];
|
|
49
|
+
additions?: AdditionEntry[];
|
|
50
|
+
require_mods?: string[];
|
|
51
|
+
}
|
|
52
|
+
export default class PolytoneTabsEmitter implements PolytoneTabs, ClearableEmitter {
|
|
53
|
+
private readonly lookup;
|
|
54
|
+
private readonly entries;
|
|
55
|
+
private readonly tabs;
|
|
56
|
+
constructor(lookup: () => RegistryLookup);
|
|
57
|
+
clear(): void;
|
|
58
|
+
emit(acceptor: Acceptor): Promise<void>;
|
|
59
|
+
remove(tab: IdInput<CreativeModeTabId> | IdInput<CreativeModeTabId>[], items: IdInput<ItemId>[], options?: TabOptions): void;
|
|
60
|
+
add(tab: IdInput<CreativeModeTabId> | IdInput<CreativeModeTabId>[], items: IdInput<ItemId>[], options?: AddOptions): void;
|
|
61
|
+
create(id: IdInput, modifications?: TabModifications): string;
|
|
62
|
+
modify(id: IdInput, modifications: TabModifications): void;
|
|
63
|
+
private forEach;
|
|
64
|
+
}
|
|
65
|
+
export {};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { arrayOrSelf } from "@adeficior/pack-resolver";
|
|
2
|
+
import { difference, uniq } from "lodash-es";
|
|
3
|
+
import { createId, encodeId } from "../common/id.js";
|
|
4
|
+
import CustomEmitter from "./custom.js";
|
|
5
|
+
function translateModifications({ icon, after_tabs, before_tabs, ...modifications }) {
|
|
6
|
+
return {
|
|
7
|
+
...modifications,
|
|
8
|
+
before_tabs: arrayOrSelf(before_tabs).map(encodeId),
|
|
9
|
+
after_tabs: arrayOrSelf(after_tabs).map(encodeId),
|
|
10
|
+
icon: icon !== undefined ? encodeId(icon) : undefined,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function mergeModifiers(a, b) {
|
|
14
|
+
const diff = difference(a.targets, b.targets);
|
|
15
|
+
if (diff.length)
|
|
16
|
+
throw new Error("trying to merge modifiers with different targets");
|
|
17
|
+
return {
|
|
18
|
+
...a,
|
|
19
|
+
...b,
|
|
20
|
+
targets: uniq([...a.targets, ...b.targets]),
|
|
21
|
+
additions: [...(a.additions ?? []), ...(b.additions ?? [])],
|
|
22
|
+
removals: [...(a.removals ?? []), ...(b.removals ?? [])],
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function translateOptions(options = {}) {
|
|
26
|
+
if ("before" in options && options.before) {
|
|
27
|
+
return {
|
|
28
|
+
before: true,
|
|
29
|
+
predicate: {
|
|
30
|
+
items: [encodeId(options.before)],
|
|
31
|
+
type: "items_match",
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
else if ("after" in options && options.after) {
|
|
36
|
+
return {
|
|
37
|
+
before: false,
|
|
38
|
+
predicate: {
|
|
39
|
+
items: [encodeId(options.after)],
|
|
40
|
+
type: "items_match",
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
return {};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export default class PolytoneTabsEmitter {
|
|
49
|
+
lookup;
|
|
50
|
+
entries = new CustomEmitter((id) => `assets/${id.namespace}/polytone/creative_tab_modifiers/${id.path}.json`);
|
|
51
|
+
tabs = new CustomEmitter((id) => `assets/${id.namespace}/polytone/creative_tabs.csv`, (it) => it.join(","));
|
|
52
|
+
constructor(lookup) {
|
|
53
|
+
this.lookup = lookup;
|
|
54
|
+
}
|
|
55
|
+
clear() {
|
|
56
|
+
this.entries.clear();
|
|
57
|
+
this.tabs.clear();
|
|
58
|
+
}
|
|
59
|
+
async emit(acceptor) {
|
|
60
|
+
await Promise.all([this.entries.emit(acceptor), this.tabs.emit(acceptor)]);
|
|
61
|
+
}
|
|
62
|
+
remove(tab, items, options = {}) {
|
|
63
|
+
this.forEach(tab, {
|
|
64
|
+
removals: [{ type: "items_match", items: items.map(encodeId) }],
|
|
65
|
+
}, options);
|
|
66
|
+
}
|
|
67
|
+
add(tab, items, options = {}) {
|
|
68
|
+
this.forEach(tab, {
|
|
69
|
+
additions: [
|
|
70
|
+
{ items: items.map(encodeId), ...translateOptions(options) },
|
|
71
|
+
],
|
|
72
|
+
}, options);
|
|
73
|
+
}
|
|
74
|
+
create(id, modifications = {}) {
|
|
75
|
+
const lookup = this.lookup();
|
|
76
|
+
const { namespace, path } = createId(id);
|
|
77
|
+
this.tabs.merge({ namespace, path: "tab" }, [path], (a, b) => uniq([...a, ...b]));
|
|
78
|
+
if (Object.keys(modifications).length) {
|
|
79
|
+
this.modify(id, modifications);
|
|
80
|
+
}
|
|
81
|
+
return lookup.addCustom("minecraft:creative_mode_tab", id);
|
|
82
|
+
}
|
|
83
|
+
modify(id, modifications) {
|
|
84
|
+
this.entries.merge(id, {
|
|
85
|
+
...translateModifications(modifications),
|
|
86
|
+
targets: [encodeId(id)],
|
|
87
|
+
}, mergeModifiers);
|
|
88
|
+
}
|
|
89
|
+
forEach(tab, modifier, options) {
|
|
90
|
+
arrayOrSelf(tab).forEach((target) => {
|
|
91
|
+
const file = options.file ?? target;
|
|
92
|
+
const entry = {
|
|
93
|
+
targets: [encodeId(target)],
|
|
94
|
+
require_mods: options.mods,
|
|
95
|
+
...modifier,
|
|
96
|
+
};
|
|
97
|
+
this.entries.merge(file, entry, mergeModifiers);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=polytoneTabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polytoneTabs.js","sourceRoot":"","sources":["../../src/emit/polytoneTabs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Logger } from "@adeficior/pack-resolver";
|
|
2
|
+
import type { Id } from "../../common/id.js";
|
|
3
|
+
export type Modifier<T> = (recipe: T) => T | null;
|
|
4
|
+
export default abstract class Rule<T> {
|
|
5
|
+
private readonly modifier;
|
|
6
|
+
protected constructor(modifier: Modifier<T>);
|
|
7
|
+
abstract matches(id: Id, recipe: T, logger: Logger): boolean;
|
|
8
|
+
abstract printWarning(logger: Logger): void;
|
|
9
|
+
modify(value: T): T | null;
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/emit/rule/index.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,OAAgB,IAAI;IACO;IAAvC,YAAuC,QAAqB;QAArB,aAAQ,GAAR,QAAQ,CAAa;IAAG,CAAC;IAMhE,MAAM,CAAC,KAAQ;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Logger } from "@adeficior/pack-resolver";
|
|
2
|
+
import type { Id } from "../../common/id.js";
|
|
3
|
+
import type { IngredientInput, Predicate } from "../../common/ingredient.js";
|
|
4
|
+
import type { LootTable } from "../../schema/data/loot.js";
|
|
5
|
+
import type { Modifier } from "./index.js";
|
|
6
|
+
import Rule from "./index.js";
|
|
7
|
+
export default class LootTableRule extends Rule<LootTable> {
|
|
8
|
+
private readonly shape;
|
|
9
|
+
private readonly idTests;
|
|
10
|
+
private readonly outputTests;
|
|
11
|
+
constructor(shape: unknown[], idTests: Predicate<Id>[], outputTests: Predicate<IngredientInput>[], modifier: Modifier<LootTable>);
|
|
12
|
+
matches(id: Id, table: LootTable, logger: Logger): boolean;
|
|
13
|
+
printWarning(logger: Logger): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { exists } from "@adeficior/pack-resolver";
|
|
2
|
+
import { extendLootEntry } from "../../schema/data/loot.js";
|
|
3
|
+
import Rule from "./index.js";
|
|
4
|
+
function entryMatches(logger, test, base) {
|
|
5
|
+
try {
|
|
6
|
+
const entry = extendLootEntry(base);
|
|
7
|
+
switch (entry.type) {
|
|
8
|
+
case "minecraft:alternatives":
|
|
9
|
+
return entry.children.some((it) => entryMatches(logger, test, it));
|
|
10
|
+
case "minecraft:item":
|
|
11
|
+
return test({ item: entry.name }, logger);
|
|
12
|
+
case "minecraft:tag":
|
|
13
|
+
return test({ tag: entry.name }, logger);
|
|
14
|
+
default:
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
logger.warn(`unknown loot entry type:`, base);
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function hasOutput(logger, test, table) {
|
|
24
|
+
return table.pools.some((pool) => pool.entries.some((entry) => {
|
|
25
|
+
return entryMatches(logger, test, entry);
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
export default class LootTableRule extends Rule {
|
|
29
|
+
shape;
|
|
30
|
+
idTests;
|
|
31
|
+
outputTests;
|
|
32
|
+
constructor(shape, idTests, outputTests, modifier) {
|
|
33
|
+
super(modifier);
|
|
34
|
+
this.shape = shape;
|
|
35
|
+
this.idTests = idTests;
|
|
36
|
+
this.outputTests = outputTests;
|
|
37
|
+
}
|
|
38
|
+
matches(id, table, logger) {
|
|
39
|
+
const prefixed = logger;
|
|
40
|
+
return (this.idTests.every((test) => test(id, prefixed)) &&
|
|
41
|
+
this.outputTests.every((test) => hasOutput(prefixed, test, table)));
|
|
42
|
+
}
|
|
43
|
+
printWarning(logger) {
|
|
44
|
+
logger.error("Could not find any loot table matching", ...this.shape.filter(exists));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=lootTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lootTable.js","sourceRoot":"","sources":["../../../src/emit/rule/lootTable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAIlD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,IAAI,MAAM,YAAY,CAAC;AAE9B,SAAS,YAAY,CACnB,MAAc,EACd,IAAgC,EAChC,IAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACpC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,wBAAwB;gBAC3B,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;YACrE,KAAK,gBAAgB;gBACnB,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;YAC5C,KAAK,eAAe;gBAClB,OAAO,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;YAC3C;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAChB,MAAc,EACd,IAAgC,EAChC,KAAgB;IAEhB,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,OAAO,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,IAAe;IAErC;IACA;IACA;IAHnB,YACmB,KAAgB,EAChB,OAAwB,EACxB,WAAyC,EAC1D,QAA6B;QAE7B,KAAK,CAAC,QAAQ,CAAC,CAAC;QALC,UAAK,GAAL,KAAK,CAAW;QAChB,YAAO,GAAP,OAAO,CAAiB;QACxB,gBAAW,GAAX,WAAW,CAA8B;IAI5D,CAAC;IAED,OAAO,CAAC,EAAM,EAAE,KAAgB,EAAE,MAAc;QAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC;QACxB,OAAO,CACL,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CACnE,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,MAAM,CAAC,KAAK,CACV,wCAAwC,EACxC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAC7B,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Logger } from "@adeficior/pack-resolver";
|
|
2
|
+
import type { Id } from "../../common/id.js";
|
|
3
|
+
import type { IngredientInput, Predicate } from "../../common/ingredient.js";
|
|
4
|
+
import type { Recipe } from "../../parser/recipe/index.js";
|
|
5
|
+
import type { Modifier } from "./index.js";
|
|
6
|
+
import Rule from "./index.js";
|
|
7
|
+
export default class RecipeRule extends Rule<Recipe> {
|
|
8
|
+
private readonly shape;
|
|
9
|
+
private readonly idsTests;
|
|
10
|
+
private readonly typeTests;
|
|
11
|
+
private readonly ingredientTests;
|
|
12
|
+
private readonly resultTests;
|
|
13
|
+
constructor(shape: unknown[], idsTests: Predicate<Id>[], typeTests: Predicate<Id>[], ingredientTests: Predicate<IngredientInput>[], resultTests: Predicate<IngredientInput>[], modifier: Modifier<Recipe>);
|
|
14
|
+
matches(id: Id, recipe: Recipe, logger: Logger): boolean;
|
|
15
|
+
printWarning(logger: Logger): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { exists } from "@adeficior/pack-resolver";
|
|
2
|
+
import { createId } from "../../common/id.js";
|
|
3
|
+
import Rule from "./index.js";
|
|
4
|
+
export default class RecipeRule extends Rule {
|
|
5
|
+
shape;
|
|
6
|
+
idsTests;
|
|
7
|
+
typeTests;
|
|
8
|
+
ingredientTests;
|
|
9
|
+
resultTests;
|
|
10
|
+
constructor(shape, idsTests, typeTests, ingredientTests, resultTests, modifier) {
|
|
11
|
+
super(modifier);
|
|
12
|
+
this.shape = shape;
|
|
13
|
+
this.idsTests = idsTests;
|
|
14
|
+
this.typeTests = typeTests;
|
|
15
|
+
this.ingredientTests = ingredientTests;
|
|
16
|
+
this.resultTests = resultTests;
|
|
17
|
+
}
|
|
18
|
+
matches(id, recipe, logger) {
|
|
19
|
+
const types = recipe.getTypes().map(createId);
|
|
20
|
+
return (this.idsTests.every((test) => test(id, logger)) &&
|
|
21
|
+
this.typeTests.every((test) => types.some((it) => test(it))) &&
|
|
22
|
+
this.ingredientTests.every((test) => recipe.getIngredients().some((it) => test(it, logger))) &&
|
|
23
|
+
this.resultTests.every((test) => recipe.getResults().some((it) => test(it, logger))));
|
|
24
|
+
}
|
|
25
|
+
printWarning(logger) {
|
|
26
|
+
logger.error("Could not find any recipes matching", ...this.shape.filter(exists));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=recipe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe.js","sourceRoot":"","sources":["../../../src/emit/rule/recipe.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI9C,OAAO,IAAI,MAAM,YAAY,CAAC;AAE9B,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,IAAY;IAE/B;IACA;IACA;IACA;IACA;IALnB,YACmB,KAAgB,EAChB,QAAyB,EACzB,SAA0B,EAC1B,eAA6C,EAC7C,WAAyC,EAC1D,QAA0B;QAE1B,KAAK,CAAC,QAAQ,CAAC,CAAC;QAPC,UAAK,GAAL,KAAK,CAAW;QAChB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,cAAS,GAAT,SAAS,CAAiB;QAC1B,oBAAe,GAAf,eAAe,CAA8B;QAC7C,gBAAW,GAAX,WAAW,CAA8B;IAI5D,CAAC;IAED,OAAO,CAAC,EAAM,EAAE,MAAc,EAAE,MAAc;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAClC,MAAM,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CACvD;YACD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9B,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CACnD,CACF,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,MAAM,CAAC,KAAK,CACV,qCAAqC,EACrC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAC7B,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Acceptor, Logger } from "@adeficior/pack-resolver";
|
|
2
|
+
import type { Id } from "../common/id.js";
|
|
3
|
+
import type { PathProvider, RegistryProvider } from "./index.js";
|
|
4
|
+
import type Rule from "./rule/index.js";
|
|
5
|
+
export default class RuledEmitter<TEntry, TRule extends Rule<TEntry>> {
|
|
6
|
+
private readonly logger;
|
|
7
|
+
private readonly provider;
|
|
8
|
+
private readonly pathProvider;
|
|
9
|
+
private readonly emptyValue;
|
|
10
|
+
private readonly shouldSkip;
|
|
11
|
+
constructor(logger: Logger, provider: RegistryProvider<TEntry>, pathProvider: PathProvider, emptyValue: unknown, shouldSkip?: (id: Id) => boolean);
|
|
12
|
+
private rulesArray;
|
|
13
|
+
private requiredRules;
|
|
14
|
+
protected get rules(): ReadonlyArray<TRule>;
|
|
15
|
+
clear(): void;
|
|
16
|
+
addRule(rule: TRule, required?: boolean): void;
|
|
17
|
+
emit(acceptor: Acceptor): Promise<void>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { toJson } from "../textHelper.js";
|
|
2
|
+
export default class RuledEmitter {
|
|
3
|
+
logger;
|
|
4
|
+
provider;
|
|
5
|
+
pathProvider;
|
|
6
|
+
emptyValue;
|
|
7
|
+
shouldSkip;
|
|
8
|
+
constructor(logger, provider, pathProvider, emptyValue, shouldSkip = () => true) {
|
|
9
|
+
this.logger = logger;
|
|
10
|
+
this.provider = provider;
|
|
11
|
+
this.pathProvider = pathProvider;
|
|
12
|
+
this.emptyValue = emptyValue;
|
|
13
|
+
this.shouldSkip = shouldSkip;
|
|
14
|
+
}
|
|
15
|
+
rulesArray = [];
|
|
16
|
+
requiredRules = new Set();
|
|
17
|
+
get rules() {
|
|
18
|
+
return this.rulesArray;
|
|
19
|
+
}
|
|
20
|
+
clear() {
|
|
21
|
+
this.rulesArray = [];
|
|
22
|
+
this.requiredRules.clear();
|
|
23
|
+
}
|
|
24
|
+
addRule(rule, required = true) {
|
|
25
|
+
this.rulesArray.push(rule);
|
|
26
|
+
if (required)
|
|
27
|
+
this.requiredRules.add(rule);
|
|
28
|
+
}
|
|
29
|
+
async emit(acceptor) {
|
|
30
|
+
const missingRules = new Set(this.requiredRules);
|
|
31
|
+
await this.provider.forEachAsync(async (recipe, id) => {
|
|
32
|
+
if (this.shouldSkip(id))
|
|
33
|
+
return;
|
|
34
|
+
const path = this.pathProvider(id);
|
|
35
|
+
const rules = this.rules.filter((it) => it.matches(id, recipe, this.logger.group(path)));
|
|
36
|
+
if (rules.length === 0)
|
|
37
|
+
return;
|
|
38
|
+
rules.forEach((it) => missingRules.delete(it));
|
|
39
|
+
const modified = rules.reduce((previous, rule) => previous && rule.modify(previous), recipe);
|
|
40
|
+
acceptor(path, await toJson(modified ?? this.emptyValue));
|
|
41
|
+
});
|
|
42
|
+
missingRules.forEach((rule) => {
|
|
43
|
+
rule.printWarning(this.logger);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=ruled.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ruled.js","sourceRoot":"","sources":["../../src/emit/ruled.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI1C,MAAM,CAAC,OAAO,OAAO,YAAY;IAEZ;IACA;IACA;IACA;IACA;IALnB,YACmB,MAAc,EACd,QAAkC,EAClC,YAA0B,EAC1B,UAAmB,EACnB,aAAkC,GAAG,EAAE,CAAC,IAAI;QAJ5C,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAA0B;QAClC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,eAAU,GAAV,UAAU,CAAS;QACnB,eAAU,GAAV,UAAU,CAAkC;IAC5D,CAAC;IAEI,UAAU,GAAY,EAAE,CAAC;IACzB,aAAa,GAAG,IAAI,GAAG,EAAS,CAAC;IAEzC,IAAc,KAAK;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,IAAW,EAAE,WAAoB,IAAI;QAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,QAAQ;YAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAkB;QAC3B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAQ,IAAI,CAAC,aAAa,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE;YACpD,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAAE,OAAO;YAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAEnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CACrC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAChD,CAAC;YACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAE/B,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAE/C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAC3B,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EACrD,MAAM,CACP,CAAC;YAEF,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/dist/error.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { InferIds, RegistryId } from "@adeficior/data-modifier/generated";
|
|
2
|
+
import type { Logger } from "@adeficior/pack-resolver";
|
|
3
|
+
export declare class IllegalShapeError extends Error {
|
|
4
|
+
readonly input?: unknown | undefined;
|
|
5
|
+
constructor(message: string, input?: unknown | undefined);
|
|
6
|
+
}
|
|
7
|
+
export declare class UnknownRegistryEntry<T extends RegistryId> extends Error {
|
|
8
|
+
readonly registry: T;
|
|
9
|
+
readonly id: InferIds<T>;
|
|
10
|
+
constructor(message: string, registry: T, id: InferIds<T>);
|
|
11
|
+
}
|
|
12
|
+
export declare function tryCatching<T>(logger: Logger | undefined, run: () => T): T | null;
|
package/dist/error.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ZodError } from "zod";
|
|
2
|
+
export class IllegalShapeError extends Error {
|
|
3
|
+
input;
|
|
4
|
+
constructor(message, input) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.input = input;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class UnknownRegistryEntry extends Error {
|
|
10
|
+
registry;
|
|
11
|
+
id;
|
|
12
|
+
constructor(message, registry, id) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.registry = registry;
|
|
15
|
+
this.id = id;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function tryCatching(logger, run) {
|
|
19
|
+
try {
|
|
20
|
+
return run();
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
if (error instanceof IllegalShapeError) {
|
|
24
|
+
if (error.input)
|
|
25
|
+
logger?.warn(error.message, error.input);
|
|
26
|
+
else
|
|
27
|
+
logger?.warn(error.message);
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
if (error instanceof ZodError) {
|
|
31
|
+
const message = error.errors
|
|
32
|
+
.map((it) => {
|
|
33
|
+
if (it.path)
|
|
34
|
+
return `${it.path.join(".")}: ${it.message}`;
|
|
35
|
+
else
|
|
36
|
+
return it.message;
|
|
37
|
+
})
|
|
38
|
+
.join(", ");
|
|
39
|
+
logger?.warn(`unknown shape: ${message}`);
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAE/B,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAG/B;IAFX,YACE,OAAe,EACN,KAAe;QAExB,KAAK,CAAC,OAAO,CAAC,CAAC;QAFN,UAAK,GAAL,KAAK,CAAU;IAG1B,CAAC;CACF;AAED,MAAM,OAAO,oBAA2C,SAAQ,KAAK;IAGxD;IACA;IAHX,YACE,OAAe,EACN,QAAW,EACX,EAAe;QAExB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,aAAQ,GAAR,QAAQ,CAAG;QACX,OAAE,GAAF,EAAE,CAAa;IAG1B,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CACzB,MAA0B,EAC1B,GAAY;IAEZ,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,KAAK;gBAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;;gBACrD,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM;iBACzB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBACV,IAAI,EAAE,CAAC,IAAI;oBAAE,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;;oBACrD,OAAO,EAAE,CAAC,OAAO,CAAC;YACzB,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,EAAE,IAAI,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type { Logger } from "@adeficior/pack-resolver";
|
|
2
|
+
export { createId, encodeId, prefix, suffix, type Id, type IdInput, type NormalizedId, type TagInput, } from "./common/id.js";
|
|
3
|
+
export { createIngredient } from "./common/ingredient.js";
|
|
4
|
+
export type { BlockIngredient, BlockTag, CommonTest, FluidIngredient, FluidTag, Ingredient, IngredientInput, IngredientTest, ItemIngredient, ItemTag, Predicate, } from "./common/ingredient.js";
|
|
5
|
+
export { default as Registry } from "./common/registry.js";
|
|
6
|
+
export { createResult } from "./common/result.js";
|
|
7
|
+
export type { Block, FluidStack, ItemStack, Result, ResultInput, } from "./common/result.js";
|
|
8
|
+
export type { BlockstateRules } from "./emit/assets/blockstates.js";
|
|
9
|
+
export type { ModelRules, ModelRulesGroup } from "./emit/assets/models.js";
|
|
10
|
+
export type { BlockDefinitionOptions, BlockDefinitionRules, } from "./emit/content/blockDefinition.js";
|
|
11
|
+
export type { BlockDefinitionRulesWithoutId } from "./emit/content/innerBlockDefinition.js";
|
|
12
|
+
export type { ItemDefinitionOptions, ItemDefinitionRules, } from "./emit/content/itemDefinition.js";
|
|
13
|
+
export { default as CustomEmitter } from "./emit/custom.js";
|
|
14
|
+
export { EMPTY_LOOT_MODIFIER, EMPTY_LOOT_TABLE, type LootRules, } from "./emit/data/loot.js";
|
|
15
|
+
export { EMPTY_RECIPE } from "./emit/data/recipe.js";
|
|
16
|
+
export type { RecipeRules } from "./emit/data/recipe.js";
|
|
17
|
+
export type { TagRules } from "./emit/data/tags.js";
|
|
18
|
+
export type { ClearableEmitter, RegistryProvider } from "./emit/index.js";
|
|
19
|
+
export { default as RuledEmitter } from "./emit/ruled.js";
|
|
20
|
+
export { IllegalShapeError, UnknownRegistryEntry } from "./error.js";
|
|
21
|
+
export { default as PackLoader } from "./loader/pack.js";
|
|
22
|
+
export type { TagRegistry, TagRegistryHolder } from "./loader/tags.js";
|
|
23
|
+
export type { LootItemInput } from "./parser/lootTable.js";
|
|
24
|
+
export type { Blockstate } from "./schema/assets/blockstate.js";
|
|
25
|
+
export type { Model } from "./schema/assets/model.js";
|
|
26
|
+
export type { BlockDefinition, BlockProperties, CogBlockDefinition, } from "./schema/content/blockDefinition.js";
|
|
27
|
+
export type { BlockItemDefinition, ItemDefinition, ItemProperties, Rarity, } from "./schema/content/itemDefinition.js";
|
|
28
|
+
export { EmptyLootEntry } from "./schema/data/loot.js";
|
|
29
|
+
export type { LootEntry, LootModifier, LootPool, LootTable, } from "./schema/data/loot.js";
|
|
30
|
+
export type { FabricCondition, ForgeCondition, RecipeDefinition, } from "./schema/data/recipe.js";
|
|
31
|
+
export type { TagDefinition, TagEntry } from "./schema/data/tag.js";
|