Fix white disc audio cadence and release alpha.216 #89

Merged
koka merged 1 commits from fix/white-disc-audio-quality into main 2026-08-29 23:26:11 +00:00
14 changed files with 396 additions and 142 deletions
+11
View File
@@ -6,6 +6,17 @@ 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.216`
Module modifié : **Ambiance `0.0.0-alpha.19`**. Les neuf autres modules conservent leur version issue de l'alpha.215.
- corrige le disque blanc ralenti et dégradé en remplissant continûment les tampons PCM dune seconde demandés par Minecraft au lieu de les compléter prématurément avec du silence ;
- conserve une fréquence réelle de 48 kHz, un flux mono 16 bits little-endian et force la vitesse OpenAL normale à `1.0` ;
- borne chaque attente de trame à 250 ms après le démarrage afin de garder un flux continu sans bloquer indéfiniment le thread audio ;
- ajoute un test déterministe des tampons Minecraft et renforce le test YouTube réel sur quatre secondes complètes ;
- conserve les données Ambiance v2, le protocole réseau 6, les IDs et les sauvegardes existantes ;
- distribue Ambiance `0.0.0-alpha.19` dans Packwiz et le `.mrpack` partagé client/serveur, sans exiger de nouveau monde ni réinitialiser les sauvegardes.
## `26.2.0-alpha.215`
Module modifié : **Ambiance `0.0.0-alpha.18`**. Les neuf autres modules conservent leur version issue de l'alpha.214.
+2 -2
View File
@@ -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.215`**. Cette release corrective distribue Ambiance **`0.0.0-alpha.18`** ; les neuf autres modules conservent leur version issue de l'alpha.214.
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.
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.
Lalpha.215 stabilise le disque blanc : le décodage YouTube utilise la source corrigée, les arrêts et erreurs restent sur les threads audio appropriés et ne font plus tomber le client. Les packs Modrinth, Prism et Packwiz sont mis à jour sans exiger de nouveau monde ni réinitialiser les sauvegardes.
Lalpha.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.
Lalpha.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 lattaquant sans créer des millions dentités ou de piles dobjets.
+16 -4
View File
@@ -74,16 +74,25 @@ tasks.register("whiteDiscPlaybackSmoke", JavaExec) {
mainClass = "fr.koka99cab.sanctuary26.ambiance.client.audio.WhiteDiscPlaybackSmoke"
}
tasks.register("whiteDiscStreamSmoke", JavaExec) {
group = "verification"
description = "Checks continuous 48 kHz PCM buffering for Minecraft's white-disc channel."
dependsOn tasks.named("testClasses")
classpath = sourceSets.test.runtimeClasspath
mainClass = "fr.koka99cab.sanctuary26.ambiance.client.audio.LavaplayerAudioStreamSmoke"
}
tasks.named("test") {
failOnNoDiscoveredTests = false
}
tasks.register("verifyAmbiance") {
group = "verification"
description = "Checks Ambiance alpha.18, including resilient white-disc YouTube playback."
description = "Checks Ambiance alpha.19, including continuous white-disc PCM playback."
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"))
inputs.file(file("src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java"))
inputs.file(rootProject.file("pack/migrations/26.2.0-alpha.125-realtime-calendar-to-alpha.126.json"))
inputs.file(rootProject.file("pack/migrations/26.2.0-alpha.127-daily-ambiance-sodium-iris-to-alpha.128.json"))
inputs.file(rootProject.file("pack/migrations/26.2.0-alpha.128-ambiance-visuals-canon-iris-to-alpha.129.json"))
@@ -138,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.18"
if (project.version.toString() != "0.0.0-alpha.19"
|| 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"
@@ -346,7 +355,9 @@ tasks.register("verifyAmbiance") {
|| !javaText.contains('player.addListener(new AudioEventAdapter()')
|| !javaText.contains('failPlayback(client, key, failedPlayer)')
|| !javaText.contains('initialWaitAttempted')
|| !javaText.contains('frame = player.provide()')
|| !javaText.contains('CONTINUATION_FRAME_WAIT_MILLIS = 250L')
|| !javaText.contains('player.provide(waitMillis, TimeUnit.MILLISECONDS)')
|| !whiteDiscAudioPlayer.contains('channel.setPitch(1.0F)')
|| !whiteDiscAudioPlayer.contains('handle.execute(channel -> channel.stop())')
|| whiteDiscAudioPlayer.contains('.release()')
|| !whiteDiscPlaybackSmoke.contains('https://www.youtube.com/watch?v=Ue5ZBe-GzSM')
@@ -375,7 +386,7 @@ tasks.register("verifyAmbiance") {
|| !file("build.gradle").text.contains(
'def youtubeSourceVersion = "f45bbb7aebfcbc1c553769e04af6cd43afa8b7c3-SNAPSHOT"')
|| !file("build.gradle").text.contains('dev.lavalink.youtube:v2:${youtubeSourceVersion}')) {
throw new GradleException("Ambiance alpha.18 white-disc playback contract is incomplete")
throw new GradleException("Ambiance white-disc playback contract is incomplete")
}
[
@@ -429,4 +440,5 @@ tasks.named("check") {
dependsOn tasks.named("ambianceScheduleSmoke")
dependsOn tasks.named("ambianceVisualApiSmoke")
dependsOn tasks.named("whiteDiscUrlSmoke")
dependsOn tasks.named("whiteDiscStreamSmoke")
}
@@ -12,6 +12,8 @@ import net.minecraft.client.sounds.AudioStream;
/** Adapts bounded mono PCM frames from Lavaplayer to Minecraft's streaming OpenAL channel. */
final class LavaplayerAudioStream implements AudioStream {
static final int SAMPLE_RATE = 48_000;
private static final long INITIAL_FRAME_WAIT_MILLIS = 2_000L;
private static final long CONTINUATION_FRAME_WAIT_MILLIS = 250L;
private static final AudioFormat FORMAT =
new AudioFormat(SAMPLE_RATE, 16, 1, true, false);
private final AudioPlayer player;
@@ -61,13 +63,11 @@ final class LavaplayerAudioStream implements AudioStream {
private AudioFrame nextFrame() throws IOException {
try {
AudioFrame frame;
if (!initialWaitAttempted) {
initialWaitAttempted = true;
frame = player.provide(2, TimeUnit.SECONDS);
} else {
frame = player.provide();
}
long waitMillis = initialWaitAttempted
? CONTINUATION_FRAME_WAIT_MILLIS
: INITIAL_FRAME_WAIT_MILLIS;
initialWaitAttempted = true;
AudioFrame frame = player.provide(waitMillis, TimeUnit.MILLISECONDS);
if (frame == null && player.getPlayingTrack() == null) ended = true;
return frame;
} catch (TimeoutException ignored) {
@@ -150,6 +150,7 @@ public final class WhiteDiscAudioPlayer {
try {
channel.setSelfPosition(Vec3.atCenterOf(pos));
channel.setRelative(false);
channel.setPitch(1.0F);
channel.linearAttenuation(ATTENUATION_DISTANCE);
channel.setVolume(volume);
channel.attachBufferStream(stream);
@@ -0,0 +1,80 @@
package fr.koka99cab.sanctuary26.ambiance.client.audio;
import com.sedmelluq.discord.lavaplayer.format.Pcm16AudioDataFormat;
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
import com.sedmelluq.discord.lavaplayer.track.playback.AudioFrame;
import com.sedmelluq.discord.lavaplayer.track.playback.ImmutableAudioFrame;
import java.lang.reflect.Proxy;
import java.nio.ByteBuffer;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Queue;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
/** Deterministic check for Minecraft's four one-second streaming buffers. */
public final class LavaplayerAudioStreamSmoke {
private static final int FRAME_SAMPLES = 960;
private static final int FRAME_BYTES = FRAME_SAMPLES * 2;
private static final int FRAMES_PER_SECOND = LavaplayerAudioStream.SAMPLE_RATE / FRAME_SAMPLES;
private LavaplayerAudioStreamSmoke() {
}
public static void main(String[] args) throws Exception {
Queue<AudioFrame> frames = new ArrayDeque<>();
Pcm16AudioDataFormat format = new Pcm16AudioDataFormat(
1, LavaplayerAudioStream.SAMPLE_RATE, FRAME_SAMPLES, false);
for (int index = 0; index < FRAMES_PER_SECOND; index++) {
byte[] data = new byte[FRAME_BYTES];
Arrays.fill(data, (byte) (index + 1));
frames.add(new ImmutableAudioFrame(index * 20L, data, 100, format));
}
AtomicInteger timedProvides = new AtomicInteger();
AtomicInteger nonBlockingProvides = new AtomicInteger();
AtomicBoolean destroyed = new AtomicBoolean();
AudioPlayer player = (AudioPlayer) Proxy.newProxyInstance(
AudioPlayer.class.getClassLoader(), new Class<?>[] {AudioPlayer.class},
(proxy, method, arguments) -> switch (method.getName()) {
case "provide" -> {
if (method.getParameterCount() == 2) {
timedProvides.incrementAndGet();
yield frames.poll();
}
nonBlockingProvides.incrementAndGet();
yield null;
}
case "destroy" -> {
destroyed.set(true);
yield null;
}
case "getPlayingTrack" -> null;
case "getVolume" -> 100;
case "isPaused", "startTrack" -> false;
default -> null;
});
LavaplayerAudioStream stream = new LavaplayerAudioStream(player);
ByteBuffer pcm = stream.read(LavaplayerAudioStream.SAMPLE_RATE * 2);
if (pcm == null || pcm.remaining() != LavaplayerAudioStream.SAMPLE_RATE * 2) {
throw new IllegalStateException("The stream did not fill Minecraft's one-second buffer");
}
while (pcm.hasRemaining()) {
if (pcm.get() == 0) {
throw new IllegalStateException("The stream padded available PCM with silence");
}
}
if (timedProvides.get() != FRAMES_PER_SECOND || nonBlockingProvides.get() != 0) {
throw new IllegalStateException("PCM frames were not read with bounded waits");
}
if (stream.getFormat().getSampleRate() != LavaplayerAudioStream.SAMPLE_RATE
|| stream.getFormat().isBigEndian()) {
throw new IllegalStateException("The OpenAL PCM format is not 48 kHz little-endian");
}
stream.close();
if (!destroyed.get()) {
throw new IllegalStateException("Closing the stream did not destroy its player");
}
}
}
@@ -31,18 +31,28 @@ public final class WhiteDiscPlaybackSmoke {
player.playTrack(track);
LavaplayerAudioStream stream = new LavaplayerAudioStream(player);
int decodedBytes = 0;
int totalBytes = 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++;
}
}
if (decodedBytes == 0) {
throw new IllegalStateException("YouTube playback produced no audible PCM data");
}
System.out.println("Decoded audible PCM data from "
+ track.getInfo().title);
double audibleRatio = (double) decodedBytes / totalBytes;
if (totalBytes != LavaplayerAudioStream.SAMPLE_RATE * 2 * 4) {
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");
}
System.out.printf("Decoded audible PCM data: %.1f%% at %.0f Hz from %s%n",
audibleRatio * 100.0, stream.getFormat().getSampleRate(), track.getInfo().title);
stream.close();
} finally {
manager.shutdown();
+206 -109
View File
@@ -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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.215.mrpack"
|| prism.versionId != "26.2.0-alpha.215"
|| !packwiz.contains('version = "26.2.0-alpha.215"')) {
|| 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"')) {
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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.215.mrpack"
|| prism.versionId != "26.2.0-alpha.215"
|| !packwiz.contains('version = "26.2.0-alpha.215"')) {
|| 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"')) {
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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.215.mrpack"
|| prism.versionId != "26.2.0-alpha.215"
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| 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/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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.215.mrpack"
|| prism.versionId != "26.2.0-alpha.215"
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| 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/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.215"
|| rootProject.ambiance_version != "0.0.0-alpha.18"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| rootProject.ambiance_version != "0.0.0-alpha.19"
|| 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.215"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.215.mrpack"
|| prism.versionId != "26.2.0-alpha.215"
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.18.jar"')
|| 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"')
|| !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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.215.mrpack"
|| prism.versionId != "26.2.0-alpha.215"
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| 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/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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.215.mrpack"
|| prism.versionId != "26.2.0-alpha.215"
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| 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/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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215.mrpack"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != rootProject.pack_version
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215.mrpack"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != rootProject.pack_version
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215.mrpack"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != rootProject.pack_version
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215.mrpack"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != rootProject.pack_version
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215.mrpack"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != rootProject.pack_version
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|| rootProject.ambiance_version != "0.0.0-alpha.18"
|| rootProject.ambiance_version != "0.0.0-alpha.19"
|| 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.215"
|| rootProject.ambiance_version != "0.0.0-alpha.18"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| rootProject.ambiance_version != "0.0.0-alpha.19"
|| 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.215.mrpack"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != rootProject.pack_version
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.18.jar"')
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.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.18",
ambiance: "0.0.0-alpha.19",
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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.215.mrpack"
|| prism.versionId != "26.2.0-alpha.215"
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| 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"')
|| 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.18"]
def workspaceModules = currentModules + [ambiance: "0.0.0-alpha.18"]
ambiance: "0.0.0-alpha.19"]
def workspaceModules = currentModules + [ambiance: "0.0.0-alpha.19"]
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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215.mrpack"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != rootProject.pack_version
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| 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.215`**")) {
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) {
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.215"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| 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.215"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.215.mrpack"
|| prism.versionId != "26.2.0-alpha.215"
|| 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"
|| prism.files?.size() != 5
|| jeiFiles.size() != 1
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !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.215`**")) {
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) {
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.215"
|| rootProject.ambiance_version != "0.0.0-alpha.18"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| rootProject.ambiance_version != "0.0.0-alpha.19"
|| 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.215"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.215.mrpack"
|| prism.versionId != "26.2.0-alpha.215"
|| 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"
|| prism.files?.size() != 5
|| jeiFiles.size() != 1
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.18.jar"')
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.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.215`**")) {
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) {
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.215"
|| rootProject.ambiance_version != "0.0.0-alpha.18"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| rootProject.ambiance_version != "0.0.0-alpha.19"
|| 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.215"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.215.mrpack"
|| prism.versionId != "26.2.0-alpha.215"
|| 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"
|| prism.files?.size() != 5
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.18.jar"')
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.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.215`**")) {
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) {
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.215"
|| rootProject.ambiance_version != "0.0.0-alpha.18"
if (rootProject.pack_version != "26.2.0-alpha.216"
|| rootProject.ambiance_version != "0.0.0-alpha.19"
|| 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"
@@ -6127,30 +6127,127 @@ tasks.register("verifyAlpha215Release") {
|| !audioPlayer.contains("failPlayback(client, key, failedPlayer)")
|| !audioPlayer.contains("handle.execute(channel -> channel.stop())")
|| audioPlayer.contains(".release()")
|| !audioStream.contains("player.provide(2, TimeUnit.SECONDS)")
|| !audioStream.contains("frame = player.provide()")
|| !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)")
|| !playbackSmoke.contains("https://www.youtube.com/watch?v=Ue5ZBe-GzSM")
|| !playbackSmoke.contains("Decoded audible PCM data")
|| release.pack_version != "26.2.0-alpha.215"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.215.mrpack"
|| prism.versionId != "26.2.0-alpha.215"
|| 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"
|| prism.files?.size() != 5
|| !packwiz.contains('version = "26.2.0-alpha.215"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.18.jar"')
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.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.215`**")) {
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) {
throw new GradleException("The alpha.215 resilient white-disc playback release is incomplete")
}
}
}
tasks.register("verifyAlpha216Release") {
group = "verification"
description = "Checks the Sanctuary 26.2.0-alpha.216 white-disc audio-quality release."
inputs.file(file("pack/migrations/26.2.0-alpha.215-white-disc-audio-quality-to-alpha.216.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/build.gradle"))
inputs.file(file(
"ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java"))
inputs.file(file(
"ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStream.java"))
inputs.file(file(
"ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java"))
inputs.file(file(
"ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java"))
doLast {
def migration = new JsonSlurper().parse(file(
"pack/migrations/26.2.0-alpha.215-white-disc-audio-quality-to-alpha.216.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 ambianceBuild = file("ambiance/build.gradle").text
def audioPlayer = file(
"ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java").text
def audioStream = file(
"ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStream.java").text
def streamSmoke = file(
"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"
|| 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"
|| migration.target?.modules != [ambiance: "0.0.0-alpha.19"]
|| migration.features?.white_disc_continuous_pcm_buffering != true
|| migration.features?.sample_rate_hz != 48_000
|| migration.features?.channel_count != 1
|| migration.features?.sample_size_bits != 16
|| migration.features?.minecraft_stream_buffer_seconds != 1
|| migration.features?.minecraft_initial_buffer_count != 4
|| migration.features?.initial_frame_wait_millis != 2_000
|| migration.features?.continuation_frame_wait_millis != 250
|| migration.features?.openal_pitch != 1.0
|| migration.features?.live_pcm_smoke_video_id != "Ue5ZBe-GzSM"
|| migration.features?.minimum_live_audible_byte_ratio != 0.75
|| migration.features?.deterministic_stream_smoke != true
|| 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
|| !ambianceBuild.contains('tasks.register("whiteDiscStreamSmoke"')
|| !audioPlayer.contains("channel.setPitch(1.0F)")
|| !audioStream.contains("SAMPLE_RATE = 48_000")
|| !audioStream.contains("INITIAL_FRAME_WAIT_MILLIS = 2_000L")
|| !audioStream.contains("CONTINUATION_FRAME_WAIT_MILLIS = 250L")
|| !audioStream.contains("player.provide(waitMillis, TimeUnit.MILLISECONDS)")
|| !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("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"
|| prism.files?.size() != 5
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.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`**")) {
throw new GradleException("The alpha.216 white-disc audio-quality release is incomplete")
}
}
}
tasks.named("verifyWorkspace") {
dependsOn tasks.named("verifyAlpha213Release")
dependsOn tasks.named("verifyAlpha214Release")
dependsOn tasks.named("verifyAlpha215Release")
dependsOn tasks.named("verifyAlpha216Release")
}
tasks.named("check") {
+2 -2
View File
@@ -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.18
ambiance_version=0.0.0-alpha.19
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.215
pack_version=26.2.0-alpha.216
maven_group=fr.koka99cab.sanctuary26
@@ -0,0 +1,43 @@
{
"schema_version": 1,
"source": {
"pack_version": "26.2.0-alpha.215",
"modules": {
"ambiance": "0.0.0-alpha.18"
}
},
"target": {
"pack_version": "26.2.0-alpha.216",
"modules": {
"ambiance": "0.0.0-alpha.19"
}
},
"features": {
"white_disc_continuous_pcm_buffering": true,
"sample_rate_hz": 48000,
"channel_count": 1,
"sample_size_bits": 16,
"minecraft_stream_buffer_seconds": 1,
"minecraft_initial_buffer_count": 4,
"initial_frame_wait_millis": 2000,
"continuation_frame_wait_millis": 250,
"openal_pitch": 1.0,
"live_pcm_smoke_video_id": "Ue5ZBe-GzSM",
"minimum_live_audible_byte_ratio": 0.75,
"deterministic_stream_smoke": true
},
"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
}
}
+11 -11
View File
@@ -13,16 +13,16 @@ file = "instance-icon.png"
hash = "41f4f4c88c71d0a23446d5014f7407d55ad477441847099cad24492b032335a0"
[[files]]
file = "mods/ambiance-0.0.0-alpha.18.jar"
hash = "c029bbdf428e4037c22185680629b641c8bd6e60465fa72e3498b88bdc8d74f9"
file = "mods/ambiance-0.0.0-alpha.19.jar"
hash = "d3810b758e073d74efbaa501e39b0865335baf1089ff76a2554d24c6e13188ee"
[[files]]
file = "mods/anotherworld-0.0.0-alpha.55.jar"
hash = "c2649632bbce4ac134cc7cb6bd17b318f395fe878a1e61fdbdfffb880415f4aa"
hash = "56015a9d3c3517c948e336eab973205f84772a4f3a0b790e6f2832824ee44f3a"
[[files]]
file = "mods/events-0.0.0-alpha.0.jar"
hash = "4cb03d4d24c469e2cf578a1f46d93bbaa69ecc26e83f9a786758cee744fe160d"
hash = "bcc501a0fd6e8074cb3c4de26f607952d7ea63d630a697d95bfa59e90feae057"
[[files]]
file = "mods/fabric-api.pw.toml"
@@ -31,7 +31,7 @@ metafile = true
[[files]]
file = "mods/iliketomoveit-0.0.0-alpha.15.jar"
hash = "3adaa6926d0a22d6c7f3a30260457d2e7ddc3ce145fa84d7b1156305645400a5"
hash = "551e354b96bb35ed8d64b26a4aac85d1d9441be592ed9fc62d6cd359e0e0e0c5"
[[files]]
file = "mods/iris.pw.toml"
@@ -40,7 +40,7 @@ metafile = true
[[files]]
file = "mods/itsalive-0.0.0-alpha.36.jar"
hash = "9cfcc87d6018573fb45a37b71ceb019ba65253ef973cdc8b5c39a78792bff691"
hash = "3ff1e1ee2156553b78bf0bded03140d34844f7ab7f0ea6b48929d2c61a8c34bc"
[[files]]
file = "mods/jei.pw.toml"
@@ -49,23 +49,23 @@ metafile = true
[[files]]
file = "mods/masterkey-0.0.0-alpha.8.jar"
hash = "c88d26fd649ad841b69d7fb72b075c392e4b878bc1bdeea811dd3d549625b33b"
hash = "268b30dcb808d8d2db1b909863beb9974b432fa558e7cd516dde811f600fd66e"
[[files]]
file = "mods/onlyfun-0.0.0-alpha.24.jar"
hash = "a3c50be3b95705c5dd8b547599610af8332765215f1749818a18e504a00866a4"
hash = "e6b89c1958449fb5bb70bb011df26cecc8f91a224b79788e96827a3897dfba4a"
[[files]]
file = "mods/ouch-0.0.0-alpha.10.jar"
hash = "0304e064ac3e497c9f8fcf8836575add04ea96f46d35fdbe6da50e926c070ff1"
hash = "d12d57580015a829f6fc31310cf5724bad1b442380aaf6272194caeed21a50fc"
[[files]]
file = "mods/redstoner-0.0.0-alpha.10.jar"
hash = "db41fcbd3daab88d17daf03ae5f7bc0aa134d6e1663ff6edfd80a7983f13a779"
hash = "d210ed751188e7e3e5ce197f498518c06cb5673e4057103cd0964c1a8d2b0066"
[[files]]
file = "mods/sanctuary-0.0.0-alpha.120.jar"
hash = "6f67724d6813d473ea06c62cdfd5d617a27199d6061895b89f62bb5d31becb8b"
hash = "f82fc135319d0ad25bed49f2fe924d506761391343265add2efd6c73d55f939a"
[[files]]
file = "mods/simple-voice-chat.pw.toml"
+2 -2
View File
@@ -1,12 +1,12 @@
name = "Sanctuary 26.2"
author = "KOKA99CAB"
version = "26.2.0-alpha.215"
version = "26.2.0-alpha.216"
pack-format = "packwiz:1.1.0"
[index]
file = "index.toml"
hash-format = "sha256"
hash = "17231ac01c162a453e9000ee6419f7fbc884cf4b94c3b0956c12596cf36df9dd"
hash = "7a9a44c1f7dcd46aab475cdd2ac078758f320a550386140d89af994acd7c29d1"
[versions]
fabric = "0.19.3"
+1 -1
View File
@@ -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.215",
"versionId": "26.2.0-alpha.216",
"files": [
{
"path": "mods/fabric-api-0.158.0+26.2.jar",
+2 -2
View File
@@ -1,6 +1,6 @@
{
"schema_version": 1,
"pack_version": "26.2.0-alpha.215",
"pack_version": "26.2.0-alpha.216",
"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.215.mrpack",
"primary_file": "sanctuary-26.2.0-alpha.216.mrpack",
"shared_client_server_pack": true,
"update_owner": "packwiz-installer",
"check_on_launch": true,