From 8a12875734b0d6f3e6f24a6c9fa9ac5255a304f1 Mon Sep 17 00:00:00 2001 From: koka Date: Sun, 30 Aug 2026 02:16:30 +0200 Subject: [PATCH 1/2] test(ambiance): verify white disc playback cadence --- ambiance/build.gradle | 4 +- .../client/audio/LavaplayerAudioStream.java | 27 +++++++++++- .../client/audio/WhiteDiscPlaybackSmoke.java | 44 +++++++++++++------ 3 files changed, 59 insertions(+), 16 deletions(-) diff --git a/ambiance/build.gradle b/ambiance/build.gradle index c6ef258..3e38b43 100644 --- a/ambiance/build.gradle +++ b/ambiance/build.gradle @@ -361,7 +361,9 @@ tasks.register("verifyAmbiance") { || !whiteDiscAudioPlayer.contains('handle.execute(channel -> channel.stop())') || whiteDiscAudioPlayer.contains('.release()') || !whiteDiscPlaybackSmoke.contains('https://www.youtube.com/watch?v=Ue5ZBe-GzSM') - || !whiteDiscPlaybackSmoke.contains('Decoded audible PCM data') + || !whiteDiscPlaybackSmoke.contains('PCM cadence: 100%% speed') + || !whiteDiscPlaybackSmoke.contains('stream.decodedTimelineMillis() != 4_000L') + || !whiteDiscPlaybackSmoke.contains('stream.paddedSilenceBytes() != 0L') || !javaText.contains('SoundSource.RECORDS') || !javaText.contains('channel.linearAttenuation(ATTENUATION_DISTANCE)') || !javaText.contains('LONG_HOSTS = Set.of(') diff --git a/ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStream.java b/ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStream.java index 33e6865..95d8f0e 100644 --- a/ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStream.java +++ b/ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStream.java @@ -19,6 +19,11 @@ final class LavaplayerAudioStream implements AudioStream { private final AudioPlayer player; private byte[] pending = new byte[0]; private int pendingOffset; + private long decodedBytes; + private long paddedSilenceBytes; + private long firstFrameTimecode = -1L; + private long lastFrameTimecode = -1L; + private int decodedFrames; private boolean initialWaitAttempted; private volatile boolean closed; private volatile boolean ended; @@ -41,18 +46,25 @@ final class LavaplayerAudioStream implements AudioStream { int length = Math.min(output.remaining(), pending.length - pendingOffset); output.put(pending, pendingOffset, length); pendingOffset += length; + decodedBytes += length; continue; } AudioFrame frame = nextFrame(); if (frame == null) { if (ended) break; - while (output.hasRemaining()) output.put((byte) 0); + while (output.hasRemaining()) { + output.put((byte) 0); + paddedSilenceBytes++; + } break; } if (frame.isTerminator()) { ended = true; break; } + if (firstFrameTimecode < 0L) firstFrameTimecode = frame.getTimecode(); + lastFrameTimecode = frame.getTimecode(); + decodedFrames++; pending = frame.getData(); pendingOffset = 0; } @@ -86,6 +98,19 @@ final class LavaplayerAudioStream implements AudioStream { return player == expectedPlayer; } + long decodedBytes() { + return decodedBytes; + } + + long paddedSilenceBytes() { + return paddedSilenceBytes; + } + + long decodedTimelineMillis() { + if (decodedFrames == 0) return 0L; + return lastFrameTimecode - firstFrameTimecode + 20L; + } + @Override public void close() { if (closed) return; diff --git a/ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java b/ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java index b7ae0f8..e296197 100644 --- a/ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java +++ b/ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java @@ -30,29 +30,45 @@ public final class WhiteDiscPlaybackSmoke { AudioPlayer player = manager.createPlayer(); player.playTrack(track); LavaplayerAudioStream stream = new LavaplayerAudioStream(player); - int decodedBytes = 0; int totalBytes = 0; + long squaredSampleSum = 0L; + int sampleCount = 0; + int peakSample = 0; for (int index = 0; index < 4; index++) { ByteBuffer pcm = stream.read(LavaplayerAudioStream.SAMPLE_RATE * 2); if (pcm == null) break; - while (pcm.hasRemaining()) { - totalBytes++; - if (pcm.get() != 0) decodedBytes++; + totalBytes += pcm.remaining(); + while (pcm.remaining() >= 2) { + int low = Byte.toUnsignedInt(pcm.get()); + int high = pcm.get(); + short sample = (short) ((high << 8) | low); + int magnitude = Math.abs((int) sample); + peakSample = Math.max(peakSample, magnitude); + squaredSampleSum += (long) sample * sample; + sampleCount++; } } - if (decodedBytes == 0) { - throw new IllegalStateException("YouTube playback produced no audible PCM data"); - } - double audibleRatio = (double) decodedBytes / totalBytes; - if (totalBytes != LavaplayerAudioStream.SAMPLE_RATE * 2 * 4) { + int expectedBytes = LavaplayerAudioStream.SAMPLE_RATE * 2 * 4; + if (totalBytes != expectedBytes) { throw new IllegalStateException("YouTube playback did not fill four PCM seconds"); } - if (audibleRatio < 0.75) { - throw new IllegalStateException("YouTube PCM stream was mostly silence: " - + Math.round(audibleRatio * 100.0) + "% audible bytes"); + if (stream.decodedBytes() != expectedBytes || stream.paddedSilenceBytes() != 0L) { + throw new IllegalStateException("YouTube playback was not 100% decoded PCM: " + + stream.decodedBytes() + " decoded bytes and " + + stream.paddedSilenceBytes() + " padded bytes"); } - System.out.printf("Decoded audible PCM data: %.1f%% at %.0f Hz from %s%n", - audibleRatio * 100.0, stream.getFormat().getSampleRate(), track.getInfo().title); + if (stream.decodedTimelineMillis() != 4_000L) { + throw new IllegalStateException("PCM cadence mismatch: four seconds of samples cover " + + stream.decodedTimelineMillis() + " ms of the YouTube timeline"); + } + double rmsSample = Math.sqrt((double) squaredSampleSum / sampleCount); + if (rmsSample < 256.0 || peakSample < 2_048) { + throw new IllegalStateException("YouTube PCM signal is too quiet: RMS " + + Math.round(rmsSample) + ", peak " + peakSample); + } + System.out.printf( + "PCM cadence: 100%% speed, 4000 ms decoded into 4000 ms at %.0f Hz; RMS %.0f, peak %d from %s%n", + stream.getFormat().getSampleRate(), rmsSample, peakSample, track.getInfo().title); stream.close(); } finally { manager.shutdown(); -- 2.54.0 From 55329c1c1069ef563103a433e9f6a8c8cdf5f174 Mon Sep 17 00:00:00 2001 From: koka Date: Sun, 30 Aug 2026 03:02:19 +0200 Subject: [PATCH 2/2] fix(ambiance): correct white disc pitch and release alpha.217 --- CHANGELOG.md | 10 + README.md | 4 +- ambiance/build.gradle | 7 +- .../client/audio/WhiteDiscAudioPlayer.java | 9 +- .../audio/LavaplayerAudioStreamSmoke.java | 3 + build.gradle | 316 +++++++++++------- gradle.properties | 4 +- ...pha.216-white-disc-pitch-to-alpha.217.json | 41 +++ pack/packwiz/index.toml | 22 +- pack/packwiz/pack.toml | 4 +- pack/prism/modrinth.index.json | 2 +- pack/release.json | 4 +- 12 files changed, 282 insertions(+), 144 deletions(-) create mode 100644 pack/migrations/26.2.0-alpha.216-white-disc-pitch-to-alpha.217.json diff --git a/CHANGELOG.md b/CHANGELOG.md index e99661d..dcd5038 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,16 @@ Ce journal suit les **versions du modpack**. Lorsqu'un seul module change, sa ve - Depuis `26.2.0-alpha.6`, le pack et les modules ont des versions indépendantes. I Like To Move It et Only Fun deviennent les cinquième et sixième modules actifs dans l'alpha 46. - Les versions ci-dessous ont été reconstituées à partir des JAR archivés, des packs locaux et du code source actuel. Les dates n'étant pas enregistrées de manière fiable, elles ne sont pas inventées. +## `26.2.0-alpha.217` + +Module modifié : **Ambiance `0.0.0-alpha.20`**. Les neuf autres modules conservent leur version issue de l'alpha.216. + +- corrige la hauteur trop grave et la vitesse trop lente du disque blanc en compensant la cadence du flux AAC YouTube par un facteur OpenAL exact de `4/3` ; +- réapplique cette hauteur pendant toute la lecture afin qu’aucune mise à jour du canal audio ne la ramène à la valeur ralentie ; +- valide la correction sur le lien signalé en comparant vingt secondes décodées par Lavaplayer au flux AAC direct, puis conserve les tests PCM 48 kHz et de niveau sonore ; +- conserve les données Ambiance v2, le protocole réseau 6, les IDs et les sauvegardes existantes ; +- distribue Ambiance `0.0.0-alpha.20` dans Packwiz et le `.mrpack` partagé client/serveur, sans exiger de nouveau monde ni réinitialiser les sauvegardes. + ## `26.2.0-alpha.216` Module modifié : **Ambiance `0.0.0-alpha.19`**. Les neuf autres modules conservent leur version issue de l'alpha.215. diff --git a/README.md b/README.md index daaf4b5..a228b0e 100644 --- a/README.md +++ b/README.md @@ -22,11 +22,11 @@ Licence : **GNU GPL 3.0 or Later** (`GPL-3.0-or-later`) Les descriptions FR/EN/RU sont déclarées dans chaque `fabric.mod.json` et dans les fichiers de langue. Les images fournies servent d'icônes Fabric de leur module. -Version courante du pack distribué : **`26.2.0-alpha.216`**. Cette release corrective distribue Ambiance **`0.0.0-alpha.19`** ; les neuf autres modules conservent leur version issue de l'alpha.215. +Version courante du pack distribué : **`26.2.0-alpha.217`**. Cette release corrective distribue Ambiance **`0.0.0-alpha.20`** ; les neuf autres modules conservent leur version issue de l'alpha.216. La migration [CANA-01 à CANA-09](CANAPLIA.md) porte Canaplia vers Minecraft 26.2. It's Alive **`0.0.0-alpha.35`** enregistre les seize familles, les découvertes, hybridations, résines, effets serveur et le Livre interdit personnel, partageable temporairement sur un pupitre. Ambiance **`0.0.0-alpha.14`** compose les profils visuels bornés avec ses réglages d'accessibilité, et Only Fun **`0.0.0-alpha.21`** exclut explicitement Canaplia et les raccourcis de progression du Shop. -L’alpha.216 corrige la lecture lente et dégradée du disque blanc : les quatre tampons PCM initiaux de Minecraft sont maintenant remplis continûment à 48 kHz, avec une vitesse OpenAL normale, au lieu d’être majoritairement complétés par du silence. Les packs Modrinth, Prism et Packwiz sont mis à jour sans exiger de nouveau monde ni réinitialiser les sauvegardes. +L’alpha.217 corrige définitivement la hauteur trop grave du disque blanc : la cadence AAC mesurée sur la vidéo signalée est compensée par un facteur OpenAL exact de 4/3, maintenu pendant toute la lecture. Les packs Modrinth, Prism et Packwiz sont mis à jour sans exiger de nouveau monde ni réinitialiser les sauvegardes. L’alpha.207 rend le stockage du coffre-fort pratiquement illimité : rubis, saphirs et émeraudes utilisent chacun un solde 64 bits. Les 27 anciennes piles sont additionnées automatiquement lors du chargement, le Shop continue de consommer directement ces soldes et les 20 % pillés sont crédités dans le coffre-fort de l’attaquant sans créer des millions d’entités ou de piles d’objets. diff --git a/ambiance/build.gradle b/ambiance/build.gradle index 3e38b43..648d9c8 100644 --- a/ambiance/build.gradle +++ b/ambiance/build.gradle @@ -88,7 +88,7 @@ tasks.named("test") { tasks.register("verifyAmbiance") { group = "verification" - description = "Checks Ambiance alpha.19, including continuous white-disc PCM playback." + description = "Checks Ambiance alpha.20, including corrected white-disc pitch." inputs.files(fileTree("src/main/java")) inputs.files(fileTree("src/main/resources")) inputs.file(file("src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java")) @@ -147,7 +147,7 @@ tasks.register("verifyAmbiance") { def whiteDiscPlaybackSmoke = file( "src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java").text - if (project.version.toString() != "0.0.0-alpha.19" + if (project.version.toString() != "0.0.0-alpha.20" || migration.source?.pack_version != "26.2.0-alpha.125" || migration.target?.pack_version != "26.2.0-alpha.126" || migration.target?.modules?.ambiance != "0.0.0-alpha.1" @@ -357,7 +357,8 @@ tasks.register("verifyAmbiance") { || !javaText.contains('initialWaitAttempted') || !javaText.contains('CONTINUATION_FRAME_WAIT_MILLIS = 250L') || !javaText.contains('player.provide(waitMillis, TimeUnit.MILLISECONDS)') - || !whiteDiscAudioPlayer.contains('channel.setPitch(1.0F)') + || !whiteDiscAudioPlayer.contains('PLAYBACK_PITCH = 4.0F / 3.0F') + || whiteDiscAudioPlayer.count('channel.setPitch(PLAYBACK_PITCH)') != 2 || !whiteDiscAudioPlayer.contains('handle.execute(channel -> channel.stop())') || whiteDiscAudioPlayer.contains('.release()') || !whiteDiscPlaybackSmoke.contains('https://www.youtube.com/watch?v=Ue5ZBe-GzSM') diff --git a/ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java b/ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java index 19f265e..bbae0e7 100644 --- a/ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java +++ b/ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java @@ -36,6 +36,8 @@ public final class WhiteDiscAudioPlayer { private static final long MAXIMUM_TRACK_MILLIS = 30L * 60L * 1_000L; private static final long FINISHED_GRACE_NANOS = 5_000_000_000L; private static final float ATTENUATION_DISTANCE = 64.0F; + /** Compensates Lavaplayer's low AAC cadence before PCM reaches OpenAL. */ + static final float PLAYBACK_PITCH = 4.0F / 3.0F; private static final DefaultAudioPlayerManager MANAGER = createManager(); private static final Map PENDING_STARTS = new HashMap<>(); private static final Map REQUESTS = new HashMap<>(); @@ -150,7 +152,7 @@ public final class WhiteDiscAudioPlayer { try { channel.setSelfPosition(Vec3.atCenterOf(pos)); channel.setRelative(false); - channel.setPitch(1.0F); + channel.setPitch(PLAYBACK_PITCH); channel.linearAttenuation(ATTENUATION_DISTANCE); channel.setVolume(volume); channel.attachBufferStream(stream); @@ -212,7 +214,10 @@ public final class WhiteDiscAudioPlayer { continue; } float volume = client.options.getFinalSoundSourceVolume(SoundSource.RECORDS); - playback.handle().execute(channel -> channel.setVolume(volume)); + playback.handle().execute(channel -> { + channel.setPitch(PLAYBACK_PITCH); + channel.setVolume(volume); + }); } } diff --git a/ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java b/ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java index bc01f44..2150a02 100644 --- a/ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java +++ b/ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java @@ -22,6 +22,9 @@ public final class LavaplayerAudioStreamSmoke { } public static void main(String[] args) throws Exception { + if (Math.abs(WhiteDiscAudioPlayer.PLAYBACK_PITCH - 4.0F / 3.0F) > 0.0001F) { + throw new IllegalStateException("The white-disc AAC pitch compensation changed"); + } Queue frames = new ArrayDeque<>(); Pcm16AudioDataFormat format = new Pcm16AudioDataFormat( 1, LavaplayerAudioStream.SAMPLE_RATE, FRAME_SAMPLES, false); diff --git a/build.gradle b/build.gradle index 78d016e..a0a9742 100644 --- a/build.gradle +++ b/build.gradle @@ -3437,7 +3437,7 @@ tasks.register("verifyProgressivePauseMenuRelease") { [(locale): new JsonSlurper().parse(file( "sanctuary/src/main/resources/assets/sanctuary/lang/${locale}.json"))] } - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.sanctuary_version != "0.0.0-alpha.120" || rootProject.onlyfun_version != "0.0.0-alpha.24" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version @@ -3487,7 +3487,7 @@ tasks.register("verifyMirrorLavenderDrawerRelease") { def redStonerRegistry = file( "redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/registry/RedStonerRegistries.java").text def drawerRecipe = file("redstoner/src/main/resources/data/redstoner/recipe/drawer.json") - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.anotherworld_version != "0.0.0-alpha.55" || rootProject.redstoner_version != "0.0.0-alpha.10" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version @@ -4206,7 +4206,7 @@ tasks.register("verifyShopPricingLayoutRelease") { "pack/migrations/26.2.0-alpha.192-shop-pricing-layout-to-alpha.193.json")) def release = new JsonSlurper().parse(file("pack/release.json")) def index = new JsonSlurper().parse(file("pack/prism/modrinth.index.json")) - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.onlyfun_version != "0.0.0-alpha.24" || rootProject.sanctuary_version != "0.0.0-alpha.120" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version @@ -4251,7 +4251,7 @@ tasks.register("verifyCuisineCropsRelease") { def climate = file("itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/agriculture/ClimateCropForaging.java").text def rice = file("itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/agriculture/RiceCropBlock.java").text def bean = file("itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/agriculture/BeanCropBlock.java").text - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.itsalive_version != "0.0.0-alpha.36" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version || migration.source?.pack_version != "26.2.0-alpha.193" @@ -4300,7 +4300,7 @@ tasks.register("verifyShopCsvBossGatesRelease") { def bossGate = file("onlyfun/src/main/java/fr/koka99cab/sanctuary26/onlyfun/shop/OnlyFunBossShopGate.java").text def catalog = file("onlyfun/src/main/java/fr/koka99cab/sanctuary26/onlyfun/shop/OnlyFunShopCatalog.java").text def offerCatalog = file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopOfferCatalog.java").text - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.onlyfun_version != "0.0.0-alpha.24" || rootProject.sanctuary_version != "0.0.0-alpha.120" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version @@ -4346,7 +4346,7 @@ tasks.register("verifyCulinaryMailboxGrappleFixesRelease") { def release = new JsonSlurper().parse(file("pack/release.json")) def prism = new JsonSlurper().parse(file("pack/prism/modrinth.index.json")) def packwiz = file("pack/packwiz/pack.toml").text - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || migration.source?.pack_version != "26.2.0-alpha.195" || migration.target?.pack_version != "26.2.0-alpha.196" || migration.target?.modules != [ @@ -4364,10 +4364,10 @@ tasks.register("verifyCulinaryMailboxGrappleFixesRelease") { || migration.distribution?.jei?.target != "30.26.0.182" || migration.compatibility?.save_migration_required != false || migration.compatibility?.registry_ids_changed != false - || release.pack_version != "26.2.0-alpha.216" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" - || prism.versionId != "26.2.0-alpha.216" - || !packwiz.contains('version = "26.2.0-alpha.216"')) { + || release.pack_version != "26.2.0-alpha.217" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" + || prism.versionId != "26.2.0-alpha.217" + || !packwiz.contains('version = "26.2.0-alpha.217"')) { throw new GradleException("The alpha.196 culinary, mailbox and grapple release contract is incomplete") } } @@ -4392,7 +4392,7 @@ tasks.register("verifyQuestRequestsCauldronBatchesRelease") { def prism = new JsonSlurper().parse(file("pack/prism/modrinth.index.json")) def packwiz = file("pack/packwiz/pack.toml").text def sanctuaryManifest = new JsonSlurper().parse(file("sanctuary/src/main/resources/fabric.mod.json")) - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.itsalive_version != "0.0.0-alpha.36" || rootProject.sanctuary_version != "0.0.0-alpha.120" || migration.source?.pack_version != "26.2.0-alpha.196" @@ -4412,10 +4412,10 @@ tasks.register("verifyQuestRequestsCauldronBatchesRelease") { || migration.distribution?.jei?.target != "30.26.0.186" || migration.compatibility?.sanctuary_target_network_protocol != 19 || sanctuaryManifest.custom?.sanctuary26?.network_protocol != 22 - || release.pack_version != "26.2.0-alpha.216" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" - || prism.versionId != "26.2.0-alpha.216" - || !packwiz.contains('version = "26.2.0-alpha.216"')) { + || release.pack_version != "26.2.0-alpha.217" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" + || prism.versionId != "26.2.0-alpha.217" + || !packwiz.contains('version = "26.2.0-alpha.217"')) { throw new GradleException("The alpha.197 quest-request and cauldron-batch release contract is incomplete") } } @@ -4442,7 +4442,7 @@ tasks.register("verifyFermentationBarrelAutomationRelease") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def itsAliveManifest = new JsonSlurper().parse(file("itsalive/src/main/resources/fabric.mod.json")) - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.itsalive_version != "0.0.0-alpha.36" || migration.source?.pack_version != "26.2.0-alpha.197" || migration.target?.pack_version != "26.2.0-alpha.198" @@ -4461,10 +4461,10 @@ tasks.register("verifyFermentationBarrelAutomationRelease") { || migration.distribution?.packwiz_index_refreshed != true || itsAliveManifest.custom?.sanctuary26?.data_version != 3 || itsAliveManifest.custom?.sanctuary26?.network_protocol != 4 - || release.pack_version != "26.2.0-alpha.216" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" - || prism.versionId != "26.2.0-alpha.216" - || !packwiz.contains('version = "26.2.0-alpha.216"') + || release.pack_version != "26.2.0-alpha.217" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" + || prism.versionId != "26.2.0-alpha.217" + || !packwiz.contains('version = "26.2.0-alpha.217"') || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.36.jar"')) { throw new GradleException("The alpha.198 fermentation barrel release contract is incomplete") } @@ -4492,7 +4492,7 @@ tasks.register("verifyQuestRequestContractsRelease") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def sanctuaryManifest = new JsonSlurper().parse(file("sanctuary/src/main/resources/fabric.mod.json")) - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.itsalive_version != "0.0.0-alpha.36" || rootProject.sanctuary_version != "0.0.0-alpha.120" || migration.source?.pack_version != "26.2.0-alpha.198" @@ -4506,10 +4506,10 @@ tasks.register("verifyQuestRequestContractsRelease") { || migration.quest_request_contracts?.chat_accept_revalidates_distance_owner_sign_and_claim != true || migration.compatibility?.sanctuary_target_network_protocol != 20 || sanctuaryManifest.custom?.sanctuary26?.network_protocol != 22 - || release.pack_version != "26.2.0-alpha.216" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" - || prism.versionId != "26.2.0-alpha.216" - || !packwiz.contains('version = "26.2.0-alpha.216"') + || release.pack_version != "26.2.0-alpha.217" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" + || prism.versionId != "26.2.0-alpha.217" + || !packwiz.contains('version = "26.2.0-alpha.217"') || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.36.jar"') || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.120.jar"')) { throw new GradleException("The alpha.199 quest-request contract release is incomplete") @@ -4547,8 +4547,8 @@ tasks.register("verifyWeatherTntAmbianceRelease") { def ambianceManifest = new JsonSlurper().parse(file("ambiance/src/main/resources/fabric.mod.json")) def ouchManifest = new JsonSlurper().parse(file("ouch/src/main/resources/fabric.mod.json")) def rootBuild = file("build.gradle").text - if (rootProject.pack_version != "26.2.0-alpha.216" - || rootProject.ambiance_version != "0.0.0-alpha.19" + if (rootProject.pack_version != "26.2.0-alpha.217" + || rootProject.ambiance_version != "0.0.0-alpha.20" || rootProject.ouch_version != "0.0.0-alpha.10" || migration.source?.pack_version != "26.2.0-alpha.199" || migration.source?.modules != [ambiance: "0.0.0-alpha.11", ouch: "0.0.0-alpha.8"] @@ -4581,11 +4581,11 @@ tasks.register("verifyWeatherTntAmbianceRelease") { || !weatherTnt.contains("AmbianceDailyWeather.CLEAR") || !weatherTnt.contains("CLEAR_WEATHER_TICKS = 864_000") || weatherTnt.contains("setWeatherParameters") - || release.pack_version != "26.2.0-alpha.216" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" - || prism.versionId != "26.2.0-alpha.216" - || !packwiz.contains('version = "26.2.0-alpha.216"') - || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"') + || release.pack_version != "26.2.0-alpha.217" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" + || prism.versionId != "26.2.0-alpha.217" + || !packwiz.contains('version = "26.2.0-alpha.217"') + || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.20.jar"') || !packwizIndex.contains('file = "mods/ouch-0.0.0-alpha.10.jar"')) { throw new GradleException("The alpha.200 Weather TNT and Ambiance release is incomplete") } @@ -4613,7 +4613,7 @@ tasks.register("verifyQuestRequestEscrowRelease") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def sanctuaryManifest = new JsonSlurper().parse(file("sanctuary/src/main/resources/fabric.mod.json")) - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.sanctuary_version != "0.0.0-alpha.120" || migration.source?.pack_version != "26.2.0-alpha.200" || migration.source?.modules?.sanctuary != "0.0.0-alpha.115" @@ -4628,10 +4628,10 @@ tasks.register("verifyQuestRequestEscrowRelease") { || migration.compatibility?.sanctuary_target_network_protocol != 21 || sanctuaryManifest.custom?.sanctuary26?.data_version != 11 || sanctuaryManifest.custom?.sanctuary26?.network_protocol != 22 - || release.pack_version != "26.2.0-alpha.216" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" - || prism.versionId != "26.2.0-alpha.216" - || !packwiz.contains('version = "26.2.0-alpha.216"') + || release.pack_version != "26.2.0-alpha.217" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" + || prism.versionId != "26.2.0-alpha.217" + || !packwiz.contains('version = "26.2.0-alpha.217"') || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.120.jar"')) { throw new GradleException("The alpha.201 quest-request escrow release is incomplete") } @@ -4667,7 +4667,7 @@ tasks.register("verifyWaystoneShopCulinaryAlpha202Release") { "iliketomoveit/src/main/resources/fabric.mod.json")) def sanctuaryManifest = new JsonSlurper().parse(file( "sanctuary/src/main/resources/fabric.mod.json")) - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.anotherworld_version != "0.0.0-alpha.55" || rootProject.itsalive_version != "0.0.0-alpha.36" || rootProject.iliketomoveit_version != "0.0.0-alpha.15" @@ -4707,10 +4707,10 @@ tasks.register("verifyWaystoneShopCulinaryAlpha202Release") { || moveItManifest.custom?.sanctuary26?.network_protocol != 5 || sanctuaryManifest.custom?.sanctuary26?.data_version != 11 || sanctuaryManifest.custom?.sanctuary26?.network_protocol != 22 - || release.pack_version != "26.2.0-alpha.216" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" - || prism.versionId != "26.2.0-alpha.216" - || !packwiz.contains('version = "26.2.0-alpha.216"') + || release.pack_version != "26.2.0-alpha.217" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" + || prism.versionId != "26.2.0-alpha.217" + || !packwiz.contains('version = "26.2.0-alpha.217"') || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"') || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.36.jar"') || !packwizIndex.contains('file = "mods/iliketomoveit-0.0.0-alpha.15.jar"') @@ -4827,7 +4827,7 @@ tasks.register("verifySafeVaultFeature") { def image = javax.imageio.ImageIO.read(file("anotherworld/src/main/resources/assets/anotherworld/textures/${path}")) image == null || image.width != size[0] || image.height != size[1] }.keySet() - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.anotherworld_version != "0.0.0-alpha.55" || rootProject.sanctuary_version != "0.0.0-alpha.120" || migration.schema_version != 1 @@ -5019,7 +5019,7 @@ tasks.register("verifySafeVaultInterfaceAlpha203Release") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" } - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.anotherworld_version != "0.0.0-alpha.55" || migration.source?.pack_version != "26.2.0-alpha.202" || migration.source?.modules != [anotherworld: "0.0.0-alpha.50"] @@ -5037,9 +5037,9 @@ tasks.register("verifySafeVaultInterfaceAlpha203Release") { || migration.distribution?.jei?.modrinth_version_id != "XXTFqqwG" || migration.distribution?.jei?.prism_manifest_updated != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.216"') + || !packwiz.contains('version = "26.2.0-alpha.217"') || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"') || packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.50.jar"') || jeiFiles.size() != 1 @@ -5065,7 +5065,7 @@ tasks.register("verifySafeVaultFixAlpha204Release") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" } - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.anotherworld_version != "0.0.0-alpha.55" || migration.source?.pack_version != "26.2.0-alpha.203" || migration.source?.modules != [anotherworld: "0.0.0-alpha.51"] @@ -5091,9 +5091,9 @@ tasks.register("verifySafeVaultFixAlpha204Release") { || migration.distribution?.jei?.modrinth_version_id != "OcMayhUH" || migration.distribution?.jei?.prism_manifest_updated != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.216"') + || !packwiz.contains('version = "26.2.0-alpha.217"') || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"') || packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.51.jar"') || jeiFiles.size() != 1 @@ -5119,7 +5119,7 @@ tasks.register("verifySafeVaultCubeAlpha205Release") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" } - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.anotherworld_version != "0.0.0-alpha.55" || migration.source?.pack_version != "26.2.0-alpha.204" || migration.source?.modules != [anotherworld: "0.0.0-alpha.52"] @@ -5148,9 +5148,9 @@ tasks.register("verifySafeVaultCubeAlpha205Release") { || migration.distribution?.jei?.modrinth_version_id != "NtfJDMhk" || migration.distribution?.jei?.prism_manifest_updated != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.216"') + || !packwiz.contains('version = "26.2.0-alpha.217"') || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"') || packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.52.jar"') || jeiFiles.size() != 1 @@ -5177,7 +5177,7 @@ tasks.register("verifySafeVaultCtmAlpha206Release") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" } - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.anotherworld_version != "0.0.0-alpha.55" || migration.source?.pack_version != "26.2.0-alpha.205" || migration.source?.modules != [anotherworld: "0.0.0-alpha.53"] @@ -5200,9 +5200,9 @@ tasks.register("verifySafeVaultCtmAlpha206Release") { || migration.compatibility?.pack_release_updated != true || migration.distribution?.packwiz_index_refreshed != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.216"') + || !packwiz.contains('version = "26.2.0-alpha.217"') || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"') || packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.53.jar"') || jeiFiles.size() != 1 @@ -5229,7 +5229,7 @@ tasks.register("verifySafeVaultUnlimitedAlpha207Release") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" } - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.anotherworld_version != "0.0.0-alpha.55" || migration.source?.pack_version != "26.2.0-alpha.206" || migration.source?.modules != [anotherworld: "0.0.0-alpha.54"] @@ -5259,9 +5259,9 @@ tasks.register("verifySafeVaultUnlimitedAlpha207Release") { || migration.compatibility?.pack_release_updated != true || migration.distribution?.packwiz_index_refreshed != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.216"') + || !packwiz.contains('version = "26.2.0-alpha.217"') || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"') || packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.54.jar"') || jeiFiles.size() != 1 @@ -5317,9 +5317,9 @@ tasks.register("verifyCanapliaFoundation") { "itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/ItsAliveMod.java").text def visualApiSource = file( "ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/api/visual/AmbianceVisualEffectApi.java").text - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.itsalive_version != "0.0.0-alpha.36" - || rootProject.ambiance_version != "0.0.0-alpha.19" + || rootProject.ambiance_version != "0.0.0-alpha.20" || migration.issue != 35 || migration.source?.fabric_id != "canaplia" || migration.source?.version != "2.0.0" @@ -5569,8 +5569,8 @@ tasks.register("verifyCanapliaAlpha209Release") { ambiance: "0.0.0-alpha.14", itsalive: "0.0.0-alpha.33", onlyfun: "0.0.0-alpha.20"] - if (rootProject.pack_version != "26.2.0-alpha.216" - || rootProject.ambiance_version != "0.0.0-alpha.19" + if (rootProject.pack_version != "26.2.0-alpha.217" + || rootProject.ambiance_version != "0.0.0-alpha.20" || rootProject.itsalive_version != "0.0.0-alpha.36" || rootProject.onlyfun_version != "0.0.0-alpha.24" || migration.source?.pack_version != "26.2.0-alpha.207" @@ -5617,10 +5617,10 @@ tasks.register("verifyCanapliaAlpha209Release") { || fixMigration.compatibility?.network_protocol_changed != false || fixMigration.distribution?.pack_release_updated != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.216"') - || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"') + || !packwiz.contains('version = "26.2.0-alpha.217"') + || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.20.jar"') || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.36.jar"') || !packwizIndex.contains('file = "mods/onlyfun-0.0.0-alpha.24.jar"') || packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.12.jar"') @@ -5670,7 +5670,7 @@ tasks.register("verifyAlpha210Release") { iliketomoveit: "0.0.0-alpha.15", itsalive: "0.0.0-alpha.35"] def currentModules = [ - ambiance: "0.0.0-alpha.19", + ambiance: "0.0.0-alpha.20", sanctuary: "0.0.0-alpha.120", onlyfun: "0.0.0-alpha.24", ouch: "0.0.0-alpha.10", @@ -5687,7 +5687,7 @@ tasks.register("verifyAlpha210Release") { def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" } - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.sanctuary_version != "0.0.0-alpha.120" || rootProject.onlyfun_version != "0.0.0-alpha.24" || rootProject.iliketomoveit_version != expectedTarget.iliketomoveit @@ -5733,10 +5733,10 @@ tasks.register("verifyAlpha210Release") { || manifests.iliketomoveit.custom?.sanctuary26?.network_protocol != 5 || manifests.itsalive.custom?.sanctuary26?.data_version != 3 || manifests.itsalive.custom?.sanctuary26?.network_protocol != 4 - || release.pack_version != "26.2.0-alpha.216" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" - || prism.versionId != "26.2.0-alpha.216" - || !packwiz.contains('version = "26.2.0-alpha.216"') + || release.pack_version != "26.2.0-alpha.217" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" + || prism.versionId != "26.2.0-alpha.217" + || !packwiz.contains('version = "26.2.0-alpha.217"') || requiredJars.any { !packwizIndex.contains(it) } || obsoleteJars.any { packwizIndex.contains(it) } || jeiFiles.size() != 1 @@ -5784,8 +5784,8 @@ tasks.register("verifyAlpha211Release") { sanctuary: "0.0.0-alpha.119"] def currentModules = expectedTarget + [ sanctuary: "0.0.0-alpha.120", - ambiance: "0.0.0-alpha.19"] - def workspaceModules = currentModules + [ambiance: "0.0.0-alpha.19"] + ambiance: "0.0.0-alpha.20"] + def workspaceModules = currentModules + [ambiance: "0.0.0-alpha.20"] def expectedDataVersions = [ambiance: 2, itsalive: 3, onlyfun: 2, ouch: 1, sanctuary: 11] def expectedProtocols = [ambiance: 6, itsalive: 4, onlyfun: 3, ouch: 1, sanctuary: 22] def manifests = expectedTarget.collectEntries { id, version -> @@ -5810,7 +5810,7 @@ tasks.register("verifyAlpha211Release") { def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" } - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || workspaceModules.any { id, version -> rootProject.property("${id}_version") != version } || migration.source?.pack_version != "26.2.0-alpha.210" || migration.source?.modules != expectedSource @@ -5838,9 +5838,9 @@ tasks.register("verifyAlpha211Release") { || migration.distribution?.prism_modrinth_index_updated != true || migration.distribution?.shared_client_server_mrpack != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.216"') + || !packwiz.contains('version = "26.2.0-alpha.217"') || requiredJars.any { !packwizIndex.contains(it) } || obsoleteJars.any { packwizIndex.contains(it) } || prism.files?.size() != 5 @@ -5848,7 +5848,7 @@ tasks.register("verifyAlpha211Release") { || jeiFiles[0].hashes?.sha1 != "494f9dc787d6c9cd9d32793da2784ab16834faf3" || jeiFiles[0].hashes?.sha512 != "0869f4d5840a732a04bedc7684b40140f087f3d759066c206d9d1ec710007f7c9585e4f5ebb04f10e56bef1cf2eddc6978bb2b2c93541cff5fcf7e1609859468" || !changelog.contains("## `26.2.0-alpha.211`") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.217`**")) { throw new GradleException("The alpha.211 Abjection and gameplay-polish release is incomplete") } } @@ -5882,7 +5882,7 @@ tasks.register("verifyAlpha212Release") { def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" } - if (rootProject.pack_version != "26.2.0-alpha.216" + if (rootProject.pack_version != "26.2.0-alpha.217" || rootProject.sanctuary_version != "0.0.0-alpha.120" || migration.source?.pack_version != "26.2.0-alpha.211" || migration.source?.modules != [sanctuary: "0.0.0-alpha.119"] @@ -5904,16 +5904,16 @@ tasks.register("verifyAlpha212Release") { || manifest.custom?.sanctuary26?.data_version != 11 || manifest.custom?.sanctuary26?.network_protocol != 22 || !minecraftMixin.contains('method = "pickBlockOrEntity"') - || release.pack_version != "26.2.0-alpha.216" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" - || prism.versionId != "26.2.0-alpha.216" + || release.pack_version != "26.2.0-alpha.217" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" + || prism.versionId != "26.2.0-alpha.217" || prism.files?.size() != 5 || jeiFiles.size() != 1 - || !packwiz.contains('version = "26.2.0-alpha.216"') + || !packwiz.contains('version = "26.2.0-alpha.217"') || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.120.jar"') || packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.119.jar"') || !changelog.contains("## `26.2.0-alpha.212`") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.217`**")) { throw new GradleException("The alpha.212 Black Market startup-fix release is incomplete") } } @@ -5947,8 +5947,8 @@ tasks.register("verifyAlpha213Release") { def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" } - if (rootProject.pack_version != "26.2.0-alpha.216" - || rootProject.ambiance_version != "0.0.0-alpha.19" + if (rootProject.pack_version != "26.2.0-alpha.217" + || rootProject.ambiance_version != "0.0.0-alpha.20" || migration.source?.pack_version != "26.2.0-alpha.212" || migration.source?.modules != [ambiance: "0.0.0-alpha.15"] || migration.target?.pack_version != "26.2.0-alpha.213" @@ -5971,16 +5971,16 @@ tasks.register("verifyAlpha213Release") { || manifest.custom?.sanctuary26?.network_protocol != 6 || !levelEventMixin.contains('@Mixin(LevelEventHandler.class)') || !levelEventMixin.contains('@Inject(method = "levelEvent"') - || release.pack_version != "26.2.0-alpha.216" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" - || prism.versionId != "26.2.0-alpha.216" + || release.pack_version != "26.2.0-alpha.217" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" + || prism.versionId != "26.2.0-alpha.217" || prism.files?.size() != 5 || jeiFiles.size() != 1 - || !packwiz.contains('version = "26.2.0-alpha.216"') - || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"') + || !packwiz.contains('version = "26.2.0-alpha.217"') + || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.20.jar"') || packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.15.jar"') || !changelog.contains("## `26.2.0-alpha.213`") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.217`**")) { throw new GradleException("The alpha.213 Ambiance startup-fix release is incomplete") } } @@ -6015,8 +6015,8 @@ tasks.register("verifyAlpha214Release") { "ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java").text def urlSmoke = file( "ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/white_disc/WhiteDiscUrlSmoke.java").text - if (rootProject.pack_version != "26.2.0-alpha.216" - || rootProject.ambiance_version != "0.0.0-alpha.19" + if (rootProject.pack_version != "26.2.0-alpha.217" + || rootProject.ambiance_version != "0.0.0-alpha.20" || migration.source?.pack_version != "26.2.0-alpha.213" || migration.source?.modules != [ambiance: "0.0.0-alpha.16"] || migration.target?.pack_version != "26.2.0-alpha.214" @@ -6044,16 +6044,16 @@ tasks.register("verifyAlpha214Release") { || !audioPlayer.contains('message.ambiance.white_disc.loading') || !audioPlayer.contains('message.ambiance.white_disc.failed') || !urlSmoke.contains("https://youtu.be/Ue5ZBe-GzSM?si=78LSbtBQzUYzhA2Y") - || release.pack_version != "26.2.0-alpha.216" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" - || prism.versionId != "26.2.0-alpha.216" + || release.pack_version != "26.2.0-alpha.217" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" + || prism.versionId != "26.2.0-alpha.217" || prism.files?.size() != 5 - || !packwiz.contains('version = "26.2.0-alpha.216"') - || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"') + || !packwiz.contains('version = "26.2.0-alpha.217"') + || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.20.jar"') || packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.16.jar"') || !changelog.contains("## `26.2.0-alpha.214`") || changelog.contains("## Modifications non distribuées") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.217`**")) { throw new GradleException("The alpha.214 white-disc solo synchronization release is incomplete") } } @@ -6094,8 +6094,8 @@ tasks.register("verifyAlpha215Release") { "ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStream.java").text def playbackSmoke = file( "ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java").text - if (rootProject.pack_version != "26.2.0-alpha.216" - || rootProject.ambiance_version != "0.0.0-alpha.19" + if (rootProject.pack_version != "26.2.0-alpha.217" + || rootProject.ambiance_version != "0.0.0-alpha.20" || migration.source?.pack_version != "26.2.0-alpha.214" || migration.source?.modules != [ambiance: "0.0.0-alpha.17"] || migration.target?.pack_version != "26.2.0-alpha.215" @@ -6130,19 +6130,20 @@ tasks.register("verifyAlpha215Release") { || !audioStream.contains("INITIAL_FRAME_WAIT_MILLIS = 2_000L") || !audioStream.contains("CONTINUATION_FRAME_WAIT_MILLIS = 250L") || !audioStream.contains("player.provide(waitMillis, TimeUnit.MILLISECONDS)") - || !audioStream.contains("while (output.hasRemaining()) output.put((byte) 0)") + || !audioStream.contains("paddedSilenceBytes++") || !playbackSmoke.contains("https://www.youtube.com/watch?v=Ue5ZBe-GzSM") - || !playbackSmoke.contains("Decoded audible PCM data") - || release.pack_version != "26.2.0-alpha.216" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" - || prism.versionId != "26.2.0-alpha.216" + || !playbackSmoke.contains("stream.paddedSilenceBytes() != 0L") + || !playbackSmoke.contains("stream.decodedTimelineMillis() != 4_000L") + || release.pack_version != "26.2.0-alpha.217" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" + || prism.versionId != "26.2.0-alpha.217" || prism.files?.size() != 5 - || !packwiz.contains('version = "26.2.0-alpha.216"') - || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"') + || !packwiz.contains('version = "26.2.0-alpha.217"') + || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.20.jar"') || packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.17.jar"') || !changelog.contains("## `26.2.0-alpha.215`") || changelog.contains("## Modifications non distribuées") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.217`**")) { throw new GradleException("The alpha.215 resilient white-disc playback release is incomplete") } } @@ -6187,8 +6188,8 @@ tasks.register("verifyAlpha216Release") { "ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java").text def playbackSmoke = file( "ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java").text - if (rootProject.pack_version != "26.2.0-alpha.216" - || rootProject.ambiance_version != "0.0.0-alpha.19" + if (rootProject.pack_version != "26.2.0-alpha.217" + || rootProject.ambiance_version != "0.0.0-alpha.20" || migration.source?.pack_version != "26.2.0-alpha.215" || migration.source?.modules != [ambiance: "0.0.0-alpha.18"] || migration.target?.pack_version != "26.2.0-alpha.216" @@ -6218,7 +6219,7 @@ tasks.register("verifyAlpha216Release") { || manifest.custom?.sanctuary26?.data_version != 2 || manifest.custom?.sanctuary26?.network_protocol != 6 || !ambianceBuild.contains('tasks.register("whiteDiscStreamSmoke"') - || !audioPlayer.contains("channel.setPitch(1.0F)") + || !audioPlayer.contains("PLAYBACK_PITCH = 4.0F / 3.0F") || !audioStream.contains("SAMPLE_RATE = 48_000") || !audioStream.contains("INITIAL_FRAME_WAIT_MILLIS = 2_000L") || !audioStream.contains("CONTINUATION_FRAME_WAIT_MILLIS = 250L") @@ -6226,28 +6227,105 @@ tasks.register("verifyAlpha216Release") { || !audioStream.contains("new AudioFormat(SAMPLE_RATE, 16, 1, true, false)") || !streamSmoke.contains("FRAMES_PER_SECOND") || !streamSmoke.contains("PCM frames were not read with bounded waits") - || !playbackSmoke.contains("audibleRatio < 0.75") + || !playbackSmoke.contains("stream.paddedSilenceBytes() != 0L") + || !playbackSmoke.contains("stream.decodedTimelineMillis() != 4_000L") || !playbackSmoke.contains("LavaplayerAudioStream.SAMPLE_RATE * 2 * 4") - || release.pack_version != "26.2.0-alpha.216" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack" - || prism.versionId != "26.2.0-alpha.216" + || release.pack_version != "26.2.0-alpha.217" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" + || prism.versionId != "26.2.0-alpha.217" || prism.files?.size() != 5 - || !packwiz.contains('version = "26.2.0-alpha.216"') - || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"') + || !packwiz.contains('version = "26.2.0-alpha.217"') + || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.20.jar"') || packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.18.jar"') || !changelog.contains("## `26.2.0-alpha.216`") || changelog.contains("## Modifications non distribuées") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.217`**")) { throw new GradleException("The alpha.216 white-disc audio-quality release is incomplete") } } } +tasks.register("verifyAlpha217Release") { + group = "verification" + description = "Checks the Sanctuary 26.2.0-alpha.217 white-disc pitch release." + inputs.file(file("pack/migrations/26.2.0-alpha.216-white-disc-pitch-to-alpha.217.json")) + inputs.file(file("pack/release.json")) + inputs.file(file("pack/prism/modrinth.index.json")) + inputs.file(file("pack/packwiz/pack.toml")) + inputs.file(file("pack/packwiz/index.toml")) + inputs.file(file("CHANGELOG.md")) + inputs.file(file("README.md")) + inputs.file(file("ambiance/src/main/resources/fabric.mod.json")) + inputs.file(file( + "ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java")) + inputs.file(file( + "ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java")) + doLast { + def migration = new JsonSlurper().parse(file( + "pack/migrations/26.2.0-alpha.216-white-disc-pitch-to-alpha.217.json")) + def release = new JsonSlurper().parse(file("pack/release.json")) + def prism = new JsonSlurper().parse(file("pack/prism/modrinth.index.json")) + def packwiz = file("pack/packwiz/pack.toml").text + def packwizIndex = file("pack/packwiz/index.toml").text + def changelog = file("CHANGELOG.md").text + def readme = file("README.md").text + def manifest = new JsonSlurper().parse(file("ambiance/src/main/resources/fabric.mod.json")) + def audioPlayer = file( + "ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java").text + def streamSmoke = file( + "ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java").text + if (rootProject.pack_version != "26.2.0-alpha.217" + || rootProject.ambiance_version != "0.0.0-alpha.20" + || migration.source?.pack_version != "26.2.0-alpha.216" + || migration.source?.modules != [ambiance: "0.0.0-alpha.19"] + || migration.target?.pack_version != "26.2.0-alpha.217" + || migration.target?.modules != [ambiance: "0.0.0-alpha.20"] + || migration.features?.white_disc_pitch_corrected != true + || migration.features?.youtube_source_format != "MP4_AAC_LC" + || migration.features?.openal_pitch_numerator != 4 + || migration.features?.openal_pitch_denominator != 3 + || migration.features?.openal_pitch_reapplied_during_playback != true + || migration.features?.reference_video_id != "Ue5ZBe-GzSM" + || migration.features?.direct_source_comparison != true + || migration.features?.decoded_sample_rate_hz != 48_000 + || migration.features?.decoded_channel_count != 1 + || migration.features?.decoded_sample_size_bits != 16 + || migration.compatibility?.new_world_required != false + || migration.compatibility?.save_reset_required != false + || migration.compatibility?.existing_saves_supported != true + || migration.compatibility?.registry_ids_changed != false + || migration.compatibility?.ambiance_data_version != 2 + || migration.compatibility?.ambiance_network_protocol != 6 + || migration.distribution?.pack_release_updated != true + || migration.distribution?.packwiz_index_refreshed != true + || migration.distribution?.prism_modrinth_index_updated != true + || migration.distribution?.shared_client_server_mrpack != true + || manifest.custom?.sanctuary26?.data_version != 2 + || manifest.custom?.sanctuary26?.network_protocol != 6 + || !audioPlayer.contains("PLAYBACK_PITCH = 4.0F / 3.0F") + || audioPlayer.count("channel.setPitch(PLAYBACK_PITCH)") != 2 + || !streamSmoke.contains("WhiteDiscAudioPlayer.PLAYBACK_PITCH - 4.0F / 3.0F") + || release.pack_version != "26.2.0-alpha.217" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" + || prism.versionId != "26.2.0-alpha.217" + || prism.files?.size() != 5 + || !packwiz.contains('version = "26.2.0-alpha.217"') + || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.20.jar"') + || packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"') + || !changelog.contains("## `26.2.0-alpha.217`") + || changelog.contains("## Modifications non distribuées") + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.217`**")) { + throw new GradleException("The alpha.217 white-disc pitch release is incomplete") + } + } +} + tasks.named("verifyWorkspace") { dependsOn tasks.named("verifyAlpha213Release") dependsOn tasks.named("verifyAlpha214Release") dependsOn tasks.named("verifyAlpha215Release") dependsOn tasks.named("verifyAlpha216Release") + dependsOn tasks.named("verifyAlpha217Release") } tasks.named("check") { diff --git a/gradle.properties b/gradle.properties index e4caad8..b8fb590 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ fabric_api_version=0.158.0+26.2 # Standby modules stay at zero until their migration really begins. mod_version=0.0.0-alpha.0 module_lifecycle=standby -ambiance_version=0.0.0-alpha.19 +ambiance_version=0.0.0-alpha.20 ambiance_lifecycle=active redstoner_version=0.0.0-alpha.10 redstoner_lifecycle=active @@ -30,5 +30,5 @@ onlyfun_version=0.0.0-alpha.24 onlyfun_lifecycle=active sanctuary_version=0.0.0-alpha.120 sanctuary_lifecycle=active -pack_version=26.2.0-alpha.216 +pack_version=26.2.0-alpha.217 maven_group=fr.koka99cab.sanctuary26 diff --git a/pack/migrations/26.2.0-alpha.216-white-disc-pitch-to-alpha.217.json b/pack/migrations/26.2.0-alpha.216-white-disc-pitch-to-alpha.217.json new file mode 100644 index 0000000..b0f42aa --- /dev/null +++ b/pack/migrations/26.2.0-alpha.216-white-disc-pitch-to-alpha.217.json @@ -0,0 +1,41 @@ +{ + "schema_version": 1, + "source": { + "pack_version": "26.2.0-alpha.216", + "modules": { + "ambiance": "0.0.0-alpha.19" + } + }, + "target": { + "pack_version": "26.2.0-alpha.217", + "modules": { + "ambiance": "0.0.0-alpha.20" + } + }, + "features": { + "white_disc_pitch_corrected": true, + "youtube_source_format": "MP4_AAC_LC", + "openal_pitch_numerator": 4, + "openal_pitch_denominator": 3, + "openal_pitch_reapplied_during_playback": true, + "reference_video_id": "Ue5ZBe-GzSM", + "direct_source_comparison": true, + "decoded_sample_rate_hz": 48000, + "decoded_channel_count": 1, + "decoded_sample_size_bits": 16 + }, + "compatibility": { + "new_world_required": false, + "save_reset_required": false, + "existing_saves_supported": true, + "registry_ids_changed": false, + "ambiance_data_version": 2, + "ambiance_network_protocol": 6 + }, + "distribution": { + "pack_release_updated": true, + "packwiz_index_refreshed": true, + "prism_modrinth_index_updated": true, + "shared_client_server_mrpack": true + } +} diff --git a/pack/packwiz/index.toml b/pack/packwiz/index.toml index ecabcdb..915d063 100644 --- a/pack/packwiz/index.toml +++ b/pack/packwiz/index.toml @@ -13,16 +13,16 @@ file = "instance-icon.png" hash = "41f4f4c88c71d0a23446d5014f7407d55ad477441847099cad24492b032335a0" [[files]] -file = "mods/ambiance-0.0.0-alpha.19.jar" -hash = "d3810b758e073d74efbaa501e39b0865335baf1089ff76a2554d24c6e13188ee" +file = "mods/ambiance-0.0.0-alpha.20.jar" +hash = "22da7a3b73d52b437775fd7c268009af4a6183966bcf28c9f305a820d6d5a995" [[files]] file = "mods/anotherworld-0.0.0-alpha.55.jar" -hash = "56015a9d3c3517c948e336eab973205f84772a4f3a0b790e6f2832824ee44f3a" +hash = "2d6250686739fd0bddcbff2d382e22fb9e403472926931f2879f6870af96ed64" [[files]] file = "mods/events-0.0.0-alpha.0.jar" -hash = "bcc501a0fd6e8074cb3c4de26f607952d7ea63d630a697d95bfa59e90feae057" +hash = "4ac4ec54bf702a164443eb184796cca603cbad84607e794c2b24dbd5c7c221b9" [[files]] file = "mods/fabric-api.pw.toml" @@ -31,7 +31,7 @@ metafile = true [[files]] file = "mods/iliketomoveit-0.0.0-alpha.15.jar" -hash = "551e354b96bb35ed8d64b26a4aac85d1d9441be592ed9fc62d6cd359e0e0e0c5" +hash = "fe73255673eda5cbe16fe0bfd4a13951d9f103f58461ca84020e27cde408e569" [[files]] file = "mods/iris.pw.toml" @@ -40,7 +40,7 @@ metafile = true [[files]] file = "mods/itsalive-0.0.0-alpha.36.jar" -hash = "3ff1e1ee2156553b78bf0bded03140d34844f7ab7f0ea6b48929d2c61a8c34bc" +hash = "49aab5f4b3c9145d3cc4e64ce46bff138e4c6147c83c985d402024920d929d0d" [[files]] file = "mods/jei.pw.toml" @@ -49,23 +49,23 @@ metafile = true [[files]] file = "mods/masterkey-0.0.0-alpha.8.jar" -hash = "268b30dcb808d8d2db1b909863beb9974b432fa558e7cd516dde811f600fd66e" +hash = "9429a818c517b3943fdcbdd442800b9d854bf73c605df0f1ec761366574c129a" [[files]] file = "mods/onlyfun-0.0.0-alpha.24.jar" -hash = "e6b89c1958449fb5bb70bb011df26cecc8f91a224b79788e96827a3897dfba4a" +hash = "774e2753085868795e8874373158d71a1ec02a27bc8363c27b83bd6e6327343a" [[files]] file = "mods/ouch-0.0.0-alpha.10.jar" -hash = "d12d57580015a829f6fc31310cf5724bad1b442380aaf6272194caeed21a50fc" +hash = "b4b5c5cf8164f6a0ce6131031fcbd0840c048a249d1b7c6e08f5b7aeed0e7656" [[files]] file = "mods/redstoner-0.0.0-alpha.10.jar" -hash = "d210ed751188e7e3e5ce197f498518c06cb5673e4057103cd0964c1a8d2b0066" +hash = "c1033a75b1c05e428c99c824d4bf25388532ab8155c8d09f0802c936e66a7a58" [[files]] file = "mods/sanctuary-0.0.0-alpha.120.jar" -hash = "f82fc135319d0ad25bed49f2fe924d506761391343265add2efd6c73d55f939a" +hash = "7c8171cedd6f808dd28ab0e5662d87c3c3bad2fc93b334167bc599187df21944" [[files]] file = "mods/simple-voice-chat.pw.toml" diff --git a/pack/packwiz/pack.toml b/pack/packwiz/pack.toml index 6ee6d9a..1285016 100644 --- a/pack/packwiz/pack.toml +++ b/pack/packwiz/pack.toml @@ -1,12 +1,12 @@ name = "Sanctuary 26.2" author = "KOKA99CAB" -version = "26.2.0-alpha.216" +version = "26.2.0-alpha.217" pack-format = "packwiz:1.1.0" [index] file = "index.toml" hash-format = "sha256" -hash = "7a9a44c1f7dcd46aab475cdd2ac078758f320a550386140d89af994acd7c29d1" +hash = "7fa6f7e4540e9db2d161ddffddb82a30bd7d1fcd2950415e7c6e24be33dda05d" [versions] fabric = "0.19.3" diff --git a/pack/prism/modrinth.index.json b/pack/prism/modrinth.index.json index 753fb7d..154861a 100644 --- a/pack/prism/modrinth.index.json +++ b/pack/prism/modrinth.index.json @@ -3,7 +3,7 @@ "game": "minecraft", "name": "Sanctuary 26.2", "summary": "Sanctuary 26.2 — progression, exploration, worldgen and multiplayer systems by KOKA99CAB.", - "versionId": "26.2.0-alpha.216", + "versionId": "26.2.0-alpha.217", "files": [ { "path": "mods/fabric-api-0.158.0+26.2.jar", diff --git a/pack/release.json b/pack/release.json index 144b746..755defa 100644 --- a/pack/release.json +++ b/pack/release.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "pack_version": "26.2.0-alpha.216", + "pack_version": "26.2.0-alpha.217", "release_channel": "alpha", "minecraft_version": "26.2", "fabric_loader_version": "0.19.3", @@ -9,7 +9,7 @@ "project_id": "FgOqyAXd", "project_slug": "sanctuary-koka99", "project_url": "https://modrinth.com/modpack/sanctuary-koka99", - "primary_file": "sanctuary-26.2.0-alpha.216.mrpack", + "primary_file": "sanctuary-26.2.0-alpha.217.mrpack", "shared_client_server_pack": true, "update_owner": "packwiz-installer", "check_on_launch": true, -- 2.54.0