Compare commits
20
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ef18e0ae32 | ||
|
|
1c2e000da3 | ||
|
|
9e35c244ec | ||
|
|
e82cb33407 | ||
|
|
e126ec9eea | ||
|
|
13a74ddbd2 | ||
|
|
b221ca1b52 | ||
|
|
05505279f8 | ||
|
|
61e66d3a11 | ||
|
|
3aa36ed129 | ||
|
|
90b9eee27e | ||
|
|
7d800d8932 | ||
|
|
913a754f20 | ||
|
|
73d32999e5 | ||
|
|
86034ca71f | ||
|
|
db91698c09 | ||
|
|
7f74114d31 | ||
|
|
53db634ec2 | ||
|
|
400f1f6289 | ||
|
|
596432f3f7 |
+51
-2
@@ -6,9 +6,57 @@ 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.
|
||||
|
||||
## Non distribué
|
||||
## `26.2.0-alpha.216`
|
||||
|
||||
Modules modifiés : **It's Alive `0.0.0-alpha.36`**, **Sanctuary `0.0.0-alpha.119`**, **Ambiance `0.0.0-alpha.15`**, **Only Fun `0.0.0-alpha.24`** et **Ouch `0.0.0-alpha.10`**. Le pack distribué reste en `26.2.0-alpha.210` jusqu’à la prochaine release.
|
||||
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 d’une 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.
|
||||
|
||||
- corrige le crash natif déclenché par l’insertion ou l’arrêt du disque blanc en laissant Minecraft libérer le canal OpenAL sur son thread audio ;
|
||||
- rétablit le décodage audible du lien YouTube signalé grâce au profil iOS corrigé et à une révision épinglée de `youtube-source` ;
|
||||
- borne uniquement l’attente initiale du flux puis poursuit la lecture sans blocage, avec silence de compensation lorsque les données arrivent en retard ;
|
||||
- transforme les erreurs et blocages de lecture en arrêt propre accompagné d’un message au joueur ;
|
||||
- conserve les données Ambiance v2, le protocole réseau 6, les IDs et les sauvegardes existantes ;
|
||||
- distribue Ambiance `0.0.0-alpha.18` dans Packwiz et le `.mrpack` partagé client/serveur, sans exiger de nouveau monde ni réinitialiser les sauvegardes.
|
||||
|
||||
## `26.2.0-alpha.214`
|
||||
|
||||
Module modifié : **Ambiance `0.0.0-alpha.17`**. Les neuf autres modules conservent leur version issue de l'alpha.213.
|
||||
|
||||
- attend de façon bornée la synchronisation client du jukebox avant de charger un disque blanc, ce qui rétablit sa lecture en solo ;
|
||||
- affiche immédiatement le chargement puis un échec explicite si le jukebox n'est toujours pas synchronisé après cinq secondes ;
|
||||
- accepte toujours les liens de partage YouTube avec paramètres, notamment `https://youtu.be/Ue5ZBe-GzSM?si=…` ;
|
||||
- conserve les données Ambiance v2 et le protocole réseau 6, sans migration de sauvegarde ;
|
||||
- distribue Ambiance `0.0.0-alpha.17` dans Packwiz et le `.mrpack` partagé client/serveur, sans exiger de nouveau monde ni réinitialiser les sauvegardes.
|
||||
|
||||
## `26.2.0-alpha.213`
|
||||
|
||||
Module modifié : **Ambiance `0.0.0-alpha.16`**. Les neuf autres modules conservent leur version issue de l'alpha.212.
|
||||
|
||||
- corrige le crash client au démarrage d'Ambiance sous Minecraft 26.2 en ciblant le nouveau gestionnaire vanilla `LevelEventHandler` pour l'arrêt du disque blanc ;
|
||||
- conserve les données Ambiance v2 et le protocole réseau 6, sans migration de sauvegarde ;
|
||||
- remplace le JAR Ambiance cassé dans Packwiz et le `.mrpack` partagé client/serveur, sans exiger de nouveau monde ni réinitialiser les sauvegardes.
|
||||
|
||||
## `26.2.0-alpha.212`
|
||||
|
||||
Module modifié : **Sanctuary `0.0.0-alpha.120`**. Les neuf autres modules conservent leur version issue de l'alpha.211.
|
||||
|
||||
- corrige le crash client au démarrage provoqué par le mixin du clic molette du Black Market sous Minecraft 26.2 ;
|
||||
- cible désormais la méthode vanilla `pickBlockOrEntity`, sans modifier les données Sanctuary v11 ni le protocole réseau 22.
|
||||
- remplace le JAR Sanctuary cassé dans Packwiz et le `.mrpack` partagé client/serveur, sans exiger de nouveau monde ni réinitialiser les sauvegardes.
|
||||
|
||||
## `26.2.0-alpha.211`
|
||||
|
||||
Modules modifiés : **Ambiance `0.0.0-alpha.15`**, **It's Alive `0.0.0-alpha.36`**, **Only Fun `0.0.0-alpha.24`**, **Ouch `0.0.0-alpha.10`** et **Sanctuary `0.0.0-alpha.119`**. Les cinq autres modules conservent leur version issue de l’alpha.210.
|
||||
|
||||
- remplace les pages noires du Livre interdit par l’affichage clair du livre vanilla ;
|
||||
- conserve les seize entrées, les découvertes personnelles, le partage sur pupitre, les IDs, les données v3 et le protocole réseau 4.
|
||||
@@ -26,6 +74,7 @@ Modules modifiés : **It's Alive `0.0.0-alpha.36`**, **Sanctuary `0.0.0-alpha.11
|
||||
- ajoute la touche configurable « Chier » dans les contrôles Only Fun, assignée à `J` par défaut et sans répétition lorsque la touche reste maintenue ;
|
||||
- transmet une demande C2S vide, déduplique le spam d’un même tick et revalide côté serveur la connexion, la vie et le mode spectateur avant de réutiliser exactement l’action `/shit` ;
|
||||
- conserve les données Only Fun v2 et porte son protocole réseau de 2 à 3, sans nouveau cooldown, besoin ni donnée persistante.
|
||||
- distribue les cinq JAR mis à jour dans Packwiz et le `.mrpack` partagé client/serveur, sans exiger de nouveau monde ni réinitialiser les sauvegardes.
|
||||
|
||||
## `26.2.0-alpha.210`
|
||||
|
||||
|
||||
@@ -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.210`**. Cette release distribue le Livre interdit Canaplia avec It's Alive **`0.0.0-alpha.35`**, ainsi que Sanctuary **`0.0.0-alpha.118`**, Only Fun **`0.0.0-alpha.21`** et I Like To Move It **`0.0.0-alpha.15`**.
|
||||
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.
|
||||
|
||||
L’alpha.210 ajoute le Livre interdit, accélère le Happy Ghast piloté, regroupe les corrections du Shop, des requêtes, des capes et des noms de Zombies, puis actualise JEI en **`30.28.0.193`**. Elle met à jour les packs Modrinth, Prism et Packwiz sans exiger de nouveau monde ni réinitialiser les sauvegardes.
|
||||
L’alpha.216 corrige la lecture lente et dégradée du disque blanc : les quatre tampons PCM initiaux de Minecraft sont maintenant remplis continûment à 48 kHz, avec une vitesse OpenAL normale, au lieu d’être majoritairement complétés par du silence. Les packs Modrinth, Prism et Packwiz sont mis à jour sans exiger de nouveau monde ni réinitialiser les sauvegardes.
|
||||
|
||||
L’alpha.207 rend le stockage du coffre-fort pratiquement illimité : rubis, saphirs et émeraudes utilisent chacun un solde 64 bits. Les 27 anciennes piles sont additionnées automatiquement lors du chargement, le Shop continue de consommer directement ces soldes et les 20 % pillés sont crédités dans le coffre-fort de l’attaquant sans créer des millions d’entités ou de piles d’objets.
|
||||
|
||||
|
||||
@@ -24,8 +24,10 @@ Ambiance conserve ses données v2 ; son protocole passe de 5 à 6.
|
||||
|
||||
## Dépendances clientes embarquées
|
||||
|
||||
Le décodage repose sur Lavaplayer `2.2.7` (Apache-2.0) et youtube-source `1.18.2` (MIT), ainsi que
|
||||
leurs dépendances transitives placées en JAR imbriqués par Loom. Leurs avis de licence restent dans
|
||||
les archives d’origine. L’accès YouTube est effectué uniquement par le client et peut cesser de
|
||||
fonctionner si YouTube modifie ses mécanismes de lecture ; aucune clé ou URL arbitraire n’est
|
||||
acceptée par le serveur.
|
||||
Le décodage repose sur Lavaplayer `2.2.7` (Apache-2.0) et sur le commit youtube-source
|
||||
`f45bbb7aebfcbc1c553769e04af6cd43afa8b7c3` (MIT), épinglé pour intégrer les correctifs de lecture
|
||||
YouTube publiés après `1.18.2`. Le profil iOS corrigé est utilisé sans compte, OAuth, jeton privé ou
|
||||
service de chiffrement tiers. Les dépendances sont placées en JAR imbriqués par Loom et leurs avis
|
||||
de licence restent dans les archives d’origine. L’accès YouTube est effectué uniquement par le
|
||||
client et peut cesser de fonctionner si YouTube modifie ses mécanismes de lecture ; aucune clé ou
|
||||
URL arbitraire n’est acceptée par le serveur.
|
||||
|
||||
+52
-7
@@ -1,5 +1,7 @@
|
||||
import groovy.json.JsonSlurper
|
||||
|
||||
def youtubeSourceVersion = "f45bbb7aebfcbc1c553769e04af6cd43afa8b7c3-SNAPSHOT"
|
||||
|
||||
configurations {
|
||||
whiteDiscLibraries
|
||||
implementation.extendsFrom whiteDiscLibraries
|
||||
@@ -13,14 +15,14 @@ dependencies {
|
||||
exclude group: "org.slf4j", module: "slf4j-api"
|
||||
exclude group: "org.jetbrains", module: "annotations"
|
||||
}
|
||||
whiteDiscLibraries("dev.lavalink.youtube:v2:1.18.2") {
|
||||
whiteDiscLibraries("dev.lavalink.youtube:v2:${youtubeSourceVersion}") {
|
||||
exclude group: "org.slf4j", module: "slf4j-api"
|
||||
exclude group: "org.jetbrains", module: "annotations"
|
||||
}
|
||||
[
|
||||
"dev.arbjerg:lavaplayer-natives:2.2.7",
|
||||
"dev.arbjerg:lava-common:2.2.7",
|
||||
"dev.lavalink.youtube:common:1.18.2",
|
||||
"dev.lavalink.youtube:common:${youtubeSourceVersion}",
|
||||
"org.mozilla:rhino-engine:1.7.15",
|
||||
"org.mozilla:rhino:1.7.15",
|
||||
"commons-io:commons-io:2.13.0",
|
||||
@@ -64,15 +66,33 @@ tasks.register("whiteDiscUrlSmoke", JavaExec) {
|
||||
mainClass = "fr.koka99cab.sanctuary26.ambiance.white_disc.WhiteDiscUrlSmoke"
|
||||
}
|
||||
|
||||
tasks.register("whiteDiscPlaybackSmoke", JavaExec) {
|
||||
group = "verification"
|
||||
description = "Manually checks live YouTube loading and PCM decoding for the white disc."
|
||||
dependsOn tasks.named("testClasses")
|
||||
classpath = sourceSets.test.runtimeClasspath
|
||||
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.15, including the bounded YouTube white-disc playback contract."
|
||||
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"))
|
||||
@@ -120,8 +140,14 @@ tasks.register("verifyAmbiance") {
|
||||
file("src/main/resources/data/ambiance/recipe/white_disc.json"))
|
||||
def whiteDiscSong = new JsonSlurper().parse(
|
||||
file("src/main/resources/data/ambiance/jukebox_song/white_disc.json"))
|
||||
def levelEventMixin = file(
|
||||
"src/main/java/fr/koka99cab/sanctuary26/ambiance/mixin/client/LevelEventHandlerMixin.java").text
|
||||
def whiteDiscAudioPlayer = file(
|
||||
"src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java").text
|
||||
def whiteDiscPlaybackSmoke = file(
|
||||
"src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java").text
|
||||
|
||||
if (project.version.toString() != "0.0.0-alpha.15"
|
||||
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"
|
||||
@@ -319,10 +345,23 @@ tasks.register("verifyAmbiance") {
|
||||
|| !javaText.contains('PlayerLookup.tracking(level, pos)')
|
||||
|| !javaText.contains('ServerPlayNetworking.canSend(receiver, WhiteDiscPlaybackPayload.ID)')
|
||||
|| !javaText.contains('MAXIMUM_SIMULTANEOUS_DISCS = 4')
|
||||
|| !javaText.contains('REQUESTS.size() + PLAYBACKS.size() >= MAXIMUM_SIMULTANEOUS_DISCS')
|
||||
|| !javaText.contains('PENDING_STARTS.size() + REQUESTS.size() + PLAYBACKS.size()')
|
||||
|| !javaText.contains('MAXIMUM_START_WAIT_TICKS = 100')
|
||||
|| !javaText.contains('tickPendingStarts(client)')
|
||||
|| !javaText.contains('client.level.dimension().equals(playback.dimension())')
|
||||
|| !javaText.contains('MAXIMUM_TRACK_MILLIS = 30L * 60L * 1_000L')
|
||||
|| !javaText.contains('new Pcm16AudioDataFormat(1, LavaplayerAudioStream.SAMPLE_RATE')
|
||||
|| !javaText.contains('new YoutubeAudioSourceManager(false, new Ios())')
|
||||
|| !javaText.contains('player.addListener(new AudioEventAdapter()')
|
||||
|| !javaText.contains('failPlayback(client, key, failedPlayer)')
|
||||
|| !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('handle.execute(channel -> channel.stop())')
|
||||
|| whiteDiscAudioPlayer.contains('.release()')
|
||||
|| !whiteDiscPlaybackSmoke.contains('https://www.youtube.com/watch?v=Ue5ZBe-GzSM')
|
||||
|| !whiteDiscPlaybackSmoke.contains('Decoded audible PCM data')
|
||||
|| !javaText.contains('SoundSource.RECORDS')
|
||||
|| !javaText.contains('channel.linearAttenuation(ATTENUATION_DISTANCE)')
|
||||
|| !javaText.contains('LONG_HOSTS = Set.of(')
|
||||
@@ -334,6 +373,9 @@ tasks.register("verifyAmbiance") {
|
||||
|| whiteDiscRecipe.key?.W != "minecraft:white_dye"
|
||||
|| whiteDiscSong.sound_event != "minecraft:intentionally_empty"
|
||||
|| whiteDiscSong.length_in_seconds != 1800
|
||||
|| !levelEventMixin.contains('@Mixin(LevelEventHandler.class)')
|
||||
|| !levelEventMixin.contains('@Inject(method = "levelEvent"')
|
||||
|| !levelEventMixin.contains('ambiance$stopWhiteDisc(int type, BlockPos pos, int data,')
|
||||
|| ambianceLanguages.any { locale, translations ->
|
||||
!["item.ambiance.white_disc", "tooltip.ambiance.white_disc",
|
||||
"message.ambiance.white_disc.invalid_url", "message.ambiance.white_disc.failed"].every {
|
||||
@@ -341,8 +383,10 @@ tasks.register("verifyAmbiance") {
|
||||
}
|
||||
}
|
||||
|| !file("build.gradle").text.contains('dev.arbjerg:lavaplayer:2.2.7')
|
||||
|| !file("build.gradle").text.contains('dev.lavalink.youtube:v2:1.18.2')) {
|
||||
throw new GradleException("Ambiance alpha.15 white-disc playback contract is incomplete")
|
||||
|| !file("build.gradle").text.contains(
|
||||
'def youtubeSourceVersion = "f45bbb7aebfcbc1c553769e04af6cd43afa8b7c3-SNAPSHOT"')
|
||||
|| !file("build.gradle").text.contains('dev.lavalink.youtube:v2:${youtubeSourceVersion}')) {
|
||||
throw new GradleException("Ambiance white-disc playback contract is incomplete")
|
||||
}
|
||||
|
||||
[
|
||||
@@ -396,4 +440,5 @@ tasks.named("check") {
|
||||
dependsOn tasks.named("ambianceScheduleSmoke")
|
||||
dependsOn tasks.named("ambianceVisualApiSmoke")
|
||||
dependsOn tasks.named("whiteDiscUrlSmoke")
|
||||
dependsOn tasks.named("whiteDiscStreamSmoke")
|
||||
}
|
||||
|
||||
+14
-6
@@ -12,13 +12,14 @@ 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 int FRAME_SAMPLES = 960;
|
||||
private static final int BYTES_PER_SAMPLE = 2;
|
||||
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;
|
||||
private byte[] pending = new byte[0];
|
||||
private int pendingOffset;
|
||||
private boolean initialWaitAttempted;
|
||||
private volatile boolean closed;
|
||||
private volatile boolean ended;
|
||||
|
||||
@@ -45,9 +46,8 @@ final class LavaplayerAudioStream implements AudioStream {
|
||||
AudioFrame frame = nextFrame();
|
||||
if (frame == null) {
|
||||
if (ended) break;
|
||||
int silence = Math.min(output.remaining(), FRAME_SAMPLES * BYTES_PER_SAMPLE);
|
||||
for (int index = 0; index < silence; index++) output.put((byte) 0);
|
||||
continue;
|
||||
while (output.hasRemaining()) output.put((byte) 0);
|
||||
break;
|
||||
}
|
||||
if (frame.isTerminator()) {
|
||||
ended = true;
|
||||
@@ -63,7 +63,11 @@ final class LavaplayerAudioStream implements AudioStream {
|
||||
|
||||
private AudioFrame nextFrame() throws IOException {
|
||||
try {
|
||||
AudioFrame frame = player.provide(2, TimeUnit.SECONDS);
|
||||
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) {
|
||||
@@ -78,6 +82,10 @@ final class LavaplayerAudioStream implements AudioStream {
|
||||
return ended;
|
||||
}
|
||||
|
||||
boolean uses(AudioPlayer expectedPlayer) {
|
||||
return player == expectedPlayer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
if (closed) return;
|
||||
|
||||
+103
-17
@@ -5,10 +5,12 @@ import com.sedmelluq.discord.lavaplayer.format.Pcm16AudioDataFormat;
|
||||
import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
|
||||
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
|
||||
import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
|
||||
import com.sedmelluq.discord.lavaplayer.player.event.AudioEventAdapter;
|
||||
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
|
||||
import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
|
||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||
import dev.lavalink.youtube.YoutubeAudioSourceManager;
|
||||
import dev.lavalink.youtube.clients.Ios;
|
||||
import fr.koka99cab.sanctuary26.ambiance.AmbianceMod;
|
||||
import fr.koka99cab.sanctuary26.ambiance.mixin.client.SoundEngineAccessor;
|
||||
import fr.koka99cab.sanctuary26.ambiance.mixin.client.SoundManagerAccessor;
|
||||
@@ -30,10 +32,12 @@ import net.minecraft.world.phys.Vec3;
|
||||
/** Client-only, positional and resource-bounded YouTube playback for white discs. */
|
||||
public final class WhiteDiscAudioPlayer {
|
||||
private static final int MAXIMUM_SIMULTANEOUS_DISCS = 4;
|
||||
private static final int MAXIMUM_START_WAIT_TICKS = 100;
|
||||
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;
|
||||
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<>();
|
||||
private static final LinkedHashMap<Long, Playback> PLAYBACKS = new LinkedHashMap<>();
|
||||
private static long requestSequence;
|
||||
@@ -43,16 +47,27 @@ public final class WhiteDiscAudioPlayer {
|
||||
}
|
||||
|
||||
public static void play(Minecraft client, BlockPos pos, String videoId) {
|
||||
if (shutdown || !WhiteDiscUrl.validVideoId(videoId) || !validTarget(client, pos)) return;
|
||||
if (shutdown || !WhiteDiscUrl.validVideoId(videoId) || !validJukeboxTarget(client, pos)) return;
|
||||
long key = pos.asLong();
|
||||
if (REQUESTS.containsKey(key)) return;
|
||||
if (PENDING_STARTS.containsKey(key) || REQUESTS.containsKey(key)) return;
|
||||
boolean replacingPlayback = PLAYBACKS.containsKey(key);
|
||||
if (!replacingPlayback
|
||||
&& REQUESTS.size() + PLAYBACKS.size() >= MAXIMUM_SIMULTANEOUS_DISCS) return;
|
||||
&& PENDING_STARTS.size() + REQUESTS.size() + PLAYBACKS.size()
|
||||
>= MAXIMUM_SIMULTANEOUS_DISCS) return;
|
||||
stop(key);
|
||||
client.player.sendOverlayMessage(Component.translatable("message.ambiance.white_disc.loading"));
|
||||
if (!validTarget(client, pos)) {
|
||||
PENDING_STARTS.put(key, new PendingStart(pos.immutable(), client.level.dimension(), videoId,
|
||||
MAXIMUM_START_WAIT_TICKS));
|
||||
return;
|
||||
}
|
||||
startLoading(client, pos, videoId);
|
||||
}
|
||||
|
||||
private static void startLoading(Minecraft client, BlockPos pos, String videoId) {
|
||||
long key = pos.asLong();
|
||||
long request = ++requestSequence;
|
||||
REQUESTS.put(key, request);
|
||||
client.player.sendOverlayMessage(Component.translatable("message.ambiance.white_disc.loading"));
|
||||
MANAGER.loadItemOrdered(key, WhiteDiscUrl.canonicalUrl(videoId), new AudioLoadResultHandler() {
|
||||
@Override
|
||||
public void trackLoaded(AudioTrack track) {
|
||||
@@ -101,24 +116,50 @@ public final class WhiteDiscAudioPlayer {
|
||||
ChannelAccess channels = ((SoundEngineAccessor) ((SoundManagerAccessor) client.getSoundManager())
|
||||
.ambiance$getSoundEngine()).ambiance$getChannelAccess();
|
||||
channels.createHandle(Library.Pool.STREAMING).thenAccept(handle -> client.execute(() -> {
|
||||
if (handle == null || REQUESTS.getOrDefault(key, -1L) != request) {
|
||||
if (handle != null) handle.release();
|
||||
if (handle == null || REQUESTS.getOrDefault(key, -1L) != request
|
||||
|| !validTarget(client, pos)) {
|
||||
if (handle != null) handle.execute(channel -> channel.stop());
|
||||
if (REQUESTS.getOrDefault(key, -1L) == request) REQUESTS.remove(key);
|
||||
return;
|
||||
}
|
||||
AudioPlayer player = MANAGER.createPlayer();
|
||||
player.playTrack(track);
|
||||
LavaplayerAudioStream stream = new LavaplayerAudioStream(player);
|
||||
Playback playback = new Playback(pos.immutable(), client.level.dimension(), handle, stream);
|
||||
PLAYBACKS.put(key, playback);
|
||||
REQUESTS.remove(key);
|
||||
player.addListener(new AudioEventAdapter() {
|
||||
@Override
|
||||
public void onTrackException(AudioPlayer failedPlayer, AudioTrack failedTrack,
|
||||
FriendlyException exception) {
|
||||
AmbianceMod.LOGGER.warn("White-disc playback failed for YouTube video {}: {}",
|
||||
failedTrack.getIdentifier(), exception.getMessage());
|
||||
client.execute(() -> failPlayback(client, key, failedPlayer));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTrackStuck(AudioPlayer stuckPlayer, AudioTrack stuckTrack,
|
||||
long thresholdMs) {
|
||||
AmbianceMod.LOGGER.warn("White-disc playback stalled for YouTube video {} after {} ms",
|
||||
stuckTrack.getIdentifier(), thresholdMs);
|
||||
client.execute(() -> failPlayback(client, key, stuckPlayer));
|
||||
}
|
||||
});
|
||||
player.playTrack(track);
|
||||
float volume = client.options.getFinalSoundSourceVolume(SoundSource.RECORDS);
|
||||
handle.execute(channel -> {
|
||||
channel.setSelfPosition(Vec3.atCenterOf(pos));
|
||||
channel.setRelative(false);
|
||||
channel.linearAttenuation(ATTENUATION_DISTANCE);
|
||||
channel.setVolume(volume);
|
||||
channel.attachBufferStream(stream);
|
||||
channel.play();
|
||||
try {
|
||||
channel.setSelfPosition(Vec3.atCenterOf(pos));
|
||||
channel.setRelative(false);
|
||||
channel.setPitch(1.0F);
|
||||
channel.linearAttenuation(ATTENUATION_DISTANCE);
|
||||
channel.setVolume(volume);
|
||||
channel.attachBufferStream(stream);
|
||||
channel.play();
|
||||
} catch (RuntimeException | LinkageError exception) {
|
||||
AmbianceMod.LOGGER.error("Unable to attach white-disc audio to Minecraft's sound engine",
|
||||
exception);
|
||||
client.execute(() -> failPlayback(client, key, player));
|
||||
}
|
||||
});
|
||||
if (client.player != null) client.player.sendOverlayMessage(
|
||||
Component.translatable("message.ambiance.white_disc.playing", track.getInfo().title));
|
||||
@@ -132,17 +173,25 @@ public final class WhiteDiscAudioPlayer {
|
||||
Component.translatable("message.ambiance.white_disc.failed"));
|
||||
}
|
||||
|
||||
private static void failPlayback(Minecraft client, long key, AudioPlayer player) {
|
||||
Playback playback = PLAYBACKS.get(key);
|
||||
if (playback == null || !playback.stream().uses(player)) return;
|
||||
stop(key);
|
||||
if (client.player != null) client.player.sendOverlayMessage(
|
||||
Component.translatable("message.ambiance.white_disc.failed"));
|
||||
}
|
||||
|
||||
public static void stop(BlockPos pos) {
|
||||
stop(pos.asLong());
|
||||
}
|
||||
|
||||
private static void stop(long key) {
|
||||
PENDING_STARTS.remove(key);
|
||||
REQUESTS.remove(key);
|
||||
Playback playback = PLAYBACKS.remove(key);
|
||||
if (playback == null) return;
|
||||
playback.stream().close();
|
||||
playback.handle().execute(channel -> channel.stop());
|
||||
playback.handle().release();
|
||||
}
|
||||
|
||||
public static void tick(Minecraft client) {
|
||||
@@ -150,6 +199,7 @@ public final class WhiteDiscAudioPlayer {
|
||||
clear();
|
||||
return;
|
||||
}
|
||||
tickPendingStarts(client);
|
||||
long now = System.nanoTime();
|
||||
for (Map.Entry<Long, Playback> entry : Map.copyOf(PLAYBACKS).entrySet()) {
|
||||
Playback playback = entry.getValue();
|
||||
@@ -167,6 +217,7 @@ public final class WhiteDiscAudioPlayer {
|
||||
}
|
||||
|
||||
public static void clear() {
|
||||
PENDING_STARTS.clear();
|
||||
REQUESTS.clear();
|
||||
for (long key : PLAYBACKS.keySet().stream().mapToLong(Long::longValue).toArray()) stop(key);
|
||||
}
|
||||
@@ -184,16 +235,51 @@ public final class WhiteDiscAudioPlayer {
|
||||
new Pcm16AudioDataFormat(1, LavaplayerAudioStream.SAMPLE_RATE, 960, false));
|
||||
manager.setFrameBufferDuration(5_000);
|
||||
manager.setItemLoaderThreadPoolSize(2);
|
||||
manager.registerSourceManager(new YoutubeAudioSourceManager(false));
|
||||
manager.registerSourceManager(new YoutubeAudioSourceManager(false, new Ios()));
|
||||
return manager;
|
||||
}
|
||||
|
||||
private static boolean validTarget(Minecraft client, BlockPos pos) {
|
||||
return validJukeboxTarget(client, pos)
|
||||
&& client.level.getBlockState(pos).getValue(JukeboxBlock.HAS_RECORD);
|
||||
}
|
||||
|
||||
private static boolean validJukeboxTarget(Minecraft client, BlockPos pos) {
|
||||
return client.player != null && client.level != null
|
||||
&& client.player.distanceToSqr(Vec3.atCenterOf(pos))
|
||||
<= ATTENUATION_DISTANCE * ATTENUATION_DISTANCE * 4.0D
|
||||
&& client.level.getBlockState(pos).is(Blocks.JUKEBOX)
|
||||
&& client.level.getBlockState(pos).getValue(JukeboxBlock.HAS_RECORD);
|
||||
&& client.level.getBlockState(pos).is(Blocks.JUKEBOX);
|
||||
}
|
||||
|
||||
private static void tickPendingStarts(Minecraft client) {
|
||||
for (Map.Entry<Long, PendingStart> entry : Map.copyOf(PENDING_STARTS).entrySet()) {
|
||||
long key = entry.getKey();
|
||||
PendingStart pending = entry.getValue();
|
||||
if (!client.level.dimension().equals(pending.dimension())
|
||||
|| !validJukeboxTarget(client, pending.pos())) {
|
||||
PENDING_STARTS.remove(key);
|
||||
continue;
|
||||
}
|
||||
if (validTarget(client, pending.pos())) {
|
||||
PENDING_STARTS.remove(key);
|
||||
startLoading(client, pending.pos(), pending.videoId());
|
||||
continue;
|
||||
}
|
||||
if (pending.ticksRemaining() <= 1) {
|
||||
PENDING_STARTS.remove(key);
|
||||
if (client.player != null) client.player.sendOverlayMessage(
|
||||
Component.translatable("message.ambiance.white_disc.failed"));
|
||||
continue;
|
||||
}
|
||||
PENDING_STARTS.put(key, pending.waitOneTick());
|
||||
}
|
||||
}
|
||||
|
||||
private record PendingStart(BlockPos pos, ResourceKey<Level> dimension, String videoId,
|
||||
int ticksRemaining) {
|
||||
private PendingStart waitOneTick() {
|
||||
return new PendingStart(pos, dimension, videoId, ticksRemaining - 1);
|
||||
}
|
||||
}
|
||||
|
||||
private record Playback(BlockPos pos, ResourceKey<Level> dimension,
|
||||
|
||||
+4
-6
@@ -1,19 +1,17 @@
|
||||
package fr.koka99cab.sanctuary26.ambiance.mixin.client;
|
||||
|
||||
import fr.koka99cab.sanctuary26.ambiance.client.audio.WhiteDiscAudioPlayer;
|
||||
import net.minecraft.client.renderer.LevelRenderer;
|
||||
import net.minecraft.client.renderer.LevelEventHandler;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(LevelRenderer.class)
|
||||
public abstract class LevelRendererMixin {
|
||||
@Mixin(LevelEventHandler.class)
|
||||
public abstract class LevelEventHandlerMixin {
|
||||
@Inject(method = "levelEvent", at = @At("HEAD"))
|
||||
private void ambiance$stopWhiteDisc(Entity source, int type, BlockPos pos, int data,
|
||||
CallbackInfo callback) {
|
||||
private void ambiance$stopWhiteDisc(int type, BlockPos pos, int data, CallbackInfo callback) {
|
||||
if (type == 1011) WhiteDiscAudioPlayer.stop(pos);
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@
|
||||
"GameRendererMixin",
|
||||
"LightCoordsUtilMixin",
|
||||
"LightmapRenderStateExtractorMixin",
|
||||
"LevelRendererMixin",
|
||||
"LevelEventHandlerMixin",
|
||||
"SoundEngineAccessor",
|
||||
"SoundManagerAccessor",
|
||||
"SkyRendererMixin"
|
||||
|
||||
+80
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
package fr.koka99cab.sanctuary26.ambiance.client.audio;
|
||||
|
||||
import com.sedmelluq.discord.lavaplayer.format.Pcm16AudioDataFormat;
|
||||
import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
|
||||
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
|
||||
import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
|
||||
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
|
||||
import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
|
||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||
import dev.lavalink.youtube.YoutubeAudioSourceManager;
|
||||
import dev.lavalink.youtube.clients.Ios;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/** Manual network smoke test for the exact YouTube playback path used by white discs. */
|
||||
public final class WhiteDiscPlaybackSmoke {
|
||||
private static final String VIDEO_URL = "https://www.youtube.com/watch?v=Ue5ZBe-GzSM";
|
||||
|
||||
private WhiteDiscPlaybackSmoke() {
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
DefaultAudioPlayerManager manager = new DefaultAudioPlayerManager();
|
||||
manager.getConfiguration().setOutputFormat(
|
||||
new Pcm16AudioDataFormat(1, LavaplayerAudioStream.SAMPLE_RATE, 960, false));
|
||||
manager.registerSourceManager(new YoutubeAudioSourceManager(false, new Ios()));
|
||||
try {
|
||||
AudioTrack track = load(manager).get(30, TimeUnit.SECONDS);
|
||||
AudioPlayer player = manager.createPlayer();
|
||||
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");
|
||||
}
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
private static CompletableFuture<AudioTrack> load(DefaultAudioPlayerManager manager) {
|
||||
CompletableFuture<AudioTrack> result = new CompletableFuture<>();
|
||||
manager.loadItem(VIDEO_URL, new AudioLoadResultHandler() {
|
||||
@Override
|
||||
public void trackLoaded(AudioTrack track) {
|
||||
result.complete(track);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playlistLoaded(AudioPlaylist playlist) {
|
||||
AudioTrack selected = playlist.getSelectedTrack();
|
||||
if (selected == null && !playlist.getTracks().isEmpty()) {
|
||||
selected = playlist.getTracks().getFirst();
|
||||
}
|
||||
if (selected == null) result.completeExceptionally(
|
||||
new IllegalStateException("YouTube playlist contained no track"));
|
||||
else result.complete(selected);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void noMatches() {
|
||||
result.completeExceptionally(new IllegalStateException("YouTube returned no match"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadFailed(FriendlyException exception) {
|
||||
result.completeExceptionally(exception);
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+2
@@ -10,6 +10,8 @@ public final class WhiteDiscUrlSmoke {
|
||||
public static void main(String[] args) {
|
||||
require(VIDEO_ID.equals(id("https://www.youtube.com/watch?v=" + VIDEO_ID)), "watch URL rejected");
|
||||
require(VIDEO_ID.equals(id("https://youtu.be/" + VIDEO_ID + "?si=abc")), "short URL rejected");
|
||||
require("Ue5ZBe-GzSM".equals(id("https://youtu.be/Ue5ZBe-GzSM?si=78LSbtBQzUYzhA2Y")),
|
||||
"reported white-disc URL rejected");
|
||||
require(VIDEO_ID.equals(id("https://music.youtube.com/watch?v=" + VIDEO_ID)), "music URL rejected");
|
||||
require(VIDEO_ID.equals(id("https://www.youtube.com/shorts/" + VIDEO_ID)), "shorts URL rejected");
|
||||
require(VIDEO_ID.equals(id("https://www.youtube.com/embed/" + VIDEO_ID)), "embed URL rejected");
|
||||
|
||||
+605
-92
@@ -36,8 +36,8 @@ allprojects {
|
||||
exclusiveContent {
|
||||
forRepository {
|
||||
maven {
|
||||
name = "Lavalink"
|
||||
url = "https://maven.lavalink.dev/releases"
|
||||
name = "LavalinkSnapshots"
|
||||
url = "https://maven.lavalink.dev/snapshots"
|
||||
}
|
||||
}
|
||||
filter { includeGroup "dev.lavalink.youtube" }
|
||||
@@ -3437,8 +3437,8 @@ 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.210"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.119"
|
||||
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
|
||||
|| migration.source?.modules != [sanctuary: "0.0.0-alpha.108", onlyfun: "0.0.0-alpha.17"]
|
||||
@@ -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.210"
|
||||
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,9 +4206,9 @@ 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.210"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.216"
|
||||
|| rootProject.onlyfun_version != "0.0.0-alpha.24"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.119"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.120"
|
||||
|| release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.192"
|
||||
|| migration.target?.pack_version != "26.2.0-alpha.193"
|
||||
@@ -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.210"
|
||||
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,9 +4300,9 @@ 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.210"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.216"
|
||||
|| rootProject.onlyfun_version != "0.0.0-alpha.24"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.119"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.120"
|
||||
|| release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.194"
|
||||
|| migration.source?.modules != [onlyfun: "0.0.0-alpha.18", sanctuary: "0.0.0-alpha.110"]
|
||||
@@ -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.210"
|
||||
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.210"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.210.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.210"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.210"')) {
|
||||
|| 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,9 +4392,9 @@ 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.210"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.216"
|
||||
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.119"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.120"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.196"
|
||||
|| migration.target?.pack_version != "26.2.0-alpha.197"
|
||||
|| migration.target?.modules != [itsalive: "0.0.0-alpha.29", sanctuary: "0.0.0-alpha.113"]
|
||||
@@ -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.210"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.210.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.210"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.210"')) {
|
||||
|| 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.210"
|
||||
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,11 +4461,11 @@ 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.210"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.210.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.210"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.210"')
|
||||
|| !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.35.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/itsalive-0.0.0-alpha.36.jar"')) {
|
||||
throw new GradleException("The alpha.198 fermentation barrel release contract is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -4492,9 +4492,9 @@ 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.210"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.216"
|
||||
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.119"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.120"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.198"
|
||||
|| migration.source?.modules?.sanctuary != "0.0.0-alpha.114"
|
||||
|| migration.target?.pack_version != "26.2.0-alpha.199"
|
||||
@@ -4506,12 +4506,12 @@ 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.210"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.210.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.210"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.210"')
|
||||
|| !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.35.jar"')
|
||||
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.118.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/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.210"
|
||||
|| rootProject.ambiance_version != "0.0.0-alpha.15"
|
||||
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,12 +4581,12 @@ tasks.register("verifyWeatherTntAmbianceRelease") {
|
||||
|| !weatherTnt.contains("AmbianceDailyWeather.CLEAR")
|
||||
|| !weatherTnt.contains("CLEAR_WEATHER_TICKS = 864_000")
|
||||
|| weatherTnt.contains("setWeatherParameters")
|
||||
|| release.pack_version != "26.2.0-alpha.210"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.210.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.210"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.210"')
|
||||
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.14.jar"')
|
||||
|| !packwizIndex.contains('file = "mods/ouch-0.0.0-alpha.9.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,8 +4613,8 @@ 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.210"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.119"
|
||||
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"
|
||||
|| migration.target?.pack_version != "26.2.0-alpha.201"
|
||||
@@ -4628,11 +4628,11 @@ 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.210"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.210.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.210"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.210"')
|
||||
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.118.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/sanctuary-0.0.0-alpha.120.jar"')) {
|
||||
throw new GradleException("The alpha.201 quest-request escrow release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -4667,11 +4667,11 @@ 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.210"
|
||||
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"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.119"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.120"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.201"
|
||||
|| migration.source?.modules != [
|
||||
itsalive: "0.0.0-alpha.30",
|
||||
@@ -4707,14 +4707,14 @@ 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.210"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.210.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.210"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.210"')
|
||||
|| 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.35.jar"')
|
||||
|| !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.36.jar"')
|
||||
|| !packwizIndex.contains('file = "mods/iliketomoveit-0.0.0-alpha.15.jar"')
|
||||
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.118.jar"')) {
|
||||
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.120.jar"')) {
|
||||
throw new GradleException("The alpha.202 Waystone, Shop and culinary lectern release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -4827,9 +4827,9 @@ 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.210"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.216"
|
||||
|| rootProject.anotherworld_version != "0.0.0-alpha.55"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.119"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.120"
|
||||
|| migration.schema_version != 1
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.201"
|
||||
|| migration.target?.pack_version != "26.2.0-alpha.202"
|
||||
@@ -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.210"
|
||||
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.210.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.210"')
|
||||
|| !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.210"
|
||||
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.210.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.210"')
|
||||
|| !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.210"
|
||||
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.210.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.210"')
|
||||
|| !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.210"
|
||||
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.210.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.210"')
|
||||
|| !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.210"
|
||||
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.210.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.210"')
|
||||
|| !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.210"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.216"
|
||||
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|
||||
|| rootProject.ambiance_version != "0.0.0-alpha.15"
|
||||
|| rootProject.ambiance_version != "0.0.0-alpha.19"
|
||||
|| migration.issue != 35
|
||||
|| migration.source?.fabric_id != "canaplia"
|
||||
|| migration.source?.version != "2.0.0"
|
||||
@@ -5384,6 +5384,8 @@ tasks.named("verifyWorkspace") {
|
||||
dependsOn "verifyCanapliaGameplay"
|
||||
dependsOn "verifyCanapliaAlpha209Release"
|
||||
dependsOn "verifyAlpha210Release"
|
||||
dependsOn "verifyAlpha211Release"
|
||||
dependsOn "verifyAlpha212Release"
|
||||
dependsOn tasks.named("verifyWaystoneShopCulinaryAlpha202Release")
|
||||
dependsOn tasks.named("verifySafeVaultFeature")
|
||||
dependsOn tasks.named("verifySafeVaultInterfaceAlpha203Release")
|
||||
@@ -5567,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.210"
|
||||
|| rootProject.ambiance_version != "0.0.0-alpha.15"
|
||||
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"
|
||||
@@ -5615,12 +5617,12 @@ 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.210.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.210"')
|
||||
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.14.jar"')
|
||||
|| !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.35.jar"')
|
||||
|| !packwizIndex.contains('file = "mods/onlyfun-0.0.0-alpha.21.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"')
|
||||
|| packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.33.jar"')
|
||||
|| packwizIndex.contains('file = "mods/onlyfun-0.0.0-alpha.19.jar"')
|
||||
@@ -5667,17 +5669,26 @@ tasks.register("verifyAlpha210Release") {
|
||||
onlyfun: "0.0.0-alpha.21",
|
||||
iliketomoveit: "0.0.0-alpha.15",
|
||||
itsalive: "0.0.0-alpha.35"]
|
||||
def requiredJars = expectedTarget.collect { id, version ->
|
||||
def currentModules = [
|
||||
ambiance: "0.0.0-alpha.19",
|
||||
sanctuary: "0.0.0-alpha.120",
|
||||
onlyfun: "0.0.0-alpha.24",
|
||||
ouch: "0.0.0-alpha.10",
|
||||
iliketomoveit: "0.0.0-alpha.15",
|
||||
itsalive: "0.0.0-alpha.36"]
|
||||
def requiredJars = currentModules.collect { id, version ->
|
||||
"file = \"mods/${id}-${version}.jar\""
|
||||
}
|
||||
def obsoleteJars = expectedSource.collect { id, version ->
|
||||
def obsoleteJars = expectedTarget.findAll { id, version ->
|
||||
currentModules[id] != version
|
||||
}.collect { id, version ->
|
||||
"file = \"mods/${id}-${version}.jar\""
|
||||
}
|
||||
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.210"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.119"
|
||||
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
|
||||
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|
||||
@@ -5722,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.210"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.210.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.210"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.210"')
|
||||
|| 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
|
||||
@@ -5737,6 +5748,508 @@ tasks.register("verifyAlpha210Release") {
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("verifyAlpha211Release") {
|
||||
group = "verification"
|
||||
description = "Checks the Sanctuary 26.2.0-alpha.211 Abjection and gameplay-polish release."
|
||||
inputs.file(file("pack/migrations/26.2.0-alpha.210-abjection-and-polish-to-alpha.211.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.files(["ambiance", "itsalive", "onlyfun", "ouch", "sanctuary"].collect { id ->
|
||||
file("${id}/src/main/resources/fabric.mod.json")
|
||||
})
|
||||
doLast {
|
||||
def migration = new JsonSlurper().parse(file(
|
||||
"pack/migrations/26.2.0-alpha.210-abjection-and-polish-to-alpha.211.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 expectedSource = [
|
||||
ambiance: "0.0.0-alpha.14",
|
||||
itsalive: "0.0.0-alpha.35",
|
||||
onlyfun: "0.0.0-alpha.21",
|
||||
ouch: "0.0.0-alpha.9",
|
||||
sanctuary: "0.0.0-alpha.118"]
|
||||
def expectedTarget = [
|
||||
ambiance: "0.0.0-alpha.15",
|
||||
itsalive: "0.0.0-alpha.36",
|
||||
onlyfun: "0.0.0-alpha.24",
|
||||
ouch: "0.0.0-alpha.10",
|
||||
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"]
|
||||
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 ->
|
||||
[(id): new JsonSlurper().parse(file("${id}/src/main/resources/fabric.mod.json"))]
|
||||
}
|
||||
def manifestDataVersions = manifests.collectEntries { id, manifest ->
|
||||
[(id): manifest.custom?.sanctuary26?.data_version]
|
||||
}
|
||||
def manifestProtocols = manifests.collectEntries { id, manifest ->
|
||||
[(id): manifest.custom?.sanctuary26?.network_protocol]
|
||||
}
|
||||
def requiredJars = currentModules.collect { id, version ->
|
||||
"file = \"mods/${id}-${version}.jar\""
|
||||
}
|
||||
def obsoleteJars = expectedTarget.findAll { id, version ->
|
||||
currentModules[id] != version
|
||||
}.collect { id, version ->
|
||||
"file = \"mods/${id}-${version}.jar\""
|
||||
}
|
||||
def expectedIds = [
|
||||
"ambiance:white_disc", "abjection:shit_ball", "abjection:shit_cube"]
|
||||
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"
|
||||
|| workspaceModules.any { id, version -> rootProject.property("${id}_version") != version }
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.210"
|
||||
|| migration.source?.modules != expectedSource
|
||||
|| migration.target?.pack_version != "26.2.0-alpha.211"
|
||||
|| migration.target?.modules != expectedTarget
|
||||
|| migration.features?.canaplia_codex_uses_vanilla_book_pages != true
|
||||
|| migration.features?.black_market_middle_click_restored != true
|
||||
|| migration.features?.white_disc_youtube_audio != true
|
||||
|| migration.features?.white_disc_max_concurrent_streams != 4
|
||||
|| migration.features?.abjection_server_actions != ["piss", "vomit", "shit", "smoke"]
|
||||
|| migration.features?.abjection_shit_ball_projectile != true
|
||||
|| migration.features?.abjection_shit_cube != true
|
||||
|| migration.features?.abjection_default_key != "J"
|
||||
|| migration.features?.abjection_projectile_nausea_seconds != 7
|
||||
|| migration.compatibility?.new_world_required != false
|
||||
|| migration.compatibility?.save_reset_required != false
|
||||
|| migration.compatibility?.existing_saves_supported != true
|
||||
|| migration.compatibility?.registry_ids_added != expectedIds
|
||||
|| migration.compatibility?.data_versions != expectedDataVersions
|
||||
|| migration.compatibility?.network_protocols != expectedProtocols
|
||||
|| manifestDataVersions != expectedDataVersions
|
||||
|| manifestProtocols != expectedProtocols
|
||||
|| 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
|
||||
|| release.pack_version != rootProject.pack_version
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.216.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.216"')
|
||||
|| requiredJars.any { !packwizIndex.contains(it) }
|
||||
|| obsoleteJars.any { packwizIndex.contains(it) }
|
||||
|| prism.files?.size() != 5
|
||||
|| jeiFiles.size() != 1
|
||||
|| 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`**")) {
|
||||
throw new GradleException("The alpha.211 Abjection and gameplay-polish release is incomplete")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("verifyAlpha212Release") {
|
||||
group = "verification"
|
||||
description = "Checks the Sanctuary 26.2.0-alpha.212 Black Market startup fix release."
|
||||
inputs.file(file("pack/migrations/26.2.0-alpha.211-black-market-mixin-fix-to-alpha.212.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("sanctuary/src/main/resources/fabric.mod.json"))
|
||||
inputs.file(file(
|
||||
"sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/client/MinecraftMixin.java"))
|
||||
doLast {
|
||||
def migration = new JsonSlurper().parse(file(
|
||||
"pack/migrations/26.2.0-alpha.211-black-market-mixin-fix-to-alpha.212.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("sanctuary/src/main/resources/fabric.mod.json"))
|
||||
def minecraftMixin = file(
|
||||
"sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/client/MinecraftMixin.java").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"
|
||||
|| 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"]
|
||||
|| migration.target?.pack_version != "26.2.0-alpha.212"
|
||||
|| migration.target?.modules != [sanctuary: "0.0.0-alpha.120"]
|
||||
|| migration.features?.black_market_middle_click_preserved != true
|
||||
|| migration.features?.minecraft_mixin_target != "pickBlockOrEntity"
|
||||
|| migration.features?.client_startup_crash_fixed != 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?.sanctuary_data_version != 11
|
||||
|| migration.compatibility?.sanctuary_network_protocol != 22
|
||||
|| 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 != 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"
|
||||
|| prism.files?.size() != 5
|
||||
|| jeiFiles.size() != 1
|
||||
|| !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.216`**")) {
|
||||
throw new GradleException("The alpha.212 Black Market startup-fix release is incomplete")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("verifyAlpha213Release") {
|
||||
group = "verification"
|
||||
description = "Checks the Sanctuary 26.2.0-alpha.213 Ambiance startup fix release."
|
||||
inputs.file(file("pack/migrations/26.2.0-alpha.212-ambiance-level-event-fix-to-alpha.213.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/mixin/client/LevelEventHandlerMixin.java"))
|
||||
doLast {
|
||||
def migration = new JsonSlurper().parse(file(
|
||||
"pack/migrations/26.2.0-alpha.212-ambiance-level-event-fix-to-alpha.213.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 levelEventMixin = file(
|
||||
"ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/mixin/client/LevelEventHandlerMixin.java").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"
|
||||
|| 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"
|
||||
|| migration.target?.modules != [ambiance: "0.0.0-alpha.16"]
|
||||
|| migration.features?.white_disc_stop_event_preserved != true
|
||||
|| migration.features?.minecraft_mixin_target_class != "LevelEventHandler"
|
||||
|| migration.features?.minecraft_mixin_target_method != "levelEvent"
|
||||
|| migration.features?.client_startup_crash_fixed != 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
|
||||
|| !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"
|
||||
|| 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"')
|
||||
|| 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`**")) {
|
||||
throw new GradleException("The alpha.213 Ambiance startup-fix release is incomplete")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("verifyAlpha214Release") {
|
||||
group = "verification"
|
||||
description = "Checks the Sanctuary 26.2.0-alpha.214 white-disc solo synchronization release."
|
||||
inputs.file(file("pack/migrations/26.2.0-alpha.213-white-disc-solo-sync-to-alpha.214.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/white_disc/WhiteDiscUrlSmoke.java"))
|
||||
doLast {
|
||||
def migration = new JsonSlurper().parse(file(
|
||||
"pack/migrations/26.2.0-alpha.213-white-disc-solo-sync-to-alpha.214.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 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"
|
||||
|| 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"
|
||||
|| migration.target?.modules != [ambiance: "0.0.0-alpha.17"]
|
||||
|| migration.features?.white_disc_solo_playback_restored != true
|
||||
|| migration.features?.client_jukebox_sync_wait_ticks != 100
|
||||
|| migration.features?.loading_feedback_immediate != true
|
||||
|| migration.features?.sync_timeout_feedback != true
|
||||
|| migration.features?.youtube_share_parameters_supported != 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
|
||||
|| !audioPlayer.contains("MAXIMUM_START_WAIT_TICKS = 100")
|
||||
|| !audioPlayer.contains("PENDING_STARTS")
|
||||
|| !audioPlayer.contains("tickPendingStarts(client)")
|
||||
|| !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"
|
||||
|| 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.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`**")) {
|
||||
throw new GradleException("The alpha.214 white-disc solo synchronization release is incomplete")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("verifyAlpha215Release") {
|
||||
group = "verification"
|
||||
description = "Checks the Sanctuary 26.2.0-alpha.215 resilient white-disc playback release."
|
||||
inputs.file(file("pack/migrations/26.2.0-alpha.214-white-disc-playback-crash-to-alpha.215.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/WhiteDiscPlaybackSmoke.java"))
|
||||
doLast {
|
||||
def migration = new JsonSlurper().parse(file(
|
||||
"pack/migrations/26.2.0-alpha.214-white-disc-playback-crash-to-alpha.215.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 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.214"
|
||||
|| migration.source?.modules != [ambiance: "0.0.0-alpha.17"]
|
||||
|| migration.target?.pack_version != "26.2.0-alpha.215"
|
||||
|| migration.target?.modules != [ambiance: "0.0.0-alpha.18"]
|
||||
|| migration.features?.white_disc_native_crash_fixed != true
|
||||
|| migration.features?.openal_channel_release_owned_by_audio_thread != true
|
||||
|| migration.features?.youtube_client_profile != "Ios"
|
||||
|| migration.features?.youtube_source_commit != "f45bbb7aebfcbc1c553769e04af6cd43afa8b7c3"
|
||||
|| migration.features?.initial_stream_wait_bounded != true
|
||||
|| migration.features?.subsequent_stream_polls_non_blocking != true
|
||||
|| migration.features?.playback_errors_stop_safely != true
|
||||
|| migration.features?.live_pcm_smoke_video_id != "Ue5ZBe-GzSM"
|
||||
|| 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("f45bbb7aebfcbc1c553769e04af6cd43afa8b7c3-SNAPSHOT")
|
||||
|| !ambianceBuild.contains('tasks.register("whiteDiscPlaybackSmoke"')
|
||||
|| !audioPlayer.contains("new YoutubeAudioSourceManager(false, new Ios())")
|
||||
|| !audioPlayer.contains("player.addListener(new AudioEventAdapter()")
|
||||
|| !audioPlayer.contains("failPlayback(client, key, failedPlayer)")
|
||||
|| !audioPlayer.contains("handle.execute(channel -> channel.stop())")
|
||||
|| audioPlayer.contains(".release()")
|
||||
|| !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.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.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`**")) {
|
||||
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") {
|
||||
dependsOn tasks.named("verifyWorkspace")
|
||||
dependsOn tasks.named("verifyTransport")
|
||||
|
||||
+3
-3
@@ -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.15
|
||||
ambiance_version=0.0.0-alpha.19
|
||||
ambiance_lifecycle=active
|
||||
redstoner_version=0.0.0-alpha.10
|
||||
redstoner_lifecycle=active
|
||||
@@ -28,7 +28,7 @@ iliketomoveit_version=0.0.0-alpha.15
|
||||
iliketomoveit_lifecycle=active
|
||||
onlyfun_version=0.0.0-alpha.24
|
||||
onlyfun_lifecycle=active
|
||||
sanctuary_version=0.0.0-alpha.119
|
||||
sanctuary_version=0.0.0-alpha.120
|
||||
sanctuary_lifecycle=active
|
||||
pack_version=26.2.0-alpha.210
|
||||
pack_version=26.2.0-alpha.216
|
||||
maven_group=fr.koka99cab.sanctuary26
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"source": {
|
||||
"pack_version": "26.2.0-alpha.210",
|
||||
"modules": {
|
||||
"ambiance": "0.0.0-alpha.14",
|
||||
"itsalive": "0.0.0-alpha.35",
|
||||
"onlyfun": "0.0.0-alpha.21",
|
||||
"ouch": "0.0.0-alpha.9",
|
||||
"sanctuary": "0.0.0-alpha.118"
|
||||
}
|
||||
},
|
||||
"target": {
|
||||
"pack_version": "26.2.0-alpha.211",
|
||||
"modules": {
|
||||
"ambiance": "0.0.0-alpha.15",
|
||||
"itsalive": "0.0.0-alpha.36",
|
||||
"onlyfun": "0.0.0-alpha.24",
|
||||
"ouch": "0.0.0-alpha.10",
|
||||
"sanctuary": "0.0.0-alpha.119"
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"canaplia_codex_uses_vanilla_book_pages": true,
|
||||
"black_market_middle_click_restored": true,
|
||||
"white_disc_youtube_audio": true,
|
||||
"white_disc_max_concurrent_streams": 4,
|
||||
"abjection_server_actions": ["piss", "vomit", "shit", "smoke"],
|
||||
"abjection_shit_ball_projectile": true,
|
||||
"abjection_shit_cube": true,
|
||||
"abjection_default_key": "J",
|
||||
"abjection_projectile_nausea_seconds": 7
|
||||
},
|
||||
"compatibility": {
|
||||
"new_world_required": false,
|
||||
"save_reset_required": false,
|
||||
"existing_saves_supported": true,
|
||||
"registry_ids_added": [
|
||||
"ambiance:white_disc",
|
||||
"abjection:shit_ball",
|
||||
"abjection:shit_cube"
|
||||
],
|
||||
"data_versions": {
|
||||
"ambiance": 2,
|
||||
"itsalive": 3,
|
||||
"onlyfun": 2,
|
||||
"ouch": 1,
|
||||
"sanctuary": 11
|
||||
},
|
||||
"network_protocols": {
|
||||
"ambiance": 6,
|
||||
"itsalive": 4,
|
||||
"onlyfun": 3,
|
||||
"ouch": 1,
|
||||
"sanctuary": 22
|
||||
}
|
||||
},
|
||||
"distribution": {
|
||||
"pack_release_updated": true,
|
||||
"packwiz_index_refreshed": true,
|
||||
"prism_modrinth_index_updated": true,
|
||||
"shared_client_server_mrpack": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"source": {
|
||||
"pack_version": "26.2.0-alpha.211",
|
||||
"modules": {
|
||||
"sanctuary": "0.0.0-alpha.119"
|
||||
}
|
||||
},
|
||||
"target": {
|
||||
"pack_version": "26.2.0-alpha.212",
|
||||
"modules": {
|
||||
"sanctuary": "0.0.0-alpha.120"
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"black_market_middle_click_preserved": true,
|
||||
"minecraft_mixin_target": "pickBlockOrEntity",
|
||||
"client_startup_crash_fixed": true
|
||||
},
|
||||
"compatibility": {
|
||||
"new_world_required": false,
|
||||
"save_reset_required": false,
|
||||
"existing_saves_supported": true,
|
||||
"registry_ids_changed": false,
|
||||
"sanctuary_data_version": 11,
|
||||
"sanctuary_network_protocol": 22
|
||||
},
|
||||
"distribution": {
|
||||
"pack_release_updated": true,
|
||||
"packwiz_index_refreshed": true,
|
||||
"prism_modrinth_index_updated": true,
|
||||
"shared_client_server_mrpack": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"source": {
|
||||
"pack_version": "26.2.0-alpha.212",
|
||||
"modules": {
|
||||
"ambiance": "0.0.0-alpha.15"
|
||||
}
|
||||
},
|
||||
"target": {
|
||||
"pack_version": "26.2.0-alpha.213",
|
||||
"modules": {
|
||||
"ambiance": "0.0.0-alpha.16"
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"white_disc_stop_event_preserved": true,
|
||||
"minecraft_mixin_target_class": "LevelEventHandler",
|
||||
"minecraft_mixin_target_method": "levelEvent",
|
||||
"client_startup_crash_fixed": 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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"source": {
|
||||
"pack_version": "26.2.0-alpha.213",
|
||||
"modules": {
|
||||
"ambiance": "0.0.0-alpha.16"
|
||||
}
|
||||
},
|
||||
"target": {
|
||||
"pack_version": "26.2.0-alpha.214",
|
||||
"modules": {
|
||||
"ambiance": "0.0.0-alpha.17"
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"white_disc_solo_playback_restored": true,
|
||||
"client_jukebox_sync_wait_ticks": 100,
|
||||
"loading_feedback_immediate": true,
|
||||
"sync_timeout_feedback": true,
|
||||
"youtube_share_parameters_supported": 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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"source": {
|
||||
"pack_version": "26.2.0-alpha.214",
|
||||
"modules": {
|
||||
"ambiance": "0.0.0-alpha.17"
|
||||
}
|
||||
},
|
||||
"target": {
|
||||
"pack_version": "26.2.0-alpha.215",
|
||||
"modules": {
|
||||
"ambiance": "0.0.0-alpha.18"
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"white_disc_native_crash_fixed": true,
|
||||
"openal_channel_release_owned_by_audio_thread": true,
|
||||
"youtube_client_profile": "Ios",
|
||||
"youtube_source_commit": "f45bbb7aebfcbc1c553769e04af6cd43afa8b7c3",
|
||||
"initial_stream_wait_bounded": true,
|
||||
"subsequent_stream_polls_non_blocking": true,
|
||||
"playback_errors_stop_safely": true,
|
||||
"live_pcm_smoke_video_id": "Ue5ZBe-GzSM"
|
||||
},
|
||||
"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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
+15
-15
@@ -13,16 +13,16 @@ file = "instance-icon.png"
|
||||
hash = "41f4f4c88c71d0a23446d5014f7407d55ad477441847099cad24492b032335a0"
|
||||
|
||||
[[files]]
|
||||
file = "mods/ambiance-0.0.0-alpha.14.jar"
|
||||
hash = "a4b2a36e046a3095ada58e3dbf5fd30ab7c8ba42eaf2abcf513b38b8cc2f3e4a"
|
||||
file = "mods/ambiance-0.0.0-alpha.19.jar"
|
||||
hash = "d3810b758e073d74efbaa501e39b0865335baf1089ff76a2554d24c6e13188ee"
|
||||
|
||||
[[files]]
|
||||
file = "mods/anotherworld-0.0.0-alpha.55.jar"
|
||||
hash = "da7163a34ca71e1c2385a84221cddccc09f0f83d9a00bce0ed6263b19ec519cb"
|
||||
hash = "56015a9d3c3517c948e336eab973205f84772a4f3a0b790e6f2832824ee44f3a"
|
||||
|
||||
[[files]]
|
||||
file = "mods/events-0.0.0-alpha.0.jar"
|
||||
hash = "7400d63c905d1c87a5290adaa2fe91305fa1f067827ca8f0610a6ae4e17624da"
|
||||
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 = "a084cf25a4afa50086ce220f40b6b3946a06389de105f23c0246df1577deb3c8"
|
||||
hash = "551e354b96bb35ed8d64b26a4aac85d1d9441be592ed9fc62d6cd359e0e0e0c5"
|
||||
|
||||
[[files]]
|
||||
file = "mods/iris.pw.toml"
|
||||
@@ -39,8 +39,8 @@ hash = "84a3cef87679c0d21dceb4641167dc0368b9a3593698f6a3632485e9b3a8d5da"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/itsalive-0.0.0-alpha.35.jar"
|
||||
hash = "4a6433abdfc03a0872f7c810fb17016a0f20acda5e223e0fef479dd786cc73ac"
|
||||
file = "mods/itsalive-0.0.0-alpha.36.jar"
|
||||
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 = "eaf70f6c5a78ee7ab2d3be498d4f7d67fcba433ed61b65b305e958f03b387d94"
|
||||
hash = "268b30dcb808d8d2db1b909863beb9974b432fa558e7cd516dde811f600fd66e"
|
||||
|
||||
[[files]]
|
||||
file = "mods/onlyfun-0.0.0-alpha.21.jar"
|
||||
hash = "7e319a0cc6149d5819ef2359fe3ad4035066a9cddd5ae0a16c12c9db64bc3f6a"
|
||||
file = "mods/onlyfun-0.0.0-alpha.24.jar"
|
||||
hash = "e6b89c1958449fb5bb70bb011df26cecc8f91a224b79788e96827a3897dfba4a"
|
||||
|
||||
[[files]]
|
||||
file = "mods/ouch-0.0.0-alpha.9.jar"
|
||||
hash = "f3cf2d8c83afa32b1c70e8239dd514be3c74834397f9d09efe177bc8c5ef9ac4"
|
||||
file = "mods/ouch-0.0.0-alpha.10.jar"
|
||||
hash = "d12d57580015a829f6fc31310cf5724bad1b442380aaf6272194caeed21a50fc"
|
||||
|
||||
[[files]]
|
||||
file = "mods/redstoner-0.0.0-alpha.10.jar"
|
||||
hash = "a9049b9d3a323015545194c92ce9da7a5dca4ff9a28ea26b02bead96748328ab"
|
||||
hash = "d210ed751188e7e3e5ce197f498518c06cb5673e4057103cd0964c1a8d2b0066"
|
||||
|
||||
[[files]]
|
||||
file = "mods/sanctuary-0.0.0-alpha.118.jar"
|
||||
hash = "1a1319e5f09de941ad8a7561aff9d2fb8c7460a8cd8d2374817d8f39c5682030"
|
||||
file = "mods/sanctuary-0.0.0-alpha.120.jar"
|
||||
hash = "f82fc135319d0ad25bed49f2fe924d506761391343265add2efd6c73d55f939a"
|
||||
|
||||
[[files]]
|
||||
file = "mods/simple-voice-chat.pw.toml"
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
name = "Sanctuary 26.2"
|
||||
author = "KOKA99CAB"
|
||||
version = "26.2.0-alpha.210"
|
||||
version = "26.2.0-alpha.216"
|
||||
pack-format = "packwiz:1.1.0"
|
||||
|
||||
[index]
|
||||
file = "index.toml"
|
||||
hash-format = "sha256"
|
||||
hash = "e20c051f8895ce3164ec72b7764b8904f411e36f63bf1e046b1bcc9108d00a31"
|
||||
hash = "7a9a44c1f7dcd46aab475cdd2ac078758f320a550386140d89af994acd7c29d1"
|
||||
|
||||
[versions]
|
||||
fabric = "0.19.3"
|
||||
|
||||
@@ -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.210",
|
||||
"versionId": "26.2.0-alpha.216",
|
||||
"files": [
|
||||
{
|
||||
"path": "mods/fabric-api-0.158.0+26.2.jar",
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"pack_version": "26.2.0-alpha.210",
|
||||
"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.210.mrpack",
|
||||
"primary_file": "sanctuary-26.2.0-alpha.216.mrpack",
|
||||
"shared_client_server_pack": true,
|
||||
"update_owner": "packwiz-installer",
|
||||
"check_on_launch": true,
|
||||
|
||||
+11
-11
@@ -121,7 +121,7 @@ tasks.register("verifyBlackMarket") {
|
||||
def questData = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestBoardData.java").text
|
||||
def quests = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestBoardService.java").text
|
||||
def inventoryView = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/api/inventory/SanctuaryPlayerInventoryView.java").text
|
||||
if (project.version.toString() != "0.0.0-alpha.119"
|
||||
if (project.version.toString() != "0.0.0-alpha.120"
|
||||
|| !data.contains('SAVE_KEY = "black_market"') || !data.contains("DATA_VERSION = 2")
|
||||
|| !data.contains("ItemStack.CODEC.fieldOf(\"item\")") || !data.contains("replaceListing")
|
||||
|| !service.contains("LISTING_FEE_RUBIES = 1") || !service.contains("COMMISSION_PERCENT = 5")
|
||||
@@ -132,7 +132,7 @@ tasks.register("verifyBlackMarket") {
|
||||
|| !interactionRules.contains("middleClick || secondaryUse")
|
||||
|| !client.contains("handleBlackMarketMiddleClick")
|
||||
|| !client.contains("ClientPlayNetworking.send(new BlackMarketInteractPayload())")
|
||||
|| !minecraftMixin.contains('method = "pickBlock"')
|
||||
|| !minecraftMixin.contains('method = "pickBlockOrEntity"')
|
||||
|| !middleClickPayload.contains('SanctuaryMod.id("c2s/black_market_interact")')
|
||||
|| !middleClickPayload.contains("No client position, listing ID, item or price is trusted")
|
||||
|| !network.contains("PROTOCOL_VERSION = 22")
|
||||
@@ -2818,7 +2818,7 @@ tasks.register("verifyShopCurrencyRowsRelease") {
|
||||
"src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/BlackMarketService.java").text
|
||||
def shop = file(
|
||||
"src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopService.java").text
|
||||
if (project.version.toString() != "0.0.0-alpha.119"
|
||||
if (project.version.toString() != "0.0.0-alpha.120"
|
||||
|| migration.target?.modules?.sanctuary != "0.0.0-alpha.117"
|
||||
|| migration.shop_currency_inventory?.all_unlocked_rows_counted != true
|
||||
|| migration.shop_currency_inventory?.overflow_rows_counted != true
|
||||
@@ -2984,7 +2984,7 @@ tasks.register("verifyProgressivePauseMenu") {
|
||||
"pack/migrations/26.2.0-alpha.190-progressive-pause-menu-to-alpha.191.json"))
|
||||
def pauseMenu = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/client/PauseScreenMixin.java").text
|
||||
def costs = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/progression/SanctuaryProgressionCosts.java").text
|
||||
if (project.version.toString() != "0.0.0-alpha.119"
|
||||
if (project.version.toString() != "0.0.0-alpha.120"
|
||||
|| migration.target?.pack_version != "26.2.0-alpha.191"
|
||||
|| migration.target?.modules?.sanctuary != "0.0.0-alpha.109"
|
||||
|| migration.pause_menu?.progression_full_width != true
|
||||
@@ -3022,7 +3022,7 @@ tasks.register("verifyShopPricingLayout") {
|
||||
"pack/migrations/26.2.0-alpha.192-shop-pricing-layout-to-alpha.193.json"))
|
||||
def screen = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/client/SanctuaryShopScreen.java").text
|
||||
def progression = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopProgression.java").text
|
||||
if (project.version.toString() != "0.0.0-alpha.119"
|
||||
if (project.version.toString() != "0.0.0-alpha.120"
|
||||
|| migration.target?.modules?.sanctuary != "0.0.0-alpha.110"
|
||||
|| migration.shop_layout?.locked_offer_buttons != 6
|
||||
|| migration.shop_layout?.button_slots != [4, 5, 6, 7, 8, 9]
|
||||
@@ -3053,7 +3053,7 @@ tasks.register("verifyShopCsvBossGates") {
|
||||
"pack/migrations/26.2.0-alpha.194-shop-csv-boss-gates-to-alpha.195.json"))
|
||||
def provider = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopCatalogProvider.java").text
|
||||
def catalog = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopOfferCatalog.java").text
|
||||
if (project.version.toString() != "0.0.0-alpha.119"
|
||||
if (project.version.toString() != "0.0.0-alpha.120"
|
||||
|| migration.target?.pack_version != "26.2.0-alpha.195"
|
||||
|| migration.target?.modules?.sanctuary != "0.0.0-alpha.111"
|
||||
|| migration.compatibility?.sanctuary_data_version != 11
|
||||
@@ -3084,7 +3084,7 @@ tasks.register("verifyDeliveryBoxOrientation") {
|
||||
def blockstate = new JsonSlurper().parse(
|
||||
file("src/main/resources/assets/sanctuary/blockstates/delivery_box.json"))
|
||||
def expectedVariants = ["facing=north", "facing=east", "facing=south", "facing=west"].toSet()
|
||||
if (project.version.toString() != "0.0.0-alpha.119"
|
||||
if (project.version.toString() != "0.0.0-alpha.120"
|
||||
|| migration.target?.modules?.sanctuary != "0.0.0-alpha.112"
|
||||
|| migration.mailbox?.id != "sanctuary:delivery_box"
|
||||
|| migration.mailbox?.horizontal_facing != true
|
||||
@@ -3112,7 +3112,7 @@ tasks.register("verifyInventoryShiftClick") {
|
||||
def mixin = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/AbstractContainerMenuMixin.java").text
|
||||
def screen = file("src/main/java/fr/koka99cab/sanctuary26/sanctuary/mixin/client/AbstractContainerScreenMixin.java").text
|
||||
def gui = file("INVENTORY_GUI.md").text
|
||||
if (project.version.toString() != "0.0.0-alpha.119"
|
||||
if (project.version.toString() != "0.0.0-alpha.120"
|
||||
|| !transfer.contains("shouldAppendOverflow")
|
||||
|| !transfer.contains("isVanillaStorageRange")
|
||||
|| !transfer.contains("hotbarStart")
|
||||
@@ -3158,7 +3158,7 @@ tasks.register("verifyQuestRequests") {
|
||||
new JsonSlurper().parse(file("src/main/resources/data/sanctuary/loot_table/blocks/${path}.json"))
|
||||
.pools[0].entries[0].name
|
||||
}
|
||||
if (project.version.toString() != "0.0.0-alpha.119"
|
||||
if (project.version.toString() != "0.0.0-alpha.120"
|
||||
|| migration.target?.modules?.sanctuary != "0.0.0-alpha.113"
|
||||
|| migration.quest_requests?.save_key != "quest_requests"
|
||||
|| migration.quest_requests?.data_version != 1
|
||||
@@ -3216,7 +3216,7 @@ tasks.register("verifyQuestRequestContracts") {
|
||||
def locales = ["fr_fr", "en_us", "ru_ru"].collectEntries { locale ->
|
||||
[(locale): new JsonSlurper().parse(file("src/main/resources/assets/sanctuary/lang/${locale}.json"))]
|
||||
}
|
||||
if (project.version.toString() != "0.0.0-alpha.119"
|
||||
if (project.version.toString() != "0.0.0-alpha.120"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.198"
|
||||
|| migration.source?.modules?.sanctuary != "0.0.0-alpha.114"
|
||||
|| migration.target?.pack_version != "26.2.0-alpha.199"
|
||||
@@ -3285,7 +3285,7 @@ tasks.register("verifyQuestRequestEscrow") {
|
||||
def locales = ["fr_fr", "en_us", "ru_ru"].collectEntries { locale ->
|
||||
[(locale): new JsonSlurper().parse(file("src/main/resources/assets/sanctuary/lang/${locale}.json"))]
|
||||
}
|
||||
if (project.version.toString() != "0.0.0-alpha.119"
|
||||
if (project.version.toString() != "0.0.0-alpha.120"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.200"
|
||||
|| migration.source?.modules?.sanctuary != "0.0.0-alpha.115"
|
||||
|| migration.target?.pack_version != "26.2.0-alpha.201"
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
/** Gives the game window the Sanctuary identity while preserving its connection suffix. */
|
||||
@Mixin(Minecraft.class)
|
||||
public abstract class MinecraftMixin {
|
||||
@Inject(method = "pickBlock", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "pickBlockOrEntity", at = @At("HEAD"), cancellable = true)
|
||||
private void sanctuary$blackMarketMiddleClick(CallbackInfo callback) {
|
||||
if (SanctuaryClient.handleBlackMarketMiddleClick((Minecraft) (Object) this)) callback.cancel();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user