@spyglassmc/java-edition 0.3.2 → 0.3.4

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 (60) hide show
  1. package/lib/binder/index.d.ts +1 -1
  2. package/lib/binder/index.js +21 -5
  3. package/lib/dependency/common.d.ts +1 -5
  4. package/lib/dependency/common.js +0 -15
  5. package/lib/dependency/index.d.ts +8 -0
  6. package/lib/dependency/index.js +23 -1
  7. package/lib/dependency/mcmeta.d.ts +4 -4
  8. package/lib/dependency/mcmeta.js +50 -17
  9. package/lib/index.js +6 -1
  10. package/lib/json/checker/index.js +2 -1
  11. package/lib/mcfunction/checker/index.js +5 -6
  12. package/lib/mcfunction/common/index.d.ts +4 -0
  13. package/lib/mcfunction/common/index.js +25 -0
  14. package/lib/mcfunction/completer/argument.js +10 -1
  15. package/lib/mcfunction/index.js +13 -1
  16. package/lib/mcfunction/inlayHintProvider.js +2 -1
  17. package/lib/mcfunction/node/argument.d.ts +5 -5
  18. package/lib/mcfunction/parser/argument.js +56 -24
  19. package/lib/mcfunction/signatureHelpProvider.js +3 -1
  20. package/lib/mcfunction/tree/argument.d.ts +19 -1
  21. package/lib/mcfunction/tree/patch.js +39 -1
  22. package/package.json +7 -7
  23. package/lib/json/checker/data/advancement.d.ts +0 -14
  24. package/lib/json/checker/data/advancement.js +0 -458
  25. package/lib/json/checker/data/biome.d.ts +0 -4
  26. package/lib/json/checker/data/biome.js +0 -148
  27. package/lib/json/checker/data/common.d.ts +0 -22
  28. package/lib/json/checker/data/common.js +0 -267
  29. package/lib/json/checker/data/dimension.d.ts +0 -4
  30. package/lib/json/checker/data/dimension.js +0 -224
  31. package/lib/json/checker/data/feature.d.ts +0 -9
  32. package/lib/json/checker/data/feature.js +0 -744
  33. package/lib/json/checker/data/index.d.ts +0 -4
  34. package/lib/json/checker/data/index.js +0 -40
  35. package/lib/json/checker/data/loot_table.d.ts +0 -8
  36. package/lib/json/checker/data/loot_table.js +0 -275
  37. package/lib/json/checker/data/recipe.d.ts +0 -2
  38. package/lib/json/checker/data/recipe.js +0 -50
  39. package/lib/json/checker/data/structure.d.ts +0 -8
  40. package/lib/json/checker/data/structure.js +0 -153
  41. package/lib/json/checker/data/tag.d.ts +0 -7
  42. package/lib/json/checker/data/tag.js +0 -35
  43. package/lib/json/checker/data/text_component.d.ts +0 -2
  44. package/lib/json/checker/data/text_component.js +0 -148
  45. package/lib/json/checker/util/advancement.d.ts +0 -3
  46. package/lib/json/checker/util/advancement.js +0 -16
  47. package/lib/json/checker/util/block_states.d.ts +0 -13
  48. package/lib/json/checker/util/block_states.js +0 -63
  49. package/lib/json/checker/util/color.d.ts +0 -4
  50. package/lib/json/checker/util/color.js +0 -65
  51. package/lib/json/checker/util/index.d.ts +0 -8
  52. package/lib/json/checker/util/index.js +0 -8
  53. package/lib/json/checker/util/nbt.d.ts +0 -16
  54. package/lib/json/checker/util/nbt.js +0 -67
  55. package/lib/json/checker/util/recipe.d.ts +0 -6
  56. package/lib/json/checker/util/recipe.js +0 -13
  57. package/lib/json/checker/util/uuid.d.ts +0 -2
  58. package/lib/json/checker/util/uuid.js +0 -9
  59. package/lib/json/checker/util/version.d.ts +0 -46
  60. package/lib/json/checker/util/version.js +0 -48
@@ -5,7 +5,7 @@ import { localeQuote, localize } from '@spyglassmc/locales';
5
5
  import * as mcf from '@spyglassmc/mcfunction';
6
6
  import * as nbt from '@spyglassmc/nbt';
7
7
  import { ReleaseVersion } from '../../dependency/index.js';
8
- import { ColorArgumentValues, EntityAnchorArgumentValues, ItemSlotArgumentValues, OperationArgumentValues, ScoreboardSlotArgumentValues, SwizzleArgumentValues, } from '../common/index.js';
8
+ import { ColorArgumentValues, EntityAnchorArgumentValues, GamemodeArgumentValues, HeightmapValues, ItemSlotArgumentValues, MirrorValues, OperationArgumentValues, RotationValues, ScoreboardSlotArgumentValues, SwizzleArgumentValues, } from '../common/index.js';
9
9
  import { BlockStatesNode, EntitySelectorArgumentsNode, EntitySelectorAtVariable, EntitySelectorAtVariables, EntitySelectorNode, ObjectiveCriteriaNode, TimeNode, } from '../node/index.js';
10
10
  const IntegerPattern = /^-?\d+$/;
11
11
  /**
@@ -103,8 +103,12 @@ export const argument = (rawTreeNode) => {
103
103
  category: 'function',
104
104
  allowTag: true,
105
105
  }));
106
+ case 'minecraft:gamemode':
107
+ return wrap(core.literal(...GamemodeArgumentValues));
106
108
  case 'minecraft:game_profile':
107
109
  return wrap(entity('multiple', 'players'));
110
+ case 'minecraft:heightmap':
111
+ return wrap(core.literal(...HeightmapValues));
108
112
  case 'minecraft:int_range':
109
113
  return wrap(range('integer'));
110
114
  case 'minecraft:item_enchantment':
@@ -143,6 +147,7 @@ export const argument = (rawTreeNode) => {
143
147
  case 'minecraft:particle':
144
148
  return wrap(particle);
145
149
  case 'minecraft:resource':
150
+ case 'minecraft:resource_key':
146
151
  case 'minecraft:resource_or_tag':
147
152
  return wrap(core.resourceLocation({
148
153
  category: core.ResourceLocation.shorten(treeNode.properties.registry),
@@ -167,6 +172,10 @@ export const argument = (rawTreeNode) => {
167
172
  return wrap(team(core.SymbolUsageType.is(treeNode.properties?.usageType)
168
173
  ? treeNode.properties?.usageType
169
174
  : undefined));
175
+ case 'minecraft:template_mirror':
176
+ return wrap(core.literal(...MirrorValues));
177
+ case 'minecraft:template_rotation':
178
+ return wrap(core.literal(...RotationValues));
170
179
  case 'minecraft:time':
171
180
  return wrap(time);
172
181
  case 'minecraft:uuid':
@@ -217,7 +226,7 @@ function block(isPredicate) {
217
226
  }
218
227
  const blockState = block(false);
219
228
  export const blockPredicate = block(true);
220
- export const component = json.parser.json();
229
+ export const component = json.parser.entry;
221
230
  function double(min = DoubleMin, max = DoubleMax) {
222
231
  return core.float({
223
232
  pattern: FloatPattern,
@@ -400,7 +409,9 @@ function range(type, min, max, cycleable) {
400
409
  : res.children.filter(core.IntegerNode.is);
401
410
  const sepNode = res.children.find(core.LiteralNode.is);
402
411
  const ans = {
403
- type: type === 'float' ? 'mcfunction:float_range' : 'mcfunction:int_range',
412
+ type: type === 'float'
413
+ ? 'mcfunction:float_range'
414
+ : 'mcfunction:int_range',
404
415
  range: res.range,
405
416
  children: res.children,
406
417
  value: sepNode
@@ -452,7 +463,10 @@ function selector() {
452
463
  typeLimited = playersOnly;
453
464
  function invertable(parser) {
454
465
  return core.map(core.sequence([
455
- core.optional(core.failOnEmpty(core.literal({ pool: ['!'], colorTokenType: 'keyword' }))),
466
+ core.optional(core.failOnEmpty(core.literal({
467
+ pool: ['!'],
468
+ colorTokenType: 'keyword',
469
+ }))),
456
470
  (src) => {
457
471
  src.skipSpace();
458
472
  return undefined;
@@ -476,7 +490,9 @@ function selector() {
476
490
  ...core.BrigadierStringOptions,
477
491
  value: {
478
492
  parser: core.literal({
479
- pool: [...EntitySelectorNode.ArgumentKeys],
493
+ pool: [
494
+ ...EntitySelectorNode.ArgumentKeys,
495
+ ],
480
496
  colorTokenType: 'property',
481
497
  }),
482
498
  type: 'literal',
@@ -505,7 +521,8 @@ function selector() {
505
521
  pair: {
506
522
  key: unquotedString,
507
523
  sep: '=',
508
- value: core.boolean,
524
+ value: core
525
+ .boolean,
509
526
  end: ',',
510
527
  trailingEnd: true,
511
528
  },
@@ -540,8 +557,8 @@ function selector() {
540
557
  return core.map(range('float', 0), (res, _, ctx) => {
541
558
  dimensionLimited = true;
542
559
  // x, y, z, dx, dy, dz take precedence over distance, so we use ??= instead of = to ensure it won't override the result.
543
- chunkLimited ??=
544
- !playersOnly && res.value[1] !== undefined;
560
+ chunkLimited ??= !playersOnly &&
561
+ res.value[1] !== undefined;
545
562
  if (hasKey(key.value)) {
546
563
  ctx.err.report(localize('duplicate-key', localeQuote(key.value)), key);
547
564
  }
@@ -549,10 +566,11 @@ function selector() {
549
566
  });
550
567
  case 'gamemode':
551
568
  return core.map(invertable(core.string({
552
- unquotable: core.BrigadierUnquotableOption,
569
+ unquotable: core
570
+ .BrigadierUnquotableOption,
553
571
  value: {
554
572
  type: 'literal',
555
- parser: core.literal('adventure', 'creative', 'spectator', 'survival'),
573
+ parser: core.literal(...GamemodeArgumentValues),
556
574
  },
557
575
  })), (res, _, ctx) => {
558
576
  playersOnly = true;
@@ -594,7 +612,9 @@ function selector() {
594
612
  case 'nbt':
595
613
  return invertable(nbt.parser.compound);
596
614
  case 'predicate':
597
- return invertable(core.resourceLocation({ category: 'predicate' }));
615
+ return invertable(core.resourceLocation({
616
+ category: 'predicate',
617
+ }));
598
618
  case 'scores':
599
619
  return core.map(core.record({
600
620
  start: '{',
@@ -625,7 +645,8 @@ function selector() {
625
645
  });
626
646
  case 'sort':
627
647
  return core.map(core.string({
628
- unquotable: core.BrigadierUnquotableOption,
648
+ unquotable: core
649
+ .BrigadierUnquotableOption,
629
650
  value: {
630
651
  type: 'literal',
631
652
  parser: core.literal('arbitrary', 'furthest', 'nearest', 'random'),
@@ -640,7 +661,14 @@ function selector() {
640
661
  return res;
641
662
  });
642
663
  case 'tag':
643
- return invertable(tag(['[', '=', ',', ']', '{', '}']));
664
+ return invertable(tag([
665
+ '[',
666
+ '=',
667
+ ',',
668
+ ']',
669
+ '{',
670
+ '}',
671
+ ]));
644
672
  case 'team':
645
673
  return core.map(invertable(team('reference', [
646
674
  '[',
@@ -670,9 +698,11 @@ function selector() {
670
698
  ctx.err.report(localize('mcfunction.parser.entity-selector.arguments.not-applicable', localeQuote(key.value)), key);
671
699
  }
672
700
  }
673
- else if (!res.inverted && !res.value.isTag) {
701
+ else if (!res.inverted &&
702
+ !res.value.isTag) {
674
703
  typeLimited = true;
675
- if (core.ResourceLocationNode.toString(res.value, 'short') === 'player') {
704
+ if (core.ResourceLocationNode
705
+ .toString(res.value, 'short') === 'player') {
676
706
  playersOnly = true;
677
707
  }
678
708
  }
@@ -757,15 +787,15 @@ function selector() {
757
787
  // Might not make into the actual release.
758
788
  function getEntitySelectorHover(node) {
759
789
  const grades = new Map([
760
- [0, '🤢'],
761
- [1, '😅'],
762
- [2, 'Good'],
763
- [3, 'Great'],
790
+ [0, '🤢'], // Bad
791
+ [1, '😅'], // Normal
792
+ [2, 'Good'], // Good
793
+ [3, 'Great'], // Great
764
794
  [4, '😌👌'], // Excellent
765
795
  ]);
766
796
  let ans;
767
797
  if (node.currentEntity) {
768
- ans = `**Performance**: ${grades.get(4)}
798
+ ans = `**Performance**: ${grades.get(4)}
769
799
  - \`currentEntity\`: \`${node.currentEntity}\``;
770
800
  }
771
801
  else {
@@ -775,7 +805,7 @@ function getEntitySelectorHover(node) {
775
805
  node.playersOnly,
776
806
  node.typeLimited,
777
807
  ].filter((v) => v).length;
778
- ans = `**Performance**: ${grades.get(amountOfTrue)}
808
+ ans = `**Performance**: ${grades.get(amountOfTrue)}
779
809
  - \`chunkLimited\`: \`${!!node.chunkLimited}\`
780
810
  - \`dimensionLimited\`: \`${!!node.dimensionLimited}\`
781
811
  - \`playersOnly\`: \`${!!node.playersOnly}\`
@@ -785,7 +815,7 @@ function getEntitySelectorHover(node) {
785
815
  ans += `
786
816
 
787
817
  ------
788
- **Predicates**:
818
+ **Predicates**:
789
819
  ${node.predicates.map((p) => `- \`${p}\``).join('\n')}`;
790
820
  }
791
821
  return ans;
@@ -824,7 +854,8 @@ function symbol(options, terminators = []) {
824
854
  function objective(usageType, terminators = []) {
825
855
  return validateLength(unquotableSymbol({ category: 'objective', usageType }, terminators), ObjectiveMaxLength, 'mcfunction.parser.objective.too-long');
826
856
  }
827
- const objectiveCriteria = core.map(core.any([
857
+ const objectiveCriteria = core
858
+ .map(core.any([
828
859
  core.sequence([
829
860
  core.stopBefore(core.resourceLocation({
830
861
  category: 'stat_type',
@@ -834,7 +865,8 @@ const objectiveCriteria = core.map(core.any([
834
865
  {
835
866
  get: (res) => {
836
867
  if (core.ResourceLocationNode.is(res.children[0])) {
837
- const category = ObjectiveCriteriaNode.ComplexCategories.get(core.ResourceLocationNode.toString(res.children[0], 'short'));
868
+ const category = ObjectiveCriteriaNode.ComplexCategories
869
+ .get(core.ResourceLocationNode.toString(res.children[0], 'short'));
838
870
  if (category) {
839
871
  return core.resourceLocation({
840
872
  category,
@@ -37,7 +37,9 @@ export function signatureHelpProvider(commandTreeName) {
37
37
  };
38
38
  ans.signatures = options.map((v) => {
39
39
  const part1 = v[selectedIndex];
40
- const part2 = selectedIndex + 1 < v.length ? ` ${v[selectedIndex + 1]}` : '';
40
+ const part2 = selectedIndex + 1 < v.length
41
+ ? ` ${v[selectedIndex + 1]}`
42
+ : '';
41
43
  const label = `${part1}${part2}`;
42
44
  return {
43
45
  label,
@@ -80,9 +80,15 @@ export interface MinecraftFloatRangeArgumentTreeNode extends mcf.ArgumentTreeNod
80
80
  export interface MinecraftFunctionArgumentTreeNode extends mcf.ArgumentTreeNode {
81
81
  parser: 'minecraft:function';
82
82
  }
83
+ export interface MinecraftGamemodeArgumentTreeNode extends mcf.ArgumentTreeNode {
84
+ parser: 'minecraft:gamemode';
85
+ }
83
86
  export interface MinecraftGameProfileArgumentTreeNode extends mcf.ArgumentTreeNode {
84
87
  parser: 'minecraft:game_profile';
85
88
  }
89
+ export interface MinecraftHeightmapArgumentTreeNode extends mcf.ArgumentTreeNode {
90
+ parser: 'minecraft:heightmap';
91
+ }
86
92
  export interface MinecraftIntRangeArgumentTreeNode extends mcf.ArgumentTreeNode {
87
93
  parser: 'minecraft:int_range';
88
94
  }
@@ -131,6 +137,12 @@ export interface MinecraftResourceArgumentTreeNode extends mcf.ArgumentTreeNode
131
137
  registry: string;
132
138
  };
133
139
  }
140
+ export interface MinecraftResourceKeyArgumentTreeNode extends mcf.ArgumentTreeNode {
141
+ parser: 'minecraft:resource_key';
142
+ properties: {
143
+ registry: string;
144
+ };
145
+ }
134
146
  export interface MinecraftResourceLocationArgumentTreeNode extends mcf.ArgumentTreeNode {
135
147
  parser: 'minecraft:resource_location';
136
148
  properties?: core.ResourceLocationOptions;
@@ -159,6 +171,12 @@ export interface MinecraftSwizzleArgumentTreeNode extends mcf.ArgumentTreeNode {
159
171
  export interface MinecraftTeamArgumentTreeNode extends mcf.ArgumentTreeNode {
160
172
  parser: 'minecraft:team';
161
173
  }
174
+ export interface MinecraftTemplateMirrorArgumentTreeNode extends mcf.ArgumentTreeNode {
175
+ parser: 'minecraft:template_mirror';
176
+ }
177
+ export interface MinecraftTemplateRotationArgumentTreeNode extends mcf.ArgumentTreeNode {
178
+ parser: 'minecraft:template_rotation';
179
+ }
162
180
  export interface MinecraftTimeArgumentTreeNode extends mcf.ArgumentTreeNode {
163
181
  parser: 'minecraft:time';
164
182
  }
@@ -175,5 +193,5 @@ export interface MinecraftVec3ArgumentTreeNode extends mcf.ArgumentTreeNode {
175
193
  export interface SpyglassmcTagArgumentTreeNode extends mcf.ArgumentTreeNode {
176
194
  parser: 'spyglassmc:tag';
177
195
  }
178
- export declare type ArgumentTreeNode = BrigadierBoolArgumentTreeNode | BrigadierDoubleArgumentTreeNode | BrigadierFloatArgumentTreeNode | BrigadierIntegerArgumentTreeNode | BrigadierLongArgumentTreeNode | BrigadierStringArgumentTreeNode | MinecraftAngleArgumentTreeNode | MinecraftBlockPosArgumentTreeNode | MinecraftBlockPredicateArgumentTreeNode | MinecraftBlockStateArgumentTreeNode | MinecraftColorArgumentTreeNode | MinecraftColumnPosArgumentTreeNode | MinecraftComponentArgumentTreeNode | MinecraftDimensionArgumentTreeNode | MinecraftEntityArgumentTreeNode | MinecraftEntityAnchorArgumentTreeNode | MinecraftEntitySummonArgumentTreeNode | MinecraftFloatRangeArgumentTreeNode | MinecraftFunctionArgumentTreeNode | MinecraftGameProfileArgumentTreeNode | MinecraftIntRangeArgumentTreeNode | MinecraftItemEnchantmentArgumentTreeNode | MinecraftItemPredicateArgumentTreeNode | MinecraftItemSlotArgumentTreeNode | MinecraftItemStackArgumentTreeNode | MinecraftMessageArgumentTreeNode | MinecraftMobEffectArgumentTreeNode | MinecraftNbtCompoundTagArgumentTreeNode | MinecraftNbtPathArgumentTreeNode | MinecraftNbtTagArgumentTreeNode | MinecraftObjectiveArgumentTreeNode | MinecraftObjectiveCriteriaArgumentTreeNode | MinecraftOperationArgumentTreeNode | MinecraftParticleArgumentTreeNode | MinecraftResourceArgumentTreeNode | MinecraftResourceLocationArgumentTreeNode | MinecraftResourceOrTagArgumentTreeNode | MinecraftRotationArgumentTreeNode | MinecraftScoreHolderArgumentTreeNode | MinecraftScoreboardSlotArgumentTreeNode | MinecraftSwizzleArgumentTreeNode | MinecraftTeamArgumentTreeNode | MinecraftTimeArgumentTreeNode | MinecraftUuidArgumentTreeNode | MinecraftVec2ArgumentTreeNode | MinecraftVec3ArgumentTreeNode | SpyglassmcTagArgumentTreeNode;
196
+ export type ArgumentTreeNode = BrigadierBoolArgumentTreeNode | BrigadierDoubleArgumentTreeNode | BrigadierFloatArgumentTreeNode | BrigadierIntegerArgumentTreeNode | BrigadierLongArgumentTreeNode | BrigadierStringArgumentTreeNode | MinecraftAngleArgumentTreeNode | MinecraftBlockPosArgumentTreeNode | MinecraftBlockPredicateArgumentTreeNode | MinecraftBlockStateArgumentTreeNode | MinecraftColorArgumentTreeNode | MinecraftColumnPosArgumentTreeNode | MinecraftComponentArgumentTreeNode | MinecraftDimensionArgumentTreeNode | MinecraftEntityArgumentTreeNode | MinecraftEntityAnchorArgumentTreeNode | MinecraftEntitySummonArgumentTreeNode | MinecraftFloatRangeArgumentTreeNode | MinecraftFunctionArgumentTreeNode | MinecraftGamemodeArgumentTreeNode | MinecraftGameProfileArgumentTreeNode | MinecraftHeightmapArgumentTreeNode | MinecraftIntRangeArgumentTreeNode | MinecraftItemEnchantmentArgumentTreeNode | MinecraftItemPredicateArgumentTreeNode | MinecraftItemSlotArgumentTreeNode | MinecraftItemStackArgumentTreeNode | MinecraftMessageArgumentTreeNode | MinecraftMobEffectArgumentTreeNode | MinecraftNbtCompoundTagArgumentTreeNode | MinecraftNbtPathArgumentTreeNode | MinecraftNbtTagArgumentTreeNode | MinecraftObjectiveArgumentTreeNode | MinecraftObjectiveCriteriaArgumentTreeNode | MinecraftOperationArgumentTreeNode | MinecraftParticleArgumentTreeNode | MinecraftResourceArgumentTreeNode | MinecraftResourceKeyArgumentTreeNode | MinecraftResourceLocationArgumentTreeNode | MinecraftResourceOrTagArgumentTreeNode | MinecraftRotationArgumentTreeNode | MinecraftScoreHolderArgumentTreeNode | MinecraftScoreboardSlotArgumentTreeNode | MinecraftSwizzleArgumentTreeNode | MinecraftTeamArgumentTreeNode | MinecraftTemplateMirrorArgumentTreeNode | MinecraftTemplateRotationArgumentTreeNode | MinecraftTimeArgumentTreeNode | MinecraftUuidArgumentTreeNode | MinecraftVec2ArgumentTreeNode | MinecraftVec3ArgumentTreeNode | SpyglassmcTagArgumentTreeNode;
179
197
  //# sourceMappingURL=argument.d.ts.map
@@ -327,6 +327,13 @@ export function getPatch(release) {
327
327
  help: {
328
328
  permission: 0,
329
329
  },
330
+ ...(ReleaseVersion.cmp(release, '1.18') >= 0
331
+ ? {
332
+ jfr: {
333
+ permission: 4,
334
+ },
335
+ }
336
+ : {}),
330
337
  kick: {
331
338
  permission: 3,
332
339
  },
@@ -412,6 +419,30 @@ export function getPatch(release) {
412
419
  'pardon-ip': {
413
420
  permission: 3,
414
421
  },
422
+ ...(ReleaseVersion.cmp(release, '1.17') >= 0
423
+ ? {
424
+ perf: {
425
+ permission: 4,
426
+ },
427
+ }
428
+ : {}),
429
+ ...(ReleaseVersion.cmp(release, '1.19') >= 0
430
+ ? {
431
+ place: {
432
+ children: {
433
+ template: {
434
+ children: {
435
+ template: {
436
+ properties: {
437
+ category: 'structure'
438
+ }
439
+ }
440
+ }
441
+ }
442
+ }
443
+ },
444
+ }
445
+ : {}),
415
446
  playsound: Sound,
416
447
  publish: {
417
448
  permission: 4,
@@ -528,7 +559,7 @@ export function getPatch(release) {
528
559
  * 2. `teleport <location: vec3>`
529
560
  * 3. `teleport <targets: entity(multiple)> <...arguments>`
530
561
  *
531
- * It is impossible for Spyglass to differentiate between (1) and (3) when it encouters a single entity
562
+ * It is impossible for Spyglass to differentiate between (1) and (3) when it encounters a single entity
532
563
  * at the position of the first argument, due to its lack of ability to backtrack.
533
564
  *
534
565
  * Therefore, we have compromised to patch the trees to something like this:
@@ -553,6 +584,13 @@ export function getPatch(release) {
553
584
  tell: {
554
585
  permission: 0,
555
586
  },
587
+ ...(ReleaseVersion.cmp(release, '1.20.2') >= 0
588
+ ? {
589
+ tick: {
590
+ permission: 3,
591
+ },
592
+ }
593
+ : {}),
556
594
  tm: {
557
595
  permission: 0,
558
596
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spyglassmc/java-edition",
3
- "version": "0.3.2",
3
+ "version": "0.3.4",
4
4
  "type": "module",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -17,12 +17,12 @@
17
17
  "release:dry": "npm publish --dry-run"
18
18
  },
19
19
  "dependencies": {
20
- "@spyglassmc/core": "0.4.1",
21
- "@spyglassmc/json": "0.3.2",
22
- "@spyglassmc/locales": "0.3.1",
23
- "@spyglassmc/mcfunction": "0.2.3",
24
- "@spyglassmc/mcdoc": "0.3.2",
25
- "@spyglassmc/nbt": "0.3.2"
20
+ "@spyglassmc/core": "0.4.3",
21
+ "@spyglassmc/json": "0.3.4",
22
+ "@spyglassmc/locales": "0.3.3",
23
+ "@spyglassmc/mcfunction": "0.2.5",
24
+ "@spyglassmc/mcdoc": "0.3.4",
25
+ "@spyglassmc/nbt": "0.3.4"
26
26
  },
27
27
  "devDependencies": {
28
28
  "fast-glob": "^3.2.5",
@@ -1,14 +0,0 @@
1
- export declare const item_predicate: import("@spyglassmc/json/lib/checker/JsonChecker.js").JsonChecker;
2
- export declare const block_predicate: import("@spyglassmc/json/lib/checker/JsonChecker.js").JsonChecker;
3
- export declare const fluid_predicate: import("@spyglassmc/json/lib/checker/JsonChecker.js").JsonChecker;
4
- export declare const location_predicate: import("@spyglassmc/json/lib/checker/JsonChecker.js").JsonChecker;
5
- export declare const distance_predicate: import("@spyglassmc/json/lib/checker/JsonChecker.js").JsonChecker;
6
- export declare const mob_effect_predicate: import("@spyglassmc/json/lib/checker/JsonChecker.js").JsonChecker;
7
- export declare const statistic_predicate: import("@spyglassmc/json/lib/checker/JsonChecker.js").JsonChecker;
8
- export declare const player_predicate: import("@spyglassmc/json/lib/checker/JsonChecker.js").JsonChecker;
9
- export declare const entity_predicate: import("@spyglassmc/json/lib/checker/JsonChecker.js").JsonChecker;
10
- export declare const damage_source_predicate: import("@spyglassmc/json/lib/checker/JsonChecker.js").JsonChecker;
11
- export declare const damage_predicate: import("@spyglassmc/json/lib/checker/JsonChecker.js").JsonChecker;
12
- export declare const criterion: import("@spyglassmc/json/lib/checker/JsonChecker.js").JsonChecker;
13
- export declare const advancement: import("@spyglassmc/json/lib/checker/JsonChecker.js").JsonChecker;
14
- //# sourceMappingURL=advancement.d.ts.map