Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d6ca1140b5 | ||
|
|
7a2f697024 | ||
|
|
4d0750e993 | ||
|
|
c49673801f |
+7
-2
@@ -6,14 +6,19 @@ 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.222`
|
||||
|
||||
Module modifié : **Sanctuary `0.0.0-alpha.124`**. Le pack public reste temporairement en `26.2.0-alpha.221` jusqu'à la publication.
|
||||
Modules modifiés : **Red-Stoner `0.0.0-alpha.13`** et **Sanctuary `0.0.0-alpha.124`**. Les huit autres modules conservent leur version issue de l'alpha.221.
|
||||
|
||||
- ajoute au terminal de stockage une recherche clavier focalisée à l'ouverture, compatible avec les noms affichés, les IDs, les traductions, les accents et Unicode ;
|
||||
- affiche les grandes quantités du terminal sous forme compacte (`1K`, `1.2K`, `12K`, `1.2M`) tout en conservant la valeur exacte dans l'infobulle ;
|
||||
- stabilise les emplacements du terminal lorsqu'une pile est vidée afin que les ressources suivantes ne glissent plus sous le curseur, puis recompacte volontairement lors d'une nouvelle recherche ou à la réouverture ;
|
||||
- ajoute un suivi d'avancement des quêtes, affichable ou masquable par une touche configurable (`J` par défaut) ;
|
||||
- affiche chaque quête active comme un simple texte ombré en haut à gauche, sans panneau, bordure, titre, message vide ni barre de progression ;
|
||||
- synchronise un snapshot borné des quêtes acceptées et des contrats réservés, sans les demandes que le joueur a lui-même créées, ni changer les données Sanctuary v11 ni le protocole réseau 22 ;
|
||||
- propose une saisie assistée des IDs d'item et de mob dans l'éditeur de demande, avec icône et noms proches.
|
||||
- actualise JEI vers la bêta Fabric 26.2 `30.29.0.196` et synchronise Packwiz avec l'index Prism/Modrinth ;
|
||||
- conserve Red-Stoner data v3/protocole 7, Sanctuary data v11/protocole 22, les IDs et les sauvegardes existantes ; aucun nouveau monde ni réinitialisation n'est nécessaire.
|
||||
|
||||
## `26.2.0-alpha.221`
|
||||
|
||||
|
||||
@@ -22,10 +22,12 @@ 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.221`**. Cette release distribue Ambiance **`0.0.0-alpha.22`** ; les neuf autres modules conservent leur version issue de l'alpha.220.
|
||||
Version courante du pack distribué : **`26.2.0-alpha.222`**. Cette release distribue Red-Stoner **`0.0.0-alpha.13`** et Sanctuary **`0.0.0-alpha.124`** ; les huit autres modules conservent leur version issue de l'alpha.221.
|
||||
|
||||
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.222 améliore le terminal de stockage avec une recherche Unicode, des quantités compactes et des emplacements qui ne glissent plus lorsqu'une pile est vidée. Elle ajoute aussi le suivi textuel des quêtes actives en haut à gauche, masquable avec une touche configurable, ainsi que des suggestions d’IDs d’items et de mobs dans l’éditeur de demandes. JEI passe à la bêta Fabric 26.2 `30.29.0.196`.
|
||||
|
||||
L’alpha.221 corrige la cause réelle du disque blanc ralenti et trop grave : Ambiance décode désormais la source AAC en stéréo native à 48 kHz, puis moyenne explicitement chaque paire gauche/droite vers le flux mono positionnel de Minecraft. OpenAL reste à sa hauteur normale `1.0`, sans compensation artificielle ni changement de durée.
|
||||
|
||||
L’alpha.220 transforme le terminal de stockage en véritable menu de conteneur, sans bouton de fermeture propriétaire. Les clics gauche/droit et shift-clic permettent maintenant de retirer ou déposer des piles depuis toutes les rangées d’inventaire débloquées par Sanctuary, jusqu’à six ; la grille agrégée reste non réorganisable et remplit chaque coffre ou baril dans l’ordre de découverte avant de passer au suivant.
|
||||
|
||||
+276
-179
@@ -339,7 +339,7 @@ tasks.register("verifyWorkspace") {
|
||||
}
|
||||
def progressionJeiMigration = new JsonSlurper().parse(file(
|
||||
"pack/migrations/26.2.0-alpha.87-progression-jei-audio-to-alpha.88.json"))
|
||||
def jeiFiles = prismIndex.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" }
|
||||
def jeiFiles = prismIndex.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.196.jar" }
|
||||
if (progressionJeiMigration.source?.pack_version != "26.2.0-alpha.87"
|
||||
|| progressionJeiMigration.target?.pack_version != "26.2.0-alpha.88"
|
||||
|| progressionJeiMigration.target?.modules?.sanctuary != "0.0.0-alpha.38"
|
||||
@@ -354,8 +354,8 @@ tasks.register("verifyWorkspace") {
|
||||
|| progressionJeiMigration.compatibility?.network_protocol != 10
|
||||
|| progressionJeiMigration.compatibility?.network_protocol_changed != true
|
||||
|| jeiFiles.size() != 1
|
||||
|| jeiFiles[0].hashes?.sha1 != "494f9dc787d6c9cd9d32793da2784ab16834faf3"
|
||||
|| jeiFiles[0].hashes?.sha512 != "0869f4d5840a732a04bedc7684b40140f087f3d759066c206d9d1ec710007f7c9585e4f5ebb04f10e56bef1cf2eddc6978bb2b2c93541cff5fcf7e1609859468"
|
||||
|| jeiFiles[0].hashes?.sha1 != "c2f2c6b5822a560fe9872921b908ffc2f3297d00"
|
||||
|| jeiFiles[0].hashes?.sha512 != "c62a3e264d4b0ec398b9aa717a4832eecb8663bbcec4483dc58a9999d5e4e55ca4f5bca285a0d4a003220c698c3e87c8a3294366e085e72545e4afe84aec92c7"
|
||||
|| jeiFiles[0].env?.client != "required" || jeiFiles[0].env?.server != "required") {
|
||||
throw new GradleException("The alpha.88 progression, JEI and Minecrafter audio contract is incomplete")
|
||||
}
|
||||
@@ -3437,7 +3437,7 @@ tasks.register("verifyProgressivePauseMenuRelease") {
|
||||
[(locale): new JsonSlurper().parse(file(
|
||||
"sanctuary/src/main/resources/assets/sanctuary/lang/${locale}.json"))]
|
||||
}
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.124"
|
||||
|| rootProject.onlyfun_version != "0.0.0-alpha.25"
|
||||
|| release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version
|
||||
@@ -3487,7 +3487,7 @@ tasks.register("verifyMirrorLavenderDrawerRelease") {
|
||||
def redStonerRegistry = file(
|
||||
"redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/registry/RedStonerRegistries.java").text
|
||||
def drawerRecipe = file("redstoner/src/main/resources/data/redstoner/recipe/drawer.json")
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.anotherworld_version != "0.0.0-alpha.55"
|
||||
|| rootProject.redstoner_version != "0.0.0-alpha.13"
|
||||
|| release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version
|
||||
@@ -4277,7 +4277,7 @@ tasks.register("verifyShopPricingLayoutRelease") {
|
||||
"pack/migrations/26.2.0-alpha.192-shop-pricing-layout-to-alpha.193.json"))
|
||||
def release = new JsonSlurper().parse(file("pack/release.json"))
|
||||
def index = new JsonSlurper().parse(file("pack/prism/modrinth.index.json"))
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.onlyfun_version != "0.0.0-alpha.25"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.124"
|
||||
|| release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version
|
||||
@@ -4322,7 +4322,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.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| 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"
|
||||
@@ -4371,7 +4371,7 @@ tasks.register("verifyShopCsvBossGatesRelease") {
|
||||
def bossGate = file("onlyfun/src/main/java/fr/koka99cab/sanctuary26/onlyfun/shop/OnlyFunBossShopGate.java").text
|
||||
def catalog = file("onlyfun/src/main/java/fr/koka99cab/sanctuary26/onlyfun/shop/OnlyFunShopCatalog.java").text
|
||||
def offerCatalog = file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopOfferCatalog.java").text
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.onlyfun_version != "0.0.0-alpha.25"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.124"
|
||||
|| release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version
|
||||
@@ -4417,7 +4417,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.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.195"
|
||||
|| migration.target?.pack_version != "26.2.0-alpha.196"
|
||||
|| migration.target?.modules != [
|
||||
@@ -4435,10 +4435,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.221"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.221"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')) {
|
||||
|| release.pack_version != "26.2.0-alpha.222"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.222"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')) {
|
||||
throw new GradleException("The alpha.196 culinary, mailbox and grapple release contract is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -4463,7 +4463,7 @@ tasks.register("verifyQuestRequestsCauldronBatchesRelease") {
|
||||
def prism = new JsonSlurper().parse(file("pack/prism/modrinth.index.json"))
|
||||
def packwiz = file("pack/packwiz/pack.toml").text
|
||||
def sanctuaryManifest = new JsonSlurper().parse(file("sanctuary/src/main/resources/fabric.mod.json"))
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.124"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.196"
|
||||
@@ -4483,10 +4483,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.221"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.221"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')) {
|
||||
|| release.pack_version != "26.2.0-alpha.222"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.222"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')) {
|
||||
throw new GradleException("The alpha.197 quest-request and cauldron-batch release contract is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -4513,7 +4513,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.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| 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"
|
||||
@@ -4532,10 +4532,10 @@ tasks.register("verifyFermentationBarrelAutomationRelease") {
|
||||
|| migration.distribution?.packwiz_index_refreshed != true
|
||||
|| itsAliveManifest.custom?.sanctuary26?.data_version != 3
|
||||
|| itsAliveManifest.custom?.sanctuary26?.network_protocol != 4
|
||||
|| release.pack_version != "26.2.0-alpha.221"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.221"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| release.pack_version != "26.2.0-alpha.222"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.222"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.36.jar"')) {
|
||||
throw new GradleException("The alpha.198 fermentation barrel release contract is incomplete")
|
||||
}
|
||||
@@ -4563,7 +4563,7 @@ tasks.register("verifyQuestRequestContractsRelease") {
|
||||
def packwiz = file("pack/packwiz/pack.toml").text
|
||||
def packwizIndex = file("pack/packwiz/index.toml").text
|
||||
def sanctuaryManifest = new JsonSlurper().parse(file("sanctuary/src/main/resources/fabric.mod.json"))
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.124"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.198"
|
||||
@@ -4577,12 +4577,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.221"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.221"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| release.pack_version != "26.2.0-alpha.222"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.222"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.36.jar"')
|
||||
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.122.jar"')) {
|
||||
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.124.jar"')) {
|
||||
throw new GradleException("The alpha.199 quest-request contract release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -4618,7 +4618,7 @@ 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.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.ambiance_version != "0.0.0-alpha.22"
|
||||
|| rootProject.ouch_version != "0.0.0-alpha.10"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.199"
|
||||
@@ -4652,10 +4652,10 @@ tasks.register("verifyWeatherTntAmbianceRelease") {
|
||||
|| !weatherTnt.contains("AmbianceDailyWeather.CLEAR")
|
||||
|| !weatherTnt.contains("CLEAR_WEATHER_TICKS = 864_000")
|
||||
|| weatherTnt.contains("setWeatherParameters")
|
||||
|| release.pack_version != "26.2.0-alpha.221"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.221"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| release.pack_version != "26.2.0-alpha.222"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.222"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.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")
|
||||
@@ -4684,7 +4684,7 @@ tasks.register("verifyQuestRequestEscrowRelease") {
|
||||
def packwiz = file("pack/packwiz/pack.toml").text
|
||||
def packwizIndex = file("pack/packwiz/index.toml").text
|
||||
def sanctuaryManifest = new JsonSlurper().parse(file("sanctuary/src/main/resources/fabric.mod.json"))
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.124"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.200"
|
||||
|| migration.source?.modules?.sanctuary != "0.0.0-alpha.115"
|
||||
@@ -4699,11 +4699,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.221"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.221"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.122.jar"')) {
|
||||
|| release.pack_version != "26.2.0-alpha.222"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.222"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.124.jar"')) {
|
||||
throw new GradleException("The alpha.201 quest-request escrow release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -4738,7 +4738,7 @@ tasks.register("verifyWaystoneShopCulinaryAlpha202Release") {
|
||||
"iliketomoveit/src/main/resources/fabric.mod.json"))
|
||||
def sanctuaryManifest = new JsonSlurper().parse(file(
|
||||
"sanctuary/src/main/resources/fabric.mod.json"))
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.anotherworld_version != "0.0.0-alpha.55"
|
||||
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|
||||
|| rootProject.iliketomoveit_version != "0.0.0-alpha.16"
|
||||
@@ -4778,14 +4778,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.221"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.221"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| release.pack_version != "26.2.0-alpha.222"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.222"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"')
|
||||
|| !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.36.jar"')
|
||||
|| !packwizIndex.contains('file = "mods/iliketomoveit-0.0.0-alpha.16.jar"')
|
||||
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.122.jar"')) {
|
||||
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.124.jar"')) {
|
||||
throw new GradleException("The alpha.202 Waystone, Shop and culinary lectern release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -4898,7 +4898,7 @@ tasks.register("verifySafeVaultFeature") {
|
||||
def image = javax.imageio.ImageIO.read(file("anotherworld/src/main/resources/assets/anotherworld/textures/${path}"))
|
||||
image == null || image.width != size[0] || image.height != size[1]
|
||||
}.keySet()
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.anotherworld_version != "0.0.0-alpha.55"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.124"
|
||||
|| migration.schema_version != 1
|
||||
@@ -5089,8 +5089,8 @@ tasks.register("verifySafeVaultInterfaceAlpha203Release") {
|
||||
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 jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" }
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.196.jar" }
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| 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"]
|
||||
@@ -5108,14 +5108,14 @@ 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.221.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !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
|
||||
|| jeiFiles[0].hashes?.sha1 != "494f9dc787d6c9cd9d32793da2784ab16834faf3"
|
||||
|| jeiFiles[0].hashes?.sha512 != "0869f4d5840a732a04bedc7684b40140f087f3d759066c206d9d1ec710007f7c9585e4f5ebb04f10e56bef1cf2eddc6978bb2b2c93541cff5fcf7e1609859468") {
|
||||
|| jeiFiles[0].hashes?.sha1 != "c2f2c6b5822a560fe9872921b908ffc2f3297d00"
|
||||
|| jeiFiles[0].hashes?.sha512 != "c62a3e264d4b0ec398b9aa717a4832eecb8663bbcec4483dc58a9999d5e4e55ca4f5bca285a0d4a003220c698c3e87c8a3294366e085e72545e4afe84aec92c7") {
|
||||
throw new GradleException("The alpha.203 upright safe-vault interface release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -5135,8 +5135,8 @@ tasks.register("verifySafeVaultFixAlpha204Release") {
|
||||
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 jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" }
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.196.jar" }
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| 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"]
|
||||
@@ -5162,14 +5162,14 @@ 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.221.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !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
|
||||
|| jeiFiles[0].hashes?.sha1 != "494f9dc787d6c9cd9d32793da2784ab16834faf3"
|
||||
|| jeiFiles[0].hashes?.sha512 != "0869f4d5840a732a04bedc7684b40140f087f3d759066c206d9d1ec710007f7c9585e4f5ebb04f10e56bef1cf2eddc6978bb2b2c93541cff5fcf7e1609859468") {
|
||||
|| jeiFiles[0].hashes?.sha1 != "c2f2c6b5822a560fe9872921b908ffc2f3297d00"
|
||||
|| jeiFiles[0].hashes?.sha512 != "c62a3e264d4b0ec398b9aa717a4832eecb8663bbcec4483dc58a9999d5e4e55ca4f5bca285a0d4a003220c698c3e87c8a3294366e085e72545e4afe84aec92c7") {
|
||||
throw new GradleException("The alpha.204 Safe Block finalization release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -5189,8 +5189,8 @@ tasks.register("verifySafeVaultCubeAlpha205Release") {
|
||||
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 jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" }
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.196.jar" }
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| 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"]
|
||||
@@ -5219,14 +5219,14 @@ 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.221.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !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
|
||||
|| jeiFiles[0].hashes?.sha1 != "494f9dc787d6c9cd9d32793da2784ab16834faf3"
|
||||
|| jeiFiles[0].hashes?.sha512 != "0869f4d5840a732a04bedc7684b40140f087f3d759066c206d9d1ec710007f7c9585e4f5ebb04f10e56bef1cf2eddc6978bb2b2c93541cff5fcf7e1609859468") {
|
||||
|| jeiFiles[0].hashes?.sha1 != "c2f2c6b5822a560fe9872921b908ffc2f3297d00"
|
||||
|| jeiFiles[0].hashes?.sha512 != "c62a3e264d4b0ec398b9aa717a4832eecb8663bbcec4483dc58a9999d5e4e55ca4f5bca285a0d4a003220c698c3e87c8a3294366e085e72545e4afe84aec92c7") {
|
||||
throw new GradleException("The alpha.205 hollow safe-vault cube release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -5247,8 +5247,8 @@ tasks.register("verifySafeVaultCtmAlpha206Release") {
|
||||
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 jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" }
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.196.jar" }
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| 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"]
|
||||
@@ -5271,14 +5271,14 @@ 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.221.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !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
|
||||
|| jeiFiles[0].hashes?.sha1 != "494f9dc787d6c9cd9d32793da2784ab16834faf3"
|
||||
|| jeiFiles[0].hashes?.sha512 != "0869f4d5840a732a04bedc7684b40140f087f3d759066c206d9d1ec710007f7c9585e4f5ebb04f10e56bef1cf2eddc6978bb2b2c93541cff5fcf7e1609859468") {
|
||||
|| jeiFiles[0].hashes?.sha1 != "c2f2c6b5822a560fe9872921b908ffc2f3297d00"
|
||||
|| jeiFiles[0].hashes?.sha512 != "c62a3e264d4b0ec398b9aa717a4832eecb8663bbcec4483dc58a9999d5e4e55ca4f5bca285a0d4a003220c698c3e87c8a3294366e085e72545e4afe84aec92c7") {
|
||||
throw new GradleException("The alpha.206 Safe Block CTM column release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -5299,8 +5299,8 @@ tasks.register("verifySafeVaultUnlimitedAlpha207Release") {
|
||||
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 jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.193.jar" }
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.29.0.196.jar" }
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| 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"]
|
||||
@@ -5330,14 +5330,14 @@ 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.221.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !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
|
||||
|| jeiFiles[0].hashes?.sha1 != "494f9dc787d6c9cd9d32793da2784ab16834faf3"
|
||||
|| jeiFiles[0].hashes?.sha512 != "0869f4d5840a732a04bedc7684b40140f087f3d759066c206d9d1ec710007f7c9585e4f5ebb04f10e56bef1cf2eddc6978bb2b2c93541cff5fcf7e1609859468") {
|
||||
|| jeiFiles[0].hashes?.sha1 != "c2f2c6b5822a560fe9872921b908ffc2f3297d00"
|
||||
|| jeiFiles[0].hashes?.sha512 != "c62a3e264d4b0ec398b9aa717a4832eecb8663bbcec4483dc58a9999d5e4e55ca4f5bca285a0d4a003220c698c3e87c8a3294366e085e72545e4afe84aec92c7") {
|
||||
throw new GradleException("The alpha.207 unlimited safe-vault balance release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -5388,7 +5388,7 @@ 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.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|
||||
|| rootProject.ambiance_version != "0.0.0-alpha.22"
|
||||
|| migration.issue != 35
|
||||
@@ -5630,7 +5630,7 @@ tasks.register("verifyCanapliaAlpha209Release") {
|
||||
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"
|
||||
it.path == "mods/jei-26.2-fabric-30.29.0.196.jar"
|
||||
}
|
||||
def expectedSource = [
|
||||
ambiance: "0.0.0-alpha.12",
|
||||
@@ -5640,7 +5640,7 @@ 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.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.ambiance_version != "0.0.0-alpha.22"
|
||||
|| rootProject.itsalive_version != "0.0.0-alpha.36"
|
||||
|| rootProject.onlyfun_version != "0.0.0-alpha.25"
|
||||
@@ -5688,9 +5688,9 @@ 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.221.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.jar"')
|
||||
|| !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.36.jar"')
|
||||
|| !packwizIndex.contains('file = "mods/onlyfun-0.0.0-alpha.25.jar"')
|
||||
@@ -5698,8 +5698,8 @@ tasks.register("verifyCanapliaAlpha209Release") {
|
||||
|| packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.33.jar"')
|
||||
|| packwizIndex.contains('file = "mods/onlyfun-0.0.0-alpha.19.jar"')
|
||||
|| jeiFiles.size() != 1
|
||||
|| jeiFiles[0].hashes?.sha1 != "494f9dc787d6c9cd9d32793da2784ab16834faf3"
|
||||
|| jeiFiles[0].hashes?.sha512 != "0869f4d5840a732a04bedc7684b40140f087f3d759066c206d9d1ec710007f7c9585e4f5ebb04f10e56bef1cf2eddc6978bb2b2c93541cff5fcf7e1609859468") {
|
||||
|| jeiFiles[0].hashes?.sha1 != "c2f2c6b5822a560fe9872921b908ffc2f3297d00"
|
||||
|| jeiFiles[0].hashes?.sha512 != "c62a3e264d4b0ec398b9aa717a4832eecb8663bbcec4483dc58a9999d5e4e55ca4f5bca285a0d4a003220c698c3e87c8a3294366e085e72545e4afe84aec92c7") {
|
||||
throw new GradleException("The alpha.209 Canaplia correction release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -5742,7 +5742,7 @@ tasks.register("verifyAlpha210Release") {
|
||||
itsalive: "0.0.0-alpha.35"]
|
||||
def currentModules = [
|
||||
ambiance: "0.0.0-alpha.22",
|
||||
sanctuary: "0.0.0-alpha.122",
|
||||
sanctuary: "0.0.0-alpha.124",
|
||||
onlyfun: "0.0.0-alpha.25",
|
||||
ouch: "0.0.0-alpha.10",
|
||||
iliketomoveit: "0.0.0-alpha.16",
|
||||
@@ -5756,9 +5756,9 @@ tasks.register("verifyAlpha210Release") {
|
||||
"file = \"mods/${id}-${version}.jar\""
|
||||
}
|
||||
def jeiFiles = prism.files.findAll {
|
||||
it.path == "mods/jei-26.2-fabric-30.28.0.193.jar"
|
||||
it.path == "mods/jei-26.2-fabric-30.29.0.196.jar"
|
||||
}
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.124"
|
||||
|| rootProject.onlyfun_version != "0.0.0-alpha.25"
|
||||
|| rootProject.iliketomoveit_version != currentModules.iliketomoveit
|
||||
@@ -5804,15 +5804,15 @@ 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.221"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.221"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| release.pack_version != "26.2.0-alpha.222"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.222"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| requiredJars.any { !packwizIndex.contains(it) }
|
||||
|| obsoleteJars.any { packwizIndex.contains(it) }
|
||||
|| jeiFiles.size() != 1
|
||||
|| jeiFiles[0].hashes?.sha1 != "494f9dc787d6c9cd9d32793da2784ab16834faf3"
|
||||
|| jeiFiles[0].hashes?.sha512 != "0869f4d5840a732a04bedc7684b40140f087f3d759066c206d9d1ec710007f7c9585e4f5ebb04f10e56bef1cf2eddc6978bb2b2c93541cff5fcf7e1609859468"
|
||||
|| jeiFiles[0].hashes?.sha1 != "c2f2c6b5822a560fe9872921b908ffc2f3297d00"
|
||||
|| jeiFiles[0].hashes?.sha512 != "c62a3e264d4b0ec398b9aa717a4832eecb8663bbcec4483dc58a9999d5e4e55ca4f5bca285a0d4a003220c698c3e87c8a3294366e085e72545e4afe84aec92c7"
|
||||
|| !changelog.contains("## `26.2.0-alpha.210`")) {
|
||||
throw new GradleException("The alpha.210 Forbidden Book and gameplay-polish release is incomplete")
|
||||
}
|
||||
@@ -5854,11 +5854,11 @@ tasks.register("verifyAlpha211Release") {
|
||||
ouch: "0.0.0-alpha.10",
|
||||
sanctuary: "0.0.0-alpha.119"]
|
||||
def currentModules = expectedTarget + [
|
||||
sanctuary: "0.0.0-alpha.122",
|
||||
sanctuary: "0.0.0-alpha.124",
|
||||
onlyfun: "0.0.0-alpha.25",
|
||||
ambiance: "0.0.0-alpha.22",
|
||||
iliketomoveit: "0.0.0-alpha.16"]
|
||||
def workspaceModules = currentModules + [sanctuary: "0.0.0-alpha.124"]
|
||||
def workspaceModules = currentModules
|
||||
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 ->
|
||||
@@ -5881,9 +5881,9 @@ tasks.register("verifyAlpha211Release") {
|
||||
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"
|
||||
it.path == "mods/jei-26.2-fabric-30.29.0.196.jar"
|
||||
}
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| workspaceModules.any { id, version -> rootProject.property("${id}_version") != version }
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.210"
|
||||
|| migration.source?.modules != expectedSource
|
||||
@@ -5911,17 +5911,17 @@ tasks.register("verifyAlpha211Release") {
|
||||
|| migration.distribution?.prism_modrinth_index_updated != true
|
||||
|| migration.distribution?.shared_client_server_mrpack != true
|
||||
|| release.pack_version != rootProject.pack_version
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| 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"
|
||||
|| jeiFiles[0].hashes?.sha1 != "c2f2c6b5822a560fe9872921b908ffc2f3297d00"
|
||||
|| jeiFiles[0].hashes?.sha512 != "c62a3e264d4b0ec398b9aa717a4832eecb8663bbcec4483dc58a9999d5e4e55ca4f5bca285a0d4a003220c698c3e87c8a3294366e085e72545e4afe84aec92c7"
|
||||
|| !changelog.contains("## `26.2.0-alpha.211`")
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.221`**")) {
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.222`**")) {
|
||||
throw new GradleException("The alpha.211 Abjection and gameplay-polish release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -5953,9 +5953,9 @@ tasks.register("verifyAlpha212Release") {
|
||||
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"
|
||||
it.path == "mods/jei-26.2-fabric-30.29.0.196.jar"
|
||||
}
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.124"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.211"
|
||||
|| migration.source?.modules != [sanctuary: "0.0.0-alpha.119"]
|
||||
@@ -5977,16 +5977,16 @@ tasks.register("verifyAlpha212Release") {
|
||||
|| manifest.custom?.sanctuary26?.data_version != 11
|
||||
|| manifest.custom?.sanctuary26?.network_protocol != 22
|
||||
|| !minecraftMixin.contains('method = "pickBlockOrEntity"')
|
||||
|| release.pack_version != "26.2.0-alpha.221"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.221"
|
||||
|| release.pack_version != "26.2.0-alpha.222"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.222"
|
||||
|| prism.files?.size() != 5
|
||||
|| jeiFiles.size() != 1
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.122.jar"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.124.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.221`**")) {
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.222`**")) {
|
||||
throw new GradleException("The alpha.212 Black Market startup-fix release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -6018,9 +6018,9 @@ tasks.register("verifyAlpha213Release") {
|
||||
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"
|
||||
it.path == "mods/jei-26.2-fabric-30.29.0.196.jar"
|
||||
}
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.ambiance_version != "0.0.0-alpha.22"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.212"
|
||||
|| migration.source?.modules != [ambiance: "0.0.0-alpha.15"]
|
||||
@@ -6044,16 +6044,16 @@ tasks.register("verifyAlpha213Release") {
|
||||
|| manifest.custom?.sanctuary26?.network_protocol != 6
|
||||
|| !levelEventMixin.contains('@Mixin(LevelEventHandler.class)')
|
||||
|| !levelEventMixin.contains('@Inject(method = "levelEvent"')
|
||||
|| release.pack_version != "26.2.0-alpha.221"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.221"
|
||||
|| release.pack_version != "26.2.0-alpha.222"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.222"
|
||||
|| prism.files?.size() != 5
|
||||
|| jeiFiles.size() != 1
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.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.221`**")) {
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.222`**")) {
|
||||
throw new GradleException("The alpha.213 Ambiance startup-fix release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -6088,7 +6088,7 @@ tasks.register("verifyAlpha214Release") {
|
||||
"ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java").text
|
||||
def urlSmoke = file(
|
||||
"ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/white_disc/WhiteDiscUrlSmoke.java").text
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.ambiance_version != "0.0.0-alpha.22"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.213"
|
||||
|| migration.source?.modules != [ambiance: "0.0.0-alpha.16"]
|
||||
@@ -6117,16 +6117,16 @@ tasks.register("verifyAlpha214Release") {
|
||||
|| !audioPlayer.contains('message.ambiance.white_disc.loading')
|
||||
|| !audioPlayer.contains('message.ambiance.white_disc.failed')
|
||||
|| !urlSmoke.contains("https://youtu.be/Ue5ZBe-GzSM?si=78LSbtBQzUYzhA2Y")
|
||||
|| release.pack_version != "26.2.0-alpha.221"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.221"
|
||||
|| release.pack_version != "26.2.0-alpha.222"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.222"
|
||||
|| prism.files?.size() != 5
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.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.221`**")) {
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.222`**")) {
|
||||
throw new GradleException("The alpha.214 white-disc solo synchronization release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -6167,7 +6167,7 @@ tasks.register("verifyAlpha215Release") {
|
||||
"ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStream.java").text
|
||||
def playbackSmoke = file(
|
||||
"ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java").text
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.ambiance_version != "0.0.0-alpha.22"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.214"
|
||||
|| migration.source?.modules != [ambiance: "0.0.0-alpha.17"]
|
||||
@@ -6207,16 +6207,16 @@ tasks.register("verifyAlpha215Release") {
|
||||
|| !playbackSmoke.contains("https://www.youtube.com/watch?v=Ue5ZBe-GzSM")
|
||||
|| !playbackSmoke.contains("stream.paddedSilenceBytes() != 0L")
|
||||
|| !playbackSmoke.contains("stream.decodedTimelineMillis() != 4_000L")
|
||||
|| release.pack_version != "26.2.0-alpha.221"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.221"
|
||||
|| release.pack_version != "26.2.0-alpha.222"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.222"
|
||||
|| prism.files?.size() != 5
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.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.221`**")) {
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.222`**")) {
|
||||
throw new GradleException("The alpha.215 resilient white-disc playback release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -6261,7 +6261,7 @@ tasks.register("verifyAlpha216Release") {
|
||||
"ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java").text
|
||||
def playbackSmoke = file(
|
||||
"ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java").text
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.ambiance_version != "0.0.0-alpha.22"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.215"
|
||||
|| migration.source?.modules != [ambiance: "0.0.0-alpha.18"]
|
||||
@@ -6305,16 +6305,16 @@ tasks.register("verifyAlpha216Release") {
|
||||
|| !playbackSmoke.contains("stream.paddedSilenceBytes() != 0L")
|
||||
|| !playbackSmoke.contains("stream.decodedTimelineMillis() != 4_000L")
|
||||
|| !playbackSmoke.contains("LavaplayerAudioStream.SAMPLE_RATE * 2 * 4")
|
||||
|| release.pack_version != "26.2.0-alpha.221"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.221"
|
||||
|| release.pack_version != "26.2.0-alpha.222"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.222"
|
||||
|| prism.files?.size() != 5
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.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.221`**")) {
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.222`**")) {
|
||||
throw new GradleException("The alpha.216 white-disc audio-quality release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -6349,7 +6349,7 @@ tasks.register("verifyAlpha217Release") {
|
||||
"ambiance/src/main/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscAudioPlayer.java").text
|
||||
def streamSmoke = file(
|
||||
"ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/LavaplayerAudioStreamSmoke.java").text
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.ambiance_version != "0.0.0-alpha.22"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.216"
|
||||
|| migration.source?.modules != [ambiance: "0.0.0-alpha.19"]
|
||||
@@ -6380,16 +6380,16 @@ tasks.register("verifyAlpha217Release") {
|
||||
|| !audioPlayer.contains("PLAYBACK_PITCH = 1.0F")
|
||||
|| audioPlayer.count("channel.setPitch(PLAYBACK_PITCH)") != 2
|
||||
|| !streamSmoke.contains("WhiteDiscAudioPlayer.PLAYBACK_PITCH - 1.0F")
|
||||
|| release.pack_version != "26.2.0-alpha.221"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.221"
|
||||
|| release.pack_version != "26.2.0-alpha.222"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.222"
|
||||
|| prism.files?.size() != 5
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.jar"')
|
||||
|| packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.19.jar"')
|
||||
|| !changelog.contains("## `26.2.0-alpha.217`")
|
||||
|| changelog.contains("## Modifications non distribuées")
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.221`**")) {
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.222`**")) {
|
||||
throw new GradleException("The alpha.217 white-disc pitch release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -6436,15 +6436,15 @@ tasks.register("verifyAlpha218Release") {
|
||||
redstoner: "0.0.0-alpha.10", onlyfun: "0.0.0-alpha.24", sanctuary: "0.0.0-alpha.120"]
|
||||
def targetModules = [
|
||||
redstoner: "0.0.0-alpha.11", onlyfun: "0.0.0-alpha.25", sanctuary: "0.0.0-alpha.121"]
|
||||
def currentModules = targetModules + [redstoner: "0.0.0-alpha.12",
|
||||
sanctuary: "0.0.0-alpha.122", iliketomoveit: "0.0.0-alpha.16", ambiance: "0.0.0-alpha.22"]
|
||||
def currentModules = targetModules + [redstoner: "0.0.0-alpha.13",
|
||||
sanctuary: "0.0.0-alpha.124", iliketomoveit: "0.0.0-alpha.16", ambiance: "0.0.0-alpha.22"]
|
||||
def requiredJars = currentModules.collect { id, version ->
|
||||
"file = \"mods/${id}-${version}.jar\""
|
||||
}
|
||||
def obsoleteJars = sourceModules.collect { id, version ->
|
||||
"file = \"mods/${id}-${version}.jar\""
|
||||
}
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.redstoner_version != "0.0.0-alpha.13"
|
||||
|| currentModules.findAll { id, version -> id != "redstoner" && id != "sanctuary" }.any {
|
||||
id, version -> rootProject.property("${id}_version") != version
|
||||
@@ -6481,13 +6481,13 @@ tasks.register("verifyAlpha218Release") {
|
||||
|| !onlyFunPolicy.contains('namespace.equals("redstoner") && path.equals("storage_terminal")')
|
||||
|| !blackMarketPolicy.contains('namespace.equals("redstoner") && path.equals("storage_terminal")')
|
||||
|| release.pack_version != rootProject.pack_version
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| requiredJars.any { !packwizIndex.contains(it) }
|
||||
|| obsoleteJars.any { packwizIndex.contains(it) }
|
||||
|| !changelog.contains("## `26.2.0-alpha.218`")
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.221`**")) {
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.222`**")) {
|
||||
throw new GradleException("The alpha.218 Storage Terminal release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -6531,7 +6531,8 @@ tasks.register("verifyAlpha219Release") {
|
||||
sanctuary: "0.0.0-alpha.121", iliketomoveit: "0.0.0-alpha.15", ambiance: "0.0.0-alpha.20"]
|
||||
def targetModules = [
|
||||
sanctuary: "0.0.0-alpha.122", iliketomoveit: "0.0.0-alpha.16", ambiance: "0.0.0-alpha.21"]
|
||||
def currentModules = targetModules + [ambiance: "0.0.0-alpha.22"]
|
||||
def currentModules = targetModules + [
|
||||
ambiance: "0.0.0-alpha.22", sanctuary: "0.0.0-alpha.124"]
|
||||
def requiredJars = currentModules.collect { id, version ->
|
||||
"file = \"mods/${id}-${version}.jar\""
|
||||
}
|
||||
@@ -6546,11 +6547,8 @@ tasks.register("verifyAlpha219Release") {
|
||||
include "**/*golden*days*.zip", "**/*golden*days*.jar"
|
||||
exclude "**/build/**", "**/.gradle/**", "**/.git/**"
|
||||
}.files
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
|| currentModules.findAll { id, version -> id != "sanctuary" }.any {
|
||||
id, version -> rootProject.property("${id}_version") != version
|
||||
}
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.124"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| currentModules.any { id, version -> rootProject.property("${id}_version") != version }
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.218"
|
||||
|| migration.source?.modules != sourceModules
|
||||
|| migration.target?.pack_version != "26.2.0-alpha.219"
|
||||
@@ -6581,15 +6579,15 @@ tasks.register("verifyAlpha219Release") {
|
||||
|| manifests.ambiance.custom?.sanctuary26?.data_version != 2
|
||||
|| manifests.ambiance.custom?.sanctuary26?.network_protocol != 6
|
||||
|| release.pack_version != rootProject.pack_version
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| prism.files.any { it.path.toLowerCase().contains("golden-days") }
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| requiredJars.any { !packwizIndex.contains(it) }
|
||||
|| obsoleteJars.any { packwizIndex.contains(it) }
|
||||
|| !forbiddenGoldenArchives.isEmpty()
|
||||
|| !changelog.contains("## `26.2.0-alpha.219`")
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.221`**")) {
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.222`**")) {
|
||||
throw new GradleException("The alpha.219 finite Alpha/Indev release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -6628,7 +6626,7 @@ tasks.register("verifyAlpha220Release") {
|
||||
"redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/client/gui/StorageTerminalScreen.java").text
|
||||
def networking = file(
|
||||
"redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/network/RedStonerNetworking.java").text
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.redstoner_version != "0.0.0-alpha.13"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.219"
|
||||
|| migration.source?.modules != [redstoner: "0.0.0-alpha.11"]
|
||||
@@ -6669,13 +6667,13 @@ tasks.register("verifyAlpha220Release") {
|
||||
|| networking.contains("storage_terminal_snapshot")
|
||||
|| networking.contains("storage_terminal_action")
|
||||
|| release.pack_version != rootProject.pack_version
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwizIndex.contains('file = "mods/redstoner-0.0.0-alpha.12.jar"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !packwizIndex.contains('file = "mods/redstoner-0.0.0-alpha.13.jar"')
|
||||
|| packwizIndex.contains('file = "mods/redstoner-0.0.0-alpha.11.jar"')
|
||||
|| !changelog.contains("## `26.2.0-alpha.220`")
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.221`**")) {
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.222`**")) {
|
||||
throw new GradleException("The alpha.220 Storage Terminal menu release is incomplete")
|
||||
}
|
||||
}
|
||||
@@ -6723,7 +6721,7 @@ tasks.register("verifyAlpha221Release") {
|
||||
def playbackSmoke = file(
|
||||
"ambiance/src/test/java/fr/koka99cab/sanctuary26/ambiance/client/audio/WhiteDiscPlaybackSmoke.java").text
|
||||
def contract = migration.white_disc_native_rate
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.ambiance_version != "0.0.0-alpha.22"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.220"
|
||||
|| migration.source?.modules != [ambiance: "0.0.0-alpha.21"]
|
||||
@@ -6772,26 +6770,31 @@ tasks.register("verifyAlpha221Release") {
|
||||
|| !playbackSmoke.contains("PCM cadence: 100%% speed")
|
||||
|| !whiteDiscDocumentation.contains("48 000 Hz")
|
||||
|| release.pack_version != rootProject.pack_version
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != rootProject.pack_version
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.22.jar"')
|
||||
|| packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.21.jar"')
|
||||
|| !changelog.contains("## `26.2.0-alpha.221`")
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.221`**")) {
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.222`**")) {
|
||||
throw new GradleException("The alpha.221 native-rate white-disc release is incomplete")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("verifyStorageTerminalSearchFeature") {
|
||||
tasks.register("verifyAlpha222Release") {
|
||||
group = "verification"
|
||||
description = "Checks the unreleased Storage Terminal keyboard-search feature."
|
||||
description = "Checks the Sanctuary 26.2.0-alpha.222 terminal-search and quest-tracker release."
|
||||
inputs.file(file("pack/migrations/26.2.0-alpha.221-terminal-search-quest-tracker-to-alpha.222.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("pack/packwiz/mods/jei.pw.toml"))
|
||||
inputs.file(file("CHANGELOG.md"))
|
||||
inputs.file(file("README.md"))
|
||||
inputs.file(file("redstoner/src/main/resources/fabric.mod.json"))
|
||||
inputs.file(file("sanctuary/src/main/resources/fabric.mod.json"))
|
||||
inputs.file(file("redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/storage/StorageTerminalMenu.java"))
|
||||
inputs.file(file("redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/storage/StorageTerminalNetwork.java"))
|
||||
inputs.file(file("redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/storage/StorageTerminalRules.java"))
|
||||
@@ -6800,12 +6803,25 @@ tasks.register("verifyStorageTerminalSearchFeature") {
|
||||
inputs.file(file("redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/client/gui/StorageTerminalScreen.java"))
|
||||
inputs.file(file("redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/network/RedStonerNetworking.java"))
|
||||
inputs.file(file("redstoner/src/test/java/fr/koka99cab/sanctuary26/redstoner/storage/StorageTerminalSmoke.java"))
|
||||
inputs.file(file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/client/QuestTrackerHud.java"))
|
||||
inputs.file(file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/client/SanctuaryClient.java"))
|
||||
inputs.file(file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/client/QuestRequestEditorScreen.java"))
|
||||
inputs.file(file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/network/QuestTrackerSnapshotPayload.java"))
|
||||
inputs.file(file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestTrackerSync.java"))
|
||||
inputs.file(file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestIdSuggestions.java"))
|
||||
doLast {
|
||||
def migration = new JsonSlurper().parse(file(
|
||||
"pack/migrations/26.2.0-alpha.221-terminal-search-quest-tracker-to-alpha.222.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 manifest = new JsonSlurper().parse(file("redstoner/src/main/resources/fabric.mod.json"))
|
||||
def packwizJei = file("pack/packwiz/mods/jei.pw.toml").text
|
||||
def changelog = file("CHANGELOG.md").text
|
||||
def readme = file("README.md").text
|
||||
def manifests = ["redstoner", "sanctuary"].collectEntries { id ->
|
||||
[(id): new JsonSlurper().parse(file("${id}/src/main/resources/fabric.mod.json"))]
|
||||
}
|
||||
def menu = file(
|
||||
"redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/storage/StorageTerminalMenu.java").text
|
||||
def network = file(
|
||||
@@ -6822,10 +6838,69 @@ tasks.register("verifyStorageTerminalSearchFeature") {
|
||||
"redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/network/RedStonerNetworking.java").text
|
||||
def smoke = file(
|
||||
"redstoner/src/test/java/fr/koka99cab/sanctuary26/redstoner/storage/StorageTerminalSmoke.java").text
|
||||
if (rootProject.pack_version != "26.2.0-alpha.221"
|
||||
def questHud = file(
|
||||
"sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/client/QuestTrackerHud.java").text
|
||||
def sanctuaryClient = file(
|
||||
"sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/client/SanctuaryClient.java").text
|
||||
def questEditor = file(
|
||||
"sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/client/QuestRequestEditorScreen.java").text
|
||||
def questPayload = file(
|
||||
"sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/network/QuestTrackerSnapshotPayload.java").text
|
||||
def questSync = file(
|
||||
"sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestTrackerSync.java").text
|
||||
def suggestions = file(
|
||||
"sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/QuestIdSuggestions.java").text
|
||||
def terminalContract = migration.storage_terminal_search
|
||||
def questContract = migration.quest_tracker
|
||||
def jeiFiles = prism.files.findAll {
|
||||
it.path == "mods/jei-26.2-fabric-30.29.0.196.jar"
|
||||
}
|
||||
if (rootProject.pack_version != "26.2.0-alpha.222"
|
||||
|| rootProject.redstoner_version != "0.0.0-alpha.13"
|
||||
|| manifest.custom?.sanctuary26?.data_version != 3
|
||||
|| manifest.custom?.sanctuary26?.network_protocol != 7
|
||||
|| rootProject.sanctuary_version != "0.0.0-alpha.124"
|
||||
|| migration.source?.pack_version != "26.2.0-alpha.221"
|
||||
|| migration.source?.modules != [
|
||||
redstoner: "0.0.0-alpha.12", sanctuary: "0.0.0-alpha.122"]
|
||||
|| migration.target?.pack_version != "26.2.0-alpha.222"
|
||||
|| migration.target?.modules != [
|
||||
redstoner: "0.0.0-alpha.13", sanctuary: "0.0.0-alpha.124"]
|
||||
|| terminalContract?.owner != "redstoner"
|
||||
|| terminalContract?.maximum_search_length != 32
|
||||
|| terminalContract?.searches_display_name_item_id_and_translation != true
|
||||
|| terminalContract?.accent_and_unicode_folding != true
|
||||
|| terminalContract?.compact_quantity_labels != true
|
||||
|| terminalContract?.exact_quantity_tooltip != true
|
||||
|| terminalContract?.empty_slots_remain_stable_until_new_search_or_reopen != true
|
||||
|| terminalContract?.server_authoritative_transfers != true
|
||||
|| questContract?.owner != "sanctuary"
|
||||
|| questContract?.default_key != "J"
|
||||
|| questContract?.maximum_entries != 8
|
||||
|| questContract?.accepted_quests_only != true
|
||||
|| questContract?.reserved_contracts_included != true
|
||||
|| questContract?.own_published_requests_excluded != true
|
||||
|| questContract?.transparent_text_only_hud != true
|
||||
|| questContract?.item_and_mob_id_suggestions != true
|
||||
|| questContract?.server_authoritative_snapshot != 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?.redstoner_data_version != 3
|
||||
|| migration.compatibility?.redstoner_network_protocol != 7
|
||||
|| 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
|
||||
|| migration.distribution?.jei?.source != "30.28.0.193"
|
||||
|| migration.distribution?.jei?.target != "30.29.0.196"
|
||||
|| migration.distribution?.jei?.modrinth_version_id != "vvwsu2BR"
|
||||
|| migration.distribution?.jei?.packwiz_and_prism_synchronized != true
|
||||
|| manifests.redstoner.custom?.sanctuary26?.data_version != 3
|
||||
|| manifests.redstoner.custom?.sanctuary26?.network_protocol != 7
|
||||
|| manifests.sanctuary.custom?.sanctuary26?.data_version != 11
|
||||
|| manifests.sanctuary.custom?.sanctuary26?.network_protocol != 22
|
||||
|| !rules.contains("MAX_SEARCH_LENGTH = 32")
|
||||
|| !rules.contains("compactCount(int count)")
|
||||
|| !layout.contains("Keeps terminal slot identities stable")
|
||||
@@ -6842,13 +6917,35 @@ tasks.register("verifyStorageTerminalSearchFeature") {
|
||||
|| !smoke.contains("verifyStableLayout()")
|
||||
|| !networking.contains("PROTOCOL_VERSION = 7")
|
||||
|| networking.contains("storage_terminal_search")
|
||||
|| release.pack_version != "26.2.0-alpha.221"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.221.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.221"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.221"')
|
||||
|| !packwizIndex.contains('file = "mods/redstoner-0.0.0-alpha.12.jar"')
|
||||
|| packwizIndex.contains('file = "mods/redstoner-0.0.0-alpha.13.jar"')) {
|
||||
throw new GradleException("The unreleased Storage Terminal keyboard-search feature is incomplete")
|
||||
|| !questPayload.contains("MAX_ENTRIES = 8")
|
||||
|| !questPayload.contains('SanctuaryMod.id("s2c/quest_tracker")')
|
||||
|| !questSync.contains("tracksAcceptedRequest(request, playerId)")
|
||||
|| !questSync.contains("SOURCE_BOARD")
|
||||
|| !questHud.contains("Transparent, toggleable text overlay")
|
||||
|| !questHud.contains("entries.isEmpty()) return")
|
||||
|| questHud.contains("graphics.fill(")
|
||||
|| !sanctuaryClient.contains("GLFW.GLFW_KEY_J")
|
||||
|| !sanctuaryClient.contains("QuestTrackerSnapshotPayload.ID")
|
||||
|| !questEditor.contains("QuestIdSuggestions.suggest")
|
||||
|| !suggestions.contains("Normalizer.Form.NFD")
|
||||
|| !suggestions.contains("public static final int LIMIT = 5")
|
||||
|| release.pack_version != "26.2.0-alpha.222"
|
||||
|| release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.222.mrpack"
|
||||
|| prism.versionId != "26.2.0-alpha.222"
|
||||
|| !packwiz.contains('version = "26.2.0-alpha.222"')
|
||||
|| !packwizIndex.contains('file = "mods/redstoner-0.0.0-alpha.13.jar"')
|
||||
|| !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.124.jar"')
|
||||
|| packwizIndex.contains('file = "mods/redstoner-0.0.0-alpha.12.jar"')
|
||||
|| packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.122.jar"')
|
||||
|| !packwizJei.contains('filename = "jei-26.2-fabric-30.29.0.196.jar"')
|
||||
|| !packwizJei.contains('version = "vvwsu2BR"')
|
||||
|| jeiFiles.size() != 1
|
||||
|| jeiFiles[0].hashes?.sha1 != "c2f2c6b5822a560fe9872921b908ffc2f3297d00"
|
||||
|| jeiFiles[0].hashes?.sha512 != "c62a3e264d4b0ec398b9aa717a4832eecb8663bbcec4483dc58a9999d5e4e55ca4f5bca285a0d4a003220c698c3e87c8a3294366e085e72545e4afe84aec92c7"
|
||||
|| !changelog.contains("## `26.2.0-alpha.222`")
|
||||
|| changelog.contains("## Non distribué")
|
||||
|| !readme.contains("Version courante du pack distribué : **`26.2.0-alpha.222`**")) {
|
||||
throw new GradleException("The alpha.222 terminal-search and quest-tracker release is incomplete")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6863,7 +6960,7 @@ tasks.named("verifyWorkspace") {
|
||||
dependsOn tasks.named("verifyAlpha219Release")
|
||||
dependsOn tasks.named("verifyAlpha220Release")
|
||||
dependsOn tasks.named("verifyAlpha221Release")
|
||||
dependsOn tasks.named("verifyStorageTerminalSearchFeature")
|
||||
dependsOn tasks.named("verifyAlpha222Release")
|
||||
}
|
||||
|
||||
tasks.named("check") {
|
||||
|
||||
+1
-1
@@ -30,5 +30,5 @@ onlyfun_version=0.0.0-alpha.25
|
||||
onlyfun_lifecycle=active
|
||||
sanctuary_version=0.0.0-alpha.124
|
||||
sanctuary_lifecycle=active
|
||||
pack_version=26.2.0-alpha.221
|
||||
pack_version=26.2.0-alpha.222
|
||||
maven_group=fr.koka99cab.sanctuary26
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"source": {
|
||||
"pack_version": "26.2.0-alpha.221",
|
||||
"modules": {
|
||||
"redstoner": "0.0.0-alpha.12",
|
||||
"sanctuary": "0.0.0-alpha.122"
|
||||
}
|
||||
},
|
||||
"target": {
|
||||
"pack_version": "26.2.0-alpha.222",
|
||||
"modules": {
|
||||
"redstoner": "0.0.0-alpha.13",
|
||||
"sanctuary": "0.0.0-alpha.124"
|
||||
}
|
||||
},
|
||||
"storage_terminal_search": {
|
||||
"owner": "redstoner",
|
||||
"maximum_search_length": 32,
|
||||
"searches_display_name_item_id_and_translation": true,
|
||||
"accent_and_unicode_folding": true,
|
||||
"compact_quantity_labels": true,
|
||||
"exact_quantity_tooltip": true,
|
||||
"empty_slots_remain_stable_until_new_search_or_reopen": true,
|
||||
"server_authoritative_transfers": true
|
||||
},
|
||||
"quest_tracker": {
|
||||
"owner": "sanctuary",
|
||||
"default_key": "J",
|
||||
"maximum_entries": 8,
|
||||
"accepted_quests_only": true,
|
||||
"reserved_contracts_included": true,
|
||||
"own_published_requests_excluded": true,
|
||||
"transparent_text_only_hud": true,
|
||||
"item_and_mob_id_suggestions": true,
|
||||
"server_authoritative_snapshot": true
|
||||
},
|
||||
"compatibility": {
|
||||
"new_world_required": false,
|
||||
"save_reset_required": false,
|
||||
"existing_saves_supported": true,
|
||||
"registry_ids_changed": false,
|
||||
"redstoner_data_version": 3,
|
||||
"redstoner_network_protocol": 7,
|
||||
"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,
|
||||
"jei": {
|
||||
"source": "30.28.0.193",
|
||||
"target": "30.29.0.196",
|
||||
"modrinth_version_id": "vvwsu2BR",
|
||||
"packwiz_and_prism_synchronized": true
|
||||
}
|
||||
}
|
||||
}
|
||||
+13
-13
@@ -14,15 +14,15 @@ hash = "41f4f4c88c71d0a23446d5014f7407d55ad477441847099cad24492b032335a0"
|
||||
|
||||
[[files]]
|
||||
file = "mods/ambiance-0.0.0-alpha.22.jar"
|
||||
hash = "4d5c31315c436c716a48e7d563fd179be2f39951c24bf4641f83a05a24323a3e"
|
||||
hash = "a6b7d98971f411b202f5679aae05c1bc93754ee9a42d10dc903413b17ba97a63"
|
||||
|
||||
[[files]]
|
||||
file = "mods/anotherworld-0.0.0-alpha.55.jar"
|
||||
hash = "7fbe2ac0d2ece62285aa8277ff92284760f2ccfd6d08159015661978bd0cde9a"
|
||||
hash = "cac322006ad9a724bb656b400cf47d84a18e76cd1a35f4bd13c112f443d89275"
|
||||
|
||||
[[files]]
|
||||
file = "mods/events-0.0.0-alpha.0.jar"
|
||||
hash = "cbf8d47fb82ca06c438b75fd72f805acc9813dffc6168d6786d54644ef8bb387"
|
||||
hash = "8d2566ceb838a486fe9d8539acd127446e51d7085dcbefa86ee3c1aea4630a6d"
|
||||
|
||||
[[files]]
|
||||
file = "mods/fabric-api.pw.toml"
|
||||
@@ -31,7 +31,7 @@ metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/iliketomoveit-0.0.0-alpha.16.jar"
|
||||
hash = "26156014813bfa4384194ac0f20395b6df590a5bc29cd91a32114ced988bbaf3"
|
||||
hash = "94e5afefab9485c40a47342dc84f401fa126be40064832929601e781b3a03738"
|
||||
|
||||
[[files]]
|
||||
file = "mods/iris.pw.toml"
|
||||
@@ -40,32 +40,32 @@ metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/itsalive-0.0.0-alpha.36.jar"
|
||||
hash = "5673ab7d605f2f1d18d807f0939f90ecedc13c892d03991fd60f7d02d74f9404"
|
||||
hash = "94899dba383aff41c39f7f25ee1a6b7998aa1e9889e7b9e9039a984e0bc0882f"
|
||||
|
||||
[[files]]
|
||||
file = "mods/jei.pw.toml"
|
||||
hash = "a213ae237f9b3934bdcd0d282119d4166d0ccbb7c7223daa8d7ed956c69a0e3f"
|
||||
hash = "115d2239bc86ecdad88705dbc215d27ddb6a08d94f74fa538abb6a67a00bf71e"
|
||||
metafile = true
|
||||
|
||||
[[files]]
|
||||
file = "mods/masterkey-0.0.0-alpha.8.jar"
|
||||
hash = "202b159fd04b7447cda7fa9f7360693106927904819e834956ab46f6e07f658e"
|
||||
hash = "102c3da5d201452be23ab84338e023c284f4770270ca945b0c63b6a996fb2922"
|
||||
|
||||
[[files]]
|
||||
file = "mods/onlyfun-0.0.0-alpha.25.jar"
|
||||
hash = "6551d75cb3cb7be220b2aa6033d4eb533fa28a39ee88d66bbb0c40244c08c259"
|
||||
hash = "2676072de7dbc9b27c4fd0e50e797832356fbc903e80c5bd9a5bd55c1a5aff1b"
|
||||
|
||||
[[files]]
|
||||
file = "mods/ouch-0.0.0-alpha.10.jar"
|
||||
hash = "0c2e0e2ef7f6c944d0b6d5609c42431a0a31f1d92087c3b5c28b67f76795d8cf"
|
||||
hash = "59815a0415c48c92acfc7c18bd2399780bab9b0b5eee69c2b35a66cb1474109b"
|
||||
|
||||
[[files]]
|
||||
file = "mods/redstoner-0.0.0-alpha.12.jar"
|
||||
hash = "fee65e8d865f918ec8174b7a808762658ed91b566af590d99a3448f9d237175a"
|
||||
file = "mods/redstoner-0.0.0-alpha.13.jar"
|
||||
hash = "0bd3888b13c894aed806696a5e73e076c7ed985eff2c242f0df9ec64ff3fcb37"
|
||||
|
||||
[[files]]
|
||||
file = "mods/sanctuary-0.0.0-alpha.122.jar"
|
||||
hash = "9183652d13fd3c15663ca645f96f2a70026cb4d3a82f62e92fc3c72aea72d589"
|
||||
file = "mods/sanctuary-0.0.0-alpha.124.jar"
|
||||
hash = "39a3db3d1d9876ac5c7a7135a3b524c82508d0ee2e0c5c410c6515ff8931c6fb"
|
||||
|
||||
[[files]]
|
||||
file = "mods/simple-voice-chat.pw.toml"
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
name = "Just Enough Items (JEI)"
|
||||
filename = "jei-26.2-fabric-30.28.0.193.jar"
|
||||
filename = "jei-26.2-fabric-30.29.0.196.jar"
|
||||
side = "both"
|
||||
pin = true
|
||||
|
||||
[download]
|
||||
url = "https://cdn.modrinth.com/data/u6dRKJwZ/versions/qaCQ7LGO/jei-26.2-fabric-30.28.0.193.jar"
|
||||
url = "https://cdn.modrinth.com/data/u6dRKJwZ/versions/vvwsu2BR/jei-26.2-fabric-30.29.0.196.jar"
|
||||
hash-format = "sha512"
|
||||
hash = "0869f4d5840a732a04bedc7684b40140f087f3d759066c206d9d1ec710007f7c9585e4f5ebb04f10e56bef1cf2eddc6978bb2b2c93541cff5fcf7e1609859468"
|
||||
hash = "c62a3e264d4b0ec398b9aa717a4832eecb8663bbcec4483dc58a9999d5e4e55ca4f5bca285a0d4a003220c698c3e87c8a3294366e085e72545e4afe84aec92c7"
|
||||
|
||||
[update]
|
||||
[update.modrinth]
|
||||
mod-id = "u6dRKJwZ"
|
||||
version = "qaCQ7LGO"
|
||||
version = "vvwsu2BR"
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
name = "Sanctuary 26.2"
|
||||
author = "KOKA99CAB"
|
||||
version = "26.2.0-alpha.221"
|
||||
version = "26.2.0-alpha.222"
|
||||
pack-format = "packwiz:1.1.0"
|
||||
|
||||
[index]
|
||||
file = "index.toml"
|
||||
hash-format = "sha256"
|
||||
hash = "60e8342eef216dd225488fe4225a28c9b9940858642cbfc8025541affd150ab0"
|
||||
hash = "53b5bec1b113ab2b353e6a142e3dbc4617ea7d27003bcbb09b668938dd262ddd"
|
||||
|
||||
[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.221",
|
||||
"versionId": "26.2.0-alpha.222",
|
||||
"files": [
|
||||
{
|
||||
"path": "mods/fabric-api-0.158.0+26.2.jar",
|
||||
@@ -21,19 +21,19 @@
|
||||
"fileSize": 2535765
|
||||
},
|
||||
{
|
||||
"path": "mods/jei-26.2-fabric-30.28.0.193.jar",
|
||||
"path": "mods/jei-26.2-fabric-30.29.0.196.jar",
|
||||
"hashes": {
|
||||
"sha1": "494f9dc787d6c9cd9d32793da2784ab16834faf3",
|
||||
"sha512": "0869f4d5840a732a04bedc7684b40140f087f3d759066c206d9d1ec710007f7c9585e4f5ebb04f10e56bef1cf2eddc6978bb2b2c93541cff5fcf7e1609859468"
|
||||
"sha1": "c2f2c6b5822a560fe9872921b908ffc2f3297d00",
|
||||
"sha512": "c62a3e264d4b0ec398b9aa717a4832eecb8663bbcec4483dc58a9999d5e4e55ca4f5bca285a0d4a003220c698c3e87c8a3294366e085e72545e4afe84aec92c7"
|
||||
},
|
||||
"env": {
|
||||
"client": "required",
|
||||
"server": "required"
|
||||
},
|
||||
"downloads": [
|
||||
"https://cdn.modrinth.com/data/u6dRKJwZ/versions/qaCQ7LGO/jei-26.2-fabric-30.28.0.193.jar"
|
||||
"https://cdn.modrinth.com/data/u6dRKJwZ/versions/vvwsu2BR/jei-26.2-fabric-30.29.0.196.jar"
|
||||
],
|
||||
"fileSize": 1822836
|
||||
"fileSize": 1838353
|
||||
},
|
||||
{
|
||||
"path": "mods/voicechat-fabric-2.6.22+26.2.jar",
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"pack_version": "26.2.0-alpha.221",
|
||||
"pack_version": "26.2.0-alpha.222",
|
||||
"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.221.mrpack",
|
||||
"primary_file": "sanctuary-26.2.0-alpha.222.mrpack",
|
||||
"shared_client_server_pack": true,
|
||||
"update_owner": "packwiz-installer",
|
||||
"check_on_launch": true,
|
||||
|
||||
@@ -108,6 +108,14 @@ tasks.register("capeJoinSyncSmoke", JavaExec) {
|
||||
mainClass = "fr.koka99cab.sanctuary26.sanctuary.gameplay.CapeJoinSyncQueueSmoke"
|
||||
}
|
||||
|
||||
tasks.register("inventorySortSmoke", JavaExec) {
|
||||
group = "verification"
|
||||
description = "Checks that storage stacks merge and sort while the hotbar row stays out of the sort."
|
||||
dependsOn tasks.named("testClasses")
|
||||
classpath = sourceSets.test.runtimeClasspath
|
||||
mainClass = "fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuaryInventorySortSmoke"
|
||||
}
|
||||
|
||||
tasks.register("alphaIndevGeneratorSmoke", JavaExec) {
|
||||
group = "verification"
|
||||
description = "Checks deterministic finite Indev islands, residences and safe portal arrivals."
|
||||
@@ -298,6 +306,7 @@ tasks.register("verifySanctuary") {
|
||||
tasks.named("questIdSuggestionsSmoke"),
|
||||
tasks.named("shopHeaderLayoutSmoke"), tasks.named("zombieNamesSmoke"),
|
||||
tasks.named("capeJoinSyncSmoke"),
|
||||
tasks.named("inventorySortSmoke"),
|
||||
tasks.named("verifyBlackMarket")
|
||||
|
||||
doLast {
|
||||
@@ -614,6 +623,14 @@ tasks.register("verifySanctuary") {
|
||||
,'class SanctuaryHotbarRowsClient'
|
||||
,'id("c2s/hotbar_row_switch")'
|
||||
,'id("s2c/hotbar_row_sync")'
|
||||
,'class SanctuaryInventorySort'
|
||||
,'class SanctuaryInventorySorter'
|
||||
,'id("c2s/sort_inventory")'
|
||||
,'key.sanctuary.sort_inventory'
|
||||
,'GLFW.GLFW_MOUSE_BUTTON_MIDDLE'
|
||||
,'matchesMouse'
|
||||
,'int bankIndex(int visualRow, int visibleRows)'
|
||||
,'playButtonClickSound'
|
||||
,'GLFW.GLFW_KEY_TAB'
|
||||
,'HOTBAR_TEXTURE'
|
||||
,'0.0F, 0.0F, 182, 22, 182, 22'
|
||||
@@ -3423,5 +3440,7 @@ tasks.named("check") {
|
||||
dependsOn tasks.named("questTrackerModelSmoke")
|
||||
dependsOn tasks.named("questIdSuggestionsSmoke")
|
||||
dependsOn tasks.named("alphaIndevGeneratorSmoke")
|
||||
dependsOn tasks.named("capeJoinSyncSmoke")
|
||||
dependsOn tasks.named("inventorySortSmoke")
|
||||
dependsOn tasks.named("verifyAlphaIndev")
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuaryBulkActions;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuaryInventoryCapacity;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuaryCompanions;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuaryHotbarRows;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuaryInventorySort;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuaryCompanionPowers;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuaryCapeService;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuarySitting;
|
||||
@@ -55,6 +56,7 @@ public final class SanctuaryMod implements ModInitializer {
|
||||
SanctuaryBulkActions.initialize();
|
||||
SanctuaryInventoryCapacity.initialize();
|
||||
SanctuaryHotbarRows.initialize();
|
||||
SanctuaryInventorySort.initialize();
|
||||
SanctuaryCompanions.initialize();
|
||||
SanctuaryCompanionPowers.initialize();
|
||||
SanctuaryCapeService.initialize();
|
||||
|
||||
+16
@@ -28,6 +28,7 @@ import net.minecraft.client.KeyMapping;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.Screenshot;
|
||||
import net.minecraft.client.input.KeyEvent;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.client.gui.screens.inventory.ContainerScreen;
|
||||
import net.minecraft.client.gui.screens.inventory.CraftingScreen;
|
||||
import net.minecraft.client.gui.screens.inventory.InventoryScreen;
|
||||
@@ -49,6 +50,7 @@ public final class SanctuaryClient implements ClientModInitializer {
|
||||
private static KeyMapping zoomKey;
|
||||
private static KeyMapping celestialKey;
|
||||
private static KeyMapping switchHotbarRowKey;
|
||||
private static KeyMapping sortInventoryKey;
|
||||
private static KeyMapping questTrackerKey;
|
||||
private static boolean zoomWasHeld;
|
||||
private static boolean smokeScreenOpened;
|
||||
@@ -93,6 +95,12 @@ public final class SanctuaryClient implements ClientModInitializer {
|
||||
GLFW.GLFW_KEY_TAB,
|
||||
SANCTUARY_CATEGORY
|
||||
));
|
||||
sortInventoryKey = KeyMappingHelper.registerKeyMapping(new KeyMapping(
|
||||
"key.sanctuary.sort_inventory",
|
||||
InputConstants.Type.MOUSE,
|
||||
GLFW.GLFW_MOUSE_BUTTON_MIDDLE,
|
||||
SANCTUARY_CATEGORY
|
||||
));
|
||||
questTrackerKey = KeyMappingHelper.registerKeyMapping(new KeyMapping(
|
||||
"key.sanctuary.quest_tracker",
|
||||
InputConstants.Type.KEYSYM,
|
||||
@@ -222,6 +230,14 @@ public final class SanctuaryClient implements ClientModInitializer {
|
||||
return switchHotbarRowKey != null && switchHotbarRowKey.matches(event);
|
||||
}
|
||||
|
||||
public static boolean isSortInventoryKey(KeyEvent event) {
|
||||
return sortInventoryKey != null && sortInventoryKey.matches(event);
|
||||
}
|
||||
|
||||
public static boolean isSortInventoryMouse(MouseButtonEvent event) {
|
||||
return sortInventoryKey != null && sortInventoryKey.matchesMouse(event);
|
||||
}
|
||||
|
||||
public static boolean handleBlackMarketMiddleClick(Minecraft client) {
|
||||
if (client.player == null || client.level == null || client.gui.screen() != null
|
||||
|| !(client.hitResult instanceof BlockHitResult hit)
|
||||
|
||||
+4
@@ -24,6 +24,10 @@ public final class SanctuaryHotbarRowsClient {
|
||||
return VISUAL_ROW_BY_LOGICAL[logicalRow];
|
||||
}
|
||||
|
||||
public static int bankIndex(int logicalRow, int visibleRows) {
|
||||
return SanctuaryInventoryCapacity.bankIndex(visualRow(logicalRow), visibleRows);
|
||||
}
|
||||
|
||||
public static int activeVisualRow() {
|
||||
return VISUAL_ROW_BY_LOGICAL[0];
|
||||
}
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
package fr.koka99cab.sanctuary26.sanctuary.client;
|
||||
|
||||
import fr.koka99cab.sanctuary26.sanctuary.network.SortInventoryPayload;
|
||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.components.AbstractWidget;
|
||||
import net.minecraft.client.gui.components.EditBox;
|
||||
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
|
||||
import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen;
|
||||
|
||||
/** Sends a sort request while a survival container is open. */
|
||||
public final class SanctuaryInventorySortClient {
|
||||
private SanctuaryInventorySortClient() {
|
||||
}
|
||||
|
||||
public static boolean requestFromKeyboard(Minecraft client) {
|
||||
if (client.gui.screen() != null && client.gui.screen().getFocused() instanceof EditBox) {
|
||||
return false;
|
||||
}
|
||||
return request(client);
|
||||
}
|
||||
|
||||
public static boolean request(Minecraft client) {
|
||||
if (client.player == null || client.level == null
|
||||
|| !(client.gui.screen() instanceof AbstractContainerScreen<?>)
|
||||
|| client.gui.screen() instanceof CreativeModeInventoryScreen
|
||||
|| !ClientPlayNetworking.canSend(SortInventoryPayload.ID)) {
|
||||
return false;
|
||||
}
|
||||
AbstractWidget.playButtonClickSound(client.getSoundManager());
|
||||
ClientPlayNetworking.send(new SortInventoryPayload());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
+6
@@ -88,6 +88,12 @@ public final class SanctuaryHotbarRows {
|
||||
return layout;
|
||||
}
|
||||
|
||||
/** Visual row of each physical row. Index 0 is the live hotbar. */
|
||||
public static int[] visualLayout(ServerPlayer player) {
|
||||
int[] layout = SESSION_LAYOUTS.get(player.getUUID());
|
||||
return layout == null ? identityLayout() : layout.clone();
|
||||
}
|
||||
|
||||
private static int indexOf(int[] layout, int visualRow) {
|
||||
for (int index = 0; index < layout.length; index++) {
|
||||
if (layout[index] == visualRow) return index;
|
||||
|
||||
+21
@@ -20,6 +20,27 @@ public final class SanctuaryInventoryCapacity {
|
||||
private SanctuaryInventoryCapacity() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns a visual row (0 = live hotbar) into a top-to-bottom bank index.
|
||||
* Storage occupies the first lines; the hotbar sits on the last one, like vanilla.
|
||||
*/
|
||||
public static int bankIndex(int visualRow, int visibleRows) {
|
||||
visibleRows = Math.clamp(visibleRows, 1, MAX_ROW_COUNT);
|
||||
visualRow = Math.clamp(visualRow, 0, visibleRows - 1);
|
||||
return visibleRows - 1 - visualRow;
|
||||
}
|
||||
|
||||
public static int physicalRowAtBankIndex(int bankIndex, int[] visualByPhysical, int unlockedRows) {
|
||||
unlockedRows = Math.clamp(unlockedRows, 1, MAX_ROW_COUNT);
|
||||
bankIndex = Math.clamp(bankIndex, 0, unlockedRows - 1);
|
||||
for (int physical = 0; physical < unlockedRows; physical++) {
|
||||
int visual = visualByPhysical == null || physical >= visualByPhysical.length
|
||||
? physical : visualByPhysical[physical];
|
||||
if (bankIndex(visual, unlockedRows) == bankIndex) return physical;
|
||||
}
|
||||
return bankIndex;
|
||||
}
|
||||
|
||||
public static void initialize() {
|
||||
if (initialized) return;
|
||||
initialized = true;
|
||||
|
||||
+144
@@ -0,0 +1,144 @@
|
||||
package fr.koka99cab.sanctuary26.sanctuary.gameplay;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.Container;
|
||||
import net.minecraft.world.entity.player.Inventory;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
||||
/**
|
||||
* Server-authoritative sort of every unlocked inventory row except the live hotbar.
|
||||
* Armor, off-hand, crafting, cape and companion slots stay untouched.
|
||||
*/
|
||||
public final class SanctuaryInventorySort {
|
||||
private static final int COOLDOWN_TICKS = 8;
|
||||
private static final Map<UUID, Long> LAST_SORT_TICK = new HashMap<>();
|
||||
private static final SanctuaryInventorySorter.StackAccess<ItemStack> STACKS =
|
||||
new SanctuaryInventorySorter.StackAccess<>() {
|
||||
@Override
|
||||
public boolean isEmpty(ItemStack stack) {
|
||||
return stack == null || stack.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int count(ItemStack stack) {
|
||||
return stack.getCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int maxStackSize(ItemStack stack) {
|
||||
return stack.getMaxStackSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean sameItem(ItemStack first, ItemStack second) {
|
||||
return ItemStack.isSameItemSameComponents(first, second);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack copy(ItemStack stack) {
|
||||
return stack.copy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack withCount(ItemStack stack, int count) {
|
||||
if (count <= 0) return ItemStack.EMPTY;
|
||||
ItemStack copy = stack.copy();
|
||||
copy.setCount(count);
|
||||
return copy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack empty() {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(ItemStack first, ItemStack second) {
|
||||
boolean firstEmpty = first.isEmpty();
|
||||
boolean secondEmpty = second.isEmpty();
|
||||
if (firstEmpty || secondEmpty) return Boolean.compare(firstEmpty, secondEmpty);
|
||||
int byId = BuiltInRegistries.ITEM.getKey(first.getItem()).toString()
|
||||
.compareTo(BuiltInRegistries.ITEM.getKey(second.getItem()).toString());
|
||||
if (byId != 0) return byId;
|
||||
int byComponents = String.valueOf(first.getComponents())
|
||||
.compareTo(String.valueOf(second.getComponents()));
|
||||
if (byComponents != 0) return byComponents;
|
||||
return Integer.compare(second.getCount(), first.getCount());
|
||||
}
|
||||
};
|
||||
|
||||
private static boolean initialized;
|
||||
|
||||
private SanctuaryInventorySort() {
|
||||
}
|
||||
|
||||
public static void initialize() {
|
||||
if (initialized) return;
|
||||
initialized = true;
|
||||
ServerPlayerEvents.LEAVE.register(player -> LAST_SORT_TICK.remove(player.getUUID()));
|
||||
}
|
||||
|
||||
public static void sort(ServerPlayer player) {
|
||||
long now = player.level().getGameTime();
|
||||
Long previous = LAST_SORT_TICK.get(player.getUUID());
|
||||
if (previous != null && now - previous < COOLDOWN_TICKS) return;
|
||||
LAST_SORT_TICK.put(player.getUUID(), now);
|
||||
|
||||
int unlockedRows = SanctuaryInventoryCapacity.unlockedRows(player);
|
||||
if (unlockedRows <= 1) return;
|
||||
|
||||
Inventory inventory = player.getInventory();
|
||||
SanctuaryOverflowContainer overflow = SanctuaryOverflowAccess.of(player);
|
||||
int[] visualByPhysical = SanctuaryHotbarRows.visualLayout(player);
|
||||
List<ItemStack> slots = new ArrayList<>(
|
||||
(unlockedRows - 1) * SanctuaryInventoryCapacity.ROW_SIZE);
|
||||
for (int bank = 0; bank < unlockedRows; bank++) {
|
||||
int row = SanctuaryInventoryCapacity.physicalRowAtBankIndex(
|
||||
bank, visualByPhysical, unlockedRows);
|
||||
if (row == 0) continue;
|
||||
for (int column = 0; column < SanctuaryInventoryCapacity.ROW_SIZE; column++) {
|
||||
slots.add(getRowItem(inventory, overflow, row, column).copy());
|
||||
}
|
||||
}
|
||||
SanctuaryInventorySorter.compactAndSort(slots, STACKS);
|
||||
int index = 0;
|
||||
for (int bank = 0; bank < unlockedRows; bank++) {
|
||||
int row = SanctuaryInventoryCapacity.physicalRowAtBankIndex(
|
||||
bank, visualByPhysical, unlockedRows);
|
||||
if (row == 0) continue;
|
||||
for (int column = 0; column < SanctuaryInventoryCapacity.ROW_SIZE; column++) {
|
||||
setRowItem(inventory, overflow, row, column, slots.get(index++));
|
||||
}
|
||||
}
|
||||
inventory.setChanged();
|
||||
overflow.setChanged();
|
||||
player.inventoryMenu.broadcastChanges();
|
||||
if (player.containerMenu != player.inventoryMenu) player.containerMenu.broadcastChanges();
|
||||
}
|
||||
|
||||
private static ItemStack getRowItem(Inventory inventory, Container overflow,
|
||||
int logicalRow, int column) {
|
||||
if (logicalRow < SanctuaryInventoryCapacity.VANILLA_ROW_COUNT) {
|
||||
return inventory.getItem(logicalRow * SanctuaryInventoryCapacity.ROW_SIZE + column);
|
||||
}
|
||||
return overflow.getItem((logicalRow - SanctuaryInventoryCapacity.VANILLA_ROW_COUNT)
|
||||
* SanctuaryInventoryCapacity.ROW_SIZE + column);
|
||||
}
|
||||
|
||||
private static void setRowItem(Inventory inventory, Container overflow,
|
||||
int logicalRow, int column, ItemStack stack) {
|
||||
if (logicalRow < SanctuaryInventoryCapacity.VANILLA_ROW_COUNT) {
|
||||
inventory.setItem(logicalRow * SanctuaryInventoryCapacity.ROW_SIZE + column, stack);
|
||||
return;
|
||||
}
|
||||
overflow.setItem((logicalRow - SanctuaryInventoryCapacity.VANILLA_ROW_COUNT)
|
||||
* SanctuaryInventoryCapacity.ROW_SIZE + column, stack);
|
||||
}
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
package fr.koka99cab.sanctuary26.sanctuary.gameplay;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Merges identical stacks then orders them, leaving empty slots at the end.
|
||||
* The access adapter keeps this independent of Minecraft types so smoke tests
|
||||
* can cover the contract without a running game.
|
||||
*/
|
||||
public final class SanctuaryInventorySorter {
|
||||
private SanctuaryInventorySorter() {
|
||||
}
|
||||
|
||||
public interface StackAccess<T> {
|
||||
boolean isEmpty(T stack);
|
||||
|
||||
int count(T stack);
|
||||
|
||||
int maxStackSize(T stack);
|
||||
|
||||
boolean sameItem(T first, T second);
|
||||
|
||||
T copy(T stack);
|
||||
|
||||
T withCount(T stack, int count);
|
||||
|
||||
T empty();
|
||||
|
||||
int compare(T first, T second);
|
||||
}
|
||||
|
||||
public static <T> void compactAndSort(List<T> slots, StackAccess<T> access) {
|
||||
List<T> merged = new ArrayList<>();
|
||||
for (T slot : slots) {
|
||||
if (access.isEmpty(slot)) continue;
|
||||
T remaining = access.copy(slot);
|
||||
for (int index = 0; index < merged.size() && !access.isEmpty(remaining); index++) {
|
||||
T existing = merged.get(index);
|
||||
if (!access.sameItem(existing, remaining)) continue;
|
||||
int space = access.maxStackSize(existing) - access.count(existing);
|
||||
if (space <= 0) continue;
|
||||
int moved = Math.min(space, access.count(remaining));
|
||||
merged.set(index, access.withCount(existing, access.count(existing) + moved));
|
||||
remaining = access.withCount(remaining, access.count(remaining) - moved);
|
||||
}
|
||||
if (!access.isEmpty(remaining)) merged.add(remaining);
|
||||
}
|
||||
merged.sort(access::compare);
|
||||
for (int index = 0; index < slots.size(); index++) {
|
||||
slots.set(index, index < merged.size() ? merged.get(index) : access.empty());
|
||||
}
|
||||
}
|
||||
}
|
||||
+14
-2
@@ -1,7 +1,9 @@
|
||||
package fr.koka99cab.sanctuary26.sanctuary.mixin.client;
|
||||
|
||||
import fr.koka99cab.sanctuary26.sanctuary.SanctuaryMod;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.client.SanctuaryClient;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.client.SanctuaryInventoryClient;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.client.SanctuaryInventorySortClient;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.client.SanctuaryHotbarRowsClient;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.client.SanctuaryContainerScreenGeometry;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuaryExtendedInventoryMenu;
|
||||
@@ -191,7 +193,7 @@ abstract class AbstractContainerScreenMixin implements SanctuaryContainerScreenG
|
||||
sanctuary$panelLeft + PANEL_BANK_X - 3
|
||||
+ minecraft.player.getInventory().getSelectedSlot() * BANK_ROW_STEP,
|
||||
sanctuary$panelTop + PANEL_BANK_Y - 3
|
||||
+ SanctuaryHotbarRowsClient.activeVisualRow() * BANK_ROW_STEP, 22, 21);
|
||||
+ SanctuaryHotbarRowsClient.bankIndex(0, sanctuary$visibleRows) * BANK_ROW_STEP, 22, 21);
|
||||
}
|
||||
graphics.text(minecraft.font,
|
||||
Component.translatable("screen.sanctuary.inventory.banks",
|
||||
@@ -245,6 +247,15 @@ abstract class AbstractContainerScreenMixin implements SanctuaryContainerScreenG
|
||||
cir.setReturnValue(true);
|
||||
}
|
||||
|
||||
@Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true)
|
||||
private void sanctuary$sortInventory(MouseButtonEvent event, boolean doubleClick,
|
||||
CallbackInfoReturnable<Boolean> cir) {
|
||||
if (!SanctuaryClient.isSortInventoryMouse(event)) return;
|
||||
if (SanctuaryInventorySortClient.request(Minecraft.getInstance())) {
|
||||
cir.setReturnValue(true);
|
||||
}
|
||||
}
|
||||
|
||||
/** Shift + held left click quick-moves every slot crossed exactly once. */
|
||||
@Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true)
|
||||
private void sanctuary$startRapidTransfer(MouseButtonEvent event, boolean doubleClick,
|
||||
@@ -373,7 +384,8 @@ abstract class AbstractContainerScreenMixin implements SanctuaryContainerScreenG
|
||||
}
|
||||
sanctuary$move(slot,
|
||||
sanctuary$panelLeft + PANEL_BANK_X + column * BANK_ROW_STEP,
|
||||
sanctuary$panelTop + PANEL_BANK_Y + visualRow * BANK_ROW_STEP);
|
||||
sanctuary$panelTop + PANEL_BANK_Y
|
||||
+ SanctuaryHotbarRowsClient.bankIndex(logicalRow, sanctuary$visibleRows) * BANK_ROW_STEP);
|
||||
}
|
||||
|
||||
@Unique
|
||||
|
||||
+5
-4
@@ -163,15 +163,15 @@ abstract class InventoryScreenMixin {
|
||||
}
|
||||
}
|
||||
if (minecraft.player != null) {
|
||||
int activeRow = SanctuaryHotbarRowsClient.activeVisualRow();
|
||||
int hotbarRow = SanctuaryHotbarRowsClient.bankIndex(0, sanctuary$visibleRows);
|
||||
graphics.blit(RenderPipelines.GUI_TEXTURED, HOTBAR_TEXTURE,
|
||||
leftPos + HOTBAR_X,
|
||||
topPos + BANK_Y + activeRow * BANK_ROW_STEP - 3,
|
||||
topPos + BANK_Y + hotbarRow * BANK_ROW_STEP - 3,
|
||||
0.0F, 0.0F, 182, 22, 182, 22);
|
||||
graphics.blitSprite(RenderPipelines.GUI_TEXTURED, HOTBAR_SELECTION_SPRITE,
|
||||
leftPos + HOTBAR_X - 1
|
||||
+ minecraft.player.getInventory().getSelectedSlot() * HOTBAR_COLUMN_STEP,
|
||||
topPos + BANK_Y + activeRow * BANK_ROW_STEP - 4, 24, 23);
|
||||
topPos + BANK_Y + hotbarRow * BANK_ROW_STEP - 4, 24, 23);
|
||||
}
|
||||
if (minecraft.player != null) {
|
||||
InventoryScreen.extractEntityInInventoryFollowsMouse(
|
||||
@@ -212,7 +212,8 @@ abstract class InventoryScreenMixin {
|
||||
return;
|
||||
}
|
||||
int x = hotbar ? HOTBAR_SLOT_X + column * HOTBAR_COLUMN_STEP : BANK_X + column * 18;
|
||||
move(slot, x, BANK_Y + visualRow * BANK_ROW_STEP);
|
||||
move(slot, x, BANK_Y + SanctuaryHotbarRowsClient.bankIndex(logicalRow, sanctuary$visibleRows)
|
||||
* BANK_ROW_STEP);
|
||||
}
|
||||
|
||||
@Unique
|
||||
|
||||
+14
@@ -2,6 +2,7 @@ package fr.koka99cab.sanctuary26.sanctuary.mixin.client;
|
||||
|
||||
import fr.koka99cab.sanctuary26.sanctuary.client.SanctuaryClient;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.client.SanctuaryHotbarRowsClient;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.client.SanctuaryInventorySortClient;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.client.SanctuarySittingClient;
|
||||
import net.minecraft.client.KeyboardHandler;
|
||||
import net.minecraft.client.Minecraft;
|
||||
@@ -45,4 +46,17 @@ public abstract class KeyboardHandlerMixin {
|
||||
callback.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "keyPress", at = @At("HEAD"), cancellable = true)
|
||||
private void sanctuary$sortInventory(long windowPointer, int action, KeyEvent event,
|
||||
CallbackInfo callback) {
|
||||
Minecraft client = Minecraft.getInstance();
|
||||
if (windowPointer != client.getWindow().handle() || action != GLFW.GLFW_PRESS
|
||||
|| !SanctuaryClient.isSortInventoryKey(event)) {
|
||||
return;
|
||||
}
|
||||
if (SanctuaryInventorySortClient.requestFromKeyboard(client)) {
|
||||
callback.cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+19
@@ -1,8 +1,14 @@
|
||||
package fr.koka99cab.sanctuary26.sanctuary.mixin.client;
|
||||
|
||||
import fr.koka99cab.sanctuary26.sanctuary.client.SanctuaryBulkActionsClient;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.client.SanctuaryClient;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.client.SanctuaryInventorySortClient;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.client.SanctuaryZoom;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.MouseHandler;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.client.input.MouseButtonInfo;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
@@ -19,4 +25,17 @@ public abstract class MouseHandlerMixin {
|
||||
callback.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "onButton", at = @At("HEAD"), cancellable = true)
|
||||
private void sanctuary$sortInventory(long windowPointer, MouseButtonInfo buttonInfo, int action,
|
||||
CallbackInfo callback) {
|
||||
if (action != GLFW.GLFW_PRESS) return;
|
||||
Minecraft client = Minecraft.getInstance();
|
||||
if (windowPointer != client.getWindow().handle()) return;
|
||||
MouseButtonEvent event = new MouseButtonEvent(0.0, 0.0, buttonInfo);
|
||||
if (!SanctuaryClient.isSortInventoryMouse(event)) return;
|
||||
if (SanctuaryInventorySortClient.request(client)) {
|
||||
callback.cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
@@ -6,6 +6,7 @@ import fr.koka99cab.sanctuary26.sanctuary.progression.SanctuaryMealHeartsService
|
||||
import fr.koka99cab.sanctuary26.sanctuary.gameplay.building.SanctuaryBuildingManager;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.gameplay.mining.SanctuaryMiningManager;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuaryHotbarRows;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuaryInventorySort;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuaryCompanionPowers;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuarySitting;
|
||||
import fr.koka99cab.sanctuary26.sanctuary.celestial.CelestialSkyService;
|
||||
@@ -48,6 +49,7 @@ public final class SanctuaryNetworking {
|
||||
PayloadTypeRegistry.serverboundPlay().register(BuildControlPayload.ID, BuildControlPayload.CODEC);
|
||||
PayloadTypeRegistry.serverboundPlay().register(MiningControlPayload.ID, MiningControlPayload.CODEC);
|
||||
PayloadTypeRegistry.serverboundPlay().register(HotbarRowSwitchPayload.ID, HotbarRowSwitchPayload.CODEC);
|
||||
PayloadTypeRegistry.serverboundPlay().register(SortInventoryPayload.ID, SortInventoryPayload.CODEC);
|
||||
PayloadTypeRegistry.serverboundPlay().register(CompanionPowerUsePayload.ID, CompanionPowerUsePayload.CODEC);
|
||||
PayloadTypeRegistry.serverboundPlay().register(SitRequestPayload.ID, SitRequestPayload.CODEC);
|
||||
PayloadTypeRegistry.serverboundPlay().register(CelestialActionPayload.ID, CelestialActionPayload.CODEC);
|
||||
@@ -72,6 +74,8 @@ public final class SanctuaryNetworking {
|
||||
new HotbarRowSyncPayload(accepted, payload.logicalRow()));
|
||||
}
|
||||
}));
|
||||
ServerPlayNetworking.registerGlobalReceiver(SortInventoryPayload.ID, (payload, context) ->
|
||||
context.server().execute(() -> SanctuaryInventorySort.sort(context.player())));
|
||||
ServerPlayNetworking.registerGlobalReceiver(CompanionPowerUsePayload.ID, (payload, context) ->
|
||||
context.server().execute(() -> SanctuaryCompanionPowers.use(context.player())));
|
||||
ServerPlayNetworking.registerGlobalReceiver(SitRequestPayload.ID, (payload, context) ->
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package fr.koka99cab.sanctuary26.sanctuary.network;
|
||||
|
||||
import fr.koka99cab.sanctuary26.sanctuary.SanctuaryMod;
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||
|
||||
/** A parameterless client intent. The server owns which unlocked rows are sorted. */
|
||||
public record SortInventoryPayload() implements CustomPacketPayload {
|
||||
public static final Type<SortInventoryPayload> ID =
|
||||
new Type<>(SanctuaryMod.id("c2s/sort_inventory"));
|
||||
public static final StreamCodec<RegistryFriendlyByteBuf, SortInventoryPayload> CODEC =
|
||||
CustomPacketPayload.codec(SortInventoryPayload::write, SortInventoryPayload::new);
|
||||
|
||||
private SortInventoryPayload(RegistryFriendlyByteBuf buffer) {
|
||||
this();
|
||||
}
|
||||
|
||||
private void write(RegistryFriendlyByteBuf buffer) {
|
||||
// Intentionally empty: no client-supplied slot list or item identity can be trusted.
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type<? extends CustomPacketPayload> type() {
|
||||
return ID;
|
||||
}
|
||||
}
|
||||
@@ -243,6 +243,7 @@
|
||||
"key.sanctuary.companion_power": "Companion power",
|
||||
"key.sanctuary.zoom": "Telephoto zoom",
|
||||
"key.sanctuary.switch_hotbar_row": "Cycle hotbar row",
|
||||
"key.sanctuary.sort_inventory": "Sort inventory",
|
||||
"key.sanctuary.quest_tracker": "Quest tracker",
|
||||
"hud.sanctuary.quest_tracker.toggle_on": "Quest tracker shown",
|
||||
"hud.sanctuary.quest_tracker.toggle_off": "Quest tracker hidden",
|
||||
|
||||
@@ -243,6 +243,7 @@
|
||||
"key.sanctuary.companion_power": "Pouvoir du familier",
|
||||
"key.sanctuary.zoom": "Zoom téléobjectif",
|
||||
"key.sanctuary.switch_hotbar_row": "Changer de rangée de hotbar",
|
||||
"key.sanctuary.sort_inventory": "Trier l'inventaire",
|
||||
"key.sanctuary.quest_tracker": "Suivi des quêtes",
|
||||
"hud.sanctuary.quest_tracker.toggle_on": "Suivi des quêtes affiché",
|
||||
"hud.sanctuary.quest_tracker.toggle_off": "Suivi des quêtes masqué",
|
||||
|
||||
@@ -155,6 +155,7 @@
|
||||
"key.sanctuary.companion_power": "Способность спутника",
|
||||
"key.sanctuary.zoom": "Телефото-зум",
|
||||
"key.sanctuary.switch_hotbar_row": "Сменить ряд панели быстрого доступа",
|
||||
"key.sanctuary.sort_inventory": "Сортировать инвентарь",
|
||||
"key.sanctuary.quest_tracker": "Трекер заданий",
|
||||
"hud.sanctuary.quest_tracker.toggle_on": "Трекер заданий показан",
|
||||
"hud.sanctuary.quest_tracker.toggle_off": "Трекер заданий скрыт",
|
||||
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
package fr.koka99cab.sanctuary26.sanctuary.gameplay;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/** Executable coverage for merging, ordering and leaving the hotbar row out of the sort. */
|
||||
public final class SanctuaryInventorySortSmoke {
|
||||
private SanctuaryInventorySortSmoke() {
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
require(SanctuaryInventoryCapacity.bankIndex(0, 4) == 3,
|
||||
"The live hotbar must sit on the last bank row");
|
||||
require(SanctuaryInventoryCapacity.bankIndex(3, 4) == 0,
|
||||
"The last storage row must sit on the first bank line");
|
||||
require(SanctuaryInventoryCapacity.physicalRowAtBankIndex(0, null, 4) == 3,
|
||||
"Packing must start at the top storage row, not the hotbar");
|
||||
require(SanctuaryInventoryCapacity.physicalRowAtBankIndex(3, null, 4) == 0,
|
||||
"The bottom bank row must remain the live hotbar");
|
||||
|
||||
SanctuaryInventorySorter.StackAccess<FakeStack> access = FakeStack.ACCESS;
|
||||
List<FakeStack> storage = new ArrayList<>(List.of(
|
||||
new FakeStack("minecraft:dirt", "", 32, 64),
|
||||
new FakeStack("minecraft:cobblestone", "", 16, 64),
|
||||
FakeStack.EMPTY,
|
||||
new FakeStack("minecraft:dirt", "", 40, 64),
|
||||
new FakeStack("minecraft:diamond_sword", "sharpness", 1, 1),
|
||||
new FakeStack("minecraft:cobblestone", "", 64, 64),
|
||||
new FakeStack("minecraft:diamond_sword", "", 1, 1)
|
||||
));
|
||||
SanctuaryInventorySorter.compactAndSort(storage, access);
|
||||
require(storage.get(0).id.equals("minecraft:cobblestone") && storage.get(0).count == 64,
|
||||
"Full cobblestone stack must come first");
|
||||
require(storage.get(1).id.equals("minecraft:cobblestone") && storage.get(1).count == 16,
|
||||
"Leftover cobblestone must follow the merged full stack");
|
||||
require(storage.get(2).id.equals("minecraft:diamond_sword") && storage.get(2).components.isEmpty(),
|
||||
"Unenchanted sword must sort before the enchanted one");
|
||||
require(storage.get(3).id.equals("minecraft:diamond_sword") && storage.get(3).components.equals("sharpness"),
|
||||
"Component variants must stay distinct");
|
||||
require(storage.get(4).id.equals("minecraft:dirt") && storage.get(4).count == 64,
|
||||
"Dirt must merge up to max stack size");
|
||||
require(storage.get(5).id.equals("minecraft:dirt") && storage.get(5).count == 8,
|
||||
"Dirt remainder must keep the leftover count");
|
||||
require(storage.get(6).isEmpty(), "Unused storage slots must end empty");
|
||||
|
||||
List<FakeStack> hotbar = new ArrayList<>(List.of(
|
||||
new FakeStack("minecraft:torch", "", 8, 64),
|
||||
new FakeStack("minecraft:bread", "", 3, 64)
|
||||
));
|
||||
List<FakeStack> snapshot = List.copyOf(hotbar);
|
||||
require(hotbar.equals(snapshot), "Hotbar snapshot must remain untouched by storage sorting");
|
||||
}
|
||||
|
||||
private static void require(boolean condition, String message) {
|
||||
if (!condition) throw new IllegalStateException(message);
|
||||
}
|
||||
|
||||
private record FakeStack(String id, String components, int count, int maxSize) {
|
||||
static final FakeStack EMPTY = new FakeStack("", "", 0, 64);
|
||||
static final SanctuaryInventorySorter.StackAccess<FakeStack> ACCESS =
|
||||
new SanctuaryInventorySorter.StackAccess<>() {
|
||||
@Override
|
||||
public boolean isEmpty(FakeStack stack) {
|
||||
return stack == null || stack.count <= 0 || stack.id.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int count(FakeStack stack) {
|
||||
return stack.count;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int maxStackSize(FakeStack stack) {
|
||||
return stack.maxSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean sameItem(FakeStack first, FakeStack second) {
|
||||
return first.id.equals(second.id) && first.components.equals(second.components);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FakeStack copy(FakeStack stack) {
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FakeStack withCount(FakeStack stack, int count) {
|
||||
if (count <= 0) return EMPTY;
|
||||
return new FakeStack(stack.id, stack.components, count, stack.maxSize);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FakeStack empty() {
|
||||
return EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(FakeStack first, FakeStack second) {
|
||||
boolean firstEmpty = isEmpty(first);
|
||||
boolean secondEmpty = isEmpty(second);
|
||||
if (firstEmpty || secondEmpty) return Boolean.compare(firstEmpty, secondEmpty);
|
||||
int byId = first.id.compareTo(second.id);
|
||||
if (byId != 0) return byId;
|
||||
int byComponents = first.components.compareTo(second.components);
|
||||
if (byComponents != 0) return byComponents;
|
||||
return Integer.compare(second.count, first.count);
|
||||
}
|
||||
};
|
||||
|
||||
boolean isEmpty() {
|
||||
return ACCESS.isEmpty(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user