|
7 | 7 | DataPackTag, |
8 | 8 | type FunctionTagJSON, |
9 | 9 | getDataPackFormat, |
| 10 | + getNextSupportedVersion, |
10 | 11 | parseBlock, |
11 | 12 | parseDataPackPath, |
12 | 13 | parseResourceLocation, |
@@ -402,16 +403,13 @@ async function generateRootEntityPassengers( |
402 | 403 | const passengers: NbtList = new NbtList() |
403 | 404 |
|
404 | 405 | const dataEntity = new NbtCompound() |
405 | | - switch (version) { |
406 | | - case '1.20.4': |
407 | | - case '1.20.5': |
408 | | - case '1.21.2': |
409 | | - case '1.21.4': |
410 | | - dataEntity.set('id', new NbtString('minecraft:marker')) |
411 | | - break |
412 | | - case '1.21.5': |
413 | | - default: |
414 | | - dataEntity.set('id', new NbtString('minecraft:item_display')) |
| 406 | + |
| 407 | + if (!compareVersions('1.21.5', version) /* >= 1.21.5 */) { |
| 408 | + dataEntity.set('id', new NbtString('minecraft:item_display')) |
| 409 | + } else if (!compareVersions('1.20.4', version) /* >= 1.20.4 */) { |
| 410 | + dataEntity.set('id', new NbtString('minecraft:marker')) |
| 411 | + } else { |
| 412 | + throw new Error(`Minecraft version is below minimum supported version 1.20.4!`) |
415 | 413 | } |
416 | 414 |
|
417 | 415 | passengers.add( |
@@ -471,61 +469,46 @@ async function generateRootEntityPassengers( |
471 | 469 | throw new Error(`Model for bone '${node.storage_name}' not found!`) |
472 | 470 | } |
473 | 471 |
|
474 | | - switch (version) { |
475 | | - case '1.20.4': { |
476 | | - item.set( |
477 | | - 'tag', |
478 | | - new NbtCompound().set( |
479 | | - 'CustomModelData', |
480 | | - new NbtInt(variantModel.custom_model_data) |
481 | | - ) |
482 | | - ) |
483 | | - // `Count` does not default to 1. |
484 | | - // However, `count` does default to 1 in later versions, so we only need this for 1.20.4. |
485 | | - item.set('Count', new NbtInt(1)) |
486 | | - break |
487 | | - } |
488 | | - case '1.20.5': { |
489 | | - item.set( |
490 | | - 'components', |
491 | | - new NbtCompound().set( |
| 472 | + if (!compareVersions('1.21.4', version) /* >= 1.21.4 */) { |
| 473 | + item.set( |
| 474 | + 'components', |
| 475 | + new NbtCompound() |
| 476 | + .set('minecraft:item_model', new NbtString(variantModel.item_model)) |
| 477 | + .set( |
492 | 478 | 'minecraft:custom_model_data', |
493 | | - new NbtInt(variantModel.custom_model_data) |
494 | | - ) |
495 | | - ) |
496 | | - break |
497 | | - } |
498 | | - case '1.21.2': { |
499 | | - item.set( |
500 | | - 'components', |
501 | | - new NbtCompound().set( |
502 | | - 'minecraft:item_model', |
503 | | - new NbtString(variantModel.item_model) |
| 479 | + new NbtCompound().set( |
| 480 | + 'strings', |
| 481 | + new NbtList([new NbtString('default')]) |
| 482 | + ) |
504 | 483 | ) |
| 484 | + ) |
| 485 | + } else if (!compareVersions('1.21.2', version) /* >= 1.21.2 */) { |
| 486 | + item.set( |
| 487 | + 'components', |
| 488 | + new NbtCompound().set( |
| 489 | + 'minecraft:item_model', |
| 490 | + new NbtString(variantModel.item_model) |
505 | 491 | ) |
506 | | - break |
507 | | - } |
508 | | - case '1.21.4': |
509 | | - case '1.21.5': { |
510 | | - item.set( |
511 | | - 'components', |
512 | | - new NbtCompound() |
513 | | - .set('minecraft:item_model', new NbtString(variantModel.item_model)) |
514 | | - .set( |
515 | | - 'minecraft:custom_model_data', |
516 | | - new NbtCompound().set( |
517 | | - 'strings', |
518 | | - new NbtList([new NbtString('default')]) |
519 | | - ) |
520 | | - ) |
| 492 | + ) |
| 493 | + } else if (!compareVersions('1.20.5', version) /* >= 1.20.5 */) { |
| 494 | + item.set( |
| 495 | + 'components', |
| 496 | + new NbtCompound().set( |
| 497 | + 'minecraft:custom_model_data', |
| 498 | + new NbtInt(variantModel.custom_model_data) |
521 | 499 | ) |
522 | | - break |
523 | | - } |
524 | | - default: { |
525 | | - throw new Error( |
526 | | - `Unsupported Minecraft version '${version}' for item display!` |
| 500 | + ) |
| 501 | + } else if (!compareVersions('1.20.4', version) /* >= 1.20.4 */) { |
| 502 | + item.set( |
| 503 | + 'tag', |
| 504 | + new NbtCompound().set( |
| 505 | + 'CustomModelData', |
| 506 | + new NbtInt(variantModel.custom_model_data) |
527 | 507 | ) |
528 | | - } |
| 508 | + ) |
| 509 | + // `Count` does not default to 1. |
| 510 | + // However, `count` does default to 1 in later versions, so we only need this for 1.20.4. |
| 511 | + item.set('Count', new NbtInt(1)) |
529 | 512 | } |
530 | 513 |
|
531 | 514 | if (node.configs?.default) { |
@@ -577,24 +560,10 @@ async function generateRootEntityPassengers( |
577 | 560 | .set('item', item) |
578 | 561 | .set('item_display', new NbtString(node.item_display)) |
579 | 562 |
|
580 | | - switch (version) { |
581 | | - case '1.20.4': { |
582 | | - // `Count` does not default to 1. |
583 | | - item.set('Count', new NbtInt(1)) |
584 | | - break |
585 | | - } |
586 | | - case '1.20.5': |
587 | | - case '1.21.2': |
588 | | - case '1.21.4': |
589 | | - case '1.21.5': { |
590 | | - // `count` defaults to 1, so we can omit it. |
591 | | - break |
592 | | - } |
593 | | - default: { |
594 | | - throw new Error( |
595 | | - `Unsupported Minecraft version '${version}' for item display!` |
596 | | - ) |
597 | | - } |
| 563 | + if (compareVersions(version, '1.20.4') /* <= 1.20.4 */) { |
| 564 | + // `Count` does not default to 1 in 1.20.4. |
| 565 | + item.set('Count', new NbtInt(1)) |
| 566 | + break |
598 | 567 | } |
599 | 568 |
|
600 | 569 | if (node.config) { |
@@ -827,7 +796,21 @@ export default async function compileDataPack( |
827 | 796 | const packMetaPath = PathModule.join(options.dataPackFolder, 'pack.mcmeta') |
828 | 797 | const packMeta = PackMeta.fromFile(packMetaPath) |
829 | 798 | packMeta.content.pack ??= {} |
830 | | - packMeta.content.pack.pack_format = getDataPackFormat(targetVersions[0]) |
| 799 | + |
| 800 | + const nextVersion = getNextSupportedVersion(targetVersions[0]) |
| 801 | + const format = getDataPackFormat(targetVersions[0]) |
| 802 | + const nextFormat = nextVersion ? getDataPackFormat(nextVersion) : 10000000 |
| 803 | + if (!compareVersions('1.21.9', targetVersions[0]) /* >= 1.21.9 */) { |
| 804 | + packMeta.content.pack.min_format = format |
| 805 | + packMeta.content.pack.max_format = nextFormat - 1 |
| 806 | + } else { |
| 807 | + packMeta.content.pack.pack_format = format |
| 808 | + packMeta.content.pack.supported_formats = { |
| 809 | + min_inclusive: format, |
| 810 | + max_inclusive: nextFormat - 1, |
| 811 | + } |
| 812 | + } |
| 813 | + |
831 | 814 | packMeta.content.pack.description ??= `Animated Java Data Pack for ${targetVersions.join(', ')}` |
832 | 815 |
|
833 | 816 | // if (targetVersions.length > 1) { |
|
0 commit comments