@spyglassmc/java-edition 0.1.1 → 0.2.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/lib/binder/index.d.ts +3 -3
- package/lib/binder/index.js +11 -17
- package/lib/common/index.js +4 -28
- package/lib/dependency/common.d.ts +8 -5
- package/lib/dependency/common.js +18 -18
- package/lib/dependency/index.d.ts +6 -6
- package/lib/dependency/index.js +21 -48
- package/lib/dependency/mcmeta.d.ts +2 -3
- package/lib/dependency/mcmeta.js +28 -100
- package/lib/index.d.ts +3 -3
- package/lib/index.js +27 -50
- package/lib/json/checker/data/advancement.d.ts +13 -13
- package/lib/json/checker/data/advancement.js +259 -262
- package/lib/json/checker/data/biome.d.ts +3 -3
- package/lib/json/checker/data/biome.js +98 -101
- package/lib/json/checker/data/common.d.ts +2 -2
- package/lib/json/checker/data/common.js +145 -152
- package/lib/json/checker/data/dimension.d.ts +3 -3
- package/lib/json/checker/data/dimension.js +148 -151
- package/lib/json/checker/data/feature.d.ts +8 -8
- package/lib/json/checker/data/feature.js +369 -372
- package/lib/json/checker/data/index.d.ts +2 -2
- package/lib/json/checker/data/index.js +36 -39
- package/lib/json/checker/data/loot_table.d.ts +7 -7
- package/lib/json/checker/data/loot_table.js +125 -128
- package/lib/json/checker/data/recipe.d.ts +1 -1
- package/lib/json/checker/data/recipe.js +25 -28
- package/lib/json/checker/data/structure.d.ts +7 -7
- package/lib/json/checker/data/structure.js +80 -83
- package/lib/json/checker/data/tag.js +23 -26
- package/lib/json/checker/data/text_component.d.ts +1 -1
- package/lib/json/checker/data/text_component.js +61 -64
- package/lib/json/checker/index.js +14 -19
- package/lib/json/checker/util/advancement.d.ts +1 -1
- package/lib/json/checker/util/advancement.js +4 -8
- package/lib/json/checker/util/block_states.d.ts +1 -1
- package/lib/json/checker/util/block_states.js +21 -45
- package/lib/json/checker/util/color.d.ts +1 -1
- package/lib/json/checker/util/color.js +20 -25
- package/lib/json/checker/util/index.d.ts +7 -7
- package/lib/json/checker/util/index.js +7 -19
- package/lib/json/checker/util/nbt.d.ts +2 -3
- package/lib/json/checker/util/nbt.js +17 -22
- package/lib/json/checker/util/recipe.d.ts +1 -1
- package/lib/json/checker/util/recipe.js +4 -8
- package/lib/json/checker/util/uuid.d.ts +1 -1
- package/lib/json/checker/util/uuid.js +4 -7
- package/lib/json/checker/util/version.d.ts +13 -13
- package/lib/json/checker/util/version.js +7 -13
- package/lib/json/index.d.ts +1 -1
- package/lib/json/index.js +4 -27
- package/lib/mcfunction/checker/index.d.ts +1 -1
- package/lib/mcfunction/checker/index.js +79 -103
- package/lib/mcfunction/colorizer/index.d.ts +1 -1
- package/lib/mcfunction/colorizer/index.js +6 -31
- package/lib/mcfunction/common/index.js +7 -29
- package/lib/mcfunction/completer/argument.js +95 -119
- package/lib/mcfunction/completer/index.d.ts +1 -1
- package/lib/mcfunction/completer/index.js +1 -13
- package/lib/mcfunction/index.d.ts +6 -6
- package/lib/mcfunction/index.js +19 -54
- package/lib/mcfunction/inlayHintProvider.js +3 -26
- package/lib/mcfunction/node/argument.d.ts +3 -3
- package/lib/mcfunction/node/argument.js +47 -69
- package/lib/mcfunction/node/index.d.ts +1 -1
- package/lib/mcfunction/node/index.js +1 -13
- package/lib/mcfunction/parser/argument.d.ts +1 -1
- package/lib/mcfunction/parser/argument.js +76 -101
- package/lib/mcfunction/parser/index.d.ts +1 -1
- package/lib/mcfunction/parser/index.js +1 -13
- package/lib/mcfunction/signatureHelpProvider.js +3 -26
- package/lib/mcfunction/tree/argument.js +1 -2
- package/lib/mcfunction/tree/index.d.ts +1 -6
- package/lib/mcfunction/tree/index.js +1 -18
- package/lib/mcfunction/tree/patch.d.ts +4 -0
- package/lib/mcfunction/tree/patch.js +748 -0
- package/package.json +8 -7
- package/lib/mcfunction/tree/1.15.d.ts +0 -9
- package/lib/mcfunction/tree/1.15.js +0 -542
- package/lib/mcfunction/tree/1.16.d.ts +0 -10
- package/lib/mcfunction/tree/1.16.js +0 -77
- package/lib/mcfunction/tree/1.17.d.ts +0 -12
- package/lib/mcfunction/tree/1.17.js +0 -166
- package/lib/mcfunction/tree/1.18.d.ts +0 -26
- package/lib/mcfunction/tree/1.18.js +0 -6
- package/lib/mcfunction/tree/1.19.d.ts +0 -26
- package/lib/mcfunction/tree/1.19.js +0 -6
|
@@ -1,36 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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) => {
|
|
1
|
+
import { AstNode, BooleanNode, BrigadierStringOptions, completer, CompletionItem, FloatNode, getStates, InsertTextBuilder, IntegerNode, LiteralNode, Range, ResourceLocation, ResourceLocationNode, StringNode, SymbolNode } from '@spyglassmc/core';
|
|
2
|
+
import * as json from '@spyglassmc/json';
|
|
3
|
+
import { localeQuote, localize } from '@spyglassmc/locales';
|
|
4
|
+
import { getTagValues } from '../../common/index.js';
|
|
5
|
+
import { ColorArgumentValues, EntityAnchorArgumentValues, ItemSlotArgumentValues, OperationArgumentValues, ScoreboardSlotArgumentValues, SwizzleArgumentValues } from '../common/index.js';
|
|
6
|
+
import { BlockNode, CoordinateNode, EntitySelectorNode, IntRangeNode, ItemNode, ObjectiveCriteriaNode, ParticleNode, ScoreHolderNode, VectorNode } from '../node/index.js';
|
|
7
|
+
export const getMockNodes = (rawTreeNode, range) => {
|
|
30
8
|
const treeNode = rawTreeNode;
|
|
31
9
|
switch (treeNode.parser) {
|
|
32
10
|
case 'brigadier:bool':
|
|
33
|
-
return
|
|
11
|
+
return BooleanNode.mock(range);
|
|
34
12
|
case 'brigadier:double':
|
|
35
13
|
case 'brigadier:float':
|
|
36
14
|
case 'brigadier:integer':
|
|
@@ -42,20 +20,20 @@ const getMockNodes = (rawTreeNode, range) => {
|
|
|
42
20
|
return [];
|
|
43
21
|
case 'brigadier:string':
|
|
44
22
|
return treeNode.properties.type === 'phrase'
|
|
45
|
-
?
|
|
23
|
+
? StringNode.mock(range, BrigadierStringOptions)
|
|
46
24
|
: [];
|
|
47
25
|
case 'minecraft:angle':
|
|
48
|
-
return
|
|
26
|
+
return CoordinateNode.mock(range);
|
|
49
27
|
case 'minecraft:block_pos':
|
|
50
|
-
return
|
|
28
|
+
return VectorNode.mock(range, { dimension: 3, integersOnly: true });
|
|
51
29
|
case 'minecraft:block_predicate':
|
|
52
|
-
return
|
|
30
|
+
return BlockNode.mock(range, true);
|
|
53
31
|
case 'minecraft:block_state':
|
|
54
|
-
return
|
|
32
|
+
return BlockNode.mock(range, false);
|
|
55
33
|
case 'minecraft:color':
|
|
56
|
-
return
|
|
34
|
+
return LiteralNode.mock(range, { pool: ColorArgumentValues });
|
|
57
35
|
case 'minecraft:column_pos':
|
|
58
|
-
return
|
|
36
|
+
return VectorNode.mock(range, { dimension: 2, integersOnly: true });
|
|
59
37
|
case 'minecraft:component':
|
|
60
38
|
return [
|
|
61
39
|
json.JsonArrayNode.mock(range),
|
|
@@ -63,60 +41,60 @@ const getMockNodes = (rawTreeNode, range) => {
|
|
|
63
41
|
json.JsonStringNode.mock(range),
|
|
64
42
|
];
|
|
65
43
|
case 'minecraft:dimension':
|
|
66
|
-
return
|
|
44
|
+
return ResourceLocationNode.mock(range, { category: 'dimension' });
|
|
67
45
|
case 'minecraft:entity':
|
|
68
46
|
case 'minecraft:game_profile':
|
|
69
|
-
return
|
|
47
|
+
return EntitySelectorNode.mock(range);
|
|
70
48
|
case 'minecraft:entity_anchor':
|
|
71
|
-
return
|
|
49
|
+
return LiteralNode.mock(range, { pool: EntityAnchorArgumentValues });
|
|
72
50
|
case 'minecraft:entity_summon':
|
|
73
|
-
return
|
|
51
|
+
return ResourceLocationNode.mock(range, { category: 'entity_type' });
|
|
74
52
|
case 'minecraft:function':
|
|
75
|
-
return
|
|
53
|
+
return ResourceLocationNode.mock(range, { category: 'function' });
|
|
76
54
|
case 'minecraft:int_range':
|
|
77
|
-
return
|
|
55
|
+
return IntRangeNode.mock(range);
|
|
78
56
|
case 'minecraft:item_enchantment':
|
|
79
|
-
return
|
|
57
|
+
return ResourceLocationNode.mock(range, { category: 'enchantment' });
|
|
80
58
|
case 'minecraft:item_predicate':
|
|
81
|
-
return
|
|
59
|
+
return ItemNode.mock(range, true);
|
|
82
60
|
case 'minecraft:item_slot':
|
|
83
|
-
return
|
|
61
|
+
return LiteralNode.mock(range, { pool: ItemSlotArgumentValues });
|
|
84
62
|
case 'minecraft:item_stack':
|
|
85
|
-
return
|
|
63
|
+
return ItemNode.mock(range, false);
|
|
86
64
|
case 'minecraft:mob_effect':
|
|
87
|
-
return
|
|
65
|
+
return ResourceLocationNode.mock(range, { category: 'mob_effect' });
|
|
88
66
|
case 'minecraft:objective':
|
|
89
|
-
return
|
|
67
|
+
return SymbolNode.mock(range, { category: 'objective' });
|
|
90
68
|
case 'minecraft:objective_criteria':
|
|
91
|
-
return
|
|
69
|
+
return ObjectiveCriteriaNode.mock(range);
|
|
92
70
|
case 'minecraft:operation':
|
|
93
|
-
return
|
|
71
|
+
return LiteralNode.mock(range, { pool: OperationArgumentValues, colorTokenType: 'operator' });
|
|
94
72
|
case 'minecraft:particle':
|
|
95
|
-
return
|
|
73
|
+
return ParticleNode.mock(range);
|
|
96
74
|
case 'minecraft:resource':
|
|
97
75
|
case 'minecraft:resource_or_tag':
|
|
98
|
-
return
|
|
99
|
-
category:
|
|
76
|
+
return ResourceLocationNode.mock(range, {
|
|
77
|
+
category: ResourceLocation.shorten(treeNode.properties.registry),
|
|
100
78
|
allowTag: treeNode.parser === 'minecraft:resource_or_tag',
|
|
101
79
|
});
|
|
102
80
|
case 'minecraft:resource_location':
|
|
103
|
-
return
|
|
81
|
+
return ResourceLocationNode.mock(range, treeNode.properties ?? { pool: [], allowUnknown: true });
|
|
104
82
|
case 'minecraft:rotation':
|
|
105
|
-
return
|
|
83
|
+
return VectorNode.mock(range, { dimension: 2, noLocal: true });
|
|
106
84
|
case 'minecraft:scoreboard_slot':
|
|
107
|
-
return
|
|
85
|
+
return LiteralNode.mock(range, { pool: ScoreboardSlotArgumentValues });
|
|
108
86
|
case 'minecraft:score_holder':
|
|
109
|
-
return
|
|
87
|
+
return ScoreHolderNode.mock(range);
|
|
110
88
|
case 'minecraft:swizzle':
|
|
111
|
-
return
|
|
89
|
+
return LiteralNode.mock(range, { pool: SwizzleArgumentValues });
|
|
112
90
|
case 'minecraft:team':
|
|
113
|
-
return
|
|
91
|
+
return SymbolNode.mock(range, { category: 'team' });
|
|
114
92
|
case 'minecraft:vec2':
|
|
115
|
-
return
|
|
93
|
+
return VectorNode.mock(range, { dimension: 2, integersOnly: true });
|
|
116
94
|
case 'minecraft:vec3':
|
|
117
|
-
return
|
|
95
|
+
return VectorNode.mock(range, { dimension: 3 });
|
|
118
96
|
case 'spyglassmc:tag':
|
|
119
|
-
return
|
|
97
|
+
return SymbolNode.mock(range, { category: 'tag' });
|
|
120
98
|
// ==== Unimplemented ====
|
|
121
99
|
case 'minecraft:nbt_compound_tag':
|
|
122
100
|
case 'minecraft:nbt_path':
|
|
@@ -126,33 +104,32 @@ const getMockNodes = (rawTreeNode, range) => {
|
|
|
126
104
|
return [];
|
|
127
105
|
}
|
|
128
106
|
};
|
|
129
|
-
exports.getMockNodes = getMockNodes;
|
|
130
107
|
const block = (node, ctx) => {
|
|
131
108
|
const ans = [];
|
|
132
|
-
if (
|
|
133
|
-
ans.push(...
|
|
109
|
+
if (Range.contains(node.id, ctx.offset, true)) {
|
|
110
|
+
ans.push(...completer.resourceLocation(node.id, ctx));
|
|
134
111
|
}
|
|
135
|
-
if (node.states &&
|
|
112
|
+
if (node.states && Range.contains(Range.translate(node.states, 1, -1), ctx.offset, true)) {
|
|
136
113
|
ans.push(...blockStates(node.states, ctx));
|
|
137
114
|
}
|
|
138
115
|
return ans;
|
|
139
116
|
};
|
|
140
117
|
const blockStates = (node, ctx) => {
|
|
141
|
-
if (!
|
|
118
|
+
if (!BlockNode.is(node.parent)) {
|
|
142
119
|
return [];
|
|
143
120
|
}
|
|
144
121
|
const idNode = node.parent.id;
|
|
145
|
-
const id =
|
|
146
|
-
const blocks = idNode.isTag ?
|
|
147
|
-
const states =
|
|
148
|
-
return
|
|
122
|
+
const id = ResourceLocationNode.toString(idNode, 'full');
|
|
123
|
+
const blocks = idNode.isTag ? getTagValues('tag/block', id, ctx) : [id];
|
|
124
|
+
const states = getStates('block', blocks, ctx);
|
|
125
|
+
return completer.record({
|
|
149
126
|
key: (_record, pair, _ctx, range, insertValue, insertComma, existingKeys) => {
|
|
150
127
|
return Object.keys(states)
|
|
151
128
|
.filter(k => pair?.key?.value === k || !existingKeys.some(ek => ek.value === k))
|
|
152
|
-
.map(k =>
|
|
153
|
-
kind: 10 /* Property */,
|
|
154
|
-
detail:
|
|
155
|
-
insertText: new
|
|
129
|
+
.map(k => CompletionItem.create(k, range, {
|
|
130
|
+
kind: 10 /* CompletionKind.Property */,
|
|
131
|
+
detail: localize('mcfunction.completer.block.states.default-value', localeQuote(states[k][0])),
|
|
132
|
+
insertText: new InsertTextBuilder()
|
|
156
133
|
.literal(k)
|
|
157
134
|
.if(insertValue, b => b.literal('=').placeholder(...states[k]))
|
|
158
135
|
.if(insertComma, b => b.literal(','))
|
|
@@ -161,8 +138,8 @@ const blockStates = (node, ctx) => {
|
|
|
161
138
|
},
|
|
162
139
|
value: (_record, pair, ctx) => {
|
|
163
140
|
if (pair.key && states[pair.key.value]) {
|
|
164
|
-
return states[pair.key.value].map(v =>
|
|
165
|
-
kind: 12 /* Value */,
|
|
141
|
+
return states[pair.key.value].map(v => CompletionItem.create(v, pair.value ?? ctx.offset, {
|
|
142
|
+
kind: 12 /* CompletionKind.Value */,
|
|
166
143
|
}));
|
|
167
144
|
}
|
|
168
145
|
return [];
|
|
@@ -170,85 +147,85 @@ const blockStates = (node, ctx) => {
|
|
|
170
147
|
})(node, ctx);
|
|
171
148
|
};
|
|
172
149
|
const coordinate = (node, _ctx) => {
|
|
173
|
-
return [
|
|
150
|
+
return [CompletionItem.create('~', node)];
|
|
174
151
|
};
|
|
175
152
|
const item = (node, ctx) => {
|
|
176
153
|
const ans = [];
|
|
177
|
-
if (
|
|
178
|
-
ans.push(...
|
|
154
|
+
if (Range.contains(node.id, ctx.offset, true)) {
|
|
155
|
+
ans.push(...completer.resourceLocation(node.id, ctx));
|
|
179
156
|
}
|
|
180
157
|
return ans;
|
|
181
158
|
};
|
|
182
159
|
const objectiveCriteria = (node, ctx) => {
|
|
183
|
-
const ans =
|
|
184
|
-
if (!node.children?.[0] ||
|
|
185
|
-
ans.push(...
|
|
160
|
+
const ans = ObjectiveCriteriaNode.SimpleValues.map(v => CompletionItem.create(v, node));
|
|
161
|
+
if (!node.children?.[0] || Range.contains(node.children[0], ctx.offset, true)) {
|
|
162
|
+
ans.push(...completer.resourceLocation(node.children?.[0] ?? ResourceLocationNode.mock(node, { category: 'stat_type', namespacePathSep: '.' }), ctx));
|
|
186
163
|
}
|
|
187
|
-
if (node.children?.[1] &&
|
|
188
|
-
ans.push(...
|
|
164
|
+
if (node.children?.[1] && Range.contains(node.children[1], ctx.offset, true)) {
|
|
165
|
+
ans.push(...completer.resourceLocation(node.children[1], ctx));
|
|
189
166
|
}
|
|
190
167
|
return ans;
|
|
191
168
|
};
|
|
192
169
|
const particle = (node, ctx) => {
|
|
193
|
-
const child =
|
|
170
|
+
const child = AstNode.findChild(node, ctx.offset, true);
|
|
194
171
|
if (child) {
|
|
195
|
-
return
|
|
172
|
+
return completer.dispatch(child, ctx);
|
|
196
173
|
}
|
|
197
|
-
const id =
|
|
174
|
+
const id = ResourceLocationNode.toString(node.id, 'short');
|
|
198
175
|
const map = {
|
|
199
|
-
block: [
|
|
200
|
-
block_marker: [
|
|
201
|
-
dust: [
|
|
202
|
-
dust_color_transition: [
|
|
203
|
-
falling_dust: [
|
|
204
|
-
item: [
|
|
205
|
-
sculk_charge: [
|
|
206
|
-
vibration: [
|
|
176
|
+
block: [BlockNode.mock(ctx.offset, false)],
|
|
177
|
+
block_marker: [BlockNode.mock(ctx.offset, false)],
|
|
178
|
+
dust: [VectorNode.mock(ctx.offset, { dimension: 3 }), FloatNode.mock(ctx.offset)],
|
|
179
|
+
dust_color_transition: [VectorNode.mock(ctx.offset, { dimension: 3 }), FloatNode.mock(ctx.offset), VectorNode.mock(ctx.offset, { dimension: 3 })],
|
|
180
|
+
falling_dust: [BlockNode.mock(ctx.offset, false)],
|
|
181
|
+
item: [ItemNode.mock(ctx.offset, false)],
|
|
182
|
+
sculk_charge: [FloatNode.mock(ctx.offset)],
|
|
183
|
+
vibration: [VectorNode.mock(ctx.offset, { dimension: 3 }), VectorNode.mock(ctx.offset, { dimension: 3 }), IntegerNode.mock(ctx.offset)],
|
|
207
184
|
};
|
|
208
|
-
if (
|
|
185
|
+
if (ParticleNode.isSpecialType(id)) {
|
|
209
186
|
const numParamsBefore = node.children?.slice(1).filter(n => n.range.end < ctx.offset).length ?? 0;
|
|
210
187
|
const mock = map[id][numParamsBefore];
|
|
211
188
|
if (mock) {
|
|
212
|
-
return
|
|
189
|
+
return completer.dispatch(mock, ctx);
|
|
213
190
|
}
|
|
214
191
|
}
|
|
215
192
|
return [];
|
|
216
193
|
};
|
|
217
194
|
const scoreHolder = (node, ctx) => {
|
|
218
195
|
let ans;
|
|
219
|
-
if (node.selector &&
|
|
196
|
+
if (node.selector && Range.contains(node.selector, ctx.offset, true)) {
|
|
220
197
|
ans = selector(node.selector, ctx);
|
|
221
|
-
if (
|
|
222
|
-
ans.push(...
|
|
198
|
+
if (Range.contains(node.children[0], ctx.offset, true)) {
|
|
199
|
+
ans.push(...completer.symbol(SymbolNode.mock(node, { category: 'score_holder' }), ctx));
|
|
223
200
|
}
|
|
224
201
|
}
|
|
225
202
|
else {
|
|
226
|
-
ans =
|
|
227
|
-
ans.push(...selector(
|
|
203
|
+
ans = completer.symbol(node.fakeName ?? SymbolNode.mock(node, { category: 'score_holder' }), ctx);
|
|
204
|
+
ans.push(...selector(EntitySelectorNode.mock(node), ctx));
|
|
228
205
|
}
|
|
229
206
|
return ans;
|
|
230
207
|
};
|
|
231
208
|
const selector = (node, ctx) => {
|
|
232
|
-
if (
|
|
233
|
-
return
|
|
209
|
+
if (Range.contains(node.children[0], ctx.offset, true)) {
|
|
210
|
+
return completer.literal(node.children[0], ctx);
|
|
234
211
|
}
|
|
235
|
-
if (node.arguments &&
|
|
212
|
+
if (node.arguments && Range.contains(Range.translate(node.arguments, 1, -1), ctx.offset, true)) {
|
|
236
213
|
return selectorArguments(node.arguments, ctx);
|
|
237
214
|
}
|
|
238
215
|
return [];
|
|
239
216
|
};
|
|
240
217
|
const selectorArguments = (node, ctx) => {
|
|
241
218
|
const selector = node.parent;
|
|
242
|
-
if (!
|
|
219
|
+
if (!EntitySelectorNode.is(selector)) {
|
|
243
220
|
return [];
|
|
244
221
|
}
|
|
245
|
-
return
|
|
222
|
+
return completer.record({
|
|
246
223
|
key: (record, pair, _ctx, range, insertValue, insertComma) => {
|
|
247
|
-
return [...
|
|
248
|
-
.filter(k =>
|
|
249
|
-
.map(k =>
|
|
250
|
-
kind: 10 /* Property */,
|
|
251
|
-
insertText: new
|
|
224
|
+
return [...EntitySelectorNode.ArgumentKeys]
|
|
225
|
+
.filter(k => EntitySelectorNode.canKeyExist(selector, record, k) === 0 /* EntitySelectorNode.Result.Ok */)
|
|
226
|
+
.map(k => CompletionItem.create(k, range, {
|
|
227
|
+
kind: 10 /* CompletionKind.Property */,
|
|
228
|
+
insertText: new InsertTextBuilder()
|
|
252
229
|
.literal(k)
|
|
253
230
|
.if(insertValue, b => b.literal('=').placeholder()) // TODO
|
|
254
231
|
.if(insertComma, b => b.literal(','))
|
|
@@ -257,17 +234,17 @@ const selectorArguments = (node, ctx) => {
|
|
|
257
234
|
},
|
|
258
235
|
value: (_record, pair, ctx) => {
|
|
259
236
|
if (pair.value) {
|
|
260
|
-
return
|
|
237
|
+
return completer.dispatch(pair.value, ctx);
|
|
261
238
|
}
|
|
262
239
|
return [];
|
|
263
240
|
},
|
|
264
241
|
})(node, ctx);
|
|
265
242
|
};
|
|
266
243
|
const intRange = (node, _ctx) => {
|
|
267
|
-
return [
|
|
244
|
+
return [CompletionItem.create('-2147483648..2147483647', node, { kind: 21 /* CompletionKind.Constant */ })];
|
|
268
245
|
};
|
|
269
246
|
const vector = (node, _ctx) => {
|
|
270
|
-
const createCompletion = (coordinate, sortText) =>
|
|
247
|
+
const createCompletion = (coordinate, sortText) => CompletionItem.create(new Array(node.options.dimension).fill(coordinate).join(' '), node, { sortText });
|
|
271
248
|
const ans = [];
|
|
272
249
|
ans.push(createCompletion('~', 'a'));
|
|
273
250
|
if (!node.options.noLocal) {
|
|
@@ -276,7 +253,7 @@ const vector = (node, _ctx) => {
|
|
|
276
253
|
ans.push(createCompletion('0.0', 'c'));
|
|
277
254
|
return ans;
|
|
278
255
|
};
|
|
279
|
-
function register(meta) {
|
|
256
|
+
export function register(meta) {
|
|
280
257
|
meta.registerCompleter('mcfunction:block', block);
|
|
281
258
|
meta.registerCompleter('mcfunction:coordinate', coordinate);
|
|
282
259
|
meta.registerCompleter('mcfunction:entity_selector', selector);
|
|
@@ -288,5 +265,4 @@ function register(meta) {
|
|
|
288
265
|
meta.registerCompleter('mcfunction:score_holder', scoreHolder);
|
|
289
266
|
meta.registerCompleter('mcfunction:vector', vector);
|
|
290
267
|
}
|
|
291
|
-
exports.register = register;
|
|
292
268
|
//# sourceMappingURL=argument.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './argument';
|
|
1
|
+
export * from './argument.js';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,14 +1,2 @@
|
|
|
1
|
-
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
-
};
|
|
12
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
__exportStar(require("./argument"), exports);
|
|
1
|
+
export * from './argument.js';
|
|
14
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type * as core from '@spyglassmc/core';
|
|
2
|
-
import type {
|
|
3
|
-
export * as checker from './checker';
|
|
4
|
-
export * as colorizer from './colorizer';
|
|
5
|
-
export * as completer from './completer';
|
|
6
|
-
export * as parser from './parser';
|
|
7
|
-
export declare const initialize: (ctx: core.ProjectInitializerContext, commands: McmetaCommands,
|
|
2
|
+
import type { McmetaCommands, ReleaseVersion } from '../dependency/index.js';
|
|
3
|
+
export * as checker from './checker/index.js';
|
|
4
|
+
export * as colorizer from './colorizer/index.js';
|
|
5
|
+
export * as completer from './completer/index.js';
|
|
6
|
+
export * as parser from './parser/index.js';
|
|
7
|
+
export declare const initialize: (ctx: core.ProjectInitializerContext, commands: McmetaCommands, releaseVersion: ReleaseVersion) => void;
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/mcfunction/index.js
CHANGED
|
@@ -1,58 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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.initialize = exports.parser = exports.completer = exports.colorizer = exports.checker = void 0;
|
|
23
|
-
const mcf = __importStar(require("@spyglassmc/mcfunction"));
|
|
24
|
-
const checker = __importStar(require("./checker"));
|
|
25
|
-
const colorizer = __importStar(require("./colorizer"));
|
|
26
|
-
const completer = __importStar(require("./completer"));
|
|
27
|
-
const inlayHintProvider_1 = require("./inlayHintProvider");
|
|
28
|
-
const parser = __importStar(require("./parser"));
|
|
29
|
-
const signatureHelpProvider_1 = require("./signatureHelpProvider");
|
|
30
|
-
const tree_1 = require("./tree");
|
|
31
|
-
exports.checker = __importStar(require("./checker"));
|
|
32
|
-
exports.colorizer = __importStar(require("./colorizer"));
|
|
33
|
-
exports.completer = __importStar(require("./completer"));
|
|
34
|
-
exports.parser = __importStar(require("./parser"));
|
|
35
|
-
// DOCS: Update here when a new major version of Minecraft is released.
|
|
36
|
-
const Trees = new Map([
|
|
37
|
-
['1.15', tree_1.Tree1_15],
|
|
38
|
-
['1.16', tree_1.Tree1_16],
|
|
39
|
-
['1.17', tree_1.Tree1_17],
|
|
40
|
-
['1.18', tree_1.Tree1_18],
|
|
41
|
-
['1.19', tree_1.Tree1_19],
|
|
42
|
-
]);
|
|
43
|
-
const LatestTree = (() => {
|
|
44
|
-
const values = [...Trees.values()];
|
|
45
|
-
return values[values.length - 1];
|
|
46
|
-
})();
|
|
1
|
+
import * as mcf from '@spyglassmc/mcfunction';
|
|
2
|
+
import * as checker from './checker/index.js';
|
|
3
|
+
import * as colorizer from './colorizer/index.js';
|
|
4
|
+
import * as completer from './completer/index.js';
|
|
5
|
+
import { inlayHintProvider } from './inlayHintProvider.js';
|
|
6
|
+
import * as parser from './parser/index.js';
|
|
7
|
+
import { signatureHelpProvider } from './signatureHelpProvider.js';
|
|
8
|
+
import { getPatch } from './tree/patch.js';
|
|
9
|
+
export * as checker from './checker/index.js';
|
|
10
|
+
export * as colorizer from './colorizer/index.js';
|
|
11
|
+
export * as completer from './completer/index.js';
|
|
12
|
+
export * as parser from './parser/index.js';
|
|
47
13
|
/* istanbul ignore next */
|
|
48
|
-
const initialize = (ctx, commands,
|
|
14
|
+
export const initialize = (ctx, commands, releaseVersion) => {
|
|
49
15
|
const { meta } = ctx;
|
|
50
16
|
mcf.initialize(ctx);
|
|
51
|
-
mcf.CommandTreeRegistry.instance.register(
|
|
17
|
+
mcf.CommandTreeRegistry.instance.register(releaseVersion, commands, getPatch(releaseVersion));
|
|
52
18
|
meta.registerLanguage('mcfunction', {
|
|
53
19
|
extensions: ['.mcfunction'],
|
|
54
|
-
parser: mcf.entry(
|
|
55
|
-
completer: mcf.completer.entry(
|
|
20
|
+
parser: mcf.entry(releaseVersion, parser.argument),
|
|
21
|
+
completer: mcf.completer.entry(releaseVersion, completer.getMockNodes),
|
|
56
22
|
triggerCharacters: [' ', '[', '=', '!', ',', '{', ':', '/', '.', '"', "'"],
|
|
57
23
|
});
|
|
58
24
|
meta.registerParser('mcfunction:block_predicate', parser.blockPredicate);
|
|
@@ -60,12 +26,11 @@ const initialize = (ctx, commands, majorVersion) => {
|
|
|
60
26
|
meta.registerParser('mcfunction:particle', parser.particle);
|
|
61
27
|
meta.registerParser('mcfunction:tag', parser.tag());
|
|
62
28
|
meta.registerParser('mcfunction:team', parser.team());
|
|
63
|
-
meta.registerParser('mcfunction:command', mcf.command(mcf.CommandTreeRegistry.instance.get(
|
|
29
|
+
meta.registerParser('mcfunction:command', mcf.command(mcf.CommandTreeRegistry.instance.get(releaseVersion), parser.argument));
|
|
64
30
|
checker.register(meta);
|
|
65
31
|
colorizer.register(meta);
|
|
66
32
|
completer.register(meta);
|
|
67
|
-
meta.registerInlayHintProvider(
|
|
68
|
-
meta.registerSignatureHelpProvider(
|
|
33
|
+
meta.registerInlayHintProvider(inlayHintProvider);
|
|
34
|
+
meta.registerSignatureHelpProvider(signatureHelpProvider(releaseVersion));
|
|
69
35
|
};
|
|
70
|
-
exports.initialize = initialize;
|
|
71
36
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,28 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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.inlayHintProvider = void 0;
|
|
23
|
-
const core = __importStar(require("@spyglassmc/core"));
|
|
24
|
-
const mcf = __importStar(require("@spyglassmc/mcfunction"));
|
|
25
|
-
const inlayHintProvider = (node, ctx) => {
|
|
1
|
+
import * as core from '@spyglassmc/core';
|
|
2
|
+
import * as mcf from '@spyglassmc/mcfunction';
|
|
3
|
+
export const inlayHintProvider = (node, ctx) => {
|
|
26
4
|
if (node.children[0]?.type !== 'mcfunction:entry') {
|
|
27
5
|
return [];
|
|
28
6
|
}
|
|
@@ -36,5 +14,4 @@ const inlayHintProvider = (node, ctx) => {
|
|
|
36
14
|
});
|
|
37
15
|
return ans;
|
|
38
16
|
};
|
|
39
|
-
exports.inlayHintProvider = inlayHintProvider;
|
|
40
17
|
//# sourceMappingURL=inlayHintProvider.js.map
|
|
@@ -59,7 +59,7 @@ export declare type EntitySelectorVariable = typeof EntitySelectorVariables[numb
|
|
|
59
59
|
export declare namespace EntitySelectorVariable {
|
|
60
60
|
function is(value: string): value is EntitySelectorVariable;
|
|
61
61
|
}
|
|
62
|
-
export declare const EntitySelectorAtVariables: ("@
|
|
62
|
+
export declare const EntitySelectorAtVariables: ("@p" | "@a" | "@e" | "@r" | "@s")[];
|
|
63
63
|
export declare type EntitySelectorAtVariable = typeof EntitySelectorAtVariables[number];
|
|
64
64
|
export declare namespace EntitySelectorAtVariable {
|
|
65
65
|
function is(value: string): value is EntitySelectorAtVariable;
|
|
@@ -80,7 +80,7 @@ export interface EntitySelectorNode extends core.AstNode {
|
|
|
80
80
|
export declare namespace EntitySelectorNode {
|
|
81
81
|
function is(node: core.AstNode | undefined): node is EntitySelectorNode;
|
|
82
82
|
function mock(range: core.RangeLike): EntitySelectorNode;
|
|
83
|
-
const ArgumentKeys: Set<"
|
|
83
|
+
const ArgumentKeys: Set<"predicate" | "tag" | "team" | "type" | "level" | "advancements" | "nbt" | "name" | "scores" | "limit" | "x" | "y" | "z" | "distance" | "gamemode" | "sort" | "dx" | "dy" | "dz" | "x_rotation" | "y_rotation">;
|
|
84
84
|
type ArgumentKey = typeof ArgumentKeys extends Set<infer T> ? T : undefined;
|
|
85
85
|
const enum Result {
|
|
86
86
|
Ok = 0,
|
|
@@ -133,7 +133,7 @@ export interface ObjectiveCriteriaNode extends core.AstNode {
|
|
|
133
133
|
}
|
|
134
134
|
export declare namespace ObjectiveCriteriaNode {
|
|
135
135
|
const SimpleValues: string[];
|
|
136
|
-
const ComplexCategories: Map<string, "
|
|
136
|
+
const ComplexCategories: Map<string, "block" | "fluid" | "activity" | "attribute" | "block_entity_type" | "block_predicate_type" | "chunk_status" | "custom_stat" | "enchantment" | "entity_type" | "float_provider_type" | "game_event" | "height_provider_type" | "int_provider_type" | "item" | "loot_condition_type" | "loot_function_type" | "loot_nbt_provider_type" | "loot_number_provider_type" | "loot_pool_entry_type" | "loot_score_provider_type" | "memory_module_type" | "menu" | "mob_effect" | "motive" | "particle_type" | "point_of_interest_type" | "pos_rule_test" | "position_source_type" | "potion" | "recipe_serializer" | "recipe_type" | "rule_test" | "schedule" | "sensor_type" | "sound_event" | "stat_type" | "villager_profession" | "villager_type" | "worldgen/biome_source" | "worldgen/block_placer_type" | "worldgen/block_state_provider_type" | "worldgen/carver" | "worldgen/chunk_generator" | "worldgen/decorator" | "worldgen/feature" | "worldgen/feature_size_type" | "worldgen/foliage_placer_type" | "worldgen/material_condition" | "worldgen/material_rule" | "worldgen/placement_modifier_type" | "worldgen/structure_feature" | "worldgen/structure_piece" | "worldgen/structure_pool_element" | "worldgen/structure_processor" | "worldgen/surface_builder" | "worldgen/tree_decorator_type" | "worldgen/trunk_placer_type">;
|
|
137
137
|
const ComplexSep = ":";
|
|
138
138
|
function mock(range: core.RangeLike): ObjectiveCriteriaNode;
|
|
139
139
|
}
|