diff --git a/CANAPLIA.md b/CANAPLIA.md index df166ed..3693dc3 100644 --- a/CANAPLIA.md +++ b/CANAPLIA.md @@ -18,7 +18,7 @@ It's Alive fournit l'alias Fabric canaplia et dépend explicitement d'Another Wo Les seize clés stables sont common, tender, olive, dark, ashen, moss, gold, amber, bluish, pink, coral, purple, indigo, varieg, lunar et ember. -Les trois blocs historiques, le type de block entity et les 64 items historiques sont enregistrés une seule fois. Les cultures partagent une croissance à huit âges et conservent leur variante dans le blockstate. Dix têtes identiques dans un composteur produisent le bloc de résine correspondant ; une autre variante est refusée. La résine émet une aura serveur pendant 90 secondes, persiste son temps restant puis disparaît. +Les trois blocs historiques, le type de block entity et les 64 items historiques sont enregistrés une seule fois. Les cultures partagent une croissance à huit âges et conservent leur variante dans le blockstate. Dix têtes identiques dans un composteur produisent le bloc de résine correspondant ; une autre variante est refusée. La résine est posée éteinte, s'allume au briquet, à la charge de feu ou avec un projectile enflammé, émet une fumée visible et applique son aura serveur pendant 90 secondes avant de disparaître. Les sources sauvages sont chargées depuis data/canaplia/canaplia_discovery/sources.json. Elles fonctionnent lors de la casse de flore dans les chunks existants. Ember est limitée à la flore native du Nether, Indigo aux chorus de l'End, et toutes les variantes Canaplia sont exclues du Shop et des récompenses ordinaires. @@ -32,7 +32,7 @@ Ambiance possède les trois payloads historiques canaplia:hemp_visual_sync, cana ## Codex -L'item partageable canaplia:codex se fabrique avec un livre et un colorant vert. Son écran distingue les découvertes personnelles des silhouettes connues par la communauté. Les origines génériques et les conditions détaillées se révèlent progressivement sans envoyer de payload de découverte client-vers-serveur. +Les monstres tués par un joueur peuvent laisser une `canaplia:codex_page` et, très rarement, le `canaplia:codex` complet. Quatre pages récupérées permettent aussi de relier le Codex autour d'un livre. L'objet utilise la texture du livre Minecraft et son écran repose sur les pages vanilla. Il distingue les découvertes personnelles des silhouettes connues par la communauté ; les origines génériques et les conditions détaillées se révèlent progressivement sans envoyer de payload de découverte client-vers-serveur. Les données canaplia:codex sont versionnées. Les clés futures syntaxiquement valides restent conservées lors d'un aller-retour afin qu'une migration ne perde pas les découvertes ajoutées par une version ultérieure. @@ -51,8 +51,8 @@ Les données canaplia:codex sont versionnées. Les clés futures syntaxiquement ## Compatibilité, licence et migrations -Les IDs historiques, les clés et le namespace sont inchangés. L'ancien format non versionné de canaplia:hemp_bud_composters reste lisible et est réécrit sous une enveloppe v1. Le block entity de résine conserve remaining_burn_ticks. Le Codex utilise sa propre donnée v1. Les protocoles deviennent It's Alive v4 et Ambiance v5. +Les IDs historiques, les clés et le namespace sont inchangés. L'ancien format non versionné de canaplia:hemp_bud_composters reste lisible et est réécrit sous une enveloppe v1. Le block entity de résine conserve `remaining_burn_ticks` et migre sa donnée v1 déjà active vers l'état allumé v2. Le Codex utilise sa propre donnée v1. Les protocoles restent It's Alive v4 et Ambiance v5. -La source historique 2.0.0 demeure **All Rights Reserved**, copyright KOKA99CAB. Aucun fichier Java, modèle, texture, son ou JSON historique n'a été copié. Le code et les palettes 16×16 de cette implémentation sont originaux et restent sous GPL-3.0-or-later. +La source historique 2.0.0 demeure **All Rights Reserved**, copyright KOKA99CAB. À la demande explicite du détenteur des droits, ses 224 textures 16×16 ont été restaurées dans l'alpha.209 ; leur provenance est documentée avec les ressources. Aucun fichier Java, modèle, son ou JSON historique n'est copié. Le code d'intégration reste sous GPL-3.0-or-later. -Les inventaires machine sont dans pack/migrations/canaplia-foundation-alpha32.json et pack/migrations/canaplia-gameplay-alpha33.json. La release `26.2.0-alpha.208` distribue ces contrats via pack/migrations/26.2.0-alpha.207-canaplia-to-alpha.208.json. +Les inventaires machine sont dans `pack/migrations/canaplia-foundation-alpha32.json` et `pack/migrations/canaplia-gameplay-alpha33.json`. La release `26.2.0-alpha.209` décrit la correction de gameplay et l'import autorisé dans `pack/migrations/26.2.0-alpha.208-canaplia-fixes-to-alpha.209.json`. diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c01d78..3a79915 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,18 @@ Ce journal suit les **versions du modpack**. Lorsqu'un seul module change, sa ve - Depuis `26.2.0-alpha.6`, le pack et les modules ont des versions indépendantes. I Like To Move It et Only Fun deviennent les cinquième et sixième modules actifs dans l'alpha 46. - Les versions ci-dessous ont été reconstituées à partir des JAR archivés, des packs locaux et du code source actuel. Les dates n'étant pas enregistrées de manière fiable, elles ne sont pas inventées. +## `26.2.0-alpha.209` + +Module modifié : **It's Alive `0.0.0-alpha.34`**. Les neuf autres modules conservent leur version issue de l’alpha.208. + +- restaure les 224 textures 16×16 authored du Canaplia historique, avec provenance et autorisation explicite du détenteur des droits, à la place des palettes procédurales illisibles ; +- rétablit la consommation des seize joints avec animation, son, particules de fumée, découverte et effets serveur ; +- pose les blocs de résine éteints, permet de les allumer au briquet, à la charge de feu ou avec un projectile enflammé, puis affiche une fumée de feu de camp pendant leur aura de 90 secondes ; +- migre sans perte les résines déjà posées par l’alpha.208 vers l’état allumé et porte les données It's Alive en v3 sans changer le protocole réseau 4 ; +- remplace l’ancien panneau vert du Codex par l’écran et les pages du livre Minecraft ; +- ajoute les pages de Canaplia aux butins des monstres tués par un joueur, un rare butin direct du Codex et une recette livre + quatre pages ; +- distribue It's Alive `0.0.0-alpha.34` dans les manifestes Packwiz, Prism et Modrinth du pack alpha.209, sans exiger de nouveau monde. + ## `26.2.0-alpha.208` Modules modifiés : **It's Alive `0.0.0-alpha.33`**, **Ambiance `0.0.0-alpha.14`** et **Only Fun `0.0.0-alpha.20`**. Les sept autres modules conservent leur version issue de l’alpha.207. diff --git a/build.gradle b/build.gradle index 155ee3b..bf9a2d0 100644 --- a/build.gradle +++ b/build.gradle @@ -3428,7 +3428,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.208" + if (rootProject.pack_version != "26.2.0-alpha.209" || rootProject.sanctuary_version != "0.0.0-alpha.117" || rootProject.onlyfun_version != "0.0.0-alpha.20" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version @@ -3478,7 +3478,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.208" + if (rootProject.pack_version != "26.2.0-alpha.209" || rootProject.anotherworld_version != "0.0.0-alpha.55" || rootProject.redstoner_version != "0.0.0-alpha.10" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version @@ -4126,7 +4126,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.208" + if (rootProject.pack_version != "26.2.0-alpha.209" || rootProject.onlyfun_version != "0.0.0-alpha.20" || rootProject.sanctuary_version != "0.0.0-alpha.117" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version @@ -4171,8 +4171,8 @@ 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.208" - || rootProject.itsalive_version != "0.0.0-alpha.33" + if (rootProject.pack_version != "26.2.0-alpha.209" + || rootProject.itsalive_version != "0.0.0-alpha.34" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version || migration.source?.pack_version != "26.2.0-alpha.193" || migration.source?.modules != [itsalive: "0.0.0-alpha.26"] @@ -4220,7 +4220,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.208" + if (rootProject.pack_version != "26.2.0-alpha.209" || rootProject.onlyfun_version != "0.0.0-alpha.20" || rootProject.sanctuary_version != "0.0.0-alpha.117" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version @@ -4266,7 +4266,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.208" + if (rootProject.pack_version != "26.2.0-alpha.209" || migration.source?.pack_version != "26.2.0-alpha.195" || migration.target?.pack_version != "26.2.0-alpha.196" || migration.target?.modules != [ @@ -4284,10 +4284,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.208" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.208.mrpack" - || prism.versionId != "26.2.0-alpha.208" - || !packwiz.contains('version = "26.2.0-alpha.208"')) { + || release.pack_version != "26.2.0-alpha.209" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.209.mrpack" + || prism.versionId != "26.2.0-alpha.209" + || !packwiz.contains('version = "26.2.0-alpha.209"')) { throw new GradleException("The alpha.196 culinary, mailbox and grapple release contract is incomplete") } } @@ -4312,8 +4312,8 @@ 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.208" - || rootProject.itsalive_version != "0.0.0-alpha.33" + if (rootProject.pack_version != "26.2.0-alpha.209" + || rootProject.itsalive_version != "0.0.0-alpha.34" || rootProject.sanctuary_version != "0.0.0-alpha.117" || migration.source?.pack_version != "26.2.0-alpha.196" || migration.target?.pack_version != "26.2.0-alpha.197" @@ -4332,10 +4332,10 @@ tasks.register("verifyQuestRequestsCauldronBatchesRelease") { || migration.distribution?.jei?.target != "30.26.0.186" || migration.compatibility?.sanctuary_target_network_protocol != 19 || sanctuaryManifest.custom?.sanctuary26?.network_protocol != 21 - || release.pack_version != "26.2.0-alpha.208" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.208.mrpack" - || prism.versionId != "26.2.0-alpha.208" - || !packwiz.contains('version = "26.2.0-alpha.208"')) { + || release.pack_version != "26.2.0-alpha.209" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.209.mrpack" + || prism.versionId != "26.2.0-alpha.209" + || !packwiz.contains('version = "26.2.0-alpha.209"')) { throw new GradleException("The alpha.197 quest-request and cauldron-batch release contract is incomplete") } } @@ -4362,8 +4362,8 @@ 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.208" - || rootProject.itsalive_version != "0.0.0-alpha.33" + if (rootProject.pack_version != "26.2.0-alpha.209" + || rootProject.itsalive_version != "0.0.0-alpha.34" || migration.source?.pack_version != "26.2.0-alpha.197" || migration.target?.pack_version != "26.2.0-alpha.198" || migration.target?.modules != [itsalive: "0.0.0-alpha.30", sanctuary: "0.0.0-alpha.114"] @@ -4379,13 +4379,13 @@ tasks.register("verifyFermentationBarrelAutomationRelease") { || migration.compatibility?.save_migration_required != false || migration.compatibility?.registry_ids_changed != false || migration.distribution?.packwiz_index_refreshed != true - || itsAliveManifest.custom?.sanctuary26?.data_version != 2 + || itsAliveManifest.custom?.sanctuary26?.data_version != 3 || itsAliveManifest.custom?.sanctuary26?.network_protocol != 4 - || release.pack_version != "26.2.0-alpha.208" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.208.mrpack" - || prism.versionId != "26.2.0-alpha.208" - || !packwiz.contains('version = "26.2.0-alpha.208"') - || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.33.jar"')) { + || release.pack_version != "26.2.0-alpha.209" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.209.mrpack" + || prism.versionId != "26.2.0-alpha.209" + || !packwiz.contains('version = "26.2.0-alpha.209"') + || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.34.jar"')) { throw new GradleException("The alpha.198 fermentation barrel release contract is incomplete") } } @@ -4412,8 +4412,8 @@ 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.208" - || rootProject.itsalive_version != "0.0.0-alpha.33" + if (rootProject.pack_version != "26.2.0-alpha.209" + || rootProject.itsalive_version != "0.0.0-alpha.34" || rootProject.sanctuary_version != "0.0.0-alpha.117" || migration.source?.pack_version != "26.2.0-alpha.198" || migration.source?.modules?.sanctuary != "0.0.0-alpha.114" @@ -4426,11 +4426,11 @@ 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 != 21 - || release.pack_version != "26.2.0-alpha.208" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.208.mrpack" - || prism.versionId != "26.2.0-alpha.208" - || !packwiz.contains('version = "26.2.0-alpha.208"') - || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.33.jar"') + || release.pack_version != "26.2.0-alpha.209" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.209.mrpack" + || prism.versionId != "26.2.0-alpha.209" + || !packwiz.contains('version = "26.2.0-alpha.209"') + || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.34.jar"') || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.117.jar"')) { throw new GradleException("The alpha.199 quest-request contract release is incomplete") } @@ -4467,7 +4467,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.208" + if (rootProject.pack_version != "26.2.0-alpha.209" || rootProject.ambiance_version != "0.0.0-alpha.14" || rootProject.ouch_version != "0.0.0-alpha.9" || migration.source?.pack_version != "26.2.0-alpha.199" @@ -4501,10 +4501,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.208" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.208.mrpack" - || prism.versionId != "26.2.0-alpha.208" - || !packwiz.contains('version = "26.2.0-alpha.208"') + || release.pack_version != "26.2.0-alpha.209" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.209.mrpack" + || prism.versionId != "26.2.0-alpha.209" + || !packwiz.contains('version = "26.2.0-alpha.209"') || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.14.jar"') || !packwizIndex.contains('file = "mods/ouch-0.0.0-alpha.9.jar"')) { throw new GradleException("The alpha.200 Weather TNT and Ambiance release is incomplete") @@ -4533,7 +4533,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.208" + if (rootProject.pack_version != "26.2.0-alpha.209" || rootProject.sanctuary_version != "0.0.0-alpha.117" || migration.source?.pack_version != "26.2.0-alpha.200" || migration.source?.modules?.sanctuary != "0.0.0-alpha.115" @@ -4548,10 +4548,10 @@ tasks.register("verifyQuestRequestEscrowRelease") { || migration.compatibility?.sanctuary_target_network_protocol != 21 || sanctuaryManifest.custom?.sanctuary26?.data_version != 11 || sanctuaryManifest.custom?.sanctuary26?.network_protocol != 21 - || release.pack_version != "26.2.0-alpha.208" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.208.mrpack" - || prism.versionId != "26.2.0-alpha.208" - || !packwiz.contains('version = "26.2.0-alpha.208"') + || release.pack_version != "26.2.0-alpha.209" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.209.mrpack" + || prism.versionId != "26.2.0-alpha.209" + || !packwiz.contains('version = "26.2.0-alpha.209"') || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.117.jar"')) { throw new GradleException("The alpha.201 quest-request escrow release is incomplete") } @@ -4587,9 +4587,9 @@ 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.208" + if (rootProject.pack_version != "26.2.0-alpha.209" || rootProject.anotherworld_version != "0.0.0-alpha.55" - || rootProject.itsalive_version != "0.0.0-alpha.33" + || rootProject.itsalive_version != "0.0.0-alpha.34" || rootProject.iliketomoveit_version != "0.0.0-alpha.14" || rootProject.sanctuary_version != "0.0.0-alpha.117" || migration.source?.pack_version != "26.2.0-alpha.201" @@ -4621,18 +4621,18 @@ tasks.register("verifyWaystoneShopCulinaryAlpha202Release") { || migration.compatibility?.sanctuary_network_protocol != 21 || migration.compatibility?.save_migration_required != false || migration.compatibility?.registry_ids_changed != false - || itsAliveManifest.custom?.sanctuary26?.data_version != 2 + || itsAliveManifest.custom?.sanctuary26?.data_version != 3 || itsAliveManifest.custom?.sanctuary26?.network_protocol != 4 || moveItManifest.custom?.sanctuary26?.data_version != 3 || moveItManifest.custom?.sanctuary26?.network_protocol != 5 || sanctuaryManifest.custom?.sanctuary26?.data_version != 11 || sanctuaryManifest.custom?.sanctuary26?.network_protocol != 21 - || release.pack_version != "26.2.0-alpha.208" - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.208.mrpack" - || prism.versionId != "26.2.0-alpha.208" - || !packwiz.contains('version = "26.2.0-alpha.208"') + || release.pack_version != "26.2.0-alpha.209" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.209.mrpack" + || prism.versionId != "26.2.0-alpha.209" + || !packwiz.contains('version = "26.2.0-alpha.209"') || !packwizIndex.contains('file = "mods/anotherworld-0.0.0-alpha.55.jar"') - || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.33.jar"') + || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.34.jar"') || !packwizIndex.contains('file = "mods/iliketomoveit-0.0.0-alpha.14.jar"') || !packwizIndex.contains('file = "mods/sanctuary-0.0.0-alpha.117.jar"')) { throw new GradleException("The alpha.202 Waystone, Shop and culinary lectern release is incomplete") @@ -4747,7 +4747,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.208" + if (rootProject.pack_version != "26.2.0-alpha.209" || rootProject.anotherworld_version != "0.0.0-alpha.55" || rootProject.sanctuary_version != "0.0.0-alpha.117" || migration.schema_version != 1 @@ -4939,7 +4939,7 @@ tasks.register("verifySafeVaultInterfaceAlpha203Release") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.191.jar" } - if (rootProject.pack_version != "26.2.0-alpha.208" + if (rootProject.pack_version != "26.2.0-alpha.209" || 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"] @@ -4957,9 +4957,9 @@ tasks.register("verifySafeVaultInterfaceAlpha203Release") { || migration.distribution?.jei?.modrinth_version_id != "XXTFqqwG" || migration.distribution?.jei?.prism_manifest_updated != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.208.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.209.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.208"') + || !packwiz.contains('version = "26.2.0-alpha.209"') || !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 @@ -4985,7 +4985,7 @@ tasks.register("verifySafeVaultFixAlpha204Release") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.191.jar" } - if (rootProject.pack_version != "26.2.0-alpha.208" + if (rootProject.pack_version != "26.2.0-alpha.209" || 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"] @@ -5011,9 +5011,9 @@ tasks.register("verifySafeVaultFixAlpha204Release") { || migration.distribution?.jei?.modrinth_version_id != "OcMayhUH" || migration.distribution?.jei?.prism_manifest_updated != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.208.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.209.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.208"') + || !packwiz.contains('version = "26.2.0-alpha.209"') || !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 @@ -5039,7 +5039,7 @@ tasks.register("verifySafeVaultCubeAlpha205Release") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.191.jar" } - if (rootProject.pack_version != "26.2.0-alpha.208" + if (rootProject.pack_version != "26.2.0-alpha.209" || 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"] @@ -5068,9 +5068,9 @@ tasks.register("verifySafeVaultCubeAlpha205Release") { || migration.distribution?.jei?.modrinth_version_id != "NtfJDMhk" || migration.distribution?.jei?.prism_manifest_updated != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.208.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.209.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.208"') + || !packwiz.contains('version = "26.2.0-alpha.209"') || !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 @@ -5097,7 +5097,7 @@ tasks.register("verifySafeVaultCtmAlpha206Release") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.191.jar" } - if (rootProject.pack_version != "26.2.0-alpha.208" + if (rootProject.pack_version != "26.2.0-alpha.209" || 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"] @@ -5120,9 +5120,9 @@ tasks.register("verifySafeVaultCtmAlpha206Release") { || migration.compatibility?.pack_release_updated != true || migration.distribution?.packwiz_index_refreshed != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.208.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.209.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.208"') + || !packwiz.contains('version = "26.2.0-alpha.209"') || !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 @@ -5149,7 +5149,7 @@ tasks.register("verifySafeVaultUnlimitedAlpha207Release") { def packwiz = file("pack/packwiz/pack.toml").text def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.28.0.191.jar" } - if (rootProject.pack_version != "26.2.0-alpha.208" + if (rootProject.pack_version != "26.2.0-alpha.209" || 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"] @@ -5179,9 +5179,9 @@ tasks.register("verifySafeVaultUnlimitedAlpha207Release") { || migration.compatibility?.pack_release_updated != true || migration.distribution?.packwiz_index_refreshed != true || release.pack_version != rootProject.pack_version - || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.208.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.209.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.208"') + || !packwiz.contains('version = "26.2.0-alpha.209"') || !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 @@ -5237,8 +5237,8 @@ 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.208" - || rootProject.itsalive_version != "0.0.0-alpha.33" + if (rootProject.pack_version != "26.2.0-alpha.209" + || rootProject.itsalive_version != "0.0.0-alpha.34" || rootProject.ambiance_version != "0.0.0-alpha.14" || migration.issue != 35 || migration.source?.fabric_id != "canaplia" @@ -5282,7 +5282,7 @@ tasks.register("verifyCanapliaFoundation") { || itsAliveManifest.provides != ["canaplia"] || itsAliveManifest.depends?.ambiance != ">=0.0.0-alpha.14" || itsAliveManifest.depends?.sanctuary != ">=0.0.0-alpha.117" - || itsAliveManifest.custom?.sanctuary26?.data_version != 2 + || itsAliveManifest.custom?.sanctuary26?.data_version != 3 || itsAliveManifest.custom?.sanctuary26?.network_protocol != 4 || ambianceManifest.custom?.sanctuary26?.data_version != 2 || ambianceManifest.custom?.sanctuary26?.network_protocol != 5 @@ -5302,7 +5302,7 @@ tasks.register("verifyCanapliaFoundation") { tasks.named("verifyWorkspace") { dependsOn "verifyCanapliaGameplay" - dependsOn "verifyCanapliaAlpha208Release" + dependsOn "verifyCanapliaAlpha209Release" dependsOn tasks.named("verifyWaystoneShopCulinaryAlpha202Release") dependsOn tasks.named("verifySafeVaultFeature") dependsOn tasks.named("verifySafeVaultInterfaceAlpha203Release") @@ -5321,6 +5321,7 @@ tasks.register("verifyCanapliaGameplay") { inputs.file(file("pack/migrations/canaplia-gameplay-alpha33.json")) inputs.file(file("itsalive/src/main/resources/data/canaplia/canaplia_discovery/sources.json")) inputs.files(fileTree("itsalive/src/main/resources/assets/canaplia/lang") { include "*.json" }) + inputs.files(fileTree("itsalive/src/main/resources/assets/canaplia/textures") { include "**/*.png" }) inputs.files(fileTree("ambiance/src/main/resources/assets/ambiance/lang") { include "*.json" }) inputs.files( file("itsalive/src/main/resources/fabric.mod.json"), @@ -5341,15 +5342,20 @@ tasks.register("verifyCanapliaGameplay") { def jointRecipes = fileTree(new File(generated, "data/canaplia/recipe")) { include "*rolled_joint.json" }.files - def generatedTextures = fileTree(new File(generated, "assets/canaplia/textures")) { + def authoredTextures = fileTree(file("itsalive/src/main/resources/assets/canaplia/textures")) { include "**/*.png" }.files def cropState = new JsonSlurper().parse(new File(generated, "assets/canaplia/blockstates/hemp_crop.json")) def resinState = new JsonSlurper().parse(new File(generated, "assets/canaplia/blockstates/resin_block.json")) + def codexRecipe = new JsonSlurper().parse(new File(generated, "data/canaplia/recipe/codex.json")) + def requiredCodexKeys = [ + "screen.canaplia.codex.introduction", "screen.canaplia.codex.entry_number", + "screen.canaplia.codex.origin", "item.canaplia.codex_page" + ] def languageKeysMissing = ["fr_fr", "en_us", "ru_ru"].collectMany { locale -> def lang = new JsonSlurper().parse(file( "itsalive/src/main/resources/assets/canaplia/lang/${locale}.json")) - expectedVariants.collectMany { variant -> + def missing = expectedVariants.collectMany { variant -> [ "variant.canaplia.${variant}", "origin.canaplia.${variant}", @@ -5360,6 +5366,7 @@ tasks.register("verifyCanapliaGameplay") { "item.canaplia.${familyPath(variant, 'rolled_joint')}" ].findAll { key -> !lang.containsKey(key.toString()) }.collect { "${locale}:${it}" } } + missing + requiredCodexKeys.findAll { !lang.containsKey(it) }.collect { "${locale}:${it}" } } def accessibilityMissing = ["fr_fr", "en_us", "ru_ru"].collectMany { locale -> def lang = new JsonSlurper().parse(file( @@ -5384,6 +5391,16 @@ tasks.register("verifyCanapliaGameplay") { "itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaEffects.java").text def knowledge = file( "itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaKnowledgeData.java").text + def joint = file( + "itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/item/CanapliaJointItem.java").text + def resin = file( + "itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaResinBlock.java").text + def resinEntity = file( + "itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaResinBlockEntity.java").text + def codexDrops = file( + "itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaCodexDrops.java").text + def codexScreen = file( + "itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/client/CanapliaCodexScreen.java").text if (migration.issues != (36..43).toList() || migration.target?.modules != [ itsalive: "0.0.0-alpha.33", ambiance: "0.0.0-alpha.14", onlyfun: "0.0.0-alpha.20"] @@ -5395,7 +5412,7 @@ tasks.register("verifyCanapliaGameplay") { || migration.compatibility?.save_reset_required != false || migration.compatibility?.historical_registry_ids_changed != false || migration.compatibility?.pack_release_updated != false - || itsAliveManifest.custom?.sanctuary26?.data_version != 2 + || itsAliveManifest.custom?.sanctuary26?.data_version != 3 || itsAliveManifest.custom?.sanctuary26?.network_protocol != 4 || ambianceManifest.custom?.sanctuary26?.network_protocol != 5 || discovery.schema_version != 1 || discovery.sources.size() > 128 @@ -5406,16 +5423,27 @@ tasks.register("verifyCanapliaGameplay") { || !discoveryBlocks.containsAll(requiredDimensionalBlocks) || jointRecipes.size() != 16 || !new File(generated, "data/canaplia/recipe/codex.json").isFile() + || !new File(generated, "assets/canaplia/items/codex_page.json").isFile() + || codexRecipe.type != "minecraft:crafting_shaped" + || codexRecipe.pattern != [" P ", "PBP", " P "] + || codexRecipe.key?.P != "canaplia:codex_page" || cropState.variants.size() != 16 * 8 || resinState.variants.size() != 16 - || generatedTextures.size() != 16 * 15 + 1 - || generatedTextures.any { + || authoredTextures.size() != 224 + || authoredTextures.any { def image = javax.imageio.ImageIO.read(it) image == null || image.width != 16 || image.height != 16 } || !languageKeysMissing.isEmpty() || !accessibilityMissing.isEmpty() - || !content.contains("new ArrayList<>(65)") + || !content.contains("new ArrayList<>(66)") + || !joint.contains("ItemUtils.startUsingInstantly") + || !joint.contains("ParticleTypes.SMOKE") + || !resin.contains("Items.FLINT_AND_STEEL") + || !resin.contains("ParticleTypes.CAMPFIRE_COSY_SMOKE") + || !resinEntity.contains("CanapliaResinBlock.LIT") + || !codexDrops.contains("ServerLivingEntityEvents.AFTER_DEATH") + || !codexScreen.contains("extends BookViewScreen") || !harvesting.contains("NEIGHBOR_RADIUS = 1") || !effects.contains("ServerPlayConnectionEvents.DISCONNECT") || !knowledge.contains("unknown future keys survive round-trips") @@ -5427,10 +5455,11 @@ tasks.register("verifyCanapliaGameplay") { } } -tasks.register("verifyCanapliaAlpha208Release") { +tasks.register("verifyCanapliaAlpha209Release") { group = "verification" - description = "Checks the Sanctuary 26.2.0-alpha.208 Canaplia distribution release." + description = "Checks the Sanctuary 26.2.0-alpha.209 Canaplia gameplay and texture correction release." inputs.file(file("pack/migrations/26.2.0-alpha.207-canaplia-to-alpha.208.json")) + inputs.file(file("pack/migrations/26.2.0-alpha.208-canaplia-fixes-to-alpha.209.json")) inputs.file(file("pack/release.json")) inputs.file(file("pack/prism/modrinth.index.json")) inputs.file(file("pack/packwiz/pack.toml")) @@ -5438,6 +5467,8 @@ tasks.register("verifyCanapliaAlpha208Release") { doLast { def migration = new JsonSlurper().parse(file( "pack/migrations/26.2.0-alpha.207-canaplia-to-alpha.208.json")) + def fixMigration = new JsonSlurper().parse(file( + "pack/migrations/26.2.0-alpha.208-canaplia-fixes-to-alpha.209.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 @@ -5453,9 +5484,9 @@ tasks.register("verifyCanapliaAlpha208Release") { 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.208" + if (rootProject.pack_version != "26.2.0-alpha.209" || rootProject.ambiance_version != expectedTarget.ambiance - || rootProject.itsalive_version != expectedTarget.itsalive + || rootProject.itsalive_version != "0.0.0-alpha.34" || rootProject.onlyfun_version != expectedTarget.onlyfun || migration.source?.pack_version != "26.2.0-alpha.207" || migration.source?.modules != expectedSource @@ -5485,20 +5516,35 @@ tasks.register("verifyCanapliaAlpha208Release") { || migration.distribution?.jei?.release_type != "beta" || migration.distribution?.jei?.modrinth_version_id != "FQUVLzeD" || migration.distribution?.jei?.packwiz_and_prism_synchronized != true + || fixMigration.source?.pack_version != "26.2.0-alpha.208" + || fixMigration.source?.modules != [itsalive: "0.0.0-alpha.33"] + || fixMigration.target?.pack_version != "26.2.0-alpha.209" + || fixMigration.target?.modules != [itsalive: "0.0.0-alpha.34"] + || fixMigration.canaplia?.authored_textures_restored != 224 + || fixMigration.canaplia?.texture_authorization != "explicit_copyright_holder_request" + || fixMigration.canaplia?.rolled_joints_consumable != true + || fixMigration.canaplia?.resin_requires_ignition != true + || fixMigration.canaplia?.codex_uses_vanilla_book_screen != true + || fixMigration.canaplia?.codex_page_item != "canaplia:codex_page" + || fixMigration.compatibility?.legacy_burning_resins_migrated_to_lit != true + || fixMigration.compatibility?.itsalive_target_data_version != 3 + || fixMigration.compatibility?.itsalive_network_protocol != 4 + || 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.208.mrpack" + || release.modrinth?.primary_file != "sanctuary-26.2.0-alpha.209.mrpack" || prism.versionId != rootProject.pack_version - || !packwiz.contains('version = "26.2.0-alpha.208"') + || !packwiz.contains('version = "26.2.0-alpha.209"') || !packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.14.jar"') - || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.33.jar"') + || !packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.34.jar"') || !packwizIndex.contains('file = "mods/onlyfun-0.0.0-alpha.20.jar"') || packwizIndex.contains('file = "mods/ambiance-0.0.0-alpha.12.jar"') - || packwizIndex.contains('file = "mods/itsalive-0.0.0-alpha.31.jar"') + || 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 != "35353e18b1cf2a61339463447fce1f3e2f716b80" || jeiFiles[0].hashes?.sha512 != "aa7dca89026fea2293a2e25fa4a84faf0eeaa6407b7e84991e69626ff1ee0f9df9ba3a5e096cbf631d08842693b115653c5c8373e5ef3953318a892dbdc0a33d") { - throw new GradleException("The alpha.208 Canaplia distribution release is incomplete") + throw new GradleException("The alpha.209 Canaplia correction release is incomplete") } } } diff --git a/gradle.properties b/gradle.properties index 4240fac..18286e0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ redstoner_version=0.0.0-alpha.10 redstoner_lifecycle=active anotherworld_version=0.0.0-alpha.55 anotherworld_lifecycle=active -itsalive_version=0.0.0-alpha.33 +itsalive_version=0.0.0-alpha.34 itsalive_lifecycle=active ouch_version=0.0.0-alpha.9 ouch_lifecycle=active @@ -30,5 +30,5 @@ onlyfun_version=0.0.0-alpha.20 onlyfun_lifecycle=active sanctuary_version=0.0.0-alpha.117 sanctuary_lifecycle=active -pack_version=26.2.0-alpha.208 +pack_version=26.2.0-alpha.209 maven_group=fr.koka99cab.sanctuary26 diff --git a/itsalive/build.gradle b/itsalive/build.gradle index 9f3829b..75fc29b 100644 --- a/itsalive/build.gradle +++ b/itsalive/build.gradle @@ -52,19 +52,15 @@ sourceSets.main.resources.srcDir(generatedResources) sourceSets.main.resources.srcDir(generatedCanapliaResources) def canapliaVariants = [ - [key: "common", color: 0x5F9E55], [key: "tender", color: 0xA7D88B], - [key: "olive", color: 0x8A8C3B], [key: "dark", color: 0x384A42], - [key: "ashen", color: 0xA9B5B5], [key: "moss", color: 0x397B4B], - [key: "gold", color: 0xE4B83E], [key: "amber", color: 0xD57A2E], - [key: "bluish", color: 0x64A8C8], [key: "pink", color: 0xE889A8], - [key: "coral", color: 0xE16E62], [key: "purple", color: 0x8154A8], - [key: "indigo", color: 0x494E9C], [key: "varieg", color: 0xD6E26C], - [key: "lunar", color: 0xC7D8F2], [key: "ember", color: 0xD94B31] + [key: "common"], [key: "tender"], [key: "olive"], [key: "dark"], + [key: "ashen"], [key: "moss"], [key: "gold"], [key: "amber"], + [key: "bluish"], [key: "pink"], [key: "coral"], [key: "purple"], + [key: "indigo"], [key: "varieg"], [key: "lunar"], [key: "ember"] ] tasks.register("generateCanapliaResources") { group = "build" - description = "Generates the GPL Canaplia models, loot, recipes and sixteen original palettes." + description = "Generates models, loot and recipes around the restored authored Canaplia sprites." outputs.dir(generatedCanapliaResources) doLast { @@ -75,21 +71,12 @@ tasks.register("generateCanapliaResources") { target.parentFile.mkdirs() target.text = JsonOutput.prettyPrint(JsonOutput.toJson(value)) + "\n" } - def writePng = { String relativePath, Closure painter -> - def target = new File(root, relativePath) - target.parentFile.mkdirs() - def image = new java.awt.image.BufferedImage(16, 16, java.awt.image.BufferedImage.TYPE_INT_ARGB) - painter(image) - ImageIO.write(image, "png", target) - } - def argb = { int rgb -> (0xFF000000L | (rgb & 0xFFFFFF)) as int } - def shade = { int rgb, double factor -> - int r = Math.max(0, Math.min(255, Math.round(((rgb >> 16) & 0xFF) * factor) as int)) - int g = Math.max(0, Math.min(255, Math.round(((rgb >> 8) & 0xFF) * factor) as int)) - int b = Math.max(0, Math.min(255, Math.round((rgb & 0xFF) * factor) as int)) - (r << 16) | (g << 8) | b - } def path = { String key, String family -> key == "common" ? family : "${key}_${family}" } + def cropTexture = { String key, int age -> + if (age == 7) return key == "common" ? "hemp_tall_bottom" : "hemp_tall_bottom_${key}" + key == "common" ? "hemp_stage_${age}" : "hemp_stage_${age}_${key}" + } + def topTexture = { String key -> key == "common" ? "hemp_tall_top" : "hemp_tall_top_${key}" } def itemDefinition = { String itemPath, String modelPath -> writeJson("assets/canaplia/items/${itemPath}.json", [model: [type: "minecraft:model", model: modelPath]]) } @@ -104,32 +91,13 @@ tasks.register("generateCanapliaResources") { def resinVariants = [:] canapliaVariants.each { variant -> String key = variant.key - int color = variant.color as int (0..7).each { age -> cropVariants["age=${age},variant=${key}"] = [model: "canaplia:block/hemp_crop_${key}_stage${age}"] topVariants["age=${age},variant=${key}"] = [model: "canaplia:block/hemp_top_${key}_stage${Math.max(5, age)}"] writeJson("assets/canaplia/models/block/hemp_crop_${key}_stage${age}.json", [ - parent: "minecraft:block/crop", textures: [crop: "canaplia:block/hemp_crop_${key}_stage${age}"]]) + parent: "minecraft:block/crop", textures: [crop: "canaplia:block/${cropTexture(key, age)}"]]) if (age >= 5) writeJson("assets/canaplia/models/block/hemp_top_${key}_stage${age}.json", [ - parent: "minecraft:block/crop", textures: [crop: "canaplia:block/hemp_top_${key}_stage${age}"]]) - writePng("assets/canaplia/textures/block/hemp_crop_${key}_stage${age}.png") { image -> - int stem = argb(shade(0x4E8A47, 0.72 + age * 0.045)) - int leaf = argb(shade(0x69A85C, 0.72 + age * 0.04)) - int top = 15 - Math.max(2, age + 3) - for (int y = top; y < 16; y++) { image.setRGB(7, y, stem); image.setRGB(8, y, stem) } - if (age >= 2) { image.setRGB(5, 12, leaf); image.setRGB(6, 11, leaf); image.setRGB(9, 10, leaf); image.setRGB(10, 11, leaf) } - if (age >= 4) { image.setRGB(4, 9, leaf); image.setRGB(5, 10, leaf); image.setRGB(10, 8, leaf); image.setRGB(11, 9, leaf) } - if (age >= 6) { image.setRGB(6, top, argb(shade(color, 0.78))); image.setRGB(7, top - 1, argb(color)); image.setRGB(8, top - 1, argb(shade(color, 1.12))); image.setRGB(9, top, argb(shade(color, 0.82))) } - } - if (age >= 5) writePng("assets/canaplia/textures/block/hemp_top_${key}_stage${age}.png") { image -> - int stem = argb(0x4E8A47) - for (int y = 7; y < 16; y++) { image.setRGB(7, y, stem); image.setRGB(8, y, stem) } - image.setRGB(5, 10, argb(0x69A85C)); image.setRGB(6, 9, argb(0x69A85C)); image.setRGB(9, 8, argb(0x69A85C)); image.setRGB(10, 9, argb(0x69A85C)) - int radius = age == 7 ? 2 : 1 - for (int y = 2; y <= 4 + radius; y++) for (int x = 7 - radius; x <= 8 + radius; x++) { - if (Math.abs(x - 7.5) + Math.abs(y - 4.0) <= radius + 1.5) image.setRGB(x, y, argb(shade(color, 0.82 + (x + y) % 3 * 0.12))) - } - } + parent: "minecraft:block/crop", textures: [crop: "canaplia:block/${topTexture(key)}"]]) } String seed = path(key, "hemp_seeds") @@ -140,25 +108,9 @@ tasks.register("generateCanapliaResources") { writeJson("assets/canaplia/models/item/${resin}.json", [parent: "canaplia:block/resin_block_${key}"]) itemDefinition(resin, "canaplia:item/${resin}") writeJson("assets/canaplia/models/block/resin_block_${key}.json", [ - parent: "minecraft:block/cube_all", textures: [all: "canaplia:block/resin_block_${key}"]]) + parent: "minecraft:block/cube_all", textures: [all: "canaplia:block/${resin}"]]) resinVariants["variant=${key}"] = [model: "canaplia:block/resin_block_${key}"] - writePng("assets/canaplia/textures/item/${seed}.png") { image -> - [[7,6],[9,7],[6,9],[9,10],[7,12]].eachWithIndex { point, index -> image.setRGB(point[0], point[1], argb(shade(color, 0.65 + index * 0.10))) } - } - writePng("assets/canaplia/textures/item/${bud}.png") { image -> - for (int y = 4; y <= 12; y++) for (int x = 4; x <= 11; x++) { - if (Math.pow((x - 7.5) / 4.0, 2) + Math.pow((y - 8.0) / 5.0, 2) <= 1.0) image.setRGB(x, y, argb(shade(color, 0.72 + (x + y) % 4 * 0.11))) - } - image.setRGB(7, 13, argb(0x4E8A47)); image.setRGB(8, 13, argb(0x4E8A47)) - } - writePng("assets/canaplia/textures/item/${joint}.png") { image -> - for (int i = 0; i < 9; i++) { image.setRGB(3 + i, 12 - i, argb(i < 2 ? color : 0xD8C6A0)); if (i > 1 && i < 8) image.setRGB(4 + i, 12 - i, argb(0xB39A72)) } - } - writePng("assets/canaplia/textures/block/resin_block_${key}.png") { image -> - for (int y = 0; y < 16; y++) for (int x = 0; x < 16; x++) image.setRGB(x, y, argb(shade(color, 0.62 + ((x / 4 + y / 4) % 3) * 0.13))) - } - writeJson("data/canaplia/recipe/${joint}.json", [ type: "minecraft:crafting_shapeless", category: "misc", ingredients: ["minecraft:paper", "canaplia:${bud}"], result: [id: "canaplia:${joint}"]]) @@ -201,15 +153,13 @@ tasks.register("generateCanapliaResources") { writeJson("data/c/tags/item/seeds.json", [replace: false, values: seedIds]) writeJson("data/canaplia/tags/item/hemp_buds.json", [replace: false, values: budIds]) - generatedItem("codex") + itemDefinition("codex", "minecraft:item/book") + itemDefinition("codex_page", "minecraft:item/paper") writeJson("data/canaplia/recipe/codex.json", [ - type: "minecraft:crafting_shapeless", category: "misc", - ingredients: ["minecraft:book", "minecraft:green_dye"], result: [id: "canaplia:codex"]]) - writePng("assets/canaplia/textures/item/codex.png") { image -> - for (int y = 2; y < 14; y++) for (int x = 2; x < 14; x++) image.setRGB(x, y, argb(x < 8 ? 0x6D8A55 : 0x789A61)) - for (int y = 3; y < 13; y++) image.setRGB(7, y, argb(0xD8CDA6)) - image.setRGB(5, 6, argb(0xE4B83E)); image.setRGB(10, 9, argb(0x8154A8)) - } + type: "minecraft:crafting_shaped", category: "misc", + pattern: [" P ", "PBP", " P "], + key: [P: "canaplia:codex_page", B: "minecraft:book"], + result: [id: "canaplia:codex"]]) } } @@ -606,7 +556,7 @@ tasks.register("verifyItsAlive") { def climateSource = file("src/main/java/fr/koka99cab/sanctuary26/itsalive/agriculture/ClimateCropForaging.java").text def pineappleSource = file("src/main/java/fr/koka99cab/sanctuary26/itsalive/agriculture/PineappleItem.java").text def worldgenSource = file("src/main/java/fr/koka99cab/sanctuary26/itsalive/agriculture/ItsAliveAgricultureWorldGeneration.java").text - if (project.version.toString() != "0.0.0-alpha.33" + if (project.version.toString() != "0.0.0-alpha.34" || climateMigration.target?.pack_version != "26.2.0-alpha.157" || climateMigration.target?.modules?.itsalive != "0.0.0-alpha.24" || !climateSource.contains("PlayerBlockBreakEvents.AFTER.register") @@ -1363,7 +1313,7 @@ tasks.register("verifyCulinaryReliability") { } } } - if (project.version.toString() != "0.0.0-alpha.33" + if (project.version.toString() != "0.0.0-alpha.34" || migration.target?.modules?.itsalive != "0.0.0-alpha.28" || migration.culinary_fixes?.food_press_contents_destroyed_on_break != true || migration.culinary_fixes?.comparator_contract?.blocks?.size() != 6 @@ -1401,7 +1351,7 @@ tasks.register("verifyCauldronBatching") { def recipe = file("src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/recipe/CulinaryProcessRecipe.java").text def cauldron = file("src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/block/entity/CookingCauldronBlockEntity.java").text def timed = file("src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/block/entity/AbstractTimedCulinaryBlockEntity.java").text - if (project.version.toString() != "0.0.0-alpha.33" + if (project.version.toString() != "0.0.0-alpha.34" || migration.target?.modules?.itsalive != "0.0.0-alpha.29" || migration.cauldron_batches?.logical_stack_limit != 64 || migration.cauldron_batches?.identity != "same_item_same_components" @@ -1439,7 +1389,7 @@ tasks.register("verifyFermentationBarrelAutomation") { def partialMatching = file("src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/recipe/CulinaryPartialMatching.java").text def blockstate = new JsonSlurper().parse( file("src/main/resources/assets/itsalive/blockstates/fermentation_barrel.json")) - if (project.version.toString() != "0.0.0-alpha.33" + if (project.version.toString() != "0.0.0-alpha.34" || migration.source?.modules?.itsalive != "0.0.0-alpha.29" || migration.target?.modules?.itsalive != "0.0.0-alpha.30" || migration.fermentation_barrel?.maximum_units_per_input_slot != 1 @@ -1487,7 +1437,7 @@ tasks.register("verifyCulinaryLecternRelease") { [(locale): new JsonSlurper().parse(file( "src/main/resources/assets/itsalive/lang/${locale}.json"))] } - if (project.version.toString() != "0.0.0-alpha.33" + if (project.version.toString() != "0.0.0-alpha.34" || migration.target?.modules?.itsalive != "0.0.0-alpha.31" || migration.culinary_lectern?.book_tag != "minecraft:lectern_books" || migration.culinary_lectern?.owner_catalog_shared_while_placed != true diff --git a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/ItsAliveMod.java b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/ItsAliveMod.java index 2e0622e..6b2c5a8 100644 --- a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/ItsAliveMod.java +++ b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/ItsAliveMod.java @@ -13,7 +13,7 @@ import org.slf4j.LoggerFactory; public final class ItsAliveMod implements ModInitializer { public static final String MOD_ID = "itsalive"; public static final String DISPLAY_NAME = "It's Alive !"; - public static final int CURRENT_DATA_VERSION = 2; + public static final int CURRENT_DATA_VERSION = 3; public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); public ItsAliveMod() { diff --git a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaCodexDrops.java b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaCodexDrops.java new file mode 100644 index 0000000..efc9571 --- /dev/null +++ b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaCodexDrops.java @@ -0,0 +1,41 @@ +package fr.koka99cab.sanctuary26.itsalive.canaplia; + +import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.monster.Enemy; +import net.minecraft.world.item.ItemStack; + +/** Bounded player-kill drops that make the Codex and its loose pages survival rewards. */ +public final class CanapliaCodexDrops { + public static final int PAGE_DROP_DENOMINATOR = 12; + public static final int CODEX_DROP_DENOMINATOR = 256; + private static boolean initialized; + + private CanapliaCodexDrops() {} + + public static void initialize() { + if (initialized) return; + initialized = true; + ServerLivingEntityEvents.AFTER_DEATH.register((entity, damageSource) -> { + if (!(entity instanceof Enemy) + || !(entity.level() instanceof ServerLevel level) + || !(damageSource.getEntity() instanceof ServerPlayer)) return; + + if (dropsPage(level.getRandom().nextInt(PAGE_DROP_DENOMINATOR))) { + entity.spawnAtLocation(level, new ItemStack(CanapliaContent.CODEX_PAGE)); + } + if (dropsCodex(level.getRandom().nextInt(CODEX_DROP_DENOMINATOR))) { + entity.spawnAtLocation(level, new ItemStack(CanapliaContent.CODEX)); + } + }); + } + + static boolean dropsPage(int roll) { + return roll == 0; + } + + static boolean dropsCodex(int roll) { + return roll == 0; + } +} diff --git a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaContent.java b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaContent.java index f876bef..8b7efcc 100644 --- a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaContent.java +++ b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaContent.java @@ -36,6 +36,8 @@ public final class CanapliaContent { key -> new CanapliaResinBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.HONEY_BLOCK).setId(key))); public static final BlockEntityType RESIN_BLOCK_ENTITY_TYPE = registerResinBlockEntity(); private static final Map FAMILIES = registerFamilies(); + public static final Item CODEX_PAGE = registerItem("codex_page", key -> + new Item(new Item.Properties().setId(key))); public static final Item CODEX = registerItem("codex", key -> new CanapliaCodexItem(new Item.Properties().stacksTo(1).setId(key))); private static final List CREATIVE_ITEMS = createCreativeItems(); @@ -92,7 +94,7 @@ public final class CanapliaContent { } private static List createCreativeItems() { - List items = new ArrayList<>(65); + List items = new ArrayList<>(66); for (CanapliaVariantKey variant : CanapliaVariantKey.values()) { Family family = family(variant); items.add(family.seeds()); @@ -100,6 +102,7 @@ public final class CanapliaContent { items.add(family.resin()); items.add(family.joint()); } + items.add(CODEX_PAGE); items.add(CODEX); return List.copyOf(items); } diff --git a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaFoundation.java b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaFoundation.java index 514b70b..c0901d2 100644 --- a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaFoundation.java +++ b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaFoundation.java @@ -5,7 +5,7 @@ import fr.koka99cab.sanctuary26.itsalive.ItsAliveMod; /** Initializes the complete compatibility implementation and its public module boundaries. */ public final class CanapliaFoundation { - public static final int FOUNDATION_VERSION = 2; + public static final int FOUNDATION_VERSION = 3; private static boolean initialized; private CanapliaFoundation() { @@ -21,6 +21,7 @@ public final class CanapliaFoundation { throw new IllegalStateException("Unsupported Ambiance visual contract"); } CanapliaContent.register(); + CanapliaCodexDrops.initialize(); CanapliaDiscoverySources.register(); CanapliaDiscovery.initialize(); CanapliaHarvestService.initialize(); diff --git a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaHempCropBlock.java b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaHempCropBlock.java index ad13549..1a32bae 100644 --- a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaHempCropBlock.java +++ b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaHempCropBlock.java @@ -28,7 +28,7 @@ import net.minecraft.world.phys.BlockHitResult; /** Shared seven-age crop retaining one of the sixteen stable variant keys in block state. */ public final class CanapliaHempCropBlock extends CropBlock { public static final EnumProperty VARIANT = EnumProperty.create("variant", CanapliaVariantKey.class); - public static final int UPPER_START_AGE = 5; + public static final int UPPER_START_AGE = 7; private static final int HARVEST_RESET_AGE = 3; public CanapliaHempCropBlock(BlockBehaviour.Properties properties) { diff --git a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaResinBlock.java b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaResinBlock.java index 9f43f6d..8fd1a4d 100644 --- a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaResinBlock.java +++ b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaResinBlock.java @@ -3,7 +3,20 @@ package fr.koka99cab.sanctuary26.itsalive.canaplia.block; import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaContent; import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaVariantKey; import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.stats.Stats; +import net.minecraft.util.RandomSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.Projectile; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; @@ -14,15 +27,21 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.phys.BlockHitResult; /** Shared resin block with a bounded, server-ticked aura. */ public final class CanapliaResinBlock extends Block implements EntityBlock { + public static final BooleanProperty LIT = BlockStateProperties.LIT; public static final EnumProperty VARIANT = EnumProperty.create("variant", CanapliaVariantKey.class); public CanapliaResinBlock(BlockBehaviour.Properties properties) { super(properties); - registerDefaultState(defaultBlockState().setValue(VARIANT, CanapliaVariantKey.COMMON)); + registerDefaultState(defaultBlockState().setValue(LIT, false) + .setValue(VARIANT, CanapliaVariantKey.COMMON)); } @Override @@ -32,13 +51,83 @@ public final class CanapliaResinBlock extends Block implements EntityBlock { @Override public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { - return type == CanapliaContent.RESIN_BLOCK_ENTITY_TYPE + return !level.isClientSide() && type == CanapliaContent.RESIN_BLOCK_ENTITY_TYPE ? (tickerLevel, pos, tickerState, blockEntity) -> CanapliaResinBlockEntity.tick(tickerLevel, pos, tickerState, (CanapliaResinBlockEntity) blockEntity) : null; } + @Override + protected InteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, + Player player, InteractionHand hand, BlockHitResult hit) { + if (state.getValue(LIT) || !isIgnitionItem(stack)) return InteractionResult.TRY_WITH_EMPTY_HAND; + if (level.isClientSide()) return InteractionResult.SUCCESS; + + igniteWithItem((ServerLevel) level, pos, state, player, hand); + return InteractionResult.SUCCESS_SERVER; + } + + @Override + protected void onProjectileHit(Level level, BlockState state, BlockHitResult hit, Projectile projectile) { + if (!(level instanceof ServerLevel serverLevel) || state.getValue(LIT) || !projectile.isOnFire()) return; + BlockPos pos = hit.getBlockPos(); + if (projectile.mayInteract(serverLevel, pos)) { + ignite(serverLevel, pos, state, SoundEvents.FIRECHARGE_USE, 0.9F); + } + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + if (!state.getValue(LIT)) return; + if (random.nextInt(10) == 0) { + level.playLocalSound(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, + SoundEvents.CAMPFIRE_CRACKLE, SoundSource.BLOCKS, + 0.35F + random.nextFloat() * 0.3F, 0.6F + random.nextFloat() * 0.4F, false); + } + spawnSmoke(level, pos, random); + if (random.nextBoolean()) spawnSmoke(level, pos, random); + } + + private static void spawnSmoke(Level level, BlockPos pos, RandomSource random) { + level.addParticle(ParticleTypes.CAMPFIRE_COSY_SMOKE, + pos.getX() + 0.5D, pos.getY() + 1.0D, pos.getZ() + 0.5D, + random.nextDouble() * 0.01D, random.nextDouble() * 0.02D, + random.nextDouble() * 0.01D); + } + + private static boolean isIgnitionItem(ItemStack stack) { + return stack.is(Items.FLINT_AND_STEEL) || stack.is(Items.FIRE_CHARGE); + } + + private static void igniteWithItem(ServerLevel level, BlockPos pos, BlockState state, + Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + if (stack.is(Items.FLINT_AND_STEEL)) { + if (player instanceof ServerPlayer serverPlayer) { + stack.hurtAndBreak(1, level, serverPlayer, item -> {}); + } + player.awardStat(Stats.ITEM_USED.get(Items.FLINT_AND_STEEL)); + ignite(level, pos, state, SoundEvents.FLINTANDSTEEL_USE, 1.0F); + return; + } + stack.consume(1, player); + player.awardStat(Stats.ITEM_USED.get(Items.FIRE_CHARGE)); + ignite(level, pos, state, SoundEvents.FIRECHARGE_USE, 0.9F); + } + + private static void ignite(ServerLevel level, BlockPos pos, BlockState state, + SoundEvent sound, float pitch) { + BlockState litState = state.setValue(LIT, true); + level.setBlock(pos, litState, Block.UPDATE_ALL); + if (level.getBlockEntity(pos) instanceof CanapliaResinBlockEntity blockEntity) { + blockEntity.light(); + } + level.playSound(null, pos, sound, SoundSource.BLOCKS, 1.0F, + pitch + level.getRandom().nextFloat() * 0.2F); + level.gameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Context.of(litState)); + } + @Override protected ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state, boolean includeData) { return new ItemStack(CanapliaContent.family(state.getValue(VARIANT)).resin()); @@ -46,6 +135,6 @@ public final class CanapliaResinBlock extends Block implements EntityBlock { @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(VARIANT); + builder.add(LIT, VARIANT); } } diff --git a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaResinBlockEntity.java b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaResinBlockEntity.java index 3b64876..a7119cf 100644 --- a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaResinBlockEntity.java +++ b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/block/CanapliaResinBlockEntity.java @@ -3,22 +3,29 @@ package fr.koka99cab.sanctuary26.itsalive.canaplia.block; import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaContent; import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaEffects; import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.level.storage.ValueInput; import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.phys.AABB; /** Persisted ninety-second resin aura; the source variant lives in the block state. */ public final class CanapliaResinBlockEntity extends BlockEntity { - public static final int DATA_VERSION = 1; + public static final int DATA_VERSION = 2; public static final int DEFAULT_BURN_TICKS = 90 * 20; private static final int AURA_INTERVAL = 40; private static final double AURA_RADIUS = 4.0D; - private int remainingBurnTicks = DEFAULT_BURN_TICKS; + private int remainingBurnTicks; + private boolean migrateLegacyBurn; public CanapliaResinBlockEntity(BlockPos pos, BlockState state) { super(CanapliaContent.RESIN_BLOCK_ENTITY_TYPE, pos, state); @@ -26,8 +33,16 @@ public final class CanapliaResinBlockEntity extends BlockEntity { public static void tick(Level level, BlockPos pos, BlockState state, CanapliaResinBlockEntity entity) { if (!(level instanceof ServerLevel serverLevel)) return; + if (entity.migrateLegacyBurn) { + entity.migrateLegacyBurn = false; + if (!state.getValue(CanapliaResinBlock.LIT) && entity.remainingBurnTicks > 0) { + state = state.setValue(CanapliaResinBlock.LIT, true); + serverLevel.setBlock(pos, state, Block.UPDATE_ALL); + } + } + if (!state.getValue(CanapliaResinBlock.LIT)) return; if (entity.remainingBurnTicks <= 0) { - serverLevel.removeBlock(pos, false); + extinguishAndConsume(serverLevel, pos, state); return; } if (entity.remainingBurnTicks % AURA_INTERVAL == 0) { @@ -37,10 +52,16 @@ public final class CanapliaResinBlockEntity extends BlockEntity { } } entity.remainingBurnTicks--; - if (entity.remainingBurnTicks <= 0) serverLevel.removeBlock(pos, false); + if (entity.remainingBurnTicks <= 0) extinguishAndConsume(serverLevel, pos, state); else if (entity.remainingBurnTicks % 20 == 0) entity.setChanged(); } + public void light() { + remainingBurnTicks = DEFAULT_BURN_TICKS; + migrateLegacyBurn = false; + setChanged(); + } + public int remainingBurnTicks() { return remainingBurnTicks; } @@ -55,7 +76,18 @@ public final class CanapliaResinBlockEntity extends BlockEntity { @Override protected void loadAdditional(ValueInput input) { super.loadAdditional(input); + int dataVersion = input.getIntOr("data_version", 1); remainingBurnTicks = Math.clamp( - input.getIntOr("remaining_burn_ticks", DEFAULT_BURN_TICKS), 0, DEFAULT_BURN_TICKS); + input.getIntOr("remaining_burn_ticks", dataVersion < DATA_VERSION ? DEFAULT_BURN_TICKS : 0), + 0, DEFAULT_BURN_TICKS); + migrateLegacyBurn = dataVersion < DATA_VERSION && remainingBurnTicks > 0; + } + + private static void extinguishAndConsume(ServerLevel level, BlockPos pos, BlockState state) { + level.playSound(null, pos, SoundEvents.FIRE_EXTINGUISH, SoundSource.BLOCKS, 0.8F, 1.0F); + level.sendParticles(ParticleTypes.SMOKE, pos.getX() + 0.5D, pos.getY() + 0.85D, + pos.getZ() + 0.5D, 20, 0.25D, 0.15D, 0.25D, 0.01D); + level.setBlock(pos, Blocks.AIR.defaultBlockState(), Block.UPDATE_ALL); + level.gameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Context.of(state)); } } diff --git a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/client/CanapliaCodexScreen.java b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/client/CanapliaCodexScreen.java index d9bf551..06d3865 100644 --- a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/client/CanapliaCodexScreen.java +++ b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/client/CanapliaCodexScreen.java @@ -2,82 +2,58 @@ package fr.koka99cab.sanctuary26.itsalive.canaplia.client; import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaVariantKey; import fr.koka99cab.sanctuary26.itsalive.network.CanapliaCodexPayload; -import net.minecraft.client.gui.GuiGraphicsExtractor; -import net.minecraft.client.gui.components.Button; -import net.minecraft.client.gui.screens.Screen; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.screens.inventory.BookViewScreen; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; -/** Compact two-page personal/shared catalogue with progressively revealed hints. */ -public final class CanapliaCodexScreen extends Screen { - private static final int ENTRIES_PER_PAGE = 8; - private final Screen parent; - private final CanapliaCodexPayload snapshot; - private int page; - - public CanapliaCodexScreen(Screen parent, CanapliaCodexPayload snapshot) { - super(Component.translatable("screen.canaplia.codex.title")); - this.parent = parent; - this.snapshot = snapshot; +/** Vanilla book presentation of the server-authored Canaplia catalogue. */ +public final class CanapliaCodexScreen extends BookViewScreen { + public CanapliaCodexScreen(CanapliaCodexPayload snapshot) { + super(new BookAccess(pages(snapshot))); } - @Override - protected void init() { - int y = Math.max(6, height - 28); - addRenderableWidget(Button.builder(Component.literal("‹"), button -> changePage(-1)) - .bounds(width / 2 - 104, y, 24, 20).build()).active = page > 0; - addRenderableWidget(Button.builder(Component.translatable("gui.done"), button -> onClose()) - .bounds(width / 2 - 76, y, 152, 20).build()); - addRenderableWidget(Button.builder(Component.literal("›"), button -> changePage(1)) - .bounds(width / 2 + 80, y, 24, 20).build()).active = page < 1; - } - - private void changePage(int delta) { - page = Math.clamp(page + delta, 0, 1); - rebuildWidgets(); - } - - @Override - public void extractRenderState(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float tickDelta) { - graphics.fill(width / 2 - 172, 5, width / 2 + 172, height - 34, 0xD0182118); - graphics.centeredText(font, title, width / 2, 12, 0xFFE8F1CF); - graphics.centeredText(font, Component.translatable("screen.canaplia.codex.page", page + 1, 2), - width / 2, 25, 0xFF9DB886); - int start = page * ENTRIES_PER_PAGE; - int y = 43; + private static List pages(CanapliaCodexPayload snapshot) { + List pages = new ArrayList<>(CanapliaVariantKey.values().length + 1); + pages.add(Component.translatable("screen.canaplia.codex.introduction")); CanapliaVariantKey[] variants = CanapliaVariantKey.values(); - for (int index = start; index < Math.min(start + ENTRIES_PER_PAGE, variants.length); index++) { - drawEntry(graphics, variants[index], index, y); - y += 24; + for (int index = 0; index < variants.length; index++) { + pages.add(variantPage(snapshot, variants[index], index)); } - super.extractRenderState(graphics, mouseX, mouseY, tickDelta); + return List.copyOf(pages); } - private void drawEntry(GuiGraphicsExtractor graphics, CanapliaVariantKey variant, int index, int y) { + private static Component variantPage(CanapliaCodexPayload snapshot, + CanapliaVariantKey variant, int index) { boolean personal = bit(snapshot.personalMask(), index); boolean shared = bit(snapshot.sharedMask(), index); boolean originHint = bit(snapshot.originHintMask(), index); boolean conditionHint = bit(snapshot.conditionHintMask(), index); - int x = width / 2 - 156; - int color = personal ? 0xFFF0F4D7 : shared ? 0xFF9BA697 : 0xFF566056; - Component name = personal + + MutableComponent page = Component.translatable("screen.canaplia.codex.entry_number", index + 1) + .withStyle(ChatFormatting.DARK_GRAY).append("\n\n"); + if (!personal && !shared) { + return page.append(Component.translatable("screen.canaplia.codex.hidden") + .withStyle(ChatFormatting.GRAY)); + } + + page.append((personal ? Component.translatable("variant.canaplia." + variant.key()) - : shared ? Component.translatable("screen.canaplia.codex.silhouette") - : Component.translatable("screen.canaplia.codex.hidden"); - graphics.text(font, name, x, y, color, false); + : Component.translatable("screen.canaplia.codex.silhouette")) + .withStyle(personal ? ChatFormatting.DARK_GREEN : ChatFormatting.GRAY)); if (personal || originHint) { - graphics.text(font, Component.translatable("origin.canaplia." + variant.key()), - x + 104, y, 0xFF9DB886, false); + page.append("\n\n").append(Component.translatable("screen.canaplia.codex.origin", + Component.translatable("origin.canaplia." + variant.key()))); } - if (conditionHint || personal) { - graphics.text(font, Component.translatable("hint.canaplia." + variant.key()), - x + 8, y + 11, personal ? 0xFFBFC9AC : 0xFF75836D, false); + if (personal || conditionHint) { + page.append("\n\n").append(Component.translatable("hint.canaplia." + variant.key())); } + return page; } - private static boolean bit(int mask, int index) { return (mask & (1 << index)) != 0; } - - @Override - public void onClose() { - if (minecraft != null) minecraft.gui.setScreen(parent); + private static boolean bit(int mask, int index) { + return (mask & (1 << index)) != 0; } } diff --git a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/item/CanapliaJointItem.java b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/item/CanapliaJointItem.java index 691d4f3..e7deba7 100644 --- a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/item/CanapliaJointItem.java +++ b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/item/CanapliaJointItem.java @@ -3,13 +3,18 @@ package fr.koka99cab.sanctuary26.itsalive.canaplia.item; import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaEffects; import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaKnowledge; import fr.koka99cab.sanctuary26.itsalive.canaplia.CanapliaVariantKey; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; import net.minecraft.world.item.ItemUseAnimation; import net.minecraft.world.level.Level; @@ -29,8 +34,7 @@ public final class CanapliaJointItem extends Item { @Override public InteractionResult use(Level level, Player player, InteractionHand hand) { - player.startUsingItem(hand); - return InteractionResult.CONSUME; + return ItemUtils.startUsingInstantly(level, player, hand); } @Override @@ -38,14 +42,22 @@ public final class CanapliaJointItem extends Item { if (!level.isClientSide() && consumer instanceof ServerPlayer player) { CanapliaKnowledge.discover(player, variant, "consumption"); CanapliaEffects.consume(player, variant); - if (!player.hasInfiniteMaterials()) stack.shrink(1); + level.playSound(null, consumer.getX(), consumer.getY(), consumer.getZ(), + SoundEvents.SMOKER_SMOKE, SoundSource.PLAYERS, 0.35F, + 0.9F + level.getRandom().nextFloat() * 0.2F); + if (level instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(ParticleTypes.SMOKE, consumer.getX(), + consumer.getY() + consumer.getBbHeight() * 0.6D, consumer.getZ(), + 8, 0.12D, 0.12D, 0.12D, 0.01D); + } + stack.consume(1, consumer); } return stack; } @Override public ItemUseAnimation getUseAnimation(ItemStack stack) { - return ItemUseAnimation.TOOT_HORN; + return ItemUseAnimation.DRINK; } @Override diff --git a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/client/ItsAliveClient.java b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/client/ItsAliveClient.java index b28ec06..4498ad2 100644 --- a/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/client/ItsAliveClient.java +++ b/itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/client/ItsAliveClient.java @@ -52,7 +52,7 @@ public final class ItsAliveClient implements ClientModInitializer { context.client().execute(() -> CulinaryRecipeBookClient.open(payload))); ClientPlayNetworking.registerGlobalReceiver(CanapliaCodexPayload.ID, (payload, context) -> context.client().execute(() -> context.client().gui.setScreen( - new CanapliaCodexScreen(context.client().gui.screen(), payload)))); + new CanapliaCodexScreen(payload)))); ClientTickEvents.END_CLIENT_TICK.register(client -> VomiterOverlayState.tick()); ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> VomiterOverlayState.clear()); ModelLayerRegistry.registerModelLayer(ButterflyModel.LAYER_LOCATION, ButterflyModel::createBodyLayer); diff --git a/itsalive/src/main/resources/assets/canaplia/lang/en_us.json b/itsalive/src/main/resources/assets/canaplia/lang/en_us.json index f97fa51..1c23c29 100644 --- a/itsalive/src/main/resources/assets/canaplia/lang/en_us.json +++ b/itsalive/src/main/resources/assets/canaplia/lang/en_us.json @@ -2,6 +2,9 @@ "description.canaplia": "Complete Canaplia gameplay: sixteen plants, server-authoritative discovery, hybrids, effects and an Ambiance-owned visual layer.", "screen.canaplia.codex.title": "Canaplia Codex", "screen.canaplia.codex.page": "Page %s / %s", + "screen.canaplia.codex.introduction": "CANAPLIA CODEX\n\nSlay monsters to recover scattered pages and, very rarely, a complete Codex.\n\nGrow and discover varieties to fill its pages.", + "screen.canaplia.codex.entry_number": "Entry %s", + "screen.canaplia.codex.origin": "Origin: %s", "screen.canaplia.codex.hidden": "Undiscovered", "screen.canaplia.codex.silhouette": "Known silhouette", "message.canaplia.discovered": "Canaplia discovered: %s", @@ -10,6 +13,7 @@ "block.canaplia.hemp_top": "Canaplia Plant Top", "block.canaplia.resin_block": "Canaplia Resin Block", "item.canaplia.codex": "Canaplia Codex", + "item.canaplia.codex_page": "Canaplia Page", "variant.canaplia.common": "Common", "origin.canaplia.common": "Wild", "hint.canaplia.common": "Search ordinary Overworld vegetation.", diff --git a/itsalive/src/main/resources/assets/canaplia/lang/fr_fr.json b/itsalive/src/main/resources/assets/canaplia/lang/fr_fr.json index 899780a..b56916b 100644 --- a/itsalive/src/main/resources/assets/canaplia/lang/fr_fr.json +++ b/itsalive/src/main/resources/assets/canaplia/lang/fr_fr.json @@ -2,6 +2,9 @@ "description.canaplia": "Gameplay Canaplia complet : seize plantes, découvertes, hybrides et effets autoritaires côté serveur, avec une couche visuelle gérée par Ambiance.", "screen.canaplia.codex.title": "Codex Canaplia", "screen.canaplia.codex.page": "Page %s / %s", + "screen.canaplia.codex.introduction": "CODEX CANAPLIA\n\nTuez des monstres pour retrouver des pages éparses et, très rarement, un Codex complet.\n\nCultivez et découvrez les variétés pour remplir ses pages.", + "screen.canaplia.codex.entry_number": "Entrée %s", + "screen.canaplia.codex.origin": "Origine : %s", "screen.canaplia.codex.hidden": "Non découverte", "screen.canaplia.codex.silhouette": "Silhouette connue", "message.canaplia.discovered": "Canaplia découverte : %s", @@ -10,6 +13,7 @@ "block.canaplia.hemp_top": "Sommet de Canaplia", "block.canaplia.resin_block": "Bloc de résine Canaplia", "item.canaplia.codex": "Codex Canaplia", + "item.canaplia.codex_page": "Page de Canaplia", "variant.canaplia.common": "Commune", "origin.canaplia.common": "Sauvage", "hint.canaplia.common": "Cherchez dans la végétation ordinaire de l'Overworld.", diff --git a/itsalive/src/main/resources/assets/canaplia/lang/ru_ru.json b/itsalive/src/main/resources/assets/canaplia/lang/ru_ru.json index cbc18b3..5bb0945 100644 --- a/itsalive/src/main/resources/assets/canaplia/lang/ru_ru.json +++ b/itsalive/src/main/resources/assets/canaplia/lang/ru_ru.json @@ -2,6 +2,9 @@ "description.canaplia": "Полная механика Canaplia: шестнадцать растений, серверные открытия, гибриды и эффекты с визуальным слоем Ambiance.", "screen.canaplia.codex.title": "Кодекс Canaplia", "screen.canaplia.codex.page": "Страница %s / %s", + "screen.canaplia.codex.introduction": "КОДЕКС CANAPLIA\n\nУбивайте монстров, чтобы находить отдельные страницы и, очень редко, полный Кодекс.\n\nВыращивайте и открывайте сорта, чтобы заполнить его.", + "screen.canaplia.codex.entry_number": "Запись %s", + "screen.canaplia.codex.origin": "Происхождение: %s", "screen.canaplia.codex.hidden": "Не открыто", "screen.canaplia.codex.silhouette": "Известный силуэт", "message.canaplia.discovered": "Открыта Canaplia: %s", @@ -10,6 +13,7 @@ "block.canaplia.hemp_top": "Верхушка Canaplia", "block.canaplia.resin_block": "Блок смолы Canaplia", "item.canaplia.codex": "Кодекс Canaplia", + "item.canaplia.codex_page": "Страница Canaplia", "variant.canaplia.common": "Обычная", "origin.canaplia.common": "Дикая", "hint.canaplia.common": "Ищите среди обычной растительности Верхнего мира.", diff --git a/itsalive/src/main/resources/assets/canaplia/textures/README.md b/itsalive/src/main/resources/assets/canaplia/textures/README.md new file mode 100644 index 0000000..b616c50 --- /dev/null +++ b/itsalive/src/main/resources/assets/canaplia/textures/README.md @@ -0,0 +1,9 @@ +# Canaplia texture provenance + +The 224 pixel-art sprites in `block/` and `item/` are the authored Canaplia +textures restored from the copyright holder's local Sanctuary source tree at +commit `b14fbe561ac99054f17ae56caee9eebee3dbcbb6`. + +They are included in Sanctuary 26.2 at the copyright holder's explicit request. +Minecraft book, paper, and book-screen assets remain referenced from the +`minecraft` namespace and are not copied here. diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/amber_resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/amber_resin_block.png new file mode 100644 index 0000000..6c43322 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/amber_resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/ashen_resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/ashen_resin_block.png new file mode 100644 index 0000000..add884d Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/ashen_resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/bluish_resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/bluish_resin_block.png new file mode 100644 index 0000000..7bb602a Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/bluish_resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/coral_resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/coral_resin_block.png new file mode 100644 index 0000000..c784ad3 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/coral_resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/dark_resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/dark_resin_block.png new file mode 100644 index 0000000..79c77da Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/dark_resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/ember_resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/ember_resin_block.png new file mode 100644 index 0000000..f3a519f Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/ember_resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/gold_resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/gold_resin_block.png new file mode 100644 index 0000000..390161f Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/gold_resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0.png new file mode 100644 index 0000000..43657cb Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_amber.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_amber.png new file mode 100644 index 0000000..9fc25b9 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_amber.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_ashen.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_ashen.png new file mode 100644 index 0000000..ce0e9e2 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_ashen.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_bluish.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_bluish.png new file mode 100644 index 0000000..5192cad Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_bluish.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_coral.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_coral.png new file mode 100644 index 0000000..36c8e16 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_coral.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_dark.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_dark.png new file mode 100644 index 0000000..ca2e425 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_dark.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_ember.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_ember.png new file mode 100644 index 0000000..93601f7 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_ember.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_gold.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_gold.png new file mode 100644 index 0000000..20ff286 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_gold.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_indigo.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_indigo.png new file mode 100644 index 0000000..f6fd60f Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_indigo.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_lunar.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_lunar.png new file mode 100644 index 0000000..f85da96 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_lunar.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_moss.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_moss.png new file mode 100644 index 0000000..be8c0cc Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_moss.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_olive.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_olive.png new file mode 100644 index 0000000..83d6262 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_olive.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_pink.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_pink.png new file mode 100644 index 0000000..f85badc Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_pink.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_purple.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_purple.png new file mode 100644 index 0000000..ad2756b Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_purple.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_tender.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_tender.png new file mode 100644 index 0000000..abdc7e6 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_tender.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_varieg.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_varieg.png new file mode 100644 index 0000000..a9e1b65 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_varieg.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1.png new file mode 100644 index 0000000..c8f8def Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_amber.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_amber.png new file mode 100644 index 0000000..5746c6e Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_amber.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_ashen.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_ashen.png new file mode 100644 index 0000000..dd34af3 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_ashen.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_bluish.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_bluish.png new file mode 100644 index 0000000..2426684 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_bluish.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_coral.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_coral.png new file mode 100644 index 0000000..a6d0c92 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_coral.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_dark.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_dark.png new file mode 100644 index 0000000..8527c48 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_dark.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_ember.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_ember.png new file mode 100644 index 0000000..baa5f1d Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_ember.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_gold.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_gold.png new file mode 100644 index 0000000..e6cdfec Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_gold.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_indigo.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_indigo.png new file mode 100644 index 0000000..0c68932 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_indigo.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_lunar.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_lunar.png new file mode 100644 index 0000000..104efef Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_lunar.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_moss.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_moss.png new file mode 100644 index 0000000..0ad6f91 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_moss.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_olive.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_olive.png new file mode 100644 index 0000000..90ef359 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_olive.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_pink.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_pink.png new file mode 100644 index 0000000..64cb4de Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_pink.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_purple.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_purple.png new file mode 100644 index 0000000..5c93674 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_purple.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_tender.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_tender.png new file mode 100644 index 0000000..69f228e Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_tender.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_varieg.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_varieg.png new file mode 100644 index 0000000..1f2a4cc Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_varieg.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2.png new file mode 100644 index 0000000..f322b3a Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_amber.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_amber.png new file mode 100644 index 0000000..14251bd Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_amber.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_ashen.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_ashen.png new file mode 100644 index 0000000..bb398d0 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_ashen.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_bluish.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_bluish.png new file mode 100644 index 0000000..76bcb32 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_bluish.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_coral.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_coral.png new file mode 100644 index 0000000..cc8c2de Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_coral.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_dark.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_dark.png new file mode 100644 index 0000000..090e59c Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_dark.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_ember.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_ember.png new file mode 100644 index 0000000..c95aaa3 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_ember.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_gold.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_gold.png new file mode 100644 index 0000000..bfbca1e Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_gold.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_indigo.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_indigo.png new file mode 100644 index 0000000..24595f1 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_indigo.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_lunar.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_lunar.png new file mode 100644 index 0000000..b4cd61e Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_lunar.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_moss.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_moss.png new file mode 100644 index 0000000..0548d11 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_moss.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_olive.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_olive.png new file mode 100644 index 0000000..25bd76a Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_olive.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_pink.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_pink.png new file mode 100644 index 0000000..30f73ee Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_pink.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_purple.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_purple.png new file mode 100644 index 0000000..602c236 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_purple.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_tender.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_tender.png new file mode 100644 index 0000000..01fd72e Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_tender.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_varieg.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_varieg.png new file mode 100644 index 0000000..07f19d6 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_varieg.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3.png new file mode 100644 index 0000000..983eeee Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_amber.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_amber.png new file mode 100644 index 0000000..4d66834 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_amber.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_ashen.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_ashen.png new file mode 100644 index 0000000..6480e03 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_ashen.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_bluish.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_bluish.png new file mode 100644 index 0000000..dd4ef11 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_bluish.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_coral.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_coral.png new file mode 100644 index 0000000..78cb7a5 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_coral.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_dark.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_dark.png new file mode 100644 index 0000000..7f9dd9d Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_dark.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_ember.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_ember.png new file mode 100644 index 0000000..81b05aa Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_ember.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_gold.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_gold.png new file mode 100644 index 0000000..b9885e4 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_gold.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_indigo.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_indigo.png new file mode 100644 index 0000000..ecc6d59 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_indigo.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_lunar.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_lunar.png new file mode 100644 index 0000000..ab02da4 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_lunar.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_moss.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_moss.png new file mode 100644 index 0000000..68ef08c Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_moss.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_olive.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_olive.png new file mode 100644 index 0000000..14ad8bd Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_olive.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_pink.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_pink.png new file mode 100644 index 0000000..4e44c19 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_pink.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_purple.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_purple.png new file mode 100644 index 0000000..f96239a Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_purple.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_tender.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_tender.png new file mode 100644 index 0000000..5f6e10e Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_tender.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_varieg.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_varieg.png new file mode 100644 index 0000000..84ef776 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_varieg.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4.png new file mode 100644 index 0000000..7768fbd Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_amber.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_amber.png new file mode 100644 index 0000000..43be348 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_amber.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_ashen.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_ashen.png new file mode 100644 index 0000000..f17a955 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_ashen.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_bluish.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_bluish.png new file mode 100644 index 0000000..2452278 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_bluish.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_coral.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_coral.png new file mode 100644 index 0000000..9cf426d Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_coral.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_dark.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_dark.png new file mode 100644 index 0000000..b595e5f Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_dark.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_ember.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_ember.png new file mode 100644 index 0000000..e9b6c4b Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_ember.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_gold.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_gold.png new file mode 100644 index 0000000..0487635 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_gold.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_indigo.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_indigo.png new file mode 100644 index 0000000..4cc919e Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_indigo.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_lunar.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_lunar.png new file mode 100644 index 0000000..ecbf30f Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_lunar.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_moss.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_moss.png new file mode 100644 index 0000000..3ae2326 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_moss.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_olive.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_olive.png new file mode 100644 index 0000000..c5df912 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_olive.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_pink.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_pink.png new file mode 100644 index 0000000..6af34c0 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_pink.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_purple.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_purple.png new file mode 100644 index 0000000..1b1c348 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_purple.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_tender.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_tender.png new file mode 100644 index 0000000..d9aed38 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_tender.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_varieg.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_varieg.png new file mode 100644 index 0000000..1461ffc Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_varieg.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5.png new file mode 100644 index 0000000..6045cf1 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_amber.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_amber.png new file mode 100644 index 0000000..886c41a Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_amber.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_ashen.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_ashen.png new file mode 100644 index 0000000..bfa6c6a Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_ashen.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_bluish.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_bluish.png new file mode 100644 index 0000000..c26fdce Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_bluish.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_coral.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_coral.png new file mode 100644 index 0000000..f4111be Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_coral.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_dark.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_dark.png new file mode 100644 index 0000000..266020c Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_dark.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_ember.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_ember.png new file mode 100644 index 0000000..d55610b Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_ember.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_gold.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_gold.png new file mode 100644 index 0000000..8298566 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_gold.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_indigo.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_indigo.png new file mode 100644 index 0000000..d1ec220 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_indigo.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_lunar.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_lunar.png new file mode 100644 index 0000000..1f85550 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_lunar.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_moss.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_moss.png new file mode 100644 index 0000000..71b709f Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_moss.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_olive.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_olive.png new file mode 100644 index 0000000..da94e78 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_olive.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_pink.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_pink.png new file mode 100644 index 0000000..f7fe932 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_pink.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_purple.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_purple.png new file mode 100644 index 0000000..62a460d Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_purple.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_tender.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_tender.png new file mode 100644 index 0000000..5d2556b Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_tender.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_varieg.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_varieg.png new file mode 100644 index 0000000..a03fd5b Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_varieg.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6.png new file mode 100644 index 0000000..1fd3cd2 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_amber.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_amber.png new file mode 100644 index 0000000..aab48e4 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_amber.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_ashen.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_ashen.png new file mode 100644 index 0000000..160bda9 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_ashen.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_bluish.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_bluish.png new file mode 100644 index 0000000..4ea6eda Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_bluish.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_coral.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_coral.png new file mode 100644 index 0000000..3f053c4 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_coral.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_dark.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_dark.png new file mode 100644 index 0000000..611516c Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_dark.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_ember.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_ember.png new file mode 100644 index 0000000..4f480f7 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_ember.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_gold.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_gold.png new file mode 100644 index 0000000..6f94615 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_gold.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_indigo.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_indigo.png new file mode 100644 index 0000000..bb35c91 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_indigo.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_lunar.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_lunar.png new file mode 100644 index 0000000..ebd1844 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_lunar.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_moss.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_moss.png new file mode 100644 index 0000000..5f1f024 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_moss.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_olive.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_olive.png new file mode 100644 index 0000000..6049d05 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_olive.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_pink.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_pink.png new file mode 100644 index 0000000..6ca70ed Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_pink.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_purple.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_purple.png new file mode 100644 index 0000000..1b98cd1 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_purple.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_tender.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_tender.png new file mode 100644 index 0000000..967a0f4 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_tender.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_varieg.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_varieg.png new file mode 100644 index 0000000..174b0c4 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_varieg.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7.png new file mode 100644 index 0000000..c1c53ad Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_amber.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_amber.png new file mode 100644 index 0000000..2968366 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_amber.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_ashen.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_ashen.png new file mode 100644 index 0000000..1e137a3 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_ashen.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_bluish.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_bluish.png new file mode 100644 index 0000000..5eb1c37 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_bluish.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_coral.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_coral.png new file mode 100644 index 0000000..7d25936 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_coral.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_dark.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_dark.png new file mode 100644 index 0000000..7ad7f9f Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_dark.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_ember.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_ember.png new file mode 100644 index 0000000..090d4f3 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_ember.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_gold.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_gold.png new file mode 100644 index 0000000..a2cb263 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_gold.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_indigo.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_indigo.png new file mode 100644 index 0000000..ea0e69e Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_indigo.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_lunar.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_lunar.png new file mode 100644 index 0000000..18069c8 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_lunar.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_moss.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_moss.png new file mode 100644 index 0000000..21e4641 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_moss.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_olive.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_olive.png new file mode 100644 index 0000000..dd388df Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_olive.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_pink.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_pink.png new file mode 100644 index 0000000..84680ac Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_pink.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_purple.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_purple.png new file mode 100644 index 0000000..ab5dbed Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_purple.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_tender.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_tender.png new file mode 100644 index 0000000..f92c1cb Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_tender.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_varieg.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_varieg.png new file mode 100644 index 0000000..8abe9e1 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_varieg.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom.png new file mode 100644 index 0000000..f85490c Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_amber.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_amber.png new file mode 100644 index 0000000..4b56c7e Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_amber.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_ashen.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_ashen.png new file mode 100644 index 0000000..170ce94 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_ashen.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_bluish.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_bluish.png new file mode 100644 index 0000000..688fddc Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_bluish.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_coral.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_coral.png new file mode 100644 index 0000000..c81c452 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_coral.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_dark.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_dark.png new file mode 100644 index 0000000..eb46a67 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_dark.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_ember.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_ember.png new file mode 100644 index 0000000..3788004 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_ember.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_gold.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_gold.png new file mode 100644 index 0000000..7ca0af6 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_gold.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_indigo.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_indigo.png new file mode 100644 index 0000000..d844a3c Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_indigo.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_lunar.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_lunar.png new file mode 100644 index 0000000..154247c Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_lunar.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_moss.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_moss.png new file mode 100644 index 0000000..ee013be Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_moss.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_olive.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_olive.png new file mode 100644 index 0000000..5bc91c7 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_olive.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_pink.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_pink.png new file mode 100644 index 0000000..edc3acf Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_pink.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_purple.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_purple.png new file mode 100644 index 0000000..efca6fb Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_purple.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_tender.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_tender.png new file mode 100644 index 0000000..a163e3e Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_tender.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_varieg.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_varieg.png new file mode 100644 index 0000000..455f17e Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_varieg.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top.png new file mode 100644 index 0000000..86509a4 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_amber.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_amber.png new file mode 100644 index 0000000..a53d178 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_amber.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_ashen.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_ashen.png new file mode 100644 index 0000000..7e5fc06 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_ashen.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_bluish.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_bluish.png new file mode 100644 index 0000000..ea54646 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_bluish.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_coral.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_coral.png new file mode 100644 index 0000000..a00bd94 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_coral.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_dark.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_dark.png new file mode 100644 index 0000000..8fce21a Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_dark.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_ember.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_ember.png new file mode 100644 index 0000000..68d6538 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_ember.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_gold.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_gold.png new file mode 100644 index 0000000..6650f5b Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_gold.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_indigo.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_indigo.png new file mode 100644 index 0000000..3abb002 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_indigo.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_lunar.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_lunar.png new file mode 100644 index 0000000..394c530 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_lunar.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_moss.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_moss.png new file mode 100644 index 0000000..e496630 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_moss.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_olive.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_olive.png new file mode 100644 index 0000000..81c71ae Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_olive.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_pink.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_pink.png new file mode 100644 index 0000000..debe058 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_pink.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_purple.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_purple.png new file mode 100644 index 0000000..944ec94 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_purple.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_tender.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_tender.png new file mode 100644 index 0000000..2125f88 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_tender.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_varieg.png b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_varieg.png new file mode 100644 index 0000000..70bbc2f Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_varieg.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/indigo_resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/indigo_resin_block.png new file mode 100644 index 0000000..d404e1c Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/indigo_resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/lunar_resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/lunar_resin_block.png new file mode 100644 index 0000000..e0a09db Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/lunar_resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/moss_resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/moss_resin_block.png new file mode 100644 index 0000000..7692235 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/moss_resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/olive_resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/olive_resin_block.png new file mode 100644 index 0000000..ffe314c Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/olive_resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/pink_resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/pink_resin_block.png new file mode 100644 index 0000000..794392c Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/pink_resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/purple_resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/purple_resin_block.png new file mode 100644 index 0000000..19e0c48 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/purple_resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/resin_block.png new file mode 100644 index 0000000..91ebbd2 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/tender_resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/tender_resin_block.png new file mode 100644 index 0000000..fbf3cea Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/tender_resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/block/varieg_resin_block.png b/itsalive/src/main/resources/assets/canaplia/textures/block/varieg_resin_block.png new file mode 100644 index 0000000..3121ba1 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/block/varieg_resin_block.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/amber_hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/amber_hemp_bud.png new file mode 100644 index 0000000..cc7a14b Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/amber_hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/amber_hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/amber_hemp_seeds.png new file mode 100644 index 0000000..2595e6a Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/amber_hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/amber_rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/amber_rolled_joint.png new file mode 100644 index 0000000..790dfa8 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/amber_rolled_joint.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/ashen_hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/ashen_hemp_bud.png new file mode 100644 index 0000000..58b8be6 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/ashen_hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/ashen_hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/ashen_hemp_seeds.png new file mode 100644 index 0000000..48a7da4 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/ashen_hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/ashen_rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/ashen_rolled_joint.png new file mode 100644 index 0000000..30b8b7f Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/ashen_rolled_joint.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/bluish_hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/bluish_hemp_bud.png new file mode 100644 index 0000000..9880f76 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/bluish_hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/bluish_hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/bluish_hemp_seeds.png new file mode 100644 index 0000000..c4c4793 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/bluish_hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/bluish_rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/bluish_rolled_joint.png new file mode 100644 index 0000000..c772bed Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/bluish_rolled_joint.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/coral_hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/coral_hemp_bud.png new file mode 100644 index 0000000..116cbd1 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/coral_hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/coral_hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/coral_hemp_seeds.png new file mode 100644 index 0000000..7ab25e1 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/coral_hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/coral_rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/coral_rolled_joint.png new file mode 100644 index 0000000..e056363 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/coral_rolled_joint.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/dark_hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/dark_hemp_bud.png new file mode 100644 index 0000000..ebbd74f Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/dark_hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/dark_hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/dark_hemp_seeds.png new file mode 100644 index 0000000..227886f Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/dark_hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/dark_rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/dark_rolled_joint.png new file mode 100644 index 0000000..2894ea5 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/dark_rolled_joint.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/ember_hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/ember_hemp_bud.png new file mode 100644 index 0000000..88193a4 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/ember_hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/ember_hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/ember_hemp_seeds.png new file mode 100644 index 0000000..573bdb6 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/ember_hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/ember_rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/ember_rolled_joint.png new file mode 100644 index 0000000..246114d Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/ember_rolled_joint.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/gold_hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/gold_hemp_bud.png new file mode 100644 index 0000000..4f73466 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/gold_hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/gold_hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/gold_hemp_seeds.png new file mode 100644 index 0000000..654a885 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/gold_hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/gold_rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/gold_rolled_joint.png new file mode 100644 index 0000000..b98ba5b Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/gold_rolled_joint.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/hemp_bud.png new file mode 100644 index 0000000..578d45e Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/hemp_seeds.png new file mode 100644 index 0000000..dc6ccc1 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/indigo_hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/indigo_hemp_bud.png new file mode 100644 index 0000000..331101d Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/indigo_hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/indigo_hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/indigo_hemp_seeds.png new file mode 100644 index 0000000..0021320 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/indigo_hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/indigo_rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/indigo_rolled_joint.png new file mode 100644 index 0000000..74b2312 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/indigo_rolled_joint.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/lunar_hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/lunar_hemp_bud.png new file mode 100644 index 0000000..be02321 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/lunar_hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/lunar_hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/lunar_hemp_seeds.png new file mode 100644 index 0000000..5556fc9 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/lunar_hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/lunar_rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/lunar_rolled_joint.png new file mode 100644 index 0000000..08c7daa Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/lunar_rolled_joint.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/moss_hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/moss_hemp_bud.png new file mode 100644 index 0000000..e2442a7 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/moss_hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/moss_hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/moss_hemp_seeds.png new file mode 100644 index 0000000..7fb90c0 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/moss_hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/moss_rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/moss_rolled_joint.png new file mode 100644 index 0000000..7c87eda Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/moss_rolled_joint.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/olive_hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/olive_hemp_bud.png new file mode 100644 index 0000000..21371ae Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/olive_hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/olive_hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/olive_hemp_seeds.png new file mode 100644 index 0000000..186e1b7 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/olive_hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/olive_rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/olive_rolled_joint.png new file mode 100644 index 0000000..b9d7628 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/olive_rolled_joint.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/pink_hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/pink_hemp_bud.png new file mode 100644 index 0000000..1d2c1dd Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/pink_hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/pink_hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/pink_hemp_seeds.png new file mode 100644 index 0000000..c63b80d Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/pink_hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/pink_rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/pink_rolled_joint.png new file mode 100644 index 0000000..2236ece Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/pink_rolled_joint.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/purple_hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/purple_hemp_bud.png new file mode 100644 index 0000000..c5ef38b Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/purple_hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/purple_hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/purple_hemp_seeds.png new file mode 100644 index 0000000..1d43901 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/purple_hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/purple_rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/purple_rolled_joint.png new file mode 100644 index 0000000..a812053 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/purple_rolled_joint.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/rolled_joint.png new file mode 100644 index 0000000..cfb930b Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/rolled_joint.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/tender_hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/tender_hemp_bud.png new file mode 100644 index 0000000..a901daf Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/tender_hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/tender_hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/tender_hemp_seeds.png new file mode 100644 index 0000000..2959c14 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/tender_hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/tender_rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/tender_rolled_joint.png new file mode 100644 index 0000000..280bab6 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/tender_rolled_joint.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/varieg_hemp_bud.png b/itsalive/src/main/resources/assets/canaplia/textures/item/varieg_hemp_bud.png new file mode 100644 index 0000000..49fe99a Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/varieg_hemp_bud.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/varieg_hemp_seeds.png b/itsalive/src/main/resources/assets/canaplia/textures/item/varieg_hemp_seeds.png new file mode 100644 index 0000000..adf87fb Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/varieg_hemp_seeds.png differ diff --git a/itsalive/src/main/resources/assets/canaplia/textures/item/varieg_rolled_joint.png b/itsalive/src/main/resources/assets/canaplia/textures/item/varieg_rolled_joint.png new file mode 100644 index 0000000..9b2e287 Binary files /dev/null and b/itsalive/src/main/resources/assets/canaplia/textures/item/varieg_rolled_joint.png differ diff --git a/itsalive/src/main/resources/fabric.mod.json b/itsalive/src/main/resources/fabric.mod.json index 15edfee..d005efe 100644 --- a/itsalive/src/main/resources/fabric.mod.json +++ b/itsalive/src/main/resources/fabric.mod.json @@ -44,7 +44,7 @@ "sanctuary26": { "system_type": "gameplay-system", "namespace": "itsalive", - "data_version": 2, + "data_version": 3, "network_protocol": 4, "lifecycle": "${lifecycle}", "pack_version": "${pack_version}", diff --git a/itsalive/src/test/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaGameplaySmoke.java b/itsalive/src/test/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaGameplaySmoke.java index d4b3f55..536d03f 100644 --- a/itsalive/src/test/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaGameplaySmoke.java +++ b/itsalive/src/test/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaGameplaySmoke.java @@ -104,6 +104,11 @@ public final class CanapliaGameplaySmoke { assertEquals(CanapliaCodexPayload.VARIANT_MASK, payload.sharedMask(), "shared mask bound"); assertEquals(0xFFFE, payload.originHintMask(), "origin mask bound"); assertEquals(CanapliaCodexPayload.VARIANT_MASK, payload.conditionHintMask(), "condition mask bound"); + + assertTrue(CanapliaCodexDrops.dropsPage(0), "zero page roll drops a Codex page"); + assertTrue(!CanapliaCodexDrops.dropsPage(1), "nonzero page roll is bounded"); + assertTrue(CanapliaCodexDrops.dropsCodex(0), "zero Codex roll drops the Codex"); + assertTrue(!CanapliaCodexDrops.dropsCodex(1), "nonzero Codex roll is bounded"); } private static CanapliaForagingRules.Context foraging(Dimension dimension, Source source, diff --git a/pack/migrations/26.2.0-alpha.208-canaplia-fixes-to-alpha.209.json b/pack/migrations/26.2.0-alpha.208-canaplia-fixes-to-alpha.209.json new file mode 100644 index 0000000..588f35c --- /dev/null +++ b/pack/migrations/26.2.0-alpha.208-canaplia-fixes-to-alpha.209.json @@ -0,0 +1,62 @@ +{ + "schema_version": 1, + "source": { + "pack_version": "26.2.0-alpha.208", + "modules": { + "itsalive": "0.0.0-alpha.33" + } + }, + "target": { + "pack_version": "26.2.0-alpha.209", + "modules": { + "itsalive": "0.0.0-alpha.34" + } + }, + "canaplia": { + "namespace": "canaplia", + "provided_by": "itsalive", + "authored_textures_restored": 224, + "texture_groups": { + "item": 48, + "crop_stages": 128, + "tall_crop_halves": 32, + "resin_blocks": 16 + }, + "texture_authorization": "explicit_copyright_holder_request", + "rolled_joints_consumable": true, + "rolled_joint_smoke_and_sound": true, + "resin_requires_ignition": true, + "resin_ignition_items": [ + "minecraft:flint_and_steel", + "minecraft:fire_charge" + ], + "resin_ignition_by_burning_projectile": true, + "resin_visible_smoke": true, + "resin_aura_seconds": 90, + "codex_uses_vanilla_book_screen": true, + "codex_item_uses_vanilla_book_model": true, + "codex_page_item": "canaplia:codex_page", + "hostile_mob_page_drop_denominator": 12, + "hostile_mob_codex_drop_denominator": 256, + "mob_drops_require_player_kill": true, + "codex_recipe_page_count": 4 + }, + "compatibility": { + "new_world_required": false, + "save_reset_required": false, + "historical_registry_ids_preserved": true, + "resin_block_entity_source_data_version": 1, + "resin_block_entity_target_data_version": 2, + "legacy_burning_resins_migrated_to_lit": true, + "itsalive_source_data_version": 2, + "itsalive_target_data_version": 3, + "itsalive_network_protocol": 4, + "network_protocol_changed": false + }, + "distribution": { + "pack_release_updated": true, + "packwiz_index_refreshed": true, + "prism_modrinth_index_updated": true, + "shared_client_server_mrpack": true + } +} diff --git a/pack/packwiz/index.toml b/pack/packwiz/index.toml index 55bbac5..5c531b9 100644 --- a/pack/packwiz/index.toml +++ b/pack/packwiz/index.toml @@ -14,15 +14,15 @@ hash = "41f4f4c88c71d0a23446d5014f7407d55ad477441847099cad24492b032335a0" [[files]] file = "mods/ambiance-0.0.0-alpha.14.jar" -hash = "f011bc89fb65d921e2478e42f0ff2c8b9beca08c09f2b81400d2189902c568bf" +hash = "733c1b328fffcfc4f692439391b9e54be5c5485fd1c5894f2a94a887b3df2abb" [[files]] file = "mods/anotherworld-0.0.0-alpha.55.jar" -hash = "156a9b265866cbc5844ad798bad3fc5947151805cf72faf7f02a6b117a60e99c" +hash = "3e8966d914ca20519181aee22b3af701e64f7c57716bd395b32c134e116dba78" [[files]] file = "mods/events-0.0.0-alpha.0.jar" -hash = "b103e85156caa23f47b23f151490d2c74580e7d4a0af60da788dd54390554378" +hash = "cb1334425cd7f4972d30148ff80917ddafc3109d58300b73e711d15d7c23869e" [[files]] file = "mods/fabric-api.pw.toml" @@ -31,7 +31,7 @@ metafile = true [[files]] file = "mods/iliketomoveit-0.0.0-alpha.14.jar" -hash = "b800e3d67deb7aede32cdb6bed2b4dbf22e081361d34ad3313c865123a0e2e04" +hash = "8ad908d29ab282f4e2efffb6ee8960c06d6f0f9f6e253baf90ebd8cb62934d11" [[files]] file = "mods/iris.pw.toml" @@ -39,8 +39,8 @@ hash = "84a3cef87679c0d21dceb4641167dc0368b9a3593698f6a3632485e9b3a8d5da" metafile = true [[files]] -file = "mods/itsalive-0.0.0-alpha.33.jar" -hash = "12e5bc4576915d6c779f2cc05bed68a27c028eb8ca2a0d6c7a64271c1dd346f1" +file = "mods/itsalive-0.0.0-alpha.34.jar" +hash = "febf235da00540ff365aeb11990b71a790411606b7d24563cb1e333defff01de" [[files]] file = "mods/jei.pw.toml" @@ -49,23 +49,23 @@ metafile = true [[files]] file = "mods/masterkey-0.0.0-alpha.8.jar" -hash = "d073fec06ceb577b3d3b06c14a439864d36504505bec36f111df984231cf91e7" +hash = "9fd559ab559fb2ba6d0ae78fa7e48db15462e6f957fb23f1895469435745fe00" [[files]] file = "mods/onlyfun-0.0.0-alpha.20.jar" -hash = "742f32d22ca2620fb53003adfe129c6d5fd75bfe8a2fbcf18d72196b68f6f411" +hash = "043d5c7d864c980329f707f0e16e39d646ea9d346aad1c8853faf42fefefaaa8" [[files]] file = "mods/ouch-0.0.0-alpha.9.jar" -hash = "5885626adb81c7abbcda940d36d1eefc18a2c84c4ec3482ec6b11bbea44ef392" +hash = "75d64d7260ea351576ad678d1eedde9a65b70e0b208b98abe48f6df345a205d8" [[files]] file = "mods/redstoner-0.0.0-alpha.10.jar" -hash = "74af62ddf8848eb1dbcc8010dd25b8dfa53cb4bdea9344a8ff8c7bcf8cc0fb60" +hash = "fed903b6faad120f5018997bb017b759c0be29013e130db9b9c68492b1440616" [[files]] file = "mods/sanctuary-0.0.0-alpha.117.jar" -hash = "5b7a50949e8a5587d169ee7d75fb7f71d4db8ca7c8e334c1146430b60d4b72c1" +hash = "293032d52220f77f13c4795f6c5293c73e7e7b74c5186d2c56284e5cfe5b228b" [[files]] file = "mods/simple-voice-chat.pw.toml" diff --git a/pack/packwiz/pack.toml b/pack/packwiz/pack.toml index cb6d219..3c23df3 100644 --- a/pack/packwiz/pack.toml +++ b/pack/packwiz/pack.toml @@ -1,12 +1,12 @@ name = "Sanctuary 26.2" author = "KOKA99CAB" -version = "26.2.0-alpha.208" +version = "26.2.0-alpha.209" pack-format = "packwiz:1.1.0" [index] file = "index.toml" hash-format = "sha256" -hash = "cda9e778609d6f9ddce0bf8d5ef9ba820c29268e888e51053fffbc7887d51232" +hash = "546e7fd1111ca64d1c7c7d158dc8607c1bcc269ca87d546414282fdf511b5886" [versions] fabric = "0.19.3" diff --git a/pack/prism/modrinth.index.json b/pack/prism/modrinth.index.json index fdbb00a..524ad37 100644 --- a/pack/prism/modrinth.index.json +++ b/pack/prism/modrinth.index.json @@ -3,7 +3,7 @@ "game": "minecraft", "name": "Sanctuary 26.2", "summary": "Sanctuary 26.2 — progression, exploration, worldgen and multiplayer systems by KOKA99CAB.", - "versionId": "26.2.0-alpha.208", + "versionId": "26.2.0-alpha.209", "files": [ { "path": "mods/fabric-api-0.158.0+26.2.jar", diff --git a/pack/release.json b/pack/release.json index d6c15f1..f1c9103 100644 --- a/pack/release.json +++ b/pack/release.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "pack_version": "26.2.0-alpha.208", + "pack_version": "26.2.0-alpha.209", "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.208.mrpack", + "primary_file": "sanctuary-26.2.0-alpha.209.mrpack", "shared_client_server_pack": true, "update_owner": "packwiz-installer", "check_on_launch": true,