fix(ambiance): corriger la hauteur du disque blanc — alpha.217 #92

Closed
koka wants to merge 2 commits from fix/white-disc-full-pcm into main
14 changed files with 341 additions and 160 deletions
+10
View File
@@ -6,6 +6,16 @@ Ce journal suit les **versions du modpack**. Lorsqu'un seul module change, sa ve
- Depuis `26.2.0-alpha.6`, le pack et les modules ont des versions indépendantes. I Like To Move It et Only Fun deviennent les cinquième et sixième modules actifs dans l'alpha 46.
- Les versions ci-dessous ont été reconstituées à partir des JAR archivés, des packs locaux et du code source actuel. Les dates n'étant pas enregistrées de manière fiable, elles ne sont pas inventées.
## `26.2.0-alpha.217`
Module modifié : **Ambiance `0.0.0-alpha.20`**. Les neuf autres modules conservent leur version issue de l'alpha.216.
- corrige la hauteur trop grave et la vitesse trop lente du disque blanc en compensant la cadence du flux AAC YouTube par un facteur OpenAL exact de `4/3` ;
- réapplique cette hauteur pendant toute la lecture afin quaucune 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.
+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.216`**. Cette release corrective distribue Ambiance **`0.0.0-alpha.19`** ; les neuf autres modules conservent leur version issue de l'alpha.215.
Version courante du pack distribué : **`26.2.0-alpha.217`**. Cette release corrective distribue Ambiance **`0.0.0-alpha.20`** ; les neuf autres modules conservent leur version issue de l'alpha.216.
La migration [CANA-01 à CANA-09](CANAPLIA.md) porte Canaplia vers Minecraft 26.2. It's Alive **`0.0.0-alpha.35`** enregistre les seize familles, les découvertes, hybridations, résines, effets serveur et le Livre interdit personnel, partageable temporairement sur un pupitre. Ambiance **`0.0.0-alpha.14`** compose les profils visuels bornés avec ses réglages d'accessibilité, et Only Fun **`0.0.0-alpha.21`** exclut explicitement Canaplia et les raccourcis de progression du Shop.
Lalpha.216 corrige la lecture lente et dégrae 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.217 corrige définitivement la hauteur trop grave du disque blanc : la cadence AAC mesurée sur la vidéo signalée est compensée par un facteur OpenAL exact de 4/3, maintenu pendant toute la lecture. Les packs Modrinth, Prism et Packwiz sont mis à jour sans exiger de nouveau monde ni réinitialiser les sauvegardes.
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.
+7 -4
View File
@@ -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(')
@@ -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;
@@ -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<Long, PendingStart> PENDING_STARTS = new HashMap<>();
private static final Map<Long, Long> 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);
});
}
}
@@ -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<AudioFrame> frames = new ArrayDeque<>();
Pcm16AudioDataFormat format = new Pcm16AudioDataFormat(
1, LavaplayerAudioStream.SAMPLE_RATE, FRAME_SAMPLES, false);
@@ -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();
+197 -119
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.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.sanctuary_version != "0.0.0-alpha.120"
|| rootProject.onlyfun_version != "0.0.0-alpha.24"
|| release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version
@@ -3487,7 +3487,7 @@ tasks.register("verifyMirrorLavenderDrawerRelease") {
def redStonerRegistry = file(
"redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/registry/RedStonerRegistries.java").text
def drawerRecipe = file("redstoner/src/main/resources/data/redstoner/recipe/drawer.json")
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.anotherworld_version != "0.0.0-alpha.55"
|| rootProject.redstoner_version != "0.0.0-alpha.10"
|| release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version
@@ -4206,7 +4206,7 @@ tasks.register("verifyShopPricingLayoutRelease") {
"pack/migrations/26.2.0-alpha.192-shop-pricing-layout-to-alpha.193.json"))
def release = new JsonSlurper().parse(file("pack/release.json"))
def index = new JsonSlurper().parse(file("pack/prism/modrinth.index.json"))
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.onlyfun_version != "0.0.0-alpha.24"
|| rootProject.sanctuary_version != "0.0.0-alpha.120"
|| release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version
@@ -4251,7 +4251,7 @@ tasks.register("verifyCuisineCropsRelease") {
def climate = file("itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/agriculture/ClimateCropForaging.java").text
def rice = file("itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/agriculture/RiceCropBlock.java").text
def bean = file("itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/agriculture/BeanCropBlock.java").text
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|| release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version
|| migration.source?.pack_version != "26.2.0-alpha.193"
@@ -4300,7 +4300,7 @@ tasks.register("verifyShopCsvBossGatesRelease") {
def bossGate = file("onlyfun/src/main/java/fr/koka99cab/sanctuary26/onlyfun/shop/OnlyFunBossShopGate.java").text
def catalog = file("onlyfun/src/main/java/fr/koka99cab/sanctuary26/onlyfun/shop/OnlyFunShopCatalog.java").text
def offerCatalog = file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopOfferCatalog.java").text
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.onlyfun_version != "0.0.0-alpha.24"
|| rootProject.sanctuary_version != "0.0.0-alpha.120"
|| release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version
@@ -4346,7 +4346,7 @@ tasks.register("verifyCulinaryMailboxGrappleFixesRelease") {
def release = new JsonSlurper().parse(file("pack/release.json"))
def prism = new JsonSlurper().parse(file("pack/prism/modrinth.index.json"))
def packwiz = file("pack/packwiz/pack.toml").text
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| migration.source?.pack_version != "26.2.0-alpha.195"
|| migration.target?.pack_version != "26.2.0-alpha.196"
|| migration.target?.modules != [
@@ -4364,10 +4364,10 @@ tasks.register("verifyCulinaryMailboxGrappleFixesRelease") {
|| migration.distribution?.jei?.target != "30.26.0.182"
|| migration.compatibility?.save_migration_required != false
|| migration.compatibility?.registry_ids_changed != false
|| release.pack_version != "26.2.0-alpha.216"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != "26.2.0-alpha.216"
|| !packwiz.contains('version = "26.2.0-alpha.216"')) {
|| release.pack_version != "26.2.0-alpha.217"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != "26.2.0-alpha.217"
|| !packwiz.contains('version = "26.2.0-alpha.217"')) {
throw new GradleException("The alpha.196 culinary, mailbox and grapple release contract is incomplete")
}
}
@@ -4392,7 +4392,7 @@ tasks.register("verifyQuestRequestsCauldronBatchesRelease") {
def prism = new JsonSlurper().parse(file("pack/prism/modrinth.index.json"))
def packwiz = file("pack/packwiz/pack.toml").text
def sanctuaryManifest = new JsonSlurper().parse(file("sanctuary/src/main/resources/fabric.mod.json"))
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|| rootProject.sanctuary_version != "0.0.0-alpha.120"
|| migration.source?.pack_version != "26.2.0-alpha.196"
@@ -4412,10 +4412,10 @@ tasks.register("verifyQuestRequestsCauldronBatchesRelease") {
|| migration.distribution?.jei?.target != "30.26.0.186"
|| migration.compatibility?.sanctuary_target_network_protocol != 19
|| sanctuaryManifest.custom?.sanctuary26?.network_protocol != 22
|| release.pack_version != "26.2.0-alpha.216"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != "26.2.0-alpha.216"
|| !packwiz.contains('version = "26.2.0-alpha.216"')) {
|| release.pack_version != "26.2.0-alpha.217"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != "26.2.0-alpha.217"
|| !packwiz.contains('version = "26.2.0-alpha.217"')) {
throw new GradleException("The alpha.197 quest-request and cauldron-batch release contract is incomplete")
}
}
@@ -4442,7 +4442,7 @@ tasks.register("verifyFermentationBarrelAutomationRelease") {
def packwiz = file("pack/packwiz/pack.toml").text
def packwizIndex = file("pack/packwiz/index.toml").text
def itsAliveManifest = new JsonSlurper().parse(file("itsalive/src/main/resources/fabric.mod.json"))
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|| migration.source?.pack_version != "26.2.0-alpha.197"
|| migration.target?.pack_version != "26.2.0-alpha.198"
@@ -4461,10 +4461,10 @@ tasks.register("verifyFermentationBarrelAutomationRelease") {
|| migration.distribution?.packwiz_index_refreshed != true
|| itsAliveManifest.custom?.sanctuary26?.data_version != 3
|| itsAliveManifest.custom?.sanctuary26?.network_protocol != 4
|| release.pack_version != "26.2.0-alpha.216"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != "26.2.0-alpha.216"
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| release.pack_version != "26.2.0-alpha.217"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != "26.2.0-alpha.217"
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.36.jar"')) {
throw new GradleException("The alpha.198 fermentation barrel release contract is incomplete")
}
@@ -4492,7 +4492,7 @@ tasks.register("verifyQuestRequestContractsRelease") {
def packwiz = file("pack/packwiz/pack.toml").text
def packwizIndex = file("pack/packwiz/index.toml").text
def sanctuaryManifest = new JsonSlurper().parse(file("sanctuary/src/main/resources/fabric.mod.json"))
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|| rootProject.sanctuary_version != "0.0.0-alpha.120"
|| migration.source?.pack_version != "26.2.0-alpha.198"
@@ -4506,10 +4506,10 @@ tasks.register("verifyQuestRequestContractsRelease") {
|| migration.quest_request_contracts?.chat_accept_revalidates_distance_owner_sign_and_claim != true
|| migration.compatibility?.sanctuary_target_network_protocol != 20
|| sanctuaryManifest.custom?.sanctuary26?.network_protocol != 22
|| release.pack_version != "26.2.0-alpha.216"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != "26.2.0-alpha.216"
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| release.pack_version != "26.2.0-alpha.217"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != "26.2.0-alpha.217"
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.36.jar"')
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.120.jar"')) {
throw new GradleException("The alpha.199 quest-request contract release is incomplete")
@@ -4547,8 +4547,8 @@ tasks.register("verifyWeatherTntAmbianceRelease") {
def ambianceManifest = new JsonSlurper().parse(file("ambiance/src/main/resources/fabric.mod.json"))
def ouchManifest = new JsonSlurper().parse(file("ouch/src/main/resources/fabric.mod.json"))
def rootBuild = file("build.gradle").text
if (rootProject.pack_version != "26.2.0-alpha.216"
|| rootProject.ambiance_version != "0.0.0-alpha.19"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.ambiance_version != "0.0.0-alpha.20"
|| rootProject.ouch_version != "0.0.0-alpha.10"
|| migration.source?.pack_version != "26.2.0-alpha.199"
|| migration.source?.modules != [ambiance: "0.0.0-alpha.11", ouch: "0.0.0-alpha.8"]
@@ -4581,11 +4581,11 @@ tasks.register("verifyWeatherTntAmbianceRelease") {
|| !weatherTnt.contains("AmbianceDailyWeather.CLEAR")
|| !weatherTnt.contains("CLEAR_WEATHER_TICKS = 864_000")
|| weatherTnt.contains("setWeatherParameters")
|| release.pack_version != "26.2.0-alpha.216"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != "26.2.0-alpha.216"
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"')
|| release.pack_version != "26.2.0-alpha.217"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != "26.2.0-alpha.217"
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.20.jar"')
|| !packwizIndex.contains('file = "mods/ouch-0.0.0-alpha.10.jar"')) {
throw new GradleException("The alpha.200 Weather TNT and Ambiance release is incomplete")
}
@@ -4613,7 +4613,7 @@ tasks.register("verifyQuestRequestEscrowRelease") {
def packwiz = file("pack/packwiz/pack.toml").text
def packwizIndex = file("pack/packwiz/index.toml").text
def sanctuaryManifest = new JsonSlurper().parse(file("sanctuary/src/main/resources/fabric.mod.json"))
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.sanctuary_version != "0.0.0-alpha.120"
|| migration.source?.pack_version != "26.2.0-alpha.200"
|| migration.source?.modules?.sanctuary != "0.0.0-alpha.115"
@@ -4628,10 +4628,10 @@ tasks.register("verifyQuestRequestEscrowRelease") {
|| migration.compatibility?.sanctuary_target_network_protocol != 21
|| sanctuaryManifest.custom?.sanctuary26?.data_version != 11
|| sanctuaryManifest.custom?.sanctuary26?.network_protocol != 22
|| release.pack_version != "26.2.0-alpha.216"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != "26.2.0-alpha.216"
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| release.pack_version != "26.2.0-alpha.217"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != "26.2.0-alpha.217"
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.120.jar"')) {
throw new GradleException("The alpha.201 quest-request escrow release is incomplete")
}
@@ -4667,7 +4667,7 @@ tasks.register("verifyWaystoneShopCulinaryAlpha202Release") {
"iliketomoveit/src/main/resources/fabric.mod.json"))
def sanctuaryManifest = new JsonSlurper().parse(file(
"sanctuary/src/main/resources/fabric.mod.json"))
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.anotherworld_version != "0.0.0-alpha.55"
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|| rootProject.iliketomoveit_version != "0.0.0-alpha.15"
@@ -4707,10 +4707,10 @@ tasks.register("verifyWaystoneShopCulinaryAlpha202Release") {
|| moveItManifest.custom?.sanctuary26?.network_protocol != 5
|| sanctuaryManifest.custom?.sanctuary26?.data_version != 11
|| sanctuaryManifest.custom?.sanctuary26?.network_protocol != 22
|| release.pack_version != "26.2.0-alpha.216"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != "26.2.0-alpha.216"
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| release.pack_version != "26.2.0-alpha.217"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != "26.2.0-alpha.217"
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"')
|| !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.36.jar"')
|| !packwizIndex.contains('file = "mods/iliketomoveit-0.0.0-alpha.15.jar"')
@@ -4827,7 +4827,7 @@ tasks.register("verifySafeVaultFeature") {
def image = javax.imageio.ImageIO.read(file("anotherworld/src/main/resources/assets/anotherworld/textures/${path}"))
image == null || image.width != size[0] || image.height != size[1]
}.keySet()
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.anotherworld_version != "0.0.0-alpha.55"
|| rootProject.sanctuary_version != "0.0.0-alpha.120"
|| migration.schema_version != 1
@@ -5019,7 +5019,7 @@ tasks.register("verifySafeVaultInterfaceAlpha203Release") {
def packwiz = file("pack/packwiz/pack.toml").text
def packwizIndex = file("pack/packwiz/index.toml").text
def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" }
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.anotherworld_version != "0.0.0-alpha.55"
|| migration.source?.pack_version != "26.2.0-alpha.202"
|| migration.source?.modules != [anotherworld: "0.0.0-alpha.50"]
@@ -5037,9 +5037,9 @@ tasks.register("verifySafeVaultInterfaceAlpha203Release") {
|| migration.distribution?.jei?.modrinth_version_id != "XXTFqqwG"
|| migration.distribution?.jei?.prism_manifest_updated != true
|| release.pack_version != rootProject.pack_version
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != rootProject.pack_version
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"')
|| packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.50.jar"')
|| jeiFiles.size() != 1
@@ -5065,7 +5065,7 @@ tasks.register("verifySafeVaultFixAlpha204Release") {
def packwiz = file("pack/packwiz/pack.toml").text
def packwizIndex = file("pack/packwiz/index.toml").text
def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" }
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.anotherworld_version != "0.0.0-alpha.55"
|| migration.source?.pack_version != "26.2.0-alpha.203"
|| migration.source?.modules != [anotherworld: "0.0.0-alpha.51"]
@@ -5091,9 +5091,9 @@ tasks.register("verifySafeVaultFixAlpha204Release") {
|| migration.distribution?.jei?.modrinth_version_id != "OcMayhUH"
|| migration.distribution?.jei?.prism_manifest_updated != true
|| release.pack_version != rootProject.pack_version
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != rootProject.pack_version
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"')
|| packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.51.jar"')
|| jeiFiles.size() != 1
@@ -5119,7 +5119,7 @@ tasks.register("verifySafeVaultCubeAlpha205Release") {
def packwiz = file("pack/packwiz/pack.toml").text
def packwizIndex = file("pack/packwiz/index.toml").text
def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" }
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.anotherworld_version != "0.0.0-alpha.55"
|| migration.source?.pack_version != "26.2.0-alpha.204"
|| migration.source?.modules != [anotherworld: "0.0.0-alpha.52"]
@@ -5148,9 +5148,9 @@ tasks.register("verifySafeVaultCubeAlpha205Release") {
|| migration.distribution?.jei?.modrinth_version_id != "NtfJDMhk"
|| migration.distribution?.jei?.prism_manifest_updated != true
|| release.pack_version != rootProject.pack_version
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != rootProject.pack_version
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"')
|| packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.52.jar"')
|| jeiFiles.size() != 1
@@ -5177,7 +5177,7 @@ tasks.register("verifySafeVaultCtmAlpha206Release") {
def packwiz = file("pack/packwiz/pack.toml").text
def packwizIndex = file("pack/packwiz/index.toml").text
def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" }
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.anotherworld_version != "0.0.0-alpha.55"
|| migration.source?.pack_version != "26.2.0-alpha.205"
|| migration.source?.modules != [anotherworld: "0.0.0-alpha.53"]
@@ -5200,9 +5200,9 @@ tasks.register("verifySafeVaultCtmAlpha206Release") {
|| migration.compatibility?.pack_release_updated != true
|| migration.distribution?.packwiz_index_refreshed != true
|| release.pack_version != rootProject.pack_version
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != rootProject.pack_version
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"')
|| packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.53.jar"')
|| jeiFiles.size() != 1
@@ -5229,7 +5229,7 @@ tasks.register("verifySafeVaultUnlimitedAlpha207Release") {
def packwiz = file("pack/packwiz/pack.toml").text
def packwizIndex = file("pack/packwiz/index.toml").text
def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" }
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.anotherworld_version != "0.0.0-alpha.55"
|| migration.source?.pack_version != "26.2.0-alpha.206"
|| migration.source?.modules != [anotherworld: "0.0.0-alpha.54"]
@@ -5259,9 +5259,9 @@ tasks.register("verifySafeVaultUnlimitedAlpha207Release") {
|| migration.compatibility?.pack_release_updated != true
|| migration.distribution?.packwiz_index_refreshed != true
|| release.pack_version != rootProject.pack_version
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != rootProject.pack_version
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"')
|| packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.54.jar"')
|| jeiFiles.size() != 1
@@ -5317,9 +5317,9 @@ tasks.register("verifyCanapliaFoundation") {
"itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/ItsAliveMod.java").text
def visualApiSource = file(
"ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/api/visual/AmbianceVisualEffectApi.java").text
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|| rootProject.ambiance_version != "0.0.0-alpha.19"
|| rootProject.ambiance_version != "0.0.0-alpha.20"
|| migration.issue != 35
|| migration.source?.fabric_id != "canaplia"
|| migration.source?.version != "2.0.0"
@@ -5569,8 +5569,8 @@ tasks.register("verifyCanapliaAlpha209Release") {
ambiance: "0.0.0-alpha.14",
itsalive: "0.0.0-alpha.33",
onlyfun: "0.0.0-alpha.20"]
if (rootProject.pack_version != "26.2.0-alpha.216"
|| rootProject.ambiance_version != "0.0.0-alpha.19"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.ambiance_version != "0.0.0-alpha.20"
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|| rootProject.onlyfun_version != "0.0.0-alpha.24"
|| migration.source?.pack_version != "26.2.0-alpha.207"
@@ -5617,10 +5617,10 @@ tasks.register("verifyCanapliaAlpha209Release") {
|| fixMigration.compatibility?.network_protocol_changed != false
|| fixMigration.distribution?.pack_release_updated != true
|| release.pack_version != rootProject.pack_version
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != rootProject.pack_version
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"')
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.20.jar"')
|| !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.36.jar"')
|| !packwizIndex.contains('file = "mods/onlyfun-0.0.0-alpha.24.jar"')
|| packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.12.jar"')
@@ -5670,7 +5670,7 @@ tasks.register("verifyAlpha210Release") {
iliketomoveit: "0.0.0-alpha.15",
itsalive: "0.0.0-alpha.35"]
def currentModules = [
ambiance: "0.0.0-alpha.19",
ambiance: "0.0.0-alpha.20",
sanctuary: "0.0.0-alpha.120",
onlyfun: "0.0.0-alpha.24",
ouch: "0.0.0-alpha.10",
@@ -5687,7 +5687,7 @@ tasks.register("verifyAlpha210Release") {
def jeiFiles = prism.files.findAll {
it.path == "mods/jei-26.2-fabric-30.28.0.193.jar"
}
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.sanctuary_version != "0.0.0-alpha.120"
|| rootProject.onlyfun_version != "0.0.0-alpha.24"
|| rootProject.iliketomoveit_version != expectedTarget.iliketomoveit
@@ -5733,10 +5733,10 @@ tasks.register("verifyAlpha210Release") {
|| manifests.iliketomoveit.custom?.sanctuary26?.network_protocol != 5
|| manifests.itsalive.custom?.sanctuary26?.data_version != 3
|| manifests.itsalive.custom?.sanctuary26?.network_protocol != 4
|| release.pack_version != "26.2.0-alpha.216"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != "26.2.0-alpha.216"
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| release.pack_version != "26.2.0-alpha.217"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != "26.2.0-alpha.217"
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| requiredJars.any { !packwizIndex.contains(it) }
|| obsoleteJars.any { packwizIndex.contains(it) }
|| jeiFiles.size() != 1
@@ -5784,8 +5784,8 @@ tasks.register("verifyAlpha211Release") {
sanctuary: "0.0.0-alpha.119"]
def currentModules = expectedTarget + [
sanctuary: "0.0.0-alpha.120",
ambiance: "0.0.0-alpha.19"]
def workspaceModules = currentModules + [ambiance: "0.0.0-alpha.19"]
ambiance: "0.0.0-alpha.20"]
def workspaceModules = currentModules + [ambiance: "0.0.0-alpha.20"]
def expectedDataVersions = [ambiance: 2, itsalive: 3, onlyfun: 2, ouch: 1, sanctuary: 11]
def expectedProtocols = [ambiance: 6, itsalive: 4, onlyfun: 3, ouch: 1, sanctuary: 22]
def manifests = expectedTarget.collectEntries { id, version ->
@@ -5810,7 +5810,7 @@ tasks.register("verifyAlpha211Release") {
def jeiFiles = prism.files.findAll {
it.path == "mods/jei-26.2-fabric-30.28.0.193.jar"
}
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| workspaceModules.any { id, version -> rootProject.property("${id}_version") != version }
|| migration.source?.pack_version != "26.2.0-alpha.210"
|| migration.source?.modules != expectedSource
@@ -5838,9 +5838,9 @@ tasks.register("verifyAlpha211Release") {
|| migration.distribution?.prism_modrinth_index_updated != true
|| migration.distribution?.shared_client_server_mrpack != true
|| release.pack_version != rootProject.pack_version
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != rootProject.pack_version
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| requiredJars.any { !packwizIndex.contains(it) }
|| obsoleteJars.any { packwizIndex.contains(it) }
|| prism.files?.size() != 5
@@ -5848,7 +5848,7 @@ tasks.register("verifyAlpha211Release") {
|| jeiFiles[0].hashes?.sha1 != "494f9dc787d6c9cd9d32793da2784ab16834faf3"
|| jeiFiles[0].hashes?.sha512 != "0869f4d5840a732a04bedc7684b40140f087f3d759066c206d9d1ec710007f7c9585e4f5ebb04f10e56bef1cf2eddc6978bb2b2c93541cff5fcf7e1609859468"
|| !changelog.contains("## `26.2.0-alpha.211`")
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) {
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.217`**")) {
throw new GradleException("The alpha.211 Abjection and gameplay-polish release is incomplete")
}
}
@@ -5882,7 +5882,7 @@ tasks.register("verifyAlpha212Release") {
def jeiFiles = prism.files.findAll {
it.path == "mods/jei-26.2-fabric-30.28.0.193.jar"
}
if (rootProject.pack_version != "26.2.0-alpha.216"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.sanctuary_version != "0.0.0-alpha.120"
|| migration.source?.pack_version != "26.2.0-alpha.211"
|| migration.source?.modules != [sanctuary: "0.0.0-alpha.119"]
@@ -5904,16 +5904,16 @@ tasks.register("verifyAlpha212Release") {
|| manifest.custom?.sanctuary26?.data_version != 11
|| manifest.custom?.sanctuary26?.network_protocol != 22
|| !minecraftMixin.contains('method = "pickBlockOrEntity"')
|| release.pack_version != "26.2.0-alpha.216"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != "26.2.0-alpha.216"
|| release.pack_version != "26.2.0-alpha.217"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != "26.2.0-alpha.217"
|| prism.files?.size() != 5
|| jeiFiles.size() != 1
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.120.jar"')
|| packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.119.jar"')
|| !changelog.contains("## `26.2.0-alpha.212`")
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) {
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.217`**")) {
throw new GradleException("The alpha.212 Black Market startup-fix release is incomplete")
}
}
@@ -5947,8 +5947,8 @@ tasks.register("verifyAlpha213Release") {
def jeiFiles = prism.files.findAll {
it.path == "mods/jei-26.2-fabric-30.28.0.193.jar"
}
if (rootProject.pack_version != "26.2.0-alpha.216"
|| rootProject.ambiance_version != "0.0.0-alpha.19"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.ambiance_version != "0.0.0-alpha.20"
|| migration.source?.pack_version != "26.2.0-alpha.212"
|| migration.source?.modules != [ambiance: "0.0.0-alpha.15"]
|| migration.target?.pack_version != "26.2.0-alpha.213"
@@ -5971,16 +5971,16 @@ tasks.register("verifyAlpha213Release") {
|| manifest.custom?.sanctuary26?.network_protocol != 6
|| !levelEventMixin.contains('@Mixin(LevelEventHandler.class)')
|| !levelEventMixin.contains('@Inject(method = "levelEvent"')
|| release.pack_version != "26.2.0-alpha.216"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != "26.2.0-alpha.216"
|| release.pack_version != "26.2.0-alpha.217"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != "26.2.0-alpha.217"
|| prism.files?.size() != 5
|| jeiFiles.size() != 1
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"')
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.20.jar"')
|| packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.15.jar"')
|| !changelog.contains("## `26.2.0-alpha.213`")
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) {
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.217`**")) {
throw new GradleException("The alpha.213 Ambiance startup-fix release is incomplete")
}
}
@@ -6015,8 +6015,8 @@ tasks.register("verifyAlpha214Release") {
"ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java").text
def urlSmoke = file(
"ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/white_disc/WhiteDiscUrlSmoke.java").text
if (rootProject.pack_version != "26.2.0-alpha.216"
|| rootProject.ambiance_version != "0.0.0-alpha.19"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.ambiance_version != "0.0.0-alpha.20"
|| migration.source?.pack_version != "26.2.0-alpha.213"
|| migration.source?.modules != [ambiance: "0.0.0-alpha.16"]
|| migration.target?.pack_version != "26.2.0-alpha.214"
@@ -6044,16 +6044,16 @@ tasks.register("verifyAlpha214Release") {
|| !audioPlayer.contains('message.ambiance.white_disc.loading')
|| !audioPlayer.contains('message.ambiance.white_disc.failed')
|| !urlSmoke.contains("https://youtu.be/Ue5ZBe-GzSM?si=78LSbtBQzUYzhA2Y")
|| release.pack_version != "26.2.0-alpha.216"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != "26.2.0-alpha.216"
|| release.pack_version != "26.2.0-alpha.217"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != "26.2.0-alpha.217"
|| prism.files?.size() != 5
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"')
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.20.jar"')
|| packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.16.jar"')
|| !changelog.contains("## `26.2.0-alpha.214`")
|| changelog.contains("## Modifications non distribuées")
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) {
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.217`**")) {
throw new GradleException("The alpha.214 white-disc solo synchronization release is incomplete")
}
}
@@ -6094,8 +6094,8 @@ tasks.register("verifyAlpha215Release") {
"ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStream.java").text
def playbackSmoke = file(
"ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java").text
if (rootProject.pack_version != "26.2.0-alpha.216"
|| rootProject.ambiance_version != "0.0.0-alpha.19"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.ambiance_version != "0.0.0-alpha.20"
|| migration.source?.pack_version != "26.2.0-alpha.214"
|| migration.source?.modules != [ambiance: "0.0.0-alpha.17"]
|| migration.target?.pack_version != "26.2.0-alpha.215"
@@ -6130,19 +6130,20 @@ tasks.register("verifyAlpha215Release") {
|| !audioStream.contains("INITIAL_FRAME_WAIT_MILLIS = 2_000L")
|| !audioStream.contains("CONTINUATION_FRAME_WAIT_MILLIS = 250L")
|| !audioStream.contains("player.provide(waitMillis, TimeUnit.MILLISECONDS)")
|| !audioStream.contains("while (output.hasRemaining()) output.put((byte) 0)")
|| !audioStream.contains("paddedSilenceBytes++")
|| !playbackSmoke.contains("https://www.youtube.com/watch?v=Ue5ZBe-GzSM")
|| !playbackSmoke.contains("Decoded audible PCM data")
|| release.pack_version != "26.2.0-alpha.216"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != "26.2.0-alpha.216"
|| !playbackSmoke.contains("stream.paddedSilenceBytes() != 0L")
|| !playbackSmoke.contains("stream.decodedTimelineMillis() != 4_000L")
|| release.pack_version != "26.2.0-alpha.217"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != "26.2.0-alpha.217"
|| prism.files?.size() != 5
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"')
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.20.jar"')
|| packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.17.jar"')
|| !changelog.contains("## `26.2.0-alpha.215`")
|| changelog.contains("## Modifications non distribuées")
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) {
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.217`**")) {
throw new GradleException("The alpha.215 resilient white-disc playback release is incomplete")
}
}
@@ -6187,8 +6188,8 @@ tasks.register("verifyAlpha216Release") {
"ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java").text
def playbackSmoke = file(
"ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java").text
if (rootProject.pack_version != "26.2.0-alpha.216"
|| rootProject.ambiance_version != "0.0.0-alpha.19"
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.ambiance_version != "0.0.0-alpha.20"
|| migration.source?.pack_version != "26.2.0-alpha.215"
|| migration.source?.modules != [ambiance: "0.0.0-alpha.18"]
|| migration.target?.pack_version != "26.2.0-alpha.216"
@@ -6218,7 +6219,7 @@ tasks.register("verifyAlpha216Release") {
|| manifest.custom?.sanctuary26?.data_version != 2
|| manifest.custom?.sanctuary26?.network_protocol != 6
|| !ambianceBuild.contains('tasks.register("whiteDiscStreamSmoke"')
|| !audioPlayer.contains("channel.setPitch(1.0F)")
|| !audioPlayer.contains("PLAYBACK_PITCH = 4.0F / 3.0F")
|| !audioStream.contains("SAMPLE_RATE = 48_000")
|| !audioStream.contains("INITIAL_FRAME_WAIT_MILLIS = 2_000L")
|| !audioStream.contains("CONTINUATION_FRAME_WAIT_MILLIS = 250L")
@@ -6226,28 +6227,105 @@ tasks.register("verifyAlpha216Release") {
|| !audioStream.contains("new AudioFormat(SAMPLE_RATE, 16, 1, true, false)")
|| !streamSmoke.contains("FRAMES_PER_SECOND")
|| !streamSmoke.contains("PCM frames were not read with bounded waits")
|| !playbackSmoke.contains("audibleRatio < 0.75")
|| !playbackSmoke.contains("stream.paddedSilenceBytes() != 0L")
|| !playbackSmoke.contains("stream.decodedTimelineMillis() != 4_000L")
|| !playbackSmoke.contains("LavaplayerAudioStream.SAMPLE_RATE * 2 * 4")
|| release.pack_version != "26.2.0-alpha.216"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|| prism.versionId != "26.2.0-alpha.216"
|| release.pack_version != "26.2.0-alpha.217"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != "26.2.0-alpha.217"
|| prism.files?.size() != 5
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"')
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.20.jar"')
|| packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.18.jar"')
|| !changelog.contains("## `26.2.0-alpha.216`")
|| changelog.contains("## Modifications non distribuées")
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.216`**")) {
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.217`**")) {
throw new GradleException("The alpha.216 white-disc audio-quality release is incomplete")
}
}
}
tasks.register("verifyAlpha217Release") {
group = "verification"
description = "Checks the Sanctuary 26.2.0-alpha.217 white-disc pitch release."
inputs.file(file("pack/migrations/26.2.0-alpha.216-white-disc-pitch-to-alpha.217.json"))
inputs.file(file("pack/release.json"))
inputs.file(file("pack/prism/modrinth.index.json"))
inputs.file(file("pack/packwiz/pack.toml"))
inputs.file(file("pack/packwiz/index.toml"))
inputs.file(file("CHANGELOG.md"))
inputs.file(file("README.md"))
inputs.file(file("ambiance/src/main/resources/fabric.mod.json"))
inputs.file(file(
"ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java"))
inputs.file(file(
"ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java"))
doLast {
def migration = new JsonSlurper().parse(file(
"pack/migrations/26.2.0-alpha.216-white-disc-pitch-to-alpha.217.json"))
def release = new JsonSlurper().parse(file("pack/release.json"))
def prism = new JsonSlurper().parse(file("pack/prism/modrinth.index.json"))
def packwiz = file("pack/packwiz/pack.toml").text
def packwizIndex = file("pack/packwiz/index.toml").text
def changelog = file("CHANGELOG.md").text
def readme = file("README.md").text
def manifest = new JsonSlurper().parse(file("ambiance/src/main/resources/fabric.mod.json"))
def audioPlayer = file(
"ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java").text
def streamSmoke = file(
"ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java").text
if (rootProject.pack_version != "26.2.0-alpha.217"
|| rootProject.ambiance_version != "0.0.0-alpha.20"
|| migration.source?.pack_version != "26.2.0-alpha.216"
|| migration.source?.modules != [ambiance: "0.0.0-alpha.19"]
|| migration.target?.pack_version != "26.2.0-alpha.217"
|| migration.target?.modules != [ambiance: "0.0.0-alpha.20"]
|| migration.features?.white_disc_pitch_corrected != true
|| migration.features?.youtube_source_format != "MP4_AAC_LC"
|| migration.features?.openal_pitch_numerator != 4
|| migration.features?.openal_pitch_denominator != 3
|| migration.features?.openal_pitch_reapplied_during_playback != true
|| migration.features?.reference_video_id != "Ue5ZBe-GzSM"
|| migration.features?.direct_source_comparison != true
|| migration.features?.decoded_sample_rate_hz != 48_000
|| migration.features?.decoded_channel_count != 1
|| migration.features?.decoded_sample_size_bits != 16
|| migration.compatibility?.new_world_required != false
|| migration.compatibility?.save_reset_required != false
|| migration.compatibility?.existing_saves_supported != true
|| migration.compatibility?.registry_ids_changed != false
|| migration.compatibility?.ambiance_data_version != 2
|| migration.compatibility?.ambiance_network_protocol != 6
|| migration.distribution?.pack_release_updated != true
|| migration.distribution?.packwiz_index_refreshed != true
|| migration.distribution?.prism_modrinth_index_updated != true
|| migration.distribution?.shared_client_server_mrpack != true
|| manifest.custom?.sanctuary26?.data_version != 2
|| manifest.custom?.sanctuary26?.network_protocol != 6
|| !audioPlayer.contains("PLAYBACK_PITCH = 4.0F / 3.0F")
|| audioPlayer.count("channel.setPitch(PLAYBACK_PITCH)") != 2
|| !streamSmoke.contains("WhiteDiscAudioPlayer.PLAYBACK_PITCH - 4.0F / 3.0F")
|| release.pack_version != "26.2.0-alpha.217"
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.217.mrpack"
|| prism.versionId != "26.2.0-alpha.217"
|| prism.files?.size() != 5
|| !packwiz.contains('version = "26.2.0-alpha.217"')
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.20.jar"')
|| packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"')
|| !changelog.contains("## `26.2.0-alpha.217`")
|| changelog.contains("## Modifications non distribuées")
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.217`**")) {
throw new GradleException("The alpha.217 white-disc pitch release is incomplete")
}
}
}
tasks.named("verifyWorkspace") {
dependsOn tasks.named("verifyAlpha213Release")
dependsOn tasks.named("verifyAlpha214Release")
dependsOn tasks.named("verifyAlpha215Release")
dependsOn tasks.named("verifyAlpha216Release")
dependsOn tasks.named("verifyAlpha217Release")
}
tasks.named("check") {
+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.19
ambiance_version=0.0.0-alpha.20
ambiance_lifecycle=active
redstoner_version=0.0.0-alpha.10
redstoner_lifecycle=active
@@ -30,5 +30,5 @@ onlyfun_version=0.0.0-alpha.24
onlyfun_lifecycle=active
sanctuary_version=0.0.0-alpha.120
sanctuary_lifecycle=active
pack_version=26.2.0-alpha.216
pack_version=26.2.0-alpha.217
maven_group=fr.koka99cab.sanctuary26
@@ -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
}
}
+11 -11
View File
@@ -13,16 +13,16 @@ file = "instance-icon.png"
hash = "41f4f4c88c71d0a23446d5014f7407d55ad477441847099cad24492b032335a0"
[[files]]
file = "mods/ambiance-0.0.0-alpha.19.jar"
hash = "d3810b758e073d74efbaa501e39b0865335baf1089ff76a2554d24c6e13188ee"
file = "mods/ambiance-0.0.0-alpha.20.jar"
hash = "22da7a3b73d52b437775fd7c268009af4a6183966bcf28c9f305a820d6d5a995"
[[files]]
file = "mods/anotherworld-0.0.0-alpha.55.jar"
hash = "56015a9d3c3517c948e336eab973205f84772a4f3a0b790e6f2832824ee44f3a"
hash = "2d6250686739fd0bddcbff2d382e22fb9e403472926931f2879f6870af96ed64"
[[files]]
file = "mods/events-0.0.0-alpha.0.jar"
hash = "bcc501a0fd6e8074cb3c4de26f607952d7ea63d630a697d95bfa59e90feae057"
hash = "4ac4ec54bf702a164443eb184796cca603cbad84607e794c2b24dbd5c7c221b9"
[[files]]
file = "mods/fabric-api.pw.toml"
@@ -31,7 +31,7 @@ metafile = true
[[files]]
file = "mods/iliketomoveit-0.0.0-alpha.15.jar"
hash = "551e354b96bb35ed8d64b26a4aac85d1d9441be592ed9fc62d6cd359e0e0e0c5"
hash = "fe73255673eda5cbe16fe0bfd4a13951d9f103f58461ca84020e27cde408e569"
[[files]]
file = "mods/iris.pw.toml"
@@ -40,7 +40,7 @@ metafile = true
[[files]]
file = "mods/itsalive-0.0.0-alpha.36.jar"
hash = "3ff1e1ee2156553b78bf0bded03140d34844f7ab7f0ea6b48929d2c61a8c34bc"
hash = "49aab5f4b3c9145d3cc4e64ce46bff138e4c6147c83c985d402024920d929d0d"
[[files]]
file = "mods/jei.pw.toml"
@@ -49,23 +49,23 @@ metafile = true
[[files]]
file = "mods/masterkey-0.0.0-alpha.8.jar"
hash = "268b30dcb808d8d2db1b909863beb9974b432fa558e7cd516dde811f600fd66e"
hash = "9429a818c517b3943fdcbdd442800b9d854bf73c605df0f1ec761366574c129a"
[[files]]
file = "mods/onlyfun-0.0.0-alpha.24.jar"
hash = "e6b89c1958449fb5bb70bb011df26cecc8f91a224b79788e96827a3897dfba4a"
hash = "774e2753085868795e8874373158d71a1ec02a27bc8363c27b83bd6e6327343a"
[[files]]
file = "mods/ouch-0.0.0-alpha.10.jar"
hash = "d12d57580015a829f6fc31310cf5724bad1b442380aaf6272194caeed21a50fc"
hash = "b4b5c5cf8164f6a0ce6131031fcbd0840c048a249d1b7c6e08f5b7aeed0e7656"
[[files]]
file = "mods/redstoner-0.0.0-alpha.10.jar"
hash = "d210ed751188e7e3e5ce197f498518c06cb5673e4057103cd0964c1a8d2b0066"
hash = "c1033a75b1c05e428c99c824d4bf25388532ab8155c8d09f0802c936e66a7a58"
[[files]]
file = "mods/sanctuary-0.0.0-alpha.120.jar"
hash = "f82fc135319d0ad25bed49f2fe924d506761391343265add2efd6c73d55f939a"
hash = "7c8171cedd6f808dd28ab0e5662d87c3c3bad2fc93b334167bc599187df21944"
[[files]]
file = "mods/simple-voice-chat.pw.toml"
+2 -2
View File
@@ -1,12 +1,12 @@
name = "Sanctuary 26.2"
author = "KOKA99CAB"
version = "26.2.0-alpha.216"
version = "26.2.0-alpha.217"
pack-format = "packwiz:1.1.0"
[index]
file = "index.toml"
hash-format = "sha256"
hash = "7a9a44c1f7dcd46aab475cdd2ac078758f320a550386140d89af994acd7c29d1"
hash = "7fa6f7e4540e9db2d161ddffddb82a30bd7d1fcd2950415e7c6e24be33dda05d"
[versions]
fabric = "0.19.3"
+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.216",
"versionId": "26.2.0-alpha.217",
"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.216",
"pack_version": "26.2.0-alpha.217",
"release_channel": "alpha",
"minecraft_version": "26.2",
"fabric_loader_version": "0.19.3",
@@ -9,7 +9,7 @@
"project_id": "FgOqyAXd",
"project_slug": "sanctuary-koka99",
"project_url": "https://modrinth.com/modpack/sanctuary-koka99",
"primary_file": "sanctuary-26.2.0-alpha.216.mrpack",
"primary_file": "sanctuary-26.2.0-alpha.217.mrpack",
"shared_client_server_pack": true,
"update_owner": "packwiz-installer",
"check_on_launch": true,