diff --git a/CHANGELOG.md b/CHANGELOG.md index 91dd8d4..cf8dac5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,9 +6,9 @@ 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` +## `26.2.0-alpha.218` -Modules modifiés : **Red-Stoner `0.0.0-alpha.11`**, **Only Fun `0.0.0-alpha.25`** et **Sanctuary `0.0.0-alpha.121`**. Les sept autres modules conservent leur version issue de l'alpha.216. +Modules modifiés : **Red-Stoner `0.0.0-alpha.11`**, **Only Fun `0.0.0-alpha.25`** et **Sanctuary `0.0.0-alpha.121`**. Les sept autres modules conservent leur version issue de l'alpha.217. - ajoute `redstoner:storage_terminal`, une demi-dalle verticale de huit pixels qui se pose uniquement sur la face horizontale d’un coffre, coffre piégé ou baril ; - découvre sans charger de chunk les conteneurs adjacents par face, verticalement compris, et refuse clairement tout réseau qui dépasse 128 blocs physiques ; @@ -18,6 +18,16 @@ Modules modifiés : **Red-Stoner `0.0.0-alpha.11`**, **Only Fun `0.0.0-alpha.25` - ajoute les traductions FR/EN/RU, les ressources bloc/item/loot/recette et des tests déterministes de topologie, pagination, agrégation et transferts ; - conserve les données Red-Stoner v3, Only Fun v2 et Sanctuary v11 ; seul le protocole réseau Red-Stoner passe de 5 à 6, sans nouveau monde ni réinitialisation des sauvegardes. +## `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 7538525..0ac4806 100644 --- a/README.md +++ b/README.md @@ -22,11 +22,13 @@ 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.217`**. Cette release distribue Red-Stoner **`0.0.0-alpha.11`**, Only Fun **`0.0.0-alpha.25`** et Sanctuary **`0.0.0-alpha.121`** ; les sept autres modules conservent leur version issue de l'alpha.216. +Version courante du pack distribué : **`26.2.0-alpha.218`**. Cette release distribue Red-Stoner **`0.0.0-alpha.11`**, Only Fun **`0.0.0-alpha.25`** et Sanctuary **`0.0.0-alpha.121`** ; les sept autres modules conservent leur version issue de l'alpha.217. 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.217 ajoute le terminal de stockage Red-Stoner : cette demi-dalle verticale se fixe sur un coffre, un coffre piégé ou un baril et donne accès, par pages défilantes de 54 types, à un réseau contigu borné à 128 conteneurs chargés. Les retraits et dépôts sont validés par le serveur, les composants d’items restent strictement séparés et le terminal endgame est exclu du Shop, du Black Market et des récompenses Only Fun. +L’alpha.218 ajoute le terminal de stockage Red-Stoner : cette demi-dalle verticale se fixe sur un coffre, un coffre piégé ou un baril et donne accès, par pages défilantes de 54 types, à un réseau contigu borné à 128 conteneurs chargés. Les retraits et dépôts sont validés par le serveur, les composants d’items restent strictement séparés et le terminal endgame est exclu du Shop, du Black Market et des récompenses Only Fun. + +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. 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. diff --git a/ambiance/build.gradle b/ambiance/build.gradle index c6ef258..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,11 +357,14 @@ 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') - || !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/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/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(); diff --git a/build.gradle b/build.gradle index 028deb9..ec2304a 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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || rootProject.sanctuary_version != "0.0.0-alpha.121" || rootProject.onlyfun_version != "0.0.0-alpha.25" || 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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || rootProject.anotherworld_version != "0.0.0-alpha.55" || rootProject.redstoner_version != "0.0.0-alpha.11" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version @@ -3993,7 +3993,7 @@ project(":redstoner") { inputs.file(rootProject.file("pack/migrations/26.2.0-alpha.167-cobble-dungeon-ownership-to-alpha.168.json")) inputs.file(rootProject.file("pack/migrations/26.2.0-alpha.185-computer-recipes-to-alpha.186.json")) inputs.file(rootProject.file("pack/migrations/26.2.0-alpha.191-mirror-lavender-drawer-to-alpha.192.json")) - inputs.file(rootProject.file("pack/migrations/26.2.0-alpha.216-storage-terminal-to-alpha.217.json")) + inputs.file(rootProject.file("pack/migrations/26.2.0-alpha.217-storage-terminal-to-alpha.218.json")) doLast { def registry = file("src/main/java/fr/koka99cab/sanctuary26/redstoner/registry/RedStonerRegistries.java").text def javaText = fileTree("src/main/java").matching { include "**/*.java" }.files*.text.join("\n") @@ -4013,7 +4013,7 @@ project(":redstoner") { def drawerMigration = new JsonSlurper().parse(rootProject.file( "pack/migrations/26.2.0-alpha.191-mirror-lavender-drawer-to-alpha.192.json")) def terminalMigration = new JsonSlurper().parse(rootProject.file( - "pack/migrations/26.2.0-alpha.216-storage-terminal-to-alpha.217.json")) + "pack/migrations/26.2.0-alpha.217-storage-terminal-to-alpha.218.json")) def requiredIds = [ "eight_bit_computer", "controller", "personal_computer", "drawer", "particuleur", "storage_terminal"] def missingIds = requiredIds.findAll { !registry.contains("id(\"${it}\")") } @@ -4101,10 +4101,10 @@ project(":redstoner") { if (project.version.toString() != "0.0.0-alpha.11" || manifest.custom?.sanctuary26?.data_version != 3 || manifest.custom?.sanctuary26?.network_protocol != 6 - || terminalMigration.source?.pack_version != "26.2.0-alpha.216" + || terminalMigration.source?.pack_version != "26.2.0-alpha.217" || terminalMigration.source?.modules != [ redstoner: "0.0.0-alpha.10", onlyfun: "0.0.0-alpha.24", sanctuary: "0.0.0-alpha.120"] - || terminalMigration.target?.pack_version != "26.2.0-alpha.217" + || terminalMigration.target?.pack_version != "26.2.0-alpha.218" || terminalMigration.target?.modules != [ redstoner: "0.0.0-alpha.11", onlyfun: "0.0.0-alpha.25", sanctuary: "0.0.0-alpha.121"] || terminalMigration.storage_terminal?.owner != "redstoner" @@ -4259,7 +4259,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || rootProject.onlyfun_version != "0.0.0-alpha.25" || rootProject.sanctuary_version != "0.0.0-alpha.121" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version @@ -4304,7 +4304,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || 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" @@ -4353,7 +4353,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || rootProject.onlyfun_version != "0.0.0-alpha.25" || rootProject.sanctuary_version != "0.0.0-alpha.121" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version @@ -4399,7 +4399,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || migration.source?.pack_version != "26.2.0-alpha.195" || migration.target?.pack_version != "26.2.0-alpha.196" || migration.target?.modules != [ @@ -4417,10 +4417,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.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"')) { + || release.pack_version != "26.2.0-alpha.218" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" + || prism.versionId != "26.2.0-alpha.218" + || !packwiz.contains('version = "26.2.0-alpha.218"')) { throw new GradleException("The alpha.196 culinary, mailbox and grapple release contract is incomplete") } } @@ -4445,7 +4445,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || rootProject.itsalive_version != "0.0.0-alpha.36" || rootProject.sanctuary_version != "0.0.0-alpha.121" || migration.source?.pack_version != "26.2.0-alpha.196" @@ -4465,10 +4465,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.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"')) { + || release.pack_version != "26.2.0-alpha.218" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" + || prism.versionId != "26.2.0-alpha.218" + || !packwiz.contains('version = "26.2.0-alpha.218"')) { throw new GradleException("The alpha.197 quest-request and cauldron-batch release contract is incomplete") } } @@ -4495,7 +4495,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || 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" @@ -4514,10 +4514,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.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"') + || release.pack_version != "26.2.0-alpha.218" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" + || prism.versionId != "26.2.0-alpha.218" + || !packwiz.contains('version = "26.2.0-alpha.218"') || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.36.jar"')) { throw new GradleException("The alpha.198 fermentation barrel release contract is incomplete") } @@ -4545,7 +4545,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || rootProject.itsalive_version != "0.0.0-alpha.36" || rootProject.sanctuary_version != "0.0.0-alpha.121" || migration.source?.pack_version != "26.2.0-alpha.198" @@ -4559,10 +4559,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.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"') + || release.pack_version != "26.2.0-alpha.218" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" + || prism.versionId != "26.2.0-alpha.218" + || !packwiz.contains('version = "26.2.0-alpha.218"') || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.36.jar"') || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.121.jar"')) { throw new GradleException("The alpha.199 quest-request contract release is incomplete") @@ -4600,8 +4600,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.217" - || rootProject.ambiance_version != "0.0.0-alpha.19" + if (rootProject.pack_version != "26.2.0-alpha.218" + || 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"] @@ -4634,11 +4634,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.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.19.jar"') + || release.pack_version != "26.2.0-alpha.218" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" + || prism.versionId != "26.2.0-alpha.218" + || !packwiz.contains('version = "26.2.0-alpha.218"') + || !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") } @@ -4666,7 +4666,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || rootProject.sanctuary_version != "0.0.0-alpha.121" || migration.source?.pack_version != "26.2.0-alpha.200" || migration.source?.modules?.sanctuary != "0.0.0-alpha.115" @@ -4681,10 +4681,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.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"') + || release.pack_version != "26.2.0-alpha.218" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" + || prism.versionId != "26.2.0-alpha.218" + || !packwiz.contains('version = "26.2.0-alpha.218"') || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.121.jar"')) { throw new GradleException("The alpha.201 quest-request escrow release is incomplete") } @@ -4720,7 +4720,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || rootProject.anotherworld_version != "0.0.0-alpha.55" || rootProject.itsalive_version != "0.0.0-alpha.36" || rootProject.iliketomoveit_version != "0.0.0-alpha.15" @@ -4760,10 +4760,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.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"') + || release.pack_version != "26.2.0-alpha.218" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" + || prism.versionId != "26.2.0-alpha.218" + || !packwiz.contains('version = "26.2.0-alpha.218"') || !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"') @@ -4880,7 +4880,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || rootProject.anotherworld_version != "0.0.0-alpha.55" || rootProject.sanctuary_version != "0.0.0-alpha.121" || migration.schema_version != 1 @@ -5072,7 +5072,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || 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"] @@ -5090,9 +5090,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.217.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.217"') + || !packwiz.contains('version = "26.2.0-alpha.218"') || !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 @@ -5118,7 +5118,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || 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"] @@ -5144,9 +5144,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.217.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.217"') + || !packwiz.contains('version = "26.2.0-alpha.218"') || !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 @@ -5172,7 +5172,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || 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"] @@ -5201,9 +5201,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.217.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.217"') + || !packwiz.contains('version = "26.2.0-alpha.218"') || !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 @@ -5230,7 +5230,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || 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"] @@ -5253,9 +5253,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.217.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.217"') + || !packwiz.contains('version = "26.2.0-alpha.218"') || !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 @@ -5282,7 +5282,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || 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"] @@ -5312,9 +5312,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.217.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.217"') + || !packwiz.contains('version = "26.2.0-alpha.218"') || !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 @@ -5370,9 +5370,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || 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" @@ -5622,8 +5622,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.217" - || rootProject.ambiance_version != "0.0.0-alpha.19" + if (rootProject.pack_version != "26.2.0-alpha.218" + || rootProject.ambiance_version != "0.0.0-alpha.20" || rootProject.itsalive_version != "0.0.0-alpha.36" || rootProject.onlyfun_version != "0.0.0-alpha.25" || migration.source?.pack_version != "26.2.0-alpha.207" @@ -5670,10 +5670,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.217.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.217"') - || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"') + || !packwiz.contains('version = "26.2.0-alpha.218"') + || !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.25.jar"') || packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.12.jar"') @@ -5723,7 +5723,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.121", onlyfun: "0.0.0-alpha.25", ouch: "0.0.0-alpha.10", @@ -5740,7 +5740,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || rootProject.sanctuary_version != "0.0.0-alpha.121" || rootProject.onlyfun_version != "0.0.0-alpha.25" || rootProject.iliketomoveit_version != expectedTarget.iliketomoveit @@ -5786,10 +5786,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.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"') + || release.pack_version != "26.2.0-alpha.218" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" + || prism.versionId != "26.2.0-alpha.218" + || !packwiz.contains('version = "26.2.0-alpha.218"') || requiredJars.any { !packwizIndex.contains(it) } || obsoleteJars.any { packwizIndex.contains(it) } || jeiFiles.size() != 1 @@ -5838,8 +5838,8 @@ tasks.register("verifyAlpha211Release") { def currentModules = expectedTarget + [ sanctuary: "0.0.0-alpha.121", onlyfun: "0.0.0-alpha.25", - 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 -> @@ -5864,7 +5864,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || workspaceModules.any { id, version -> rootProject.property("${id}_version") != version } || migration.source?.pack_version != "26.2.0-alpha.210" || migration.source?.modules != expectedSource @@ -5892,9 +5892,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.217.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.217"') + || !packwiz.contains('version = "26.2.0-alpha.218"') || requiredJars.any { !packwizIndex.contains(it) } || obsoleteJars.any { packwizIndex.contains(it) } || prism.files?.size() != 5 @@ -5902,7 +5902,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.217`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.218`**")) { throw new GradleException("The alpha.211 Abjection and gameplay-polish release is incomplete") } } @@ -5936,7 +5936,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.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || rootProject.sanctuary_version != "0.0.0-alpha.121" || migration.source?.pack_version != "26.2.0-alpha.211" || migration.source?.modules != [sanctuary: "0.0.0-alpha.119"] @@ -5958,16 +5958,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.217" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" - || prism.versionId != "26.2.0-alpha.217" + || release.pack_version != "26.2.0-alpha.218" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" + || prism.versionId != "26.2.0-alpha.218" || prism.files?.size() != 5 || jeiFiles.size() != 1 - || !packwiz.contains('version = "26.2.0-alpha.217"') + || !packwiz.contains('version = "26.2.0-alpha.218"') || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.121.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.217`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.218`**")) { throw new GradleException("The alpha.212 Black Market startup-fix release is incomplete") } } @@ -6001,8 +6001,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.217" - || rootProject.ambiance_version != "0.0.0-alpha.19" + if (rootProject.pack_version != "26.2.0-alpha.218" + || 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" @@ -6025,16 +6025,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.217" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" - || prism.versionId != "26.2.0-alpha.217" + || release.pack_version != "26.2.0-alpha.218" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" + || prism.versionId != "26.2.0-alpha.218" || prism.files?.size() != 5 || jeiFiles.size() != 1 - || !packwiz.contains('version = "26.2.0-alpha.217"') - || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"') + || !packwiz.contains('version = "26.2.0-alpha.218"') + || !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.217`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.218`**")) { throw new GradleException("The alpha.213 Ambiance startup-fix release is incomplete") } } @@ -6069,8 +6069,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.217" - || rootProject.ambiance_version != "0.0.0-alpha.19" + if (rootProject.pack_version != "26.2.0-alpha.218" + || 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" @@ -6098,16 +6098,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.217" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" - || prism.versionId != "26.2.0-alpha.217" + || release.pack_version != "26.2.0-alpha.218" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" + || prism.versionId != "26.2.0-alpha.218" || prism.files?.size() != 5 - || !packwiz.contains('version = "26.2.0-alpha.217"') - || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"') + || !packwiz.contains('version = "26.2.0-alpha.218"') + || !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.217`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.218`**")) { throw new GradleException("The alpha.214 white-disc solo synchronization release is incomplete") } } @@ -6148,8 +6148,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.217" - || rootProject.ambiance_version != "0.0.0-alpha.19" + if (rootProject.pack_version != "26.2.0-alpha.218" + || 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" @@ -6184,19 +6184,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.217" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" - || prism.versionId != "26.2.0-alpha.217" + || !playbackSmoke.contains("stream.paddedSilenceBytes() != 0L") + || !playbackSmoke.contains("stream.decodedTimelineMillis() != 4_000L") + || release.pack_version != "26.2.0-alpha.218" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" + || prism.versionId != "26.2.0-alpha.218" || prism.files?.size() != 5 - || !packwiz.contains('version = "26.2.0-alpha.217"') - || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"') + || !packwiz.contains('version = "26.2.0-alpha.218"') + || !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.217`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.218`**")) { throw new GradleException("The alpha.215 resilient white-disc playback release is incomplete") } } @@ -6241,8 +6242,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.217" - || rootProject.ambiance_version != "0.0.0-alpha.19" + if (rootProject.pack_version != "26.2.0-alpha.218" + || 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" @@ -6272,7 +6273,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") @@ -6280,18 +6281,19 @@ 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.217" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" - || prism.versionId != "26.2.0-alpha.217" + || release.pack_version != "26.2.0-alpha.218" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" + || prism.versionId != "26.2.0-alpha.218" || prism.files?.size() != 5 - || !packwiz.contains('version = "26.2.0-alpha.217"') - || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"') + || !packwiz.contains('version = "26.2.0-alpha.218"') + || !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.217`**")) { + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.218`**")) { throw new GradleException("The alpha.216 white-disc audio-quality release is incomplete") } } @@ -6299,8 +6301,83 @@ tasks.register("verifyAlpha216Release") { tasks.register("verifyAlpha217Release") { group = "verification" - description = "Checks the Sanctuary 26.2.0-alpha.217 Storage Terminal release." - inputs.file(file("pack/migrations/26.2.0-alpha.216-storage-terminal-to-alpha.217.json")) + 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.218" + || 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.218" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" + || prism.versionId != "26.2.0-alpha.218" + || prism.files?.size() != 5 + || !packwiz.contains('version = "26.2.0-alpha.218"') + || !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.218`**")) { + throw new GradleException("The alpha.217 white-disc pitch release is incomplete") + } + } +} + +tasks.register("verifyAlpha218Release") { + group = "verification" + description = "Checks the Sanctuary 26.2.0-alpha.218 Storage Terminal release." + inputs.file(file("pack/migrations/26.2.0-alpha.217-storage-terminal-to-alpha.218.json")) inputs.file(file("pack/release.json")) inputs.file(file("pack/prism/modrinth.index.json")) inputs.file(file("pack/packwiz/pack.toml")) @@ -6316,7 +6393,7 @@ tasks.register("verifyAlpha217Release") { inputs.file(file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/BlackMarketItemPolicy.java")) doLast { def migration = new JsonSlurper().parse(file( - "pack/migrations/26.2.0-alpha.216-storage-terminal-to-alpha.217.json")) + "pack/migrations/26.2.0-alpha.217-storage-terminal-to-alpha.218.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 @@ -6344,11 +6421,11 @@ tasks.register("verifyAlpha217Release") { def obsoleteJars = sourceModules.collect { id, version -> "file = \"mods/${id}-${version}.jar\"" } - if (rootProject.pack_version != "26.2.0-alpha.217" + if (rootProject.pack_version != "26.2.0-alpha.218" || targetModules.any { id, version -> rootProject.property("${id}_version") != version } - || migration.source?.pack_version != "26.2.0-alpha.216" + || migration.source?.pack_version != "26.2.0-alpha.217" || migration.source?.modules != sourceModules - || migration.target?.pack_version != "26.2.0-alpha.217" + || migration.target?.pack_version != "26.2.0-alpha.218" || migration.target?.modules != targetModules || migration.storage_terminal?.id != "redstoner:storage_terminal" || migration.storage_terminal?.shape_depth_pixels != 8 @@ -6377,14 +6454,14 @@ tasks.register("verifyAlpha217Release") { || !onlyFunPolicy.contains('namespace.equals("redstoner") && path.equals("storage_terminal")') || !blackMarketPolicy.contains('namespace.equals("redstoner") && path.equals("storage_terminal")') || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.218.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.217"') + || !packwiz.contains('version = "26.2.0-alpha.218"') || requiredJars.any { !packwizIndex.contains(it) } || obsoleteJars.any { packwizIndex.contains(it) } - || !changelog.contains("## `26.2.0-alpha.217`") - || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.217`**")) { - throw new GradleException("The alpha.217 Storage Terminal release is incomplete") + || !changelog.contains("## `26.2.0-alpha.218`") + || !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.218`**")) { + throw new GradleException("The alpha.218 Storage Terminal release is incomplete") } } } @@ -6395,6 +6472,7 @@ tasks.named("verifyWorkspace") { dependsOn tasks.named("verifyAlpha215Release") dependsOn tasks.named("verifyAlpha216Release") dependsOn tasks.named("verifyAlpha217Release") + dependsOn tasks.named("verifyAlpha218Release") } tasks.named("check") { diff --git a/gradle.properties b/gradle.properties index 240394c..b5eb550 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.11 redstoner_lifecycle=active @@ -30,5 +30,5 @@ onlyfun_version=0.0.0-alpha.25 onlyfun_lifecycle=active sanctuary_version=0.0.0-alpha.121 sanctuary_lifecycle=active -pack_version=26.2.0-alpha.217 +pack_version=26.2.0-alpha.218 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/migrations/26.2.0-alpha.216-storage-terminal-to-alpha.217.json b/pack/migrations/26.2.0-alpha.217-storage-terminal-to-alpha.218.json similarity index 98% rename from pack/migrations/26.2.0-alpha.216-storage-terminal-to-alpha.217.json rename to pack/migrations/26.2.0-alpha.217-storage-terminal-to-alpha.218.json index 59e9e57..d4866d5 100644 --- a/pack/migrations/26.2.0-alpha.216-storage-terminal-to-alpha.217.json +++ b/pack/migrations/26.2.0-alpha.217-storage-terminal-to-alpha.218.json @@ -1,7 +1,7 @@ { "schema_version": 1, "source": { - "pack_version": "26.2.0-alpha.216", + "pack_version": "26.2.0-alpha.217", "modules": { "redstoner": "0.0.0-alpha.10", "onlyfun": "0.0.0-alpha.24", @@ -9,7 +9,7 @@ } }, "target": { - "pack_version": "26.2.0-alpha.217", + "pack_version": "26.2.0-alpha.218", "modules": { "redstoner": "0.0.0-alpha.11", "onlyfun": "0.0.0-alpha.25", diff --git a/pack/packwiz/index.toml b/pack/packwiz/index.toml index 01e0717..a53769e 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 = "9138adaaa0fb063100906e44453442d9e2596199769067207a2f7bd44f372756" +file = "mods/ambiance-0.0.0-alpha.20.jar" +hash = "09e37498ff4d38c7ff51305f92cfade9ac805d79ab8d005b9223569fad01aab5" [[files]] file = "mods/anotherworld-0.0.0-alpha.55.jar" -hash = "2d6250686739fd0bddcbff2d382e22fb9e403472926931f2879f6870af96ed64" +hash = "6e44c5242beb280be440360bcff0e56d202d838e45d7b228bb2ce43e93f63869" [[files]] file = "mods/events-0.0.0-alpha.0.jar" -hash = "4ac4ec54bf702a164443eb184796cca603cbad84607e794c2b24dbd5c7c221b9" +hash = "be156780aa383391204726cce4b9d582df5d851ffdbb0d9f16bd0523d798e7b9" [[files]] file = "mods/fabric-api.pw.toml" @@ -31,7 +31,7 @@ metafile = true [[files]] file = "mods/iliketomoveit-0.0.0-alpha.15.jar" -hash = "fe73255673eda5cbe16fe0bfd4a13951d9f103f58461ca84020e27cde408e569" +hash = "2c6a01a57836bec8df490114b77bda6ae9837ff972854ee75e5d8e4a56798c2b" [[files]] file = "mods/iris.pw.toml" @@ -40,7 +40,7 @@ metafile = true [[files]] file = "mods/itsalive-0.0.0-alpha.36.jar" -hash = "49aab5f4b3c9145d3cc4e64ce46bff138e4c6147c83c985d402024920d929d0d" +hash = "9a1d55f40932ddf4fb94a7fecf55bfc250c1f2c8a748e98541394f3c1efe2a3f" [[files]] file = "mods/jei.pw.toml" @@ -49,23 +49,23 @@ metafile = true [[files]] file = "mods/masterkey-0.0.0-alpha.8.jar" -hash = "9429a818c517b3943fdcbdd442800b9d854bf73c605df0f1ec761366574c129a" +hash = "17045102e074b9ebae06a9f4a897e6a40e7da12e6f86c9e41d4171ec1209d9a2" [[files]] file = "mods/onlyfun-0.0.0-alpha.25.jar" -hash = "005202d009ba00c5a3019aec6813cbdc2006d191299b2d1829051f73c2fb604a" +hash = "0d07cdcc1f4711a85675da02b0ecd4b4e521bd62dec410842a5f58556bddc91e" [[files]] file = "mods/ouch-0.0.0-alpha.10.jar" -hash = "b4b5c5cf8164f6a0ce6131031fcbd0840c048a249d1b7c6e08f5b7aeed0e7656" +hash = "e4ecfcb0f1f5795b99acf2417fe61a99855d501a5f7c59098bd15bd11a095499" [[files]] file = "mods/redstoner-0.0.0-alpha.11.jar" -hash = "457b4502ce2946963b4c2f21514a29c941f81df9bd1457f5db43fecdfa859a7e" +hash = "ea3d830b6b7fd71cb06e87209ada985a24ff2e4c56eb25f3ab754f1601f63026" [[files]] file = "mods/sanctuary-0.0.0-alpha.121.jar" -hash = "ef2c827774c768289e034c9715d4f27c347b533f7476a6d355c7b45123fedcec" +hash = "adb26ac28908b701a88e4bc648761f1999087aceb7a2c84e17a439d3d1c9b255" [[files]] file = "mods/simple-voice-chat.pw.toml" diff --git a/pack/packwiz/pack.toml b/pack/packwiz/pack.toml index daa47a2..8642b16 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.217" +version = "26.2.0-alpha.218" pack-format = "packwiz:1.1.0" [index] file = "index.toml" hash-format = "sha256" -hash = "176382d1bdb3797ba19d8d7acb093b9b49156f3b5b3270db803e59d24c6de7e1" +hash = "6394d7e62de15e0fb09f5a1bc7e3a802ca6b140072674ff7111d11de15ed444e" [versions] fabric = "0.19.3" diff --git a/pack/prism/modrinth.index.json b/pack/prism/modrinth.index.json index 154861a..41df0ea 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.217", + "versionId": "26.2.0-alpha.218", "files": [ { "path": "mods/fabric-api-0.158.0+26.2.jar", diff --git a/pack/release.json b/pack/release.json index 755defa..b7e64d4 100644 --- a/pack/release.json +++ b/pack/release.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "pack_version": "26.2.0-alpha.217", + "pack_version": "26.2.0-alpha.218", "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.217.mrpack", + "primary_file": "sanctuary-26.2.0-alpha.218.mrpack", "shared_client_server_pack": true, "update_owner": "packwiz-installer", "check_on_launch": true,