minecraft-data 3.99.1 → 3.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/data.js +42 -20
  2. package/doc/history.md +4 -0
  3. package/minecraft-data/.github/copilot-instructions.md +33 -3
  4. package/minecraft-data/.github/helper-bot/handleMcpcGeneratedArtifacts.js +1 -1
  5. package/minecraft-data/.github/helper-bot/index.js +61 -45
  6. package/minecraft-data/.github/helper-bot/utils.js +1 -1
  7. package/minecraft-data/.github/workflows/update-helper.yml +6 -0
  8. package/minecraft-data/README.md +1 -1
  9. package/minecraft-data/data/bedrock/1.16.201/proto.yml +1 -1
  10. package/minecraft-data/data/bedrock/1.16.210/proto.yml +1 -1
  11. package/minecraft-data/data/bedrock/1.16.220/proto.yml +1 -1
  12. package/minecraft-data/data/bedrock/1.17.0/proto.yml +1 -1
  13. package/minecraft-data/data/bedrock/1.17.10/proto.yml +1 -1
  14. package/minecraft-data/data/bedrock/1.17.30/proto.yml +1 -1
  15. package/minecraft-data/data/bedrock/1.17.40/proto.yml +1 -1
  16. package/minecraft-data/data/bedrock/1.18.0/proto.yml +1 -1
  17. package/minecraft-data/data/bedrock/1.18.11/proto.yml +1 -1
  18. package/minecraft-data/data/bedrock/1.18.30/proto.yml +1 -1
  19. package/minecraft-data/data/bedrock/1.19.1/proto.yml +1 -1
  20. package/minecraft-data/data/bedrock/1.19.10/proto.yml +1 -1
  21. package/minecraft-data/data/bedrock/1.19.20/proto.yml +1 -1
  22. package/minecraft-data/data/bedrock/1.19.21/proto.yml +1 -1
  23. package/minecraft-data/data/bedrock/1.19.30/proto.yml +1 -1
  24. package/minecraft-data/data/bedrock/1.19.40/proto.yml +1 -1
  25. package/minecraft-data/data/bedrock/1.19.50/proto.yml +1 -1
  26. package/minecraft-data/data/bedrock/1.19.60/proto.yml +1 -1
  27. package/minecraft-data/data/bedrock/1.19.62/proto.yml +1 -1
  28. package/minecraft-data/data/bedrock/1.19.70/proto.yml +1 -1
  29. package/minecraft-data/data/bedrock/1.19.80/proto.yml +1 -1
  30. package/minecraft-data/data/bedrock/1.20.0/proto.yml +1 -1
  31. package/minecraft-data/data/bedrock/1.20.10/proto.yml +1 -1
  32. package/minecraft-data/data/bedrock/1.20.30/proto.yml +1 -1
  33. package/minecraft-data/data/bedrock/1.20.40/proto.yml +1 -1
  34. package/minecraft-data/data/bedrock/1.20.50/proto.yml +1 -1
  35. package/minecraft-data/data/bedrock/1.20.61/proto.yml +1 -1
  36. package/minecraft-data/data/bedrock/1.20.71/proto.yml +1 -1
  37. package/minecraft-data/data/bedrock/1.20.80/proto.yml +1 -1
  38. package/minecraft-data/data/bedrock/1.21.0/proto.yml +1 -1
  39. package/minecraft-data/data/bedrock/1.21.100/blockCollisionShapes.json +1596 -0
  40. package/minecraft-data/data/bedrock/1.21.100/blockStates.json +299786 -0
  41. package/minecraft-data/data/bedrock/1.21.100/blocks.json +22893 -0
  42. package/minecraft-data/data/bedrock/1.21.100/blocksB2J.json +9913 -0
  43. package/minecraft-data/data/bedrock/1.21.100/blocksJ2B.json +27916 -0
  44. package/minecraft-data/data/bedrock/1.21.100/items.json +12077 -0
  45. package/minecraft-data/data/bedrock/1.21.100/proto.yml +1 -1
  46. package/minecraft-data/data/bedrock/1.21.111/proto.yml +38 -31
  47. package/minecraft-data/data/bedrock/1.21.111/types.yml +160 -154
  48. package/minecraft-data/data/bedrock/1.21.120/protocol.json +14571 -0
  49. package/minecraft-data/data/bedrock/1.21.120/version.json +6 -0
  50. package/minecraft-data/data/bedrock/1.21.2/proto.yml +1 -1
  51. package/minecraft-data/data/bedrock/1.21.20/proto.yml +1 -1
  52. package/minecraft-data/data/bedrock/1.21.30/proto.yml +1 -1
  53. package/minecraft-data/data/bedrock/1.21.42/proto.yml +1 -1
  54. package/minecraft-data/data/bedrock/1.21.50/proto.yml +1 -1
  55. package/minecraft-data/data/bedrock/1.21.60/proto.yml +1 -1
  56. package/minecraft-data/data/bedrock/1.21.70/proto.yml +1 -1
  57. package/minecraft-data/data/bedrock/1.21.80/proto.yml +1 -1
  58. package/minecraft-data/data/bedrock/1.21.90/proto.yml +1 -1
  59. package/minecraft-data/data/bedrock/1.21.93/proto.yml +1 -1
  60. package/minecraft-data/data/bedrock/common/protocolVersions.json +6 -0
  61. package/minecraft-data/data/bedrock/common/versions.json +2 -1
  62. package/minecraft-data/data/bedrock/latest/proto.yml +21 -7
  63. package/minecraft-data/data/bedrock/latest/types.yml +52 -1
  64. package/minecraft-data/data/dataPaths.json +42 -20
  65. package/minecraft-data/data/pc/1.20.5/proto.yml +4 -1
  66. package/minecraft-data/data/pc/1.20.5/protocol.json +10 -4
  67. package/minecraft-data/data/pc/1.21.1/proto.yml +8 -1
  68. package/minecraft-data/data/pc/1.21.1/protocol.json +13 -3
  69. package/minecraft-data/data/pc/1.21.3/proto.yml +2 -1
  70. package/minecraft-data/data/pc/1.21.3/protocol.json +6 -2
  71. package/minecraft-data/data/pc/1.21.4/proto.yml +2 -1
  72. package/minecraft-data/data/pc/1.21.4/protocol.json +6 -2
  73. package/minecraft-data/data/pc/1.21.5/proto.yml +2 -1
  74. package/minecraft-data/data/pc/1.21.5/protocol.json +5 -1
  75. package/minecraft-data/data/pc/1.21.6/proto.yml +1 -1
  76. package/minecraft-data/data/pc/1.21.6/protocol.json +4 -1
  77. package/minecraft-data/data/pc/1.21.8/protocol.json +5 -2
  78. package/minecraft-data/data/pc/1.8/proto.yml +7 -11
  79. package/minecraft-data/data/pc/1.8/protocol.json +22 -40
  80. package/minecraft-data/data/pc/common/protocolVersions.json +48 -0
  81. package/minecraft-data/data/pc/latest/proto.yml +2 -2
  82. package/minecraft-data/doc/history.md +10 -0
  83. package/minecraft-data/tools/js/package.json +3 -4
  84. package/minecraft-data/tools/js/test/audit_version_regression.js +95 -0
  85. package/package.json +1 -1
package/data.js CHANGED
@@ -1476,7 +1476,7 @@ module.exports =
1476
1476
  get mapIcons () { return require("./minecraft-data/data/pc/1.20.2/mapIcons.json") },
1477
1477
  get commands () { return require("./minecraft-data/data/pc/1.20.3/commands.json") },
1478
1478
  get sounds () { return require("./minecraft-data/data/pc/1.21.1/sounds.json") },
1479
- proto: __dirname + '/minecraft-data/data/pc/1.21.3/proto.yml'
1479
+ proto: __dirname + '/minecraft-data/data/pc/1.21.1/proto.yml'
1480
1480
  },
1481
1481
  '1.21.1': {
1482
1482
  get attributes () { return require("./minecraft-data/data/pc/1.21.1/attributes.json") },
@@ -2442,11 +2442,11 @@ module.exports =
2442
2442
  get language () { return require("./minecraft-data/data/bedrock/1.20.10/language.json") }
2443
2443
  },
2444
2444
  '1.21.50': {
2445
- get blocks () { return require("./minecraft-data/data/bedrock/1.21.0/blocks.json") },
2445
+ get blocks () { return require("./minecraft-data/data/bedrock/1.21.42/blocks.json") },
2446
2446
  get blockStates () { return require("./minecraft-data/data/bedrock/1.21.50/blockStates.json") },
2447
- get blockCollisionShapes () { return require("./minecraft-data/data/bedrock/1.21.0/blockCollisionShapes.json") },
2447
+ get blockCollisionShapes () { return require("./minecraft-data/data/bedrock/1.21.42/blockCollisionShapes.json") },
2448
2448
  get biomes () { return require("./minecraft-data/data/bedrock/1.20.0/biomes.json") },
2449
- get entities () { return require("./minecraft-data/data/bedrock/1.21.0/entities.json") },
2449
+ get entities () { return require("./minecraft-data/data/bedrock/1.21.42/entities.json") },
2450
2450
  get items () { return require("./minecraft-data/data/bedrock/1.21.0/items.json") },
2451
2451
  get recipes () { return require("./minecraft-data/data/bedrock/1.19.10/recipes.json") },
2452
2452
  get instruments () { return require("./minecraft-data/data/bedrock/1.17.0/instruments.json") },
@@ -2456,8 +2456,8 @@ module.exports =
2456
2456
  get protocol () { return require("./minecraft-data/data/bedrock/1.21.50/protocol.json") },
2457
2457
  get windows () { return require("./minecraft-data/data/bedrock/1.16.201/windows.json") },
2458
2458
  get steve () { return require("./minecraft-data/data/bedrock/1.21.50/steve.json") },
2459
- get blocksB2J () { return require("./minecraft-data/data/bedrock/1.21.0/blocksB2J.json") },
2460
- get blocksJ2B () { return require("./minecraft-data/data/bedrock/1.21.0/blocksJ2B.json") },
2459
+ get blocksB2J () { return require("./minecraft-data/data/bedrock/1.21.42/blocksB2J.json") },
2460
+ get blocksJ2B () { return require("./minecraft-data/data/bedrock/1.21.42/blocksJ2B.json") },
2461
2461
  proto: __dirname + '/minecraft-data/data/bedrock/1.21.50/proto.yml',
2462
2462
  types: __dirname + '/minecraft-data/data/bedrock/1.21.50/types.yml',
2463
2463
  get version () { return require("./minecraft-data/data/bedrock/1.21.50/version.json") },
@@ -2574,12 +2574,12 @@ module.exports =
2574
2574
  get language () { return require("./minecraft-data/data/bedrock/1.21.70/language.json") }
2575
2575
  },
2576
2576
  '1.21.100': {
2577
- get blocks () { return require("./minecraft-data/data/bedrock/1.21.90/blocks.json") },
2578
- get blockStates () { return require("./minecraft-data/data/bedrock/1.21.80/blockStates.json") },
2579
- get blockCollisionShapes () { return require("./minecraft-data/data/bedrock/1.21.90/blockCollisionShapes.json") },
2577
+ get blocks () { return require("./minecraft-data/data/bedrock/1.21.100/blocks.json") },
2578
+ get blockStates () { return require("./minecraft-data/data/bedrock/1.21.100/blockStates.json") },
2579
+ get blockCollisionShapes () { return require("./minecraft-data/data/bedrock/1.21.100/blockCollisionShapes.json") },
2580
2580
  get biomes () { return require("./minecraft-data/data/bedrock/1.21.60/biomes.json") },
2581
2581
  get entities () { return require("./minecraft-data/data/bedrock/1.21.80/entities.json") },
2582
- get items () { return require("./minecraft-data/data/bedrock/1.21.90/items.json") },
2582
+ get items () { return require("./minecraft-data/data/bedrock/1.21.100/items.json") },
2583
2583
  get recipes () { return require("./minecraft-data/data/bedrock/1.19.10/recipes.json") },
2584
2584
  get instruments () { return require("./minecraft-data/data/bedrock/1.17.0/instruments.json") },
2585
2585
  get materials () { return require("./minecraft-data/data/pc/1.17/materials.json") },
@@ -2588,20 +2588,20 @@ module.exports =
2588
2588
  get protocol () { return require("./minecraft-data/data/bedrock/1.21.100/protocol.json") },
2589
2589
  get windows () { return require("./minecraft-data/data/bedrock/1.16.201/windows.json") },
2590
2590
  get steve () { return require("./minecraft-data/data/bedrock/1.21.70/steve.json") },
2591
- get blocksB2J () { return require("./minecraft-data/data/bedrock/1.21.80/blocksB2J.json") },
2592
- get blocksJ2B () { return require("./minecraft-data/data/bedrock/1.21.80/blocksJ2B.json") },
2591
+ get blocksB2J () { return require("./minecraft-data/data/bedrock/1.21.100/blocksB2J.json") },
2592
+ get blocksJ2B () { return require("./minecraft-data/data/bedrock/1.21.100/blocksJ2B.json") },
2593
2593
  proto: __dirname + '/minecraft-data/data/bedrock/1.21.100/proto.yml',
2594
- types: __dirname + '/minecraft-data/data/bedrock/latest/types.yml',
2594
+ types: __dirname + '/minecraft-data/data/bedrock/1.21.100/types.yml',
2595
2595
  get version () { return require("./minecraft-data/data/bedrock/1.21.100/version.json") },
2596
2596
  get language () { return require("./minecraft-data/data/bedrock/1.21.70/language.json") }
2597
2597
  },
2598
2598
  '1.21.111': {
2599
- get blocks () { return require("./minecraft-data/data/bedrock/1.21.90/blocks.json") },
2600
- get blockStates () { return require("./minecraft-data/data/bedrock/1.21.80/blockStates.json") },
2601
- get blockCollisionShapes () { return require("./minecraft-data/data/bedrock/1.21.90/blockCollisionShapes.json") },
2599
+ get blocks () { return require("./minecraft-data/data/bedrock/1.21.100/blocks.json") },
2600
+ get blockStates () { return require("./minecraft-data/data/bedrock/1.21.100/blockStates.json") },
2601
+ get blockCollisionShapes () { return require("./minecraft-data/data/bedrock/1.21.100/blockCollisionShapes.json") },
2602
2602
  get biomes () { return require("./minecraft-data/data/bedrock/1.21.60/biomes.json") },
2603
2603
  get entities () { return require("./minecraft-data/data/bedrock/1.21.80/entities.json") },
2604
- get items () { return require("./minecraft-data/data/bedrock/1.21.90/items.json") },
2604
+ get items () { return require("./minecraft-data/data/bedrock/1.21.100/items.json") },
2605
2605
  get recipes () { return require("./minecraft-data/data/bedrock/1.19.10/recipes.json") },
2606
2606
  get instruments () { return require("./minecraft-data/data/bedrock/1.17.0/instruments.json") },
2607
2607
  get materials () { return require("./minecraft-data/data/pc/1.17/materials.json") },
@@ -2610,12 +2610,34 @@ module.exports =
2610
2610
  get protocol () { return require("./minecraft-data/data/bedrock/1.21.111/protocol.json") },
2611
2611
  get windows () { return require("./minecraft-data/data/bedrock/1.16.201/windows.json") },
2612
2612
  get steve () { return require("./minecraft-data/data/bedrock/1.21.70/steve.json") },
2613
- get blocksB2J () { return require("./minecraft-data/data/bedrock/1.21.80/blocksB2J.json") },
2614
- get blocksJ2B () { return require("./minecraft-data/data/bedrock/1.21.80/blocksJ2B.json") },
2615
- proto: __dirname + '/minecraft-data/data/bedrock/latest/proto.yml',
2613
+ get blocksB2J () { return require("./minecraft-data/data/bedrock/1.21.100/blocksB2J.json") },
2614
+ get blocksJ2B () { return require("./minecraft-data/data/bedrock/1.21.100/blocksJ2B.json") },
2615
+ proto: __dirname + '/minecraft-data/data/bedrock/1.21.111/proto.yml',
2616
2616
  types: __dirname + '/minecraft-data/data/bedrock/latest/types.yml',
2617
2617
  get version () { return require("./minecraft-data/data/bedrock/1.21.111/version.json") },
2618
2618
  get language () { return require("./minecraft-data/data/bedrock/1.21.70/language.json") }
2619
+ },
2620
+ '1.21.120': {
2621
+ get blocks () { return require("./minecraft-data/data/bedrock/1.21.100/blocks.json") },
2622
+ get blockStates () { return require("./minecraft-data/data/bedrock/1.21.100/blockStates.json") },
2623
+ get blockCollisionShapes () { return require("./minecraft-data/data/bedrock/1.21.100/blockCollisionShapes.json") },
2624
+ get biomes () { return require("./minecraft-data/data/bedrock/1.21.60/biomes.json") },
2625
+ get entities () { return require("./minecraft-data/data/bedrock/1.21.80/entities.json") },
2626
+ get items () { return require("./minecraft-data/data/bedrock/1.21.100/items.json") },
2627
+ get recipes () { return require("./minecraft-data/data/bedrock/1.19.10/recipes.json") },
2628
+ get instruments () { return require("./minecraft-data/data/bedrock/1.17.0/instruments.json") },
2629
+ get materials () { return require("./minecraft-data/data/pc/1.17/materials.json") },
2630
+ get enchantments () { return require("./minecraft-data/data/bedrock/1.19.1/enchantments.json") },
2631
+ get effects () { return require("./minecraft-data/data/pc/1.17/effects.json") },
2632
+ get protocol () { return require("./minecraft-data/data/bedrock/1.21.120/protocol.json") },
2633
+ get windows () { return require("./minecraft-data/data/bedrock/1.16.201/windows.json") },
2634
+ get steve () { return require("./minecraft-data/data/bedrock/1.21.70/steve.json") },
2635
+ get blocksB2J () { return require("./minecraft-data/data/bedrock/1.21.100/blocksB2J.json") },
2636
+ get blocksJ2B () { return require("./minecraft-data/data/bedrock/1.21.100/blocksJ2B.json") },
2637
+ proto: __dirname + '/minecraft-data/data/bedrock/latest/proto.yml',
2638
+ types: __dirname + '/minecraft-data/data/bedrock/latest/types.yml',
2639
+ get version () { return require("./minecraft-data/data/bedrock/1.21.120/version.json") },
2640
+ get language () { return require("./minecraft-data/data/bedrock/1.21.70/language.json") }
2619
2641
  }
2620
2642
  }
2621
2643
  }
package/doc/history.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # History
2
2
 
3
+ ## 3.100.0
4
+
5
+ * update `minecraft-data`
6
+
3
7
  ## 3.99.1
4
8
 
5
9
  * update `minecraft-data`
@@ -31,6 +31,15 @@ This will ensure all data matches schema among other checks.
31
31
 
32
32
  There are no 'releases' in this repo beyond updating the data itself. Instead, we have a workflow that will automatically create tagged releases if the user runs the /makerelease slash command, so you can inform the user about that if a release is needed.
33
33
 
34
+ ## Testing
35
+ Always run tests after data changes to ensure local tests are passing:
36
+
37
+ ```sh
38
+ cd tools/js
39
+ npm install
40
+ npm test -- --bail 2>&1 | tail -100
41
+ ```
42
+
34
43
  ## Data
35
44
 
36
45
  Most data is generated with data generators. For mcpc, data is generated with [minecraft-data-generator](https://github.com/PrismarineJS/minecraft-data-generator).
@@ -57,7 +66,28 @@ Not all data is generated. Some data (like protocol schemas) is manually curated
57
66
 
58
67
  ### Protocol data
59
68
 
60
- We use a special yaml-like DSL to generate protocol.json files. Refer to doc/protocol.md for info.
61
- These files are stored inside proto.yml files in the latest/ folder (like bedrock/latest/proto.yml) for the latest version, otherwise in the versioned folder (like pc/1.20/proto.yml).
69
+ We use a special YAML-like DSL to generate protocol.json files. Refer to doc/protocol.md for info.
70
+ These files are stored inside proto.yml (and an imported types.yml support file on bedrock) files in the latest/ folder (like bedrock/latest/proto.yml) for the latest version, otherwise in the versioned folder (like pc/1.20/proto.yml).
71
+
72
+ 👉 Run `npm run build` in tools/js to regenerate protocol.json files after making changes to the protocol yaml files.
73
+
74
+ ❌ Don't make changes to protocol.json files directly. Instead, update the relevant proto.yml file in latest/ and regenerate protocol.json by running `npm run build` in tools/js.
75
+
76
+ If you need to edit many files at once, consider writing a simple Node.js script to replace. E.g., from `cd tools/js && npm i && node __replace_something.js`):
77
+ ```js
78
+ const cp = require('child_process')
79
+ const fs = require('fs')
80
+ const glob = require('glob')
81
+ const pcVersionsOrdered = require('../../data/pc/common/versions.json')
82
+ const after1_20_5 = pcVersionsOrdered.slice(pcVersionsOrdered.indexOf('1.20.5')) // everything after 1.20.5...
83
+ for (const version of pcVersionsOrdered) {
84
+ // globSync, fs.readFileSync...fs.writeFileSync ; avoid async
85
+ }
86
+ ```
87
+
88
+ When updating, apply minimum required changes when possible.
62
89
 
63
- Notably, run `npm run build` in tools/js to regenerate protocol.json files after making changes to the protocol yaml files. So, don't make changes to protocol.json files directly. Instead, update the relevant proto.yml file in latest/ and regenerate protocol.json by running `npm run build` in tools/js.
90
+ 1. Do not rename fields or packets unless their value has changed, even if they may have 'officially' changed. If their values *have* significantly changed (varint -> i32 maybe insignificant from primitive standpoint, string to number is), it maybe a good idea to rename the field or packet.
91
+ 2. Do not rename existing enums or other data, even if they were renamed in the game. You may add or remove data as is needed as this does not unnecessarily affect existing code relying on old names.
92
+ 3. Always read the information in doc/protocol.md to understand our YAML format.
93
+ 4. Try to inline types as much as possible--this includes mappers and switch statements. Don't create extra types unless they are actually re-used in multiple places, or very large to warrant seperation.
@@ -110,4 +110,4 @@ main(
110
110
  process.env.TRIGGER_PR_NO,
111
111
  process.env.TRIGGER_ARTIFACT_URL,
112
112
  process.env.CREATE_PR_IF_NONE
113
- )
113
+ )
@@ -97,50 +97,7 @@ async function updateManifestPC () {
97
97
  }
98
98
 
99
99
  if (!latestVersionIsSnapshot && !issueStatus.isOpen && !issueStatus.isClosed) {
100
- console.log('Opening issue', versionJson)
101
- const issuePayload = buildFirstIssue(title, latestVersionData, versionJson)
102
-
103
- const issue = await github.createIssue(issuePayload)
104
-
105
- fs.writeFileSync('./issue.md', issuePayload.body)
106
- console.log('Created issue', issue)
107
-
108
- // Now create an initial PR with the new version data
109
- const pr = await createInitialPR('pc', issue.url, {
110
- minecraftVersion: versionJson.id,
111
- version: latestVersion,
112
- protocolVersion: versionJson.protocol_version
113
- })
114
- console.log('Created PR', pr)
115
- // Ask minecraft-data-generator to handle new update
116
- const dispatchPayload = {
117
- owner: 'PrismarineJS',
118
- repo: 'minecraft-data-generator',
119
- workflow: 'handle-mcdata-update.yml',
120
- branch: 'main',
121
- inputs: {
122
- version: latestVersion,
123
- issue_number: issue?.number,
124
- pr_number: pr?.number
125
- }
126
- }
127
- console.log('Sending workflow dispatch', dispatchPayload)
128
- await github.sendWorkflowDispatch(dispatchPayload)
129
- // Ask node-minecraft-protocol to handle new update
130
- const nodeDispatchPayload = {
131
- owner: 'PrismarineJS',
132
- repo: 'node-minecraft-protocol',
133
- workflow: 'update-from-minecraft-data.yml',
134
- branch: 'master',
135
- inputs: {
136
- new_mc_version: latestVersion,
137
- mcdata_branch: pr.branchName,
138
- mcdata_pr_url: pr.url
139
- }
140
- }
141
- console.log('Sending workflow dispatch', nodeDispatchPayload)
142
- await github.sendWorkflowDispatch(nodeDispatchPayload)
143
- // node-minecraft-protocol would then dispatch to mineflayer
100
+ await openIssueAndDispatch(title, versionJson, latestVersionData, latestVersion)
144
101
  }
145
102
 
146
103
  async function addEntryFor (releaseVersion, releaseData) {
@@ -195,4 +152,63 @@ async function updateManifestPC () {
195
152
  }
196
153
  }
197
154
 
198
- updateManifestPC()
155
+ async function openIssueAndDispatch (title, versionJson, latestVersionData, latestVersion) {
156
+ console.log('Opening issue', versionJson)
157
+ const issuePayload = buildFirstIssue(title, latestVersionData, versionJson)
158
+
159
+ const issue = await github.createIssue(issuePayload)
160
+ console.log('Created issue', issue)
161
+
162
+ // Now create an initial PR with the new version data
163
+ const pr = await createInitialPR('pc', issue.url, {
164
+ minecraftVersion: versionJson.id,
165
+ version: latestVersion,
166
+ protocolVersion: versionJson.protocol_version
167
+ })
168
+ console.log('Created PR', pr)
169
+ // Ask minecraft-data-generator to handle new update
170
+ const dispatchPayload = {
171
+ owner: 'PrismarineJS',
172
+ repo: 'minecraft-data-generator',
173
+ workflow: 'handle-mcdata-update.yml',
174
+ branch: 'main',
175
+ inputs: {
176
+ version: latestVersion,
177
+ issue_number: String(issue?.number),
178
+ pr_number: String(pr?.number)
179
+ }
180
+ }
181
+ console.log('Sending workflow dispatch', dispatchPayload)
182
+ await github.sendWorkflowDispatch(dispatchPayload)
183
+ // Ask node-minecraft-protocol to handle new update
184
+ const nodeDispatchPayload = {
185
+ owner: 'PrismarineJS',
186
+ repo: 'node-minecraft-protocol',
187
+ workflow: 'update-from-minecraft-data.yml',
188
+ branch: 'master',
189
+ inputs: {
190
+ new_mc_version: latestVersion,
191
+ mcdata_branch: pr.branchName,
192
+ mcdata_pr_url: pr.url
193
+ }
194
+ }
195
+ console.log('Sending workflow dispatch', nodeDispatchPayload)
196
+ await github.sendWorkflowDispatch(nodeDispatchPayload)
197
+ // node-minecraft-protocol would then dispatch to mineflayer
198
+
199
+ return { issue, pr }
200
+ }
201
+
202
+ if (process.env.FORCE_CREATE_PR) {
203
+ const payload = JSON.parse(process.env.FORCE_CREATE_PR)
204
+ openIssueAndDispatch(payload.title, payload.versionJson, payload.latestVersionData, payload.latestVersion).then(() => {
205
+ console.log('Done with manual PR')
206
+ }).catch(err => {
207
+ console.error('Failed to do manual PR', err)
208
+ process.exit(1)
209
+ })
210
+ } else {
211
+ updateManifestPC()
212
+ }
213
+
214
+ module.exports = { openIssueAndDispatch, updateManifestPC }
@@ -18,7 +18,7 @@ async function createInitialPR (edition, issueUrl, { version, protocolVersion })
18
18
  if (protocolVersion) exec(pm, ['run', 'version', edition, version, protocolVersion], { cwd: toolsJs })
19
19
  exec(pm, ['run', 'build'], { cwd: toolsJs })
20
20
  const branchNameVersion = sanitizeBranch(version)
21
- const branchName = `${edition}-${branchNameVersion}`
21
+ const branchName = `${edition}_${branchNameVersion}`
22
22
  const title = `🎈 Add Minecraft ${edition} ${version} data`
23
23
  // First, delete any existing branch
24
24
  try {
@@ -1,6 +1,11 @@
1
1
  name: Update Helper
2
2
  on:
3
3
  workflow_dispatch:
4
+ inputs:
5
+ createPr:
6
+ description: 'If provided, force create an update PR. JSON encoded payload {title, versionJson, latestVersionData, latestVersion}'
7
+ required: false
8
+ default: ''
4
9
  schedule:
5
10
  - cron: "0 */2 * * *"
6
11
 
@@ -24,3 +29,4 @@ jobs:
24
29
  working-directory: .github/helper-bot
25
30
  env:
26
31
  GITHUB_TOKEN: ${{ secrets.PAT_PASSWORD }}
32
+ FORCE_CREATE_PR: ${{ github.event.inputs.createPr }}
@@ -11,7 +11,7 @@ Supports
11
11
  * Minecraft PC version 0.30c (classic), 1.7.10, 1.8.8, 1.9 (15w40b, 1.9, 1.9.1-pre2, 1.9.2, 1.9.4),
12
12
  1.10 (16w20a, 1.10-pre1, 1.10, 1.10.1, 1.10.2), 1.11 (16w35a, 1.11, 1.11.2), 1.12 (17w15a, 17w18b, 1.12-pre4, 1.12, 1.12.1, 1.12.2), 1.13 (17w50a, 1.13, 1.13.1, 1.13.2-pre1, 1.13.2-pre2, 1.13.2), 1.14 (1.14, 1.14.1, 1.14.3, 1.14.4), 1.15 (1.15, 1.15.1, 1.15.2), 1.16 (20w13b, 20w14a, 1.16-rc1, 1.16, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5), 1.17, 1.17.1, 1.18 (1.18, 1.18.1, 1.18.2), 1.19 (1.19, 1.19.2, 1.19.3, 1.19.4), 1.20 (1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6), 1.21 (1.21, 1.21.1, 1.21.3), 1.21.8
13
13
  <!--NEXT PC-->
14
- * Minecraft bedrock version 0.14, 0.15, 1.0, 1.16.201, 1.16.210, 1.16.220, 1.17.0, 1.17.10, 1.17.30, 1.17.40, 1.18.0, 1.18.11, 1.18.30, 1.19.1, 1.19.10, 1.19.20, 1.19.21, 1.19.30, 1.19.40, 1.19.50, 1.19.60, 1.19.62, 1.19.63, 1.19.70, 1.19.80, 1.20.0, 1.20.10, 1.20.30, 1.20.40, 1.20.50, 1.20.61, 1.20.71, 1.20.80, 1.21.0, 1.21.2, 1.21.20, 1.21.30, 1.21.42, 1.21.50, 1.21.60, 1.21.70, 1.21.80, 1.21.90, 1.21.93, 1.21.100, 1.21.111
14
+ * Minecraft bedrock version 0.14, 0.15, 1.0, 1.16.201, 1.16.210, 1.16.220, 1.17.0, 1.17.10, 1.17.30, 1.17.40, 1.18.0, 1.18.11, 1.18.30, 1.19.1, 1.19.10, 1.19.20, 1.19.21, 1.19.30, 1.19.40, 1.19.50, 1.19.60, 1.19.62, 1.19.63, 1.19.70, 1.19.80, 1.20.0, 1.20.10, 1.20.30, 1.20.40, 1.20.50, 1.20.61, 1.20.71, 1.20.80, 1.21.0, 1.21.2, 1.21.20, 1.21.30, 1.21.42, 1.21.50, 1.21.60, 1.21.70, 1.21.80, 1.21.90, 1.21.93, 1.21.100, 1.21.111, 1.21.120
15
15
  <!--NEXT BEDROCK-->
16
16
 
17
17
  ## Wrappers
@@ -1315,7 +1315,7 @@ packet_available_commands:
1315
1315
  # If the values_len < 0xff => byte
1316
1316
  # If the values_len < 0xffff => short
1317
1317
  # If the values_len < 0xffffff => int
1318
- _enum_type: '["enum_size_based_on_values_len"]'
1318
+ _enum_type: ["enum_size_based_on_values_len"]
1319
1319
  # Here all the enum values for all of the possible commands are stored to one array palette
1320
1320
  enum_values: string[]$values_len
1321
1321
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1354,7 +1354,7 @@ packet_available_commands:
1354
1354
  # If the values_len < 0xff => byte
1355
1355
  # If the values_len < 0xffff => short
1356
1356
  # If the values_len < 0xffffff => int
1357
- _enum_type: '["enum_size_based_on_values_len"]'
1357
+ _enum_type: ["enum_size_based_on_values_len"]
1358
1358
  # Here all the enum values for all of the possible commands are stored to one array palette
1359
1359
  enum_values: string[]$values_len
1360
1360
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1487,7 +1487,7 @@ packet_available_commands:
1487
1487
  # If the values_len < 0xff => byte,
1488
1488
  # If the values_len < 0xffff => short,
1489
1489
  # If the values_len < 0xffffff => int
1490
- _enum_type: '["enum_size_based_on_values_len"]'
1490
+ _enum_type: ["enum_size_based_on_values_len"]
1491
1491
  # Here all the enum values for all of the possible commands are stored to one array palette
1492
1492
  enum_values: string[]$values_len
1493
1493
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1489,7 +1489,7 @@ packet_available_commands:
1489
1489
  # If the values_len < 0xff => byte,
1490
1490
  # If the values_len < 0xffff => short,
1491
1491
  # If the values_len < 0xffffff => int
1492
- _enum_type: '["enum_size_based_on_values_len"]'
1492
+ _enum_type: ["enum_size_based_on_values_len"]
1493
1493
  # Here all the enum values for all of the possible commands are stored to one array palette
1494
1494
  enum_values: string[]$values_len
1495
1495
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1572,7 +1572,7 @@ packet_available_commands:
1572
1572
  # If the values_len < 0xff => byte,
1573
1573
  # If the values_len < 0xffff => short,
1574
1574
  # If the values_len < 0xffffff => int
1575
- _enum_type: '["enum_size_based_on_values_len"]'
1575
+ _enum_type: ["enum_size_based_on_values_len"]
1576
1576
  # Here all the enum values for all of the possible commands are stored to one array palette
1577
1577
  enum_values: string[]$values_len
1578
1578
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1584,7 +1584,7 @@ packet_available_commands:
1584
1584
  # If the values_len < 0xff => byte,
1585
1585
  # If the values_len < 0xffff => short,
1586
1586
  # If the values_len < 0xffffff => int
1587
- _enum_type: '["enum_size_based_on_values_len"]'
1587
+ _enum_type: ["enum_size_based_on_values_len"]
1588
1588
  # Here all the enum values for all of the possible commands are stored to one array palette
1589
1589
  enum_values: string[]$values_len
1590
1590
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1574,7 +1574,7 @@ packet_available_commands:
1574
1574
  # If the values_len < 0xff => byte,
1575
1575
  # If the values_len < 0xffff => short,
1576
1576
  # If the values_len < 0xffffff => int
1577
- _enum_type: '["enum_size_based_on_values_len"]'
1577
+ _enum_type: ["enum_size_based_on_values_len"]
1578
1578
  # Here all the enum values for all of the possible commands are stored to one array palette
1579
1579
  enum_values: string[]$values_len
1580
1580
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1590,7 +1590,7 @@ packet_available_commands:
1590
1590
  # If the values_len < 0xff => byte,
1591
1591
  # If the values_len < 0xffff => short,
1592
1592
  # If the values_len < 0xffffff => int
1593
- _enum_type: '["enum_size_based_on_values_len"]'
1593
+ _enum_type: ["enum_size_based_on_values_len"]
1594
1594
  # Here all the enum values for all of the possible commands are stored to one array palette
1595
1595
  enum_values: string[]$values_len
1596
1596
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1597,7 +1597,7 @@ packet_available_commands:
1597
1597
  # If the values_len < 0xff => byte,
1598
1598
  # If the values_len < 0xffff => short,
1599
1599
  # If the values_len < 0xffffff => int
1600
- _enum_type: '["enum_size_based_on_values_len"]'
1600
+ _enum_type: ["enum_size_based_on_values_len"]
1601
1601
  # Here all the enum values for all of the possible commands are stored to one array palette
1602
1602
  enum_values: string[]$values_len
1603
1603
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1605,7 +1605,7 @@ packet_available_commands:
1605
1605
  # If the values_len < 0xff => byte,
1606
1606
  # If the values_len < 0xffff => short,
1607
1607
  # If the values_len < 0xffffff => int
1608
- _enum_type: '["enum_size_based_on_values_len"]'
1608
+ _enum_type: ["enum_size_based_on_values_len"]
1609
1609
  # Here all the enum values for all of the possible commands are stored to one array palette
1610
1610
  enum_values: string[]$values_len
1611
1611
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1615,7 +1615,7 @@ packet_available_commands:
1615
1615
  # If the values_len < 0xff => byte,
1616
1616
  # If the values_len < 0xffff => short,
1617
1617
  # If the values_len < 0xffffff => int
1618
- _enum_type: '["enum_size_based_on_values_len"]'
1618
+ _enum_type: ["enum_size_based_on_values_len"]
1619
1619
  # Here all the enum values for all of the possible commands are stored to one array palette
1620
1620
  enum_values: string[]$values_len
1621
1621
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1666,7 +1666,7 @@ packet_available_commands:
1666
1666
  # If the values_len < 0xff => byte,
1667
1667
  # If the values_len < 0xffff => short,
1668
1668
  # If the values_len < 0xffffff => int
1669
- _enum_type: '["enum_size_based_on_values_len"]'
1669
+ _enum_type: ["enum_size_based_on_values_len"]
1670
1670
  # Here all the enum values for all of the possible commands are stored to one array palette
1671
1671
  enum_values: string[]$values_len
1672
1672
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1687,7 +1687,7 @@ packet_available_commands:
1687
1687
  # If the values_len < 0xff => byte,
1688
1688
  # If the values_len < 0xffff => short,
1689
1689
  # If the values_len < 0xffffff => int
1690
- _enum_type: '["enum_size_based_on_values_len"]'
1690
+ _enum_type: ["enum_size_based_on_values_len"]
1691
1691
  # Here all the enum values for all of the possible commands are stored to one array palette
1692
1692
  enum_values: string[]$values_len
1693
1693
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1687,7 +1687,7 @@ packet_available_commands:
1687
1687
  # If the values_len < 0xff => byte,
1688
1688
  # If the values_len < 0xffff => short,
1689
1689
  # If the values_len < 0xffffff => int
1690
- _enum_type: '["enum_size_based_on_values_len"]'
1690
+ _enum_type: ["enum_size_based_on_values_len"]
1691
1691
  # Here all the enum values for all of the possible commands are stored to one array palette
1692
1692
  enum_values: string[]$values_len
1693
1693
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1688,7 +1688,7 @@ packet_available_commands:
1688
1688
  # If the values_len < 0xff => byte,
1689
1689
  # If the values_len < 0xffff => short,
1690
1690
  # If the values_len < 0xffffff => int
1691
- _enum_type: '["enum_size_based_on_values_len"]'
1691
+ _enum_type: ["enum_size_based_on_values_len"]
1692
1692
  # Here all the enum values for all of the possible commands are stored to one array palette
1693
1693
  enum_values: string[]$values_len
1694
1694
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1698,7 +1698,7 @@ packet_available_commands:
1698
1698
  # If the values_len < 0xff => byte,
1699
1699
  # If the values_len < 0xffff => short,
1700
1700
  # If the values_len < 0xffffff => int
1701
- _enum_type: '["enum_size_based_on_values_len"]'
1701
+ _enum_type: ["enum_size_based_on_values_len"]
1702
1702
  # Here all the enum values for all of the possible commands are stored to one array palette
1703
1703
  enum_values: string[]$values_len
1704
1704
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1698,7 +1698,7 @@ packet_available_commands:
1698
1698
  # If the values_len < 0xff => byte,
1699
1699
  # If the values_len < 0xffff => short,
1700
1700
  # If the values_len < 0xffffff => int
1701
- _enum_type: '["enum_size_based_on_values_len"]'
1701
+ _enum_type: ["enum_size_based_on_values_len"]
1702
1702
  # Here all the enum values for all of the possible commands are stored to one array palette
1703
1703
  enum_values: string[]$values_len
1704
1704
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1700,7 +1700,7 @@ packet_available_commands:
1700
1700
  # If the values_len < 0xff => byte,
1701
1701
  # If the values_len < 0xffff => short,
1702
1702
  # If the values_len < 0xffffff => int
1703
- _enum_type: '["enum_size_based_on_values_len"]'
1703
+ _enum_type: ["enum_size_based_on_values_len"]
1704
1704
  # Here all the enum values for all of the possible commands are stored to one array palette
1705
1705
  enum_values: string[]$values_len
1706
1706
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1700,7 +1700,7 @@ packet_available_commands:
1700
1700
  # If the values_len < 0xff => byte,
1701
1701
  # If the values_len < 0xffff => short,
1702
1702
  # If the values_len < 0xffffff => int
1703
- _enum_type: '["enum_size_based_on_values_len"]'
1703
+ _enum_type: ["enum_size_based_on_values_len"]
1704
1704
  # Here all the enum values for all of the possible commands are stored to one array palette
1705
1705
  enum_values: string[]$values_len
1706
1706
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1700,7 +1700,7 @@ packet_available_commands:
1700
1700
  # If the values_len < 0xff => byte,
1701
1701
  # If the values_len < 0xffff => short,
1702
1702
  # If the values_len < 0xffffff => int
1703
- _enum_type: '["enum_size_based_on_values_len"]'
1703
+ _enum_type: ["enum_size_based_on_values_len"]
1704
1704
  # Here all the enum values for all of the possible commands are stored to one array palette
1705
1705
  enum_values: string[]$values_len
1706
1706
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1712,7 +1712,7 @@ packet_available_commands:
1712
1712
  # If the values_len < 0xff => byte,
1713
1713
  # If the values_len < 0xffff => short,
1714
1714
  # If the values_len < 0xffffff => int
1715
- _enum_type: '["enum_size_based_on_values_len"]'
1715
+ _enum_type: ["enum_size_based_on_values_len"]
1716
1716
  # Here all the enum values for all of the possible commands are stored to one array palette
1717
1717
  enum_values: string[]$values_len
1718
1718
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1717,7 +1717,7 @@ packet_available_commands:
1717
1717
  # If the values_len < 0xff => byte,
1718
1718
  # If the values_len < 0xffff => short,
1719
1719
  # If the values_len < 0xffffff => int
1720
- _enum_type: '["enum_size_based_on_values_len"]'
1720
+ _enum_type: ["enum_size_based_on_values_len"]
1721
1721
  # Here all the enum values for all of the possible commands are stored to one array palette
1722
1722
  enum_values: string[]$values_len
1723
1723
  # Integer parameters may sometimes have a prefix, such as the XP command:
@@ -1717,7 +1717,7 @@ packet_available_commands:
1717
1717
  # If the values_len < 0xff => byte,
1718
1718
  # If the values_len < 0xffff => short,
1719
1719
  # If the values_len < 0xffffff => int
1720
- _enum_type: '["enum_size_based_on_values_len"]'
1720
+ _enum_type: ["enum_size_based_on_values_len"]
1721
1721
  # Here all the enum values for all of the possible commands are stored to one array palette
1722
1722
  enum_values: string[]$values_len
1723
1723
  # chained_subcommand_values is a slice of all chained subcommand names. chained_subcommand_values generally should
@@ -1725,7 +1725,7 @@ packet_available_commands:
1725
1725
  # If the values_len < 0xff => byte,
1726
1726
  # If the values_len < 0xffff => short,
1727
1727
  # If the values_len < 0xffffff => int
1728
- _enum_type: '["enum_size_based_on_values_len"]'
1728
+ _enum_type: ["enum_size_based_on_values_len"]
1729
1729
  # Here all the enum values for all of the possible commands are stored to one array palette
1730
1730
  enum_values: string[]$values_len
1731
1731
  # chained_subcommand_values is a slice of all chained subcommand names. chained_subcommand_values generally should
@@ -1728,7 +1728,7 @@ packet_available_commands:
1728
1728
  # If the values_len < 0xff => byte,
1729
1729
  # If the values_len < 0xffff => short,
1730
1730
  # If the values_len < 0xffffff => int
1731
- _enum_type: '["enum_size_based_on_values_len"]'
1731
+ _enum_type: ["enum_size_based_on_values_len"]
1732
1732
  # Here all the enum values for all of the possible commands are stored to one array palette
1733
1733
  enum_values: string[]$values_len
1734
1734
  # chained_subcommand_values is a slice of all chained subcommand names. chained_subcommand_values generally should
@@ -1730,7 +1730,7 @@ packet_available_commands:
1730
1730
  # If the values_len < 0xff => byte,
1731
1731
  # If the values_len < 0xffff => short,
1732
1732
  # If the values_len < 0xffffff => int
1733
- _enum_type: '["enum_size_based_on_values_len"]'
1733
+ _enum_type: ["enum_size_based_on_values_len"]
1734
1734
  # Here all the enum values for all of the possible commands are stored to one array palette
1735
1735
  enum_values: string[]$values_len
1736
1736
  # chained_subcommand_values is a slice of all chained subcommand names. chained_subcommand_values generally should