@spyglassmc/java-edition 0.1.0

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 (94) hide show
  1. package/README.md +36 -0
  2. package/lib/binder/index.d.ts +15 -0
  3. package/lib/binder/index.js +102 -0
  4. package/lib/common/index.d.ts +7 -0
  5. package/lib/common/index.js +60 -0
  6. package/lib/dependency/common.d.ts +26 -0
  7. package/lib/dependency/common.js +39 -0
  8. package/lib/dependency/index.d.ts +30 -0
  9. package/lib/dependency/index.js +172 -0
  10. package/lib/dependency/mcmeta.d.ts +79 -0
  11. package/lib/dependency/mcmeta.js +205 -0
  12. package/lib/index.d.ts +6 -0
  13. package/lib/index.js +76 -0
  14. package/lib/json/checker/data/advancement.d.ts +14 -0
  15. package/lib/json/checker/data/advancement.js +450 -0
  16. package/lib/json/checker/data/biome.d.ts +4 -0
  17. package/lib/json/checker/data/biome.js +151 -0
  18. package/lib/json/checker/data/common.d.ts +22 -0
  19. package/lib/json/checker/data/common.js +286 -0
  20. package/lib/json/checker/data/dimension.d.ts +4 -0
  21. package/lib/json/checker/data/dimension.js +238 -0
  22. package/lib/json/checker/data/feature.d.ts +9 -0
  23. package/lib/json/checker/data/feature.js +733 -0
  24. package/lib/json/checker/data/index.d.ts +4 -0
  25. package/lib/json/checker/data/index.js +43 -0
  26. package/lib/json/checker/data/loot_table.d.ts +8 -0
  27. package/lib/json/checker/data/loot_table.js +279 -0
  28. package/lib/json/checker/data/recipe.d.ts +2 -0
  29. package/lib/json/checker/data/recipe.js +53 -0
  30. package/lib/json/checker/data/structure.d.ts +8 -0
  31. package/lib/json/checker/data/structure.js +148 -0
  32. package/lib/json/checker/data/tag.d.ts +7 -0
  33. package/lib/json/checker/data/tag.js +38 -0
  34. package/lib/json/checker/data/text_component.d.ts +2 -0
  35. package/lib/json/checker/data/text_component.js +142 -0
  36. package/lib/json/checker/index.d.ts +5 -0
  37. package/lib/json/checker/index.js +28 -0
  38. package/lib/json/checker/util/advancement.d.ts +3 -0
  39. package/lib/json/checker/util/advancement.js +20 -0
  40. package/lib/json/checker/util/block_states.d.ts +13 -0
  41. package/lib/json/checker/util/block_states.js +85 -0
  42. package/lib/json/checker/util/color.d.ts +4 -0
  43. package/lib/json/checker/util/color.js +64 -0
  44. package/lib/json/checker/util/index.d.ts +8 -0
  45. package/lib/json/checker/util/index.js +20 -0
  46. package/lib/json/checker/util/nbt.d.ts +17 -0
  47. package/lib/json/checker/util/nbt.js +71 -0
  48. package/lib/json/checker/util/recipe.d.ts +6 -0
  49. package/lib/json/checker/util/recipe.js +16 -0
  50. package/lib/json/checker/util/uuid.d.ts +2 -0
  51. package/lib/json/checker/util/uuid.js +12 -0
  52. package/lib/json/checker/util/version.d.ts +46 -0
  53. package/lib/json/checker/util/version.js +54 -0
  54. package/lib/json/index.d.ts +4 -0
  55. package/lib/json/index.js +32 -0
  56. package/lib/mcfunction/checker/index.d.ts +7 -0
  57. package/lib/mcfunction/checker/index.js +217 -0
  58. package/lib/mcfunction/colorizer/index.d.ts +6 -0
  59. package/lib/mcfunction/colorizer/index.js +38 -0
  60. package/lib/mcfunction/common/index.d.ts +7 -0
  61. package/lib/mcfunction/common/index.js +47 -0
  62. package/lib/mcfunction/completer/argument.d.ts +5 -0
  63. package/lib/mcfunction/completer/argument.js +292 -0
  64. package/lib/mcfunction/completer/index.d.ts +2 -0
  65. package/lib/mcfunction/completer/index.js +14 -0
  66. package/lib/mcfunction/index.d.ts +8 -0
  67. package/lib/mcfunction/index.js +72 -0
  68. package/lib/mcfunction/inlayHintProvider.d.ts +4 -0
  69. package/lib/mcfunction/inlayHintProvider.js +40 -0
  70. package/lib/mcfunction/node/argument.d.ts +187 -0
  71. package/lib/mcfunction/node/argument.js +281 -0
  72. package/lib/mcfunction/node/index.d.ts +2 -0
  73. package/lib/mcfunction/node/index.js +14 -0
  74. package/lib/mcfunction/parser/argument.d.ts +15 -0
  75. package/lib/mcfunction/parser/argument.js +934 -0
  76. package/lib/mcfunction/parser/index.d.ts +2 -0
  77. package/lib/mcfunction/parser/index.js +14 -0
  78. package/lib/mcfunction/signatureHelpProvider.d.ts +8 -0
  79. package/lib/mcfunction/signatureHelpProvider.js +103 -0
  80. package/lib/mcfunction/tree/1.15.d.ts +9 -0
  81. package/lib/mcfunction/tree/1.15.js +542 -0
  82. package/lib/mcfunction/tree/1.16.d.ts +10 -0
  83. package/lib/mcfunction/tree/1.16.js +77 -0
  84. package/lib/mcfunction/tree/1.17.d.ts +12 -0
  85. package/lib/mcfunction/tree/1.17.js +166 -0
  86. package/lib/mcfunction/tree/1.18.d.ts +26 -0
  87. package/lib/mcfunction/tree/1.18.js +6 -0
  88. package/lib/mcfunction/tree/1.19.d.ts +26 -0
  89. package/lib/mcfunction/tree/1.19.js +6 -0
  90. package/lib/mcfunction/tree/argument.d.ts +179 -0
  91. package/lib/mcfunction/tree/argument.js +3 -0
  92. package/lib/mcfunction/tree/index.d.ts +7 -0
  93. package/lib/mcfunction/tree/index.js +19 -0
  94. package/package.json +41 -0
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ /* istanbul ignore file */
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
6
+ }) : (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ o[k2] = m[k];
9
+ }));
10
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
11
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
12
+ }) : function(o, v) {
13
+ o["default"] = v;
14
+ });
15
+ var __importStar = (this && this.__importStar) || function (mod) {
16
+ if (mod && mod.__esModule) return mod;
17
+ var result = {};
18
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
19
+ __setModuleDefault(result, mod);
20
+ return result;
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.initialize = exports.checker = void 0;
24
+ const json = __importStar(require("@spyglassmc/json"));
25
+ const checker = __importStar(require("./checker"));
26
+ exports.checker = __importStar(require("./checker"));
27
+ const initialize = (ctx) => {
28
+ json.initialize(ctx);
29
+ checker.register(ctx.meta);
30
+ };
31
+ exports.initialize = initialize;
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ import * as core from '@spyglassmc/core';
2
+ import * as mcf from '@spyglassmc/mcfunction';
3
+ import { EntityNode } from '../node';
4
+ export declare const command: core.Checker<mcf.CommandNode>;
5
+ export declare const getTypesFromEntity: (entity: EntityNode, ctx: core.CheckerContext) => core.FullResourceLocation[] | undefined;
6
+ export declare function register(meta: core.MetaRegistry): void;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.register = exports.getTypesFromEntity = exports.command = void 0;
23
+ const core = __importStar(require("@spyglassmc/core"));
24
+ const json = __importStar(require("@spyglassmc/json"));
25
+ const lib_1 = require("@spyglassmc/locales/lib");
26
+ const mcf = __importStar(require("@spyglassmc/mcfunction"));
27
+ const nbt = __importStar(require("@spyglassmc/nbt"));
28
+ const nbtdoc = __importStar(require("@spyglassmc/nbtdoc"));
29
+ const common_1 = require("../../common");
30
+ const text_component_1 = require("../../json/checker/data/text_component");
31
+ const node_1 = require("../node");
32
+ const command = (node, ctx) => {
33
+ if (node.slash && node.parent && mcf.McfunctionNode.is(node.parent)) {
34
+ ctx.err.report((0, lib_1.localize)('unexpected-leading-slash'), node.slash);
35
+ }
36
+ rootCommand(node.children, 0, ctx);
37
+ };
38
+ exports.command = command;
39
+ const getName = (nodes, index) => {
40
+ return nodes[index]?.path[nodes[index].path.length - 1];
41
+ };
42
+ const getNode = (nodes, index) => {
43
+ return nodes[index]?.children[0];
44
+ };
45
+ const rootCommand = (nodes, index, ctx) => {
46
+ if (getName(nodes, index) === 'data') {
47
+ if (getName(nodes, index + 1) === 'get') {
48
+ nbtPath(nodes, index + 2, ctx);
49
+ }
50
+ else if (getName(nodes, index + 1) === 'merge') {
51
+ dataMergeTarget(nodes, index + 2, ctx);
52
+ }
53
+ else if (getName(nodes, index + 1) === 'modify') {
54
+ nbtPath(nodes, index + 2, ctx);
55
+ const targetPath = getNode(nodes, index + 4);
56
+ const operation = getName(nodes, index + 5);
57
+ const sourceTypeIndex = operation === 'insert' ? index + 7 : index + 6;
58
+ if (getName(nodes, sourceTypeIndex) === 'from') {
59
+ // `from <$nbtPath$>`
60
+ nbtPath(nodes, sourceTypeIndex + 1, ctx);
61
+ const sourcePath = getNode(nodes, sourceTypeIndex + 3);
62
+ if (nbt.NbtPathNode.is(targetPath) && nbt.NbtPathNode.is(sourcePath)) {
63
+ const { errorMessage } = nbtdoc.checkAssignability({ source: sourcePath.targetType, target: targetPath.targetType });
64
+ if (errorMessage) {
65
+ ctx.err.report(errorMessage, core.Range.span(targetPath, sourcePath), 2 /* Warning */);
66
+ }
67
+ }
68
+ }
69
+ else if (getName(nodes, sourceTypeIndex) === 'value') {
70
+ // `value <value: nbt_tag>`
71
+ const valueNode = getNode(nodes, sourceTypeIndex + 1);
72
+ if (nbt.NbtPathNode.is(targetPath) && targetPath.targetType && nbt.NbtNode.is(valueNode)) {
73
+ nbt.checker.fieldValue(targetPath.targetType, { allowUnknownKey: true })(valueNode, ctx);
74
+ }
75
+ }
76
+ }
77
+ else if (getName(nodes, index + 1) === 'remove') {
78
+ nbtPath(nodes, index + 2, ctx);
79
+ }
80
+ }
81
+ else if (getName(nodes, index) === 'execute') {
82
+ for (let i = index + 1; i < nodes.length; i++) {
83
+ if ((getName(nodes, i) === 'if' || getName(nodes, i) === 'unless') && getName(nodes, i + 1) === 'data') {
84
+ // `if|unless data <$nbtPath$>`
85
+ nbtPath(nodes, i + 2, ctx);
86
+ i += 2;
87
+ }
88
+ else if (getName(nodes, i) === 'run') {
89
+ rootCommand(nodes, i + 1, ctx);
90
+ break;
91
+ }
92
+ }
93
+ }
94
+ else if (getName(nodes, index) === 'summon') {
95
+ summonNbt(nodes, index + 1, ctx);
96
+ }
97
+ for (const { children: [node] } of nodes) {
98
+ if (json.JsonNode.is(node)) {
99
+ (0, text_component_1.text_component)(node, { ...ctx, context: '' });
100
+ }
101
+ }
102
+ };
103
+ /**
104
+ * - `block <targetPos: block_pos> <nbt: nbt_compound_tag>`
105
+ * - `entity <target: entity> <nbt: nbt_compound_tag>`
106
+ * - `storage <target: resource_location> <nbt: nbt_compound_tag>`
107
+ */
108
+ const dataMergeTarget = (nodes, index, ctx) => {
109
+ const registry = getName(nodes, index);
110
+ switch (registry) {
111
+ case 'block': {
112
+ const nbtNode = getNode(nodes, index + 2);
113
+ if (nbt.NbtCompoundNode.is(nbtNode)) {
114
+ nbt.checker.index('block', undefined)(nbtNode, ctx);
115
+ }
116
+ break;
117
+ }
118
+ case 'entity': {
119
+ const entityNode = getNode(nodes, index + 1);
120
+ const nbtNode = getNode(nodes, index + 2);
121
+ if (node_1.EntityNode.is(entityNode) && nbt.NbtCompoundNode.is(nbtNode)) {
122
+ const types = (0, exports.getTypesFromEntity)(entityNode, ctx);
123
+ nbt.checker.index('entity_type', types)(nbtNode, ctx);
124
+ }
125
+ break;
126
+ }
127
+ case 'storage': {
128
+ const idNode = getNode(nodes, index + 1);
129
+ const nbtNode = getNode(nodes, index + 2);
130
+ if (core.ResourceLocationNode.is(idNode) && nbt.NbtCompoundNode.is(nbtNode)) {
131
+ nbt.checker.index('storage', core.ResourceLocationNode.toString(idNode, 'full'))(nbtNode, ctx);
132
+ }
133
+ break;
134
+ }
135
+ }
136
+ };
137
+ /**
138
+ * - `block <block_pos> <nbt_path>`
139
+ * - `entity <entity> <nbt_path>`
140
+ * - `storage <resource_location> <nbt_path>`
141
+ */
142
+ const nbtPath = (nodes, index, ctx) => {
143
+ const registry = getName(nodes, index);
144
+ switch (registry) {
145
+ case 'block': {
146
+ const nbtNode = getNode(nodes, index + 2);
147
+ if (nbt.NbtPathNode.is(nbtNode)) {
148
+ nbt.checker.path('block', undefined)(nbtNode, ctx);
149
+ }
150
+ break;
151
+ }
152
+ case 'entity': {
153
+ const entityNode = getNode(nodes, index + 1);
154
+ const nbtNode = getNode(nodes, index + 2);
155
+ if (node_1.EntityNode.is(entityNode) && nbt.NbtPathNode.is(nbtNode)) {
156
+ const types = (0, exports.getTypesFromEntity)(entityNode, ctx);
157
+ nbt.checker.path('entity_type', types)(nbtNode, ctx);
158
+ }
159
+ break;
160
+ }
161
+ case 'storage': {
162
+ const idNode = getNode(nodes, index + 1);
163
+ const nbtNode = getNode(nodes, index + 2);
164
+ if (core.ResourceLocationNode.is(idNode) && nbt.NbtPathNode.is(nbtNode)) {
165
+ nbt.checker.path('storage', core.ResourceLocationNode.toString(idNode, 'full'))(nbtNode, ctx);
166
+ }
167
+ break;
168
+ }
169
+ }
170
+ };
171
+ /**
172
+ * - `<entity: entity_summon> [<pos: vec3>] [<nbt: nbt_compound_tag>]`
173
+ */
174
+ const summonNbt = (nodes, index, ctx) => {
175
+ const typeNode = getNode(nodes, index);
176
+ const nbtNode = getNode(nodes, index + 2);
177
+ if (core.ResourceLocationNode.is(typeNode) && nbt.NbtCompoundNode.is(nbtNode)) {
178
+ nbt.checker.index('entity_type', core.ResourceLocationNode.toString(typeNode, 'full'))(nbtNode, ctx);
179
+ }
180
+ };
181
+ const getTypesFromEntity = (entity, ctx) => {
182
+ if (entity.playerName !== undefined || entity.selector?.playersOnly) {
183
+ return ['minecraft:player'];
184
+ }
185
+ else if (entity.selector) {
186
+ const argumentsNode = entity.selector.arguments;
187
+ if (!argumentsNode) {
188
+ return undefined;
189
+ }
190
+ let types = [];
191
+ for (const pairNode of argumentsNode.children) {
192
+ if (pairNode.key?.value !== 'type') {
193
+ continue;
194
+ }
195
+ const valueNode = pairNode.value;
196
+ if (!valueNode || valueNode.inverted) {
197
+ continue;
198
+ }
199
+ const value = core.ResourceLocationNode.toString(valueNode.value, 'full');
200
+ if (value.startsWith(core.ResourceLocation.TagPrefix)) {
201
+ const tagValues = (0, common_1.getTagValues)('tag/entity_type', value.slice(1), ctx);
202
+ types = types.filter(t => tagValues.includes(t));
203
+ }
204
+ else {
205
+ types = [value];
206
+ }
207
+ }
208
+ return types;
209
+ }
210
+ return undefined;
211
+ };
212
+ exports.getTypesFromEntity = getTypesFromEntity;
213
+ function register(meta) {
214
+ meta.registerChecker('mcfunction:command', exports.command);
215
+ }
216
+ exports.register = register;
217
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ import * as core from '@spyglassmc/core';
2
+ import type { ObjectiveCriteriaNode, VectorNode } from '../node';
3
+ export declare const objectiveCriterion: core.Colorizer<ObjectiveCriteriaNode>;
4
+ export declare const vector: core.Colorizer<VectorNode>;
5
+ export declare function register(meta: core.MetaRegistry): void;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.register = exports.vector = exports.objectiveCriterion = void 0;
23
+ const core = __importStar(require("@spyglassmc/core"));
24
+ const objectiveCriterion = node => [
25
+ core.ColorToken.create(node, 'type'),
26
+ ];
27
+ exports.objectiveCriterion = objectiveCriterion;
28
+ const vector = node => {
29
+ return [core.ColorToken.create(node, 'vector')];
30
+ };
31
+ exports.vector = vector;
32
+ function register(meta) {
33
+ meta.registerColorizer('mcfunction:coordinate', core.colorizer.number);
34
+ meta.registerColorizer('mcfunction:vector', exports.vector);
35
+ meta.registerColorizer('mcfunction:objective_criteria', exports.objectiveCriterion);
36
+ }
37
+ exports.register = register;
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ export declare const ColorArgumentValues: string[];
2
+ export declare const EntityAnchorArgumentValues: string[];
3
+ export declare const ItemSlotArgumentValues: string[];
4
+ export declare const OperationArgumentValues: string[];
5
+ export declare const ScoreboardSlotArgumentValues: string[];
6
+ export declare const SwizzleArgumentValues: string[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.SwizzleArgumentValues = exports.ScoreboardSlotArgumentValues = exports.OperationArgumentValues = exports.ItemSlotArgumentValues = exports.EntityAnchorArgumentValues = exports.ColorArgumentValues = void 0;
23
+ const core = __importStar(require("@spyglassmc/core"));
24
+ exports.ColorArgumentValues = [...core.Color.ColorNames, 'reset'];
25
+ exports.EntityAnchorArgumentValues = ['feet', 'eyes'];
26
+ exports.ItemSlotArgumentValues = [
27
+ ...[...Array(54).keys()].map(n => `container.${n}`),
28
+ ...[...Array(27).keys()].map(n => `enderchest.${n}`),
29
+ ...[...Array(15).keys()].map(n => `horse.${n}`),
30
+ ...[...Array(9).keys()].map(n => `hotbar.${n}`),
31
+ ...[...Array(27).keys()].map(n => `inventory.${n}`),
32
+ ...[...Array(8).keys()].map(n => `villager.${n}`),
33
+ 'armor.chest', 'armor.feet', 'armor.head', 'armor.legs',
34
+ 'horse.armor', 'horse.chest', 'horse.saddle',
35
+ 'weapon', 'weapon.mainhand', 'weapon.offhand',
36
+ ];
37
+ exports.OperationArgumentValues = ['=', '+=', '-=', '*=', '/=', '%=', '<', '>', '><'];
38
+ exports.ScoreboardSlotArgumentValues = [
39
+ 'belowName', 'list', 'sidebar',
40
+ ...core.Color.ColorNames.map(n => `sidebar.team.${n}`),
41
+ ];
42
+ exports.SwizzleArgumentValues = [
43
+ 'x', 'xy', 'xz', 'xyz', 'xzy',
44
+ 'y', 'yx', 'yz', 'yxz', 'yzx',
45
+ 'z', 'zx', 'zy', 'zxy', 'zyx',
46
+ ];
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,5 @@
1
+ import type { MetaRegistry } from '@spyglassmc/core';
2
+ import type * as mcf from '@spyglassmc/mcfunction';
3
+ export declare const getMockNodes: mcf.completer.MockNodesGetter;
4
+ export declare function register(meta: MetaRegistry): void;
5
+ //# sourceMappingURL=argument.d.ts.map
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.register = exports.getMockNodes = void 0;
23
+ const core_1 = require("@spyglassmc/core");
24
+ const json = __importStar(require("@spyglassmc/json"));
25
+ const locales_1 = require("@spyglassmc/locales");
26
+ const common_1 = require("../../common");
27
+ const common_2 = require("../common");
28
+ const node_1 = require("../node");
29
+ const getMockNodes = (rawTreeNode, range) => {
30
+ const treeNode = rawTreeNode;
31
+ switch (treeNode.parser) {
32
+ case 'brigadier:bool':
33
+ return core_1.BooleanNode.mock(range);
34
+ case 'brigadier:double':
35
+ case 'brigadier:float':
36
+ case 'brigadier:integer':
37
+ case 'brigadier:long':
38
+ case 'minecraft:float_range':
39
+ case 'minecraft:message':
40
+ case 'minecraft:time':
41
+ case 'minecraft:uuid':
42
+ return [];
43
+ case 'brigadier:string':
44
+ return treeNode.properties.type === 'phrase'
45
+ ? core_1.StringNode.mock(range, core_1.BrigadierStringOptions)
46
+ : [];
47
+ case 'minecraft:angle':
48
+ return node_1.CoordinateNode.mock(range);
49
+ case 'minecraft:block_pos':
50
+ return node_1.VectorNode.mock(range, { dimension: 3, integersOnly: true });
51
+ case 'minecraft:block_predicate':
52
+ return node_1.BlockNode.mock(range, true);
53
+ case 'minecraft:block_state':
54
+ return node_1.BlockNode.mock(range, false);
55
+ case 'minecraft:color':
56
+ return core_1.LiteralNode.mock(range, { pool: common_2.ColorArgumentValues });
57
+ case 'minecraft:column_pos':
58
+ return node_1.VectorNode.mock(range, { dimension: 2, integersOnly: true });
59
+ case 'minecraft:component':
60
+ return [
61
+ json.JsonArrayNode.mock(range),
62
+ json.JsonObjectNode.mock(range),
63
+ json.JsonStringNode.mock(range),
64
+ ];
65
+ case 'minecraft:dimension':
66
+ return core_1.ResourceLocationNode.mock(range, { category: 'dimension' });
67
+ case 'minecraft:entity':
68
+ case 'minecraft:game_profile':
69
+ return node_1.EntitySelectorNode.mock(range);
70
+ case 'minecraft:entity_anchor':
71
+ return core_1.LiteralNode.mock(range, { pool: common_2.EntityAnchorArgumentValues });
72
+ case 'minecraft:entity_summon':
73
+ return core_1.ResourceLocationNode.mock(range, { category: 'entity_type' });
74
+ case 'minecraft:function':
75
+ return core_1.ResourceLocationNode.mock(range, { category: 'function' });
76
+ case 'minecraft:int_range':
77
+ return node_1.IntRangeNode.mock(range);
78
+ case 'minecraft:item_enchantment':
79
+ return core_1.ResourceLocationNode.mock(range, { category: 'enchantment' });
80
+ case 'minecraft:item_predicate':
81
+ return node_1.ItemNode.mock(range, true);
82
+ case 'minecraft:item_slot':
83
+ return core_1.LiteralNode.mock(range, { pool: common_2.ItemSlotArgumentValues });
84
+ case 'minecraft:item_stack':
85
+ return node_1.ItemNode.mock(range, false);
86
+ case 'minecraft:mob_effect':
87
+ return core_1.ResourceLocationNode.mock(range, { category: 'mob_effect' });
88
+ case 'minecraft:objective':
89
+ return core_1.SymbolNode.mock(range, { category: 'objective' });
90
+ case 'minecraft:objective_criteria':
91
+ return node_1.ObjectiveCriteriaNode.mock(range);
92
+ case 'minecraft:operation':
93
+ return core_1.LiteralNode.mock(range, { pool: common_2.OperationArgumentValues, colorTokenType: 'operator' });
94
+ case 'minecraft:particle':
95
+ return node_1.ParticleNode.mock(range);
96
+ case 'minecraft:resource':
97
+ case 'minecraft:resource_or_tag':
98
+ return core_1.ResourceLocationNode.mock(range, {
99
+ category: core_1.ResourceLocation.shorten(treeNode.properties.registry),
100
+ allowTag: treeNode.parser === 'minecraft:resource_or_tag',
101
+ });
102
+ case 'minecraft:resource_location':
103
+ return core_1.ResourceLocationNode.mock(range, treeNode.properties ?? { pool: [], allowUnknown: true });
104
+ case 'minecraft:rotation':
105
+ return node_1.VectorNode.mock(range, { dimension: 2, noLocal: true });
106
+ case 'minecraft:scoreboard_slot':
107
+ return core_1.LiteralNode.mock(range, { pool: common_2.ScoreboardSlotArgumentValues });
108
+ case 'minecraft:score_holder':
109
+ return node_1.ScoreHolderNode.mock(range);
110
+ case 'minecraft:swizzle':
111
+ return core_1.LiteralNode.mock(range, { pool: common_2.SwizzleArgumentValues });
112
+ case 'minecraft:team':
113
+ return core_1.SymbolNode.mock(range, { category: 'team' });
114
+ case 'minecraft:vec2':
115
+ return node_1.VectorNode.mock(range, { dimension: 2, integersOnly: true });
116
+ case 'minecraft:vec3':
117
+ return node_1.VectorNode.mock(range, { dimension: 3 });
118
+ case 'spyglassmc:tag':
119
+ return core_1.SymbolNode.mock(range, { category: 'tag' });
120
+ // ==== Unimplemented ====
121
+ case 'minecraft:nbt_compound_tag':
122
+ case 'minecraft:nbt_path':
123
+ case 'minecraft:nbt_tag':
124
+ default:
125
+ // Unknown parser.
126
+ return [];
127
+ }
128
+ };
129
+ exports.getMockNodes = getMockNodes;
130
+ const block = (node, ctx) => {
131
+ const ans = [];
132
+ if (core_1.Range.contains(node.id, ctx.offset, true)) {
133
+ ans.push(...core_1.completer.resourceLocation(node.id, ctx));
134
+ }
135
+ if (node.states && core_1.Range.contains(core_1.Range.translate(node.states, 1, -1), ctx.offset, true)) {
136
+ ans.push(...blockStates(node.states, ctx));
137
+ }
138
+ return ans;
139
+ };
140
+ const blockStates = (node, ctx) => {
141
+ if (!node_1.BlockNode.is(node.parent)) {
142
+ return [];
143
+ }
144
+ const idNode = node.parent.id;
145
+ const id = core_1.ResourceLocationNode.toString(idNode, 'full');
146
+ const blocks = idNode.isTag ? (0, common_1.getTagValues)('tag/block', id, ctx) : [id];
147
+ const states = (0, core_1.getStates)('block', blocks, ctx);
148
+ return core_1.completer.record({
149
+ key: (_record, pair, _ctx, range, insertValue, insertComma, existingKeys) => {
150
+ return Object.keys(states)
151
+ .filter(k => pair?.key?.value === k || !existingKeys.some(ek => ek.value === k))
152
+ .map(k => core_1.CompletionItem.create(k, range, {
153
+ kind: 10 /* Property */,
154
+ detail: (0, locales_1.localize)('mcfunction.completer.block.states.default-value', (0, locales_1.localeQuote)(states[k][0])),
155
+ insertText: new core_1.InsertTextBuilder()
156
+ .literal(k)
157
+ .if(insertValue, b => b.literal('=').placeholder(...states[k]))
158
+ .if(insertComma, b => b.literal(','))
159
+ .build(),
160
+ }));
161
+ },
162
+ value: (_record, pair, ctx) => {
163
+ if (pair.key && states[pair.key.value]) {
164
+ return states[pair.key.value].map(v => core_1.CompletionItem.create(v, pair.value ?? ctx.offset, {
165
+ kind: 12 /* Value */,
166
+ }));
167
+ }
168
+ return [];
169
+ },
170
+ })(node, ctx);
171
+ };
172
+ const coordinate = (node, _ctx) => {
173
+ return [core_1.CompletionItem.create('~', node)];
174
+ };
175
+ const item = (node, ctx) => {
176
+ const ans = [];
177
+ if (core_1.Range.contains(node.id, ctx.offset, true)) {
178
+ ans.push(...core_1.completer.resourceLocation(node.id, ctx));
179
+ }
180
+ return ans;
181
+ };
182
+ const objectiveCriteria = (node, ctx) => {
183
+ const ans = node_1.ObjectiveCriteriaNode.SimpleValues.map(v => core_1.CompletionItem.create(v, node));
184
+ if (!node.children?.[0] || core_1.Range.contains(node.children[0], ctx.offset, true)) {
185
+ ans.push(...core_1.completer.resourceLocation(node.children?.[0] ?? core_1.ResourceLocationNode.mock(node, { category: 'stat_type', namespacePathSep: '.' }), ctx));
186
+ }
187
+ if (node.children?.[1] && core_1.Range.contains(node.children[1], ctx.offset, true)) {
188
+ ans.push(...core_1.completer.resourceLocation(node.children[1], ctx));
189
+ }
190
+ return ans;
191
+ };
192
+ const particle = (node, ctx) => {
193
+ const child = core_1.AstNode.findChild(node, ctx.offset, true);
194
+ if (child) {
195
+ return core_1.completer.dispatch(child, ctx);
196
+ }
197
+ const id = core_1.ResourceLocationNode.toString(node.id, 'short');
198
+ const map = {
199
+ block: [node_1.BlockNode.mock(ctx.offset, false)],
200
+ block_marker: [node_1.BlockNode.mock(ctx.offset, false)],
201
+ dust: [node_1.VectorNode.mock(ctx.offset, { dimension: 3 }), core_1.FloatNode.mock(ctx.offset)],
202
+ dust_color_transition: [node_1.VectorNode.mock(ctx.offset, { dimension: 3 }), core_1.FloatNode.mock(ctx.offset), node_1.VectorNode.mock(ctx.offset, { dimension: 3 })],
203
+ falling_dust: [node_1.BlockNode.mock(ctx.offset, false)],
204
+ item: [node_1.ItemNode.mock(ctx.offset, false)],
205
+ sculk_charge: [core_1.FloatNode.mock(ctx.offset)],
206
+ vibration: [node_1.VectorNode.mock(ctx.offset, { dimension: 3 }), node_1.VectorNode.mock(ctx.offset, { dimension: 3 }), core_1.IntegerNode.mock(ctx.offset)],
207
+ };
208
+ if (node_1.ParticleNode.isSpecialType(id)) {
209
+ const numParamsBefore = node.children?.slice(1).filter(n => n.range.end < ctx.offset).length ?? 0;
210
+ const mock = map[id][numParamsBefore];
211
+ if (mock) {
212
+ return core_1.completer.dispatch(mock, ctx);
213
+ }
214
+ }
215
+ return [];
216
+ };
217
+ const scoreHolder = (node, ctx) => {
218
+ let ans;
219
+ if (node.selector && core_1.Range.contains(node.selector, ctx.offset, true)) {
220
+ ans = selector(node.selector, ctx);
221
+ if (core_1.Range.contains(node.children[0], ctx.offset, true)) {
222
+ ans.push(...core_1.completer.symbol(core_1.SymbolNode.mock(node, { category: 'score_holder' }), ctx));
223
+ }
224
+ }
225
+ else {
226
+ ans = core_1.completer.symbol(node.fakeName ?? core_1.SymbolNode.mock(node, { category: 'score_holder' }), ctx);
227
+ ans.push(...selector(node_1.EntitySelectorNode.mock(node), ctx));
228
+ }
229
+ return ans;
230
+ };
231
+ const selector = (node, ctx) => {
232
+ if (core_1.Range.contains(node.children[0], ctx.offset, true)) {
233
+ return core_1.completer.literal(node.children[0], ctx);
234
+ }
235
+ if (node.arguments && core_1.Range.contains(core_1.Range.translate(node.arguments, 1, -1), ctx.offset, true)) {
236
+ return selectorArguments(node.arguments, ctx);
237
+ }
238
+ return [];
239
+ };
240
+ const selectorArguments = (node, ctx) => {
241
+ const selector = node.parent;
242
+ if (!node_1.EntitySelectorNode.is(selector)) {
243
+ return [];
244
+ }
245
+ return core_1.completer.record({
246
+ key: (record, pair, _ctx, range, insertValue, insertComma) => {
247
+ return [...node_1.EntitySelectorNode.ArgumentKeys]
248
+ .filter(k => node_1.EntitySelectorNode.canKeyExist(selector, record, k) === 0 /* Ok */)
249
+ .map(k => core_1.CompletionItem.create(k, range, {
250
+ kind: 10 /* Property */,
251
+ insertText: new core_1.InsertTextBuilder()
252
+ .literal(k)
253
+ .if(insertValue, b => b.literal('=').placeholder()) // TODO
254
+ .if(insertComma, b => b.literal(','))
255
+ .build(),
256
+ }));
257
+ },
258
+ value: (_record, pair, ctx) => {
259
+ if (pair.value) {
260
+ return core_1.completer.dispatch(pair.value, ctx);
261
+ }
262
+ return [];
263
+ },
264
+ })(node, ctx);
265
+ };
266
+ const intRange = (node, _ctx) => {
267
+ return [core_1.CompletionItem.create('-2147483648..2147483647', node, { kind: 21 /* Constant */ })];
268
+ };
269
+ const vector = (node, _ctx) => {
270
+ const createCompletion = (coordinate, sortText) => core_1.CompletionItem.create(new Array(node.options.dimension).fill(coordinate).join(' '), node, { sortText });
271
+ const ans = [];
272
+ ans.push(createCompletion('~', 'a'));
273
+ if (!node.options.noLocal) {
274
+ ans.push(createCompletion('^', 'b'));
275
+ }
276
+ ans.push(createCompletion('0.0', 'c'));
277
+ return ans;
278
+ };
279
+ function register(meta) {
280
+ meta.registerCompleter('mcfunction:block', block);
281
+ meta.registerCompleter('mcfunction:coordinate', coordinate);
282
+ meta.registerCompleter('mcfunction:entity_selector', selector);
283
+ meta.registerCompleter('mcfunction:entity_selector/arguments', selectorArguments);
284
+ meta.registerCompleter('mcfunction:int_range', intRange);
285
+ meta.registerCompleter('mcfunction:item', item);
286
+ meta.registerCompleter('mcfunction:objective_criteria', objectiveCriteria);
287
+ meta.registerCompleter('mcfunction:particle', particle);
288
+ meta.registerCompleter('mcfunction:score_holder', scoreHolder);
289
+ meta.registerCompleter('mcfunction:vector', vector);
290
+ }
291
+ exports.register = register;
292
+ //# sourceMappingURL=argument.js.map
@@ -0,0 +1,2 @@
1
+ export * from './argument';
2
+ //# sourceMappingURL=index.d.ts.map