@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.
- package/README.md +36 -0
- package/lib/binder/index.d.ts +15 -0
- package/lib/binder/index.js +102 -0
- package/lib/common/index.d.ts +7 -0
- package/lib/common/index.js +60 -0
- package/lib/dependency/common.d.ts +26 -0
- package/lib/dependency/common.js +39 -0
- package/lib/dependency/index.d.ts +30 -0
- package/lib/dependency/index.js +172 -0
- package/lib/dependency/mcmeta.d.ts +79 -0
- package/lib/dependency/mcmeta.js +205 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +76 -0
- package/lib/json/checker/data/advancement.d.ts +14 -0
- package/lib/json/checker/data/advancement.js +450 -0
- package/lib/json/checker/data/biome.d.ts +4 -0
- package/lib/json/checker/data/biome.js +151 -0
- package/lib/json/checker/data/common.d.ts +22 -0
- package/lib/json/checker/data/common.js +286 -0
- package/lib/json/checker/data/dimension.d.ts +4 -0
- package/lib/json/checker/data/dimension.js +238 -0
- package/lib/json/checker/data/feature.d.ts +9 -0
- package/lib/json/checker/data/feature.js +733 -0
- package/lib/json/checker/data/index.d.ts +4 -0
- package/lib/json/checker/data/index.js +43 -0
- package/lib/json/checker/data/loot_table.d.ts +8 -0
- package/lib/json/checker/data/loot_table.js +279 -0
- package/lib/json/checker/data/recipe.d.ts +2 -0
- package/lib/json/checker/data/recipe.js +53 -0
- package/lib/json/checker/data/structure.d.ts +8 -0
- package/lib/json/checker/data/structure.js +148 -0
- package/lib/json/checker/data/tag.d.ts +7 -0
- package/lib/json/checker/data/tag.js +38 -0
- package/lib/json/checker/data/text_component.d.ts +2 -0
- package/lib/json/checker/data/text_component.js +142 -0
- package/lib/json/checker/index.d.ts +5 -0
- package/lib/json/checker/index.js +28 -0
- package/lib/json/checker/util/advancement.d.ts +3 -0
- package/lib/json/checker/util/advancement.js +20 -0
- package/lib/json/checker/util/block_states.d.ts +13 -0
- package/lib/json/checker/util/block_states.js +85 -0
- package/lib/json/checker/util/color.d.ts +4 -0
- package/lib/json/checker/util/color.js +64 -0
- package/lib/json/checker/util/index.d.ts +8 -0
- package/lib/json/checker/util/index.js +20 -0
- package/lib/json/checker/util/nbt.d.ts +17 -0
- package/lib/json/checker/util/nbt.js +71 -0
- package/lib/json/checker/util/recipe.d.ts +6 -0
- package/lib/json/checker/util/recipe.js +16 -0
- package/lib/json/checker/util/uuid.d.ts +2 -0
- package/lib/json/checker/util/uuid.js +12 -0
- package/lib/json/checker/util/version.d.ts +46 -0
- package/lib/json/checker/util/version.js +54 -0
- package/lib/json/index.d.ts +4 -0
- package/lib/json/index.js +32 -0
- package/lib/mcfunction/checker/index.d.ts +7 -0
- package/lib/mcfunction/checker/index.js +217 -0
- package/lib/mcfunction/colorizer/index.d.ts +6 -0
- package/lib/mcfunction/colorizer/index.js +38 -0
- package/lib/mcfunction/common/index.d.ts +7 -0
- package/lib/mcfunction/common/index.js +47 -0
- package/lib/mcfunction/completer/argument.d.ts +5 -0
- package/lib/mcfunction/completer/argument.js +292 -0
- package/lib/mcfunction/completer/index.d.ts +2 -0
- package/lib/mcfunction/completer/index.js +14 -0
- package/lib/mcfunction/index.d.ts +8 -0
- package/lib/mcfunction/index.js +72 -0
- package/lib/mcfunction/inlayHintProvider.d.ts +4 -0
- package/lib/mcfunction/inlayHintProvider.js +40 -0
- package/lib/mcfunction/node/argument.d.ts +187 -0
- package/lib/mcfunction/node/argument.js +281 -0
- package/lib/mcfunction/node/index.d.ts +2 -0
- package/lib/mcfunction/node/index.js +14 -0
- package/lib/mcfunction/parser/argument.d.ts +15 -0
- package/lib/mcfunction/parser/argument.js +934 -0
- package/lib/mcfunction/parser/index.d.ts +2 -0
- package/lib/mcfunction/parser/index.js +14 -0
- package/lib/mcfunction/signatureHelpProvider.d.ts +8 -0
- package/lib/mcfunction/signatureHelpProvider.js +103 -0
- package/lib/mcfunction/tree/1.15.d.ts +9 -0
- package/lib/mcfunction/tree/1.15.js +542 -0
- package/lib/mcfunction/tree/1.16.d.ts +10 -0
- package/lib/mcfunction/tree/1.16.js +77 -0
- package/lib/mcfunction/tree/1.17.d.ts +12 -0
- package/lib/mcfunction/tree/1.17.js +166 -0
- package/lib/mcfunction/tree/1.18.d.ts +26 -0
- package/lib/mcfunction/tree/1.18.js +6 -0
- package/lib/mcfunction/tree/1.19.d.ts +26 -0
- package/lib/mcfunction/tree/1.19.js +6 -0
- package/lib/mcfunction/tree/argument.d.ts +179 -0
- package/lib/mcfunction/tree/argument.js +3 -0
- package/lib/mcfunction/tree/index.d.ts +7 -0
- package/lib/mcfunction/tree/index.js +19 -0
- 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
|