From 59239b172165e21fd67ba55f4373ca51a717a70d Mon Sep 17 00:00:00 2001 From: koka Date: Sat, 29 Aug 2026 09:24:09 +0200 Subject: [PATCH] fix(canaplia): restore gameplay and authored visuals --- CANAPLIA.md | 10 +- CHANGELOG.md | 12 + build.gradle | 216 +++++++++++------- gradle.properties | 4 +- itsalive/build.gradle | 98 ++------ .../sanctuary26/itsalive/ItsAliveMod.java | 2 +- .../itsalive/canaplia/CanapliaCodexDrops.java | 41 ++++ .../itsalive/canaplia/CanapliaContent.java | 5 +- .../itsalive/canaplia/CanapliaFoundation.java | 3 +- .../canaplia/block/CanapliaHempCropBlock.java | 2 +- .../canaplia/block/CanapliaResinBlock.java | 95 +++++++- .../block/CanapliaResinBlockEntity.java | 42 +++- .../canaplia/client/CanapliaCodexScreen.java | 94 +++----- .../canaplia/item/CanapliaJointItem.java | 20 +- .../itsalive/client/ItsAliveClient.java | 2 +- .../resources/assets/canaplia/lang/en_us.json | 4 + .../resources/assets/canaplia/lang/fr_fr.json | 4 + .../resources/assets/canaplia/lang/ru_ru.json | 4 + .../assets/canaplia/textures/README.md | 9 + .../textures/block/amber_resin_block.png | Bin 0 -> 537 bytes .../textures/block/ashen_resin_block.png | Bin 0 -> 519 bytes .../textures/block/bluish_resin_block.png | Bin 0 -> 534 bytes .../textures/block/coral_resin_block.png | Bin 0 -> 539 bytes .../textures/block/dark_resin_block.png | Bin 0 -> 513 bytes .../textures/block/ember_resin_block.png | Bin 0 -> 520 bytes .../textures/block/gold_resin_block.png | Bin 0 -> 540 bytes .../canaplia/textures/block/hemp_stage_0.png | Bin 0 -> 112 bytes .../textures/block/hemp_stage_0_amber.png | Bin 0 -> 116 bytes .../textures/block/hemp_stage_0_ashen.png | Bin 0 -> 116 bytes .../textures/block/hemp_stage_0_bluish.png | Bin 0 -> 116 bytes .../textures/block/hemp_stage_0_coral.png | Bin 0 -> 113 bytes .../textures/block/hemp_stage_0_dark.png | Bin 0 -> 112 bytes .../textures/block/hemp_stage_0_ember.png | Bin 0 -> 112 bytes .../textures/block/hemp_stage_0_gold.png | Bin 0 -> 116 bytes .../textures/block/hemp_stage_0_indigo.png | Bin 0 -> 112 bytes .../textures/block/hemp_stage_0_lunar.png | Bin 0 -> 117 bytes .../textures/block/hemp_stage_0_moss.png | Bin 0 -> 111 bytes .../textures/block/hemp_stage_0_olive.png | Bin 0 -> 113 bytes .../textures/block/hemp_stage_0_pink.png | Bin 0 -> 116 bytes .../textures/block/hemp_stage_0_purple.png | Bin 0 -> 113 bytes .../textures/block/hemp_stage_0_tender.png | Bin 0 -> 116 bytes .../textures/block/hemp_stage_0_varieg.png | Bin 0 -> 113 bytes .../canaplia/textures/block/hemp_stage_1.png | Bin 0 -> 125 bytes .../textures/block/hemp_stage_1_amber.png | Bin 0 -> 125 bytes .../textures/block/hemp_stage_1_ashen.png | Bin 0 -> 125 bytes .../textures/block/hemp_stage_1_bluish.png | Bin 0 -> 125 bytes .../textures/block/hemp_stage_1_coral.png | Bin 0 -> 125 bytes .../textures/block/hemp_stage_1_dark.png | Bin 0 -> 124 bytes .../textures/block/hemp_stage_1_ember.png | Bin 0 -> 124 bytes .../textures/block/hemp_stage_1_gold.png | Bin 0 -> 139 bytes .../textures/block/hemp_stage_1_indigo.png | Bin 0 -> 124 bytes .../textures/block/hemp_stage_1_lunar.png | Bin 0 -> 140 bytes .../textures/block/hemp_stage_1_moss.png | Bin 0 -> 124 bytes .../textures/block/hemp_stage_1_olive.png | Bin 0 -> 126 bytes .../textures/block/hemp_stage_1_pink.png | Bin 0 -> 139 bytes .../textures/block/hemp_stage_1_purple.png | Bin 0 -> 124 bytes .../textures/block/hemp_stage_1_tender.png | Bin 0 -> 126 bytes .../textures/block/hemp_stage_1_varieg.png | Bin 0 -> 129 bytes .../canaplia/textures/block/hemp_stage_2.png | Bin 0 -> 128 bytes .../textures/block/hemp_stage_2_amber.png | Bin 0 -> 138 bytes .../textures/block/hemp_stage_2_ashen.png | Bin 0 -> 128 bytes .../textures/block/hemp_stage_2_bluish.png | Bin 0 -> 138 bytes .../textures/block/hemp_stage_2_coral.png | Bin 0 -> 129 bytes .../textures/block/hemp_stage_2_dark.png | Bin 0 -> 128 bytes .../textures/block/hemp_stage_2_ember.png | Bin 0 -> 128 bytes .../textures/block/hemp_stage_2_gold.png | Bin 0 -> 138 bytes .../textures/block/hemp_stage_2_indigo.png | Bin 0 -> 128 bytes .../textures/block/hemp_stage_2_lunar.png | Bin 0 -> 139 bytes .../textures/block/hemp_stage_2_moss.png | Bin 0 -> 128 bytes .../textures/block/hemp_stage_2_olive.png | Bin 0 -> 128 bytes .../textures/block/hemp_stage_2_pink.png | Bin 0 -> 139 bytes .../textures/block/hemp_stage_2_purple.png | Bin 0 -> 128 bytes .../textures/block/hemp_stage_2_tender.png | Bin 0 -> 129 bytes .../textures/block/hemp_stage_2_varieg.png | Bin 0 -> 135 bytes .../canaplia/textures/block/hemp_stage_3.png | Bin 0 -> 158 bytes .../textures/block/hemp_stage_3_amber.png | Bin 0 -> 158 bytes .../textures/block/hemp_stage_3_ashen.png | Bin 0 -> 158 bytes .../textures/block/hemp_stage_3_bluish.png | Bin 0 -> 163 bytes .../textures/block/hemp_stage_3_coral.png | Bin 0 -> 158 bytes .../textures/block/hemp_stage_3_dark.png | Bin 0 -> 157 bytes .../textures/block/hemp_stage_3_ember.png | Bin 0 -> 158 bytes .../textures/block/hemp_stage_3_gold.png | Bin 0 -> 168 bytes .../textures/block/hemp_stage_3_indigo.png | Bin 0 -> 158 bytes .../textures/block/hemp_stage_3_lunar.png | Bin 0 -> 161 bytes .../textures/block/hemp_stage_3_moss.png | Bin 0 -> 158 bytes .../textures/block/hemp_stage_3_olive.png | Bin 0 -> 158 bytes .../textures/block/hemp_stage_3_pink.png | Bin 0 -> 168 bytes .../textures/block/hemp_stage_3_purple.png | Bin 0 -> 158 bytes .../textures/block/hemp_stage_3_tender.png | Bin 0 -> 158 bytes .../textures/block/hemp_stage_3_varieg.png | Bin 0 -> 175 bytes .../canaplia/textures/block/hemp_stage_4.png | Bin 0 -> 187 bytes .../textures/block/hemp_stage_4_amber.png | Bin 0 -> 192 bytes .../textures/block/hemp_stage_4_ashen.png | Bin 0 -> 188 bytes .../textures/block/hemp_stage_4_bluish.png | Bin 0 -> 191 bytes .../textures/block/hemp_stage_4_coral.png | Bin 0 -> 189 bytes .../textures/block/hemp_stage_4_dark.png | Bin 0 -> 186 bytes .../textures/block/hemp_stage_4_ember.png | Bin 0 -> 188 bytes .../textures/block/hemp_stage_4_gold.png | Bin 0 -> 204 bytes .../textures/block/hemp_stage_4_indigo.png | Bin 0 -> 188 bytes .../textures/block/hemp_stage_4_lunar.png | Bin 0 -> 204 bytes .../textures/block/hemp_stage_4_moss.png | Bin 0 -> 188 bytes .../textures/block/hemp_stage_4_olive.png | Bin 0 -> 188 bytes .../textures/block/hemp_stage_4_pink.png | Bin 0 -> 193 bytes .../textures/block/hemp_stage_4_purple.png | Bin 0 -> 188 bytes .../textures/block/hemp_stage_4_tender.png | Bin 0 -> 193 bytes .../textures/block/hemp_stage_4_varieg.png | Bin 0 -> 202 bytes .../canaplia/textures/block/hemp_stage_5.png | Bin 0 -> 221 bytes .../textures/block/hemp_stage_5_amber.png | Bin 0 -> 221 bytes .../textures/block/hemp_stage_5_ashen.png | Bin 0 -> 222 bytes .../textures/block/hemp_stage_5_bluish.png | Bin 0 -> 231 bytes .../textures/block/hemp_stage_5_coral.png | Bin 0 -> 224 bytes .../textures/block/hemp_stage_5_dark.png | Bin 0 -> 222 bytes .../textures/block/hemp_stage_5_ember.png | Bin 0 -> 222 bytes .../textures/block/hemp_stage_5_gold.png | Bin 0 -> 240 bytes .../textures/block/hemp_stage_5_indigo.png | Bin 0 -> 222 bytes .../textures/block/hemp_stage_5_lunar.png | Bin 0 -> 231 bytes .../textures/block/hemp_stage_5_moss.png | Bin 0 -> 222 bytes .../textures/block/hemp_stage_5_olive.png | Bin 0 -> 222 bytes .../textures/block/hemp_stage_5_pink.png | Bin 0 -> 235 bytes .../textures/block/hemp_stage_5_purple.png | Bin 0 -> 222 bytes .../textures/block/hemp_stage_5_tender.png | Bin 0 -> 222 bytes .../textures/block/hemp_stage_5_varieg.png | Bin 0 -> 256 bytes .../canaplia/textures/block/hemp_stage_6.png | Bin 0 -> 270 bytes .../textures/block/hemp_stage_6_amber.png | Bin 0 -> 275 bytes .../textures/block/hemp_stage_6_ashen.png | Bin 0 -> 276 bytes .../textures/block/hemp_stage_6_bluish.png | Bin 0 -> 273 bytes .../textures/block/hemp_stage_6_coral.png | Bin 0 -> 277 bytes .../textures/block/hemp_stage_6_dark.png | Bin 0 -> 269 bytes .../textures/block/hemp_stage_6_ember.png | Bin 0 -> 272 bytes .../textures/block/hemp_stage_6_gold.png | Bin 0 -> 295 bytes .../textures/block/hemp_stage_6_indigo.png | Bin 0 -> 272 bytes .../textures/block/hemp_stage_6_lunar.png | Bin 0 -> 288 bytes .../textures/block/hemp_stage_6_moss.png | Bin 0 -> 272 bytes .../textures/block/hemp_stage_6_olive.png | Bin 0 -> 268 bytes .../textures/block/hemp_stage_6_pink.png | Bin 0 -> 277 bytes .../textures/block/hemp_stage_6_purple.png | Bin 0 -> 272 bytes .../textures/block/hemp_stage_6_tender.png | Bin 0 -> 277 bytes .../textures/block/hemp_stage_6_varieg.png | Bin 0 -> 297 bytes .../canaplia/textures/block/hemp_stage_7.png | Bin 0 -> 343 bytes .../textures/block/hemp_stage_7_amber.png | Bin 0 -> 343 bytes .../textures/block/hemp_stage_7_ashen.png | Bin 0 -> 343 bytes .../textures/block/hemp_stage_7_bluish.png | Bin 0 -> 340 bytes .../textures/block/hemp_stage_7_coral.png | Bin 0 -> 345 bytes .../textures/block/hemp_stage_7_dark.png | Bin 0 -> 343 bytes .../textures/block/hemp_stage_7_ember.png | Bin 0 -> 344 bytes .../textures/block/hemp_stage_7_gold.png | Bin 0 -> 352 bytes .../textures/block/hemp_stage_7_indigo.png | Bin 0 -> 345 bytes .../textures/block/hemp_stage_7_lunar.png | Bin 0 -> 375 bytes .../textures/block/hemp_stage_7_moss.png | Bin 0 -> 344 bytes .../textures/block/hemp_stage_7_olive.png | Bin 0 -> 340 bytes .../textures/block/hemp_stage_7_pink.png | Bin 0 -> 347 bytes .../textures/block/hemp_stage_7_purple.png | Bin 0 -> 339 bytes .../textures/block/hemp_stage_7_tender.png | Bin 0 -> 345 bytes .../textures/block/hemp_stage_7_varieg.png | Bin 0 -> 369 bytes .../textures/block/hemp_tall_bottom.png | Bin 0 -> 397 bytes .../textures/block/hemp_tall_bottom_amber.png | Bin 0 -> 423 bytes .../textures/block/hemp_tall_bottom_ashen.png | Bin 0 -> 396 bytes .../block/hemp_tall_bottom_bluish.png | Bin 0 -> 397 bytes .../textures/block/hemp_tall_bottom_coral.png | Bin 0 -> 379 bytes .../textures/block/hemp_tall_bottom_dark.png | Bin 0 -> 392 bytes .../textures/block/hemp_tall_bottom_ember.png | Bin 0 -> 398 bytes .../textures/block/hemp_tall_bottom_gold.png | Bin 0 -> 419 bytes .../block/hemp_tall_bottom_indigo.png | Bin 0 -> 397 bytes .../textures/block/hemp_tall_bottom_lunar.png | Bin 0 -> 418 bytes .../textures/block/hemp_tall_bottom_moss.png | Bin 0 -> 424 bytes .../textures/block/hemp_tall_bottom_olive.png | Bin 0 -> 400 bytes .../textures/block/hemp_tall_bottom_pink.png | Bin 0 -> 402 bytes .../block/hemp_tall_bottom_purple.png | Bin 0 -> 379 bytes .../block/hemp_tall_bottom_tender.png | Bin 0 -> 413 bytes .../block/hemp_tall_bottom_varieg.png | Bin 0 -> 434 bytes .../canaplia/textures/block/hemp_tall_top.png | Bin 0 -> 382 bytes .../textures/block/hemp_tall_top_amber.png | Bin 0 -> 381 bytes .../textures/block/hemp_tall_top_ashen.png | Bin 0 -> 375 bytes .../textures/block/hemp_tall_top_bluish.png | Bin 0 -> 393 bytes .../textures/block/hemp_tall_top_coral.png | Bin 0 -> 381 bytes .../textures/block/hemp_tall_top_dark.png | Bin 0 -> 381 bytes .../textures/block/hemp_tall_top_ember.png | Bin 0 -> 379 bytes .../textures/block/hemp_tall_top_gold.png | Bin 0 -> 396 bytes .../textures/block/hemp_tall_top_indigo.png | Bin 0 -> 382 bytes .../textures/block/hemp_tall_top_lunar.png | Bin 0 -> 390 bytes .../textures/block/hemp_tall_top_moss.png | Bin 0 -> 382 bytes .../textures/block/hemp_tall_top_olive.png | Bin 0 -> 379 bytes .../textures/block/hemp_tall_top_pink.png | Bin 0 -> 387 bytes .../textures/block/hemp_tall_top_purple.png | Bin 0 -> 380 bytes .../textures/block/hemp_tall_top_tender.png | Bin 0 -> 382 bytes .../textures/block/hemp_tall_top_varieg.png | Bin 0 -> 380 bytes .../textures/block/indigo_resin_block.png | Bin 0 -> 529 bytes .../textures/block/lunar_resin_block.png | Bin 0 -> 513 bytes .../textures/block/moss_resin_block.png | Bin 0 -> 525 bytes .../textures/block/olive_resin_block.png | Bin 0 -> 525 bytes .../textures/block/pink_resin_block.png | Bin 0 -> 533 bytes .../textures/block/purple_resin_block.png | Bin 0 -> 527 bytes .../canaplia/textures/block/resin_block.png | Bin 0 -> 535 bytes .../textures/block/tender_resin_block.png | Bin 0 -> 539 bytes .../textures/block/varieg_resin_block.png | Bin 0 -> 602 bytes .../canaplia/textures/item/amber_hemp_bud.png | Bin 0 -> 427 bytes .../textures/item/amber_hemp_seeds.png | Bin 0 -> 177 bytes .../textures/item/amber_rolled_joint.png | Bin 0 -> 187 bytes .../canaplia/textures/item/ashen_hemp_bud.png | Bin 0 -> 421 bytes .../textures/item/ashen_hemp_seeds.png | Bin 0 -> 183 bytes .../textures/item/ashen_rolled_joint.png | Bin 0 -> 187 bytes .../textures/item/bluish_hemp_bud.png | Bin 0 -> 428 bytes .../textures/item/bluish_hemp_seeds.png | Bin 0 -> 171 bytes .../textures/item/bluish_rolled_joint.png | Bin 0 -> 187 bytes .../canaplia/textures/item/coral_hemp_bud.png | Bin 0 -> 431 bytes .../textures/item/coral_hemp_seeds.png | Bin 0 -> 168 bytes .../textures/item/coral_rolled_joint.png | Bin 0 -> 187 bytes .../canaplia/textures/item/dark_hemp_bud.png | Bin 0 -> 405 bytes .../textures/item/dark_hemp_seeds.png | Bin 0 -> 183 bytes .../textures/item/dark_rolled_joint.png | Bin 0 -> 187 bytes .../canaplia/textures/item/ember_hemp_bud.png | Bin 0 -> 416 bytes .../textures/item/ember_hemp_seeds.png | Bin 0 -> 177 bytes .../textures/item/ember_rolled_joint.png | Bin 0 -> 187 bytes .../canaplia/textures/item/gold_hemp_bud.png | Bin 0 -> 431 bytes .../textures/item/gold_hemp_seeds.png | Bin 0 -> 174 bytes .../textures/item/gold_rolled_joint.png | Bin 0 -> 187 bytes .../canaplia/textures/item/hemp_bud.png | Bin 0 -> 420 bytes .../canaplia/textures/item/hemp_seeds.png | Bin 0 -> 187 bytes .../textures/item/indigo_hemp_bud.png | Bin 0 -> 414 bytes .../textures/item/indigo_hemp_seeds.png | Bin 0 -> 180 bytes .../textures/item/indigo_rolled_joint.png | Bin 0 -> 187 bytes .../canaplia/textures/item/lunar_hemp_bud.png | Bin 0 -> 431 bytes .../textures/item/lunar_hemp_seeds.png | Bin 0 -> 181 bytes .../textures/item/lunar_rolled_joint.png | Bin 0 -> 184 bytes .../canaplia/textures/item/moss_hemp_bud.png | Bin 0 -> 416 bytes .../textures/item/moss_hemp_seeds.png | Bin 0 -> 194 bytes .../textures/item/moss_rolled_joint.png | Bin 0 -> 187 bytes .../canaplia/textures/item/olive_hemp_bud.png | Bin 0 -> 424 bytes .../textures/item/olive_hemp_seeds.png | Bin 0 -> 179 bytes .../textures/item/olive_rolled_joint.png | Bin 0 -> 187 bytes .../canaplia/textures/item/pink_hemp_bud.png | Bin 0 -> 435 bytes .../textures/item/pink_hemp_seeds.png | Bin 0 -> 178 bytes .../textures/item/pink_rolled_joint.png | Bin 0 -> 187 bytes .../textures/item/purple_hemp_bud.png | Bin 0 -> 411 bytes .../textures/item/purple_hemp_seeds.png | Bin 0 -> 188 bytes .../textures/item/purple_rolled_joint.png | Bin 0 -> 187 bytes .../canaplia/textures/item/rolled_joint.png | Bin 0 -> 187 bytes .../textures/item/tender_hemp_bud.png | Bin 0 -> 435 bytes .../textures/item/tender_hemp_seeds.png | Bin 0 -> 176 bytes .../textures/item/tender_rolled_joint.png | Bin 0 -> 187 bytes .../textures/item/varieg_hemp_bud.png | Bin 0 -> 455 bytes .../textures/item/varieg_hemp_seeds.png | Bin 0 -> 182 bytes .../textures/item/varieg_rolled_joint.png | Bin 0 -> 187 bytes itsalive/src/main/resources/fabric.mod.json | 2 +- .../canaplia/CanapliaGameplaySmoke.java | 5 + ...alpha.208-canaplia-fixes-to-alpha.209.json | 62 +++++ pack/packwiz/index.toml | 22 +- pack/packwiz/pack.toml | 4 +- pack/prism/modrinth.index.json | 2 +- pack/release.json | 4 +- 250 files changed, 509 insertions(+), 259 deletions(-) create mode 100644 itsalive/src/main/java/fr/koka99cab/sanctuary26/itsalive/canaplia/CanapliaCodexDrops.java create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/README.md create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/amber_resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/ashen_resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/bluish_resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/coral_resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/dark_resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/ember_resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/gold_resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_amber.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_ashen.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_bluish.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_coral.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_dark.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_ember.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_gold.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_indigo.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_lunar.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_moss.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_olive.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_pink.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_purple.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_tender.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_0_varieg.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_amber.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_ashen.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_bluish.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_coral.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_dark.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_ember.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_gold.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_indigo.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_lunar.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_moss.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_olive.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_pink.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_purple.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_tender.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_1_varieg.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_amber.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_ashen.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_bluish.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_coral.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_dark.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_ember.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_gold.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_indigo.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_lunar.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_moss.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_olive.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_pink.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_purple.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_tender.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_2_varieg.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_amber.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_ashen.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_bluish.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_coral.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_dark.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_ember.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_gold.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_indigo.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_lunar.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_moss.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_olive.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_pink.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_purple.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_tender.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_3_varieg.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_amber.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_ashen.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_bluish.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_coral.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_dark.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_ember.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_gold.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_indigo.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_lunar.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_moss.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_olive.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_pink.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_purple.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_tender.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_4_varieg.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_amber.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_ashen.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_bluish.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_coral.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_dark.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_ember.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_gold.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_indigo.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_lunar.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_moss.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_olive.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_pink.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_purple.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_tender.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_5_varieg.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_amber.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_ashen.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_bluish.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_coral.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_dark.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_ember.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_gold.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_indigo.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_lunar.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_moss.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_olive.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_pink.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_purple.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_tender.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_6_varieg.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_amber.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_ashen.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_bluish.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_coral.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_dark.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_ember.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_gold.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_indigo.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_lunar.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_moss.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_olive.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_pink.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_purple.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_tender.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_stage_7_varieg.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_amber.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_ashen.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_bluish.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_coral.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_dark.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_ember.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_gold.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_indigo.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_lunar.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_moss.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_olive.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_pink.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_purple.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_tender.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_bottom_varieg.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_amber.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_ashen.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_bluish.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_coral.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_dark.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_ember.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_gold.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_indigo.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_lunar.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_moss.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_olive.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_pink.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_purple.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_tender.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/hemp_tall_top_varieg.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/indigo_resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/lunar_resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/moss_resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/olive_resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/pink_resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/purple_resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/tender_resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/block/varieg_resin_block.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/amber_hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/amber_hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/amber_rolled_joint.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/ashen_hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/ashen_hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/ashen_rolled_joint.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/bluish_hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/bluish_hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/bluish_rolled_joint.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/coral_hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/coral_hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/coral_rolled_joint.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/dark_hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/dark_hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/dark_rolled_joint.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/ember_hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/ember_hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/ember_rolled_joint.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/gold_hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/gold_hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/gold_rolled_joint.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/indigo_hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/indigo_hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/indigo_rolled_joint.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/lunar_hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/lunar_hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/lunar_rolled_joint.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/moss_hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/moss_hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/moss_rolled_joint.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/olive_hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/olive_hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/olive_rolled_joint.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/pink_hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/pink_hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/pink_rolled_joint.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/purple_hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/purple_hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/purple_rolled_joint.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/rolled_joint.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/tender_hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/tender_hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/tender_rolled_joint.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/varieg_hemp_bud.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/varieg_hemp_seeds.png create mode 100644 itsalive/src/main/resources/assets/canaplia/textures/item/varieg_rolled_joint.png create mode 100644 pack/migrations/26.2.0-alpha.208-canaplia-fixes-to-alpha.209.json 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 0000000000000000000000000000000000000000..6c433222a89bea6aa2f7f8b83609cb8748ed9c8d GIT binary patch literal 537 zcmV+!0_OdRP)$LHfe13KpdZmMKJ7DSXY<41oSm8Xop&zlTx?~{T`gy>HkV8*KWm=$UDGWm&E&dM+M}Z$5 z>+n*Oq68;I*m~=WLf~hn&8=S)LgLS=X-gnkLlBYyaUg&gTYs-0L=Y%xtbh-|+{jge zL8J&D1YdzC1eBnJ4}RV%;Dbz`k#p3w65Fe3kuK$gL=Y1bR2NLcP1+Iw4kG};y-G@) z)cts{BE%$M8YCMMkY@ZSR*=NlRGb7GYM zzy<*^kn0rGCM6&fw%`6?Ja32yLbj3v2E@@gY|eADEInZU5J5;E?&~GVrW2x6Q~}a0 z#OAPV$X0d;38Hz7j^@%(Ek}Ch+Er)eg#Z9fl#rcq0Ys7BG?iwq%}vDpA)%u(F+d=- zhjRwVdwly)rP*~NG6jOQE}2U7GpQZffMu~k8|eC%&qfK4`tMAO1n`NKYuRK)1y?%MYVhFdkKT06ug{tnsxQ@ zkz;oU0xq2EMWm-+@WeYimB7E0Ts9-C`8XwcUrzKioMXWCGSa|F=17&OqL>I@wQ{Wl zo|~0nx2c5W*TQl_pjBfKk^%8S05QHnr=dg;7-^~i1289YjR3I4Aoy6#lzDXcas(X!U}-o>g|;V>6>X2rvTfa806R#B3~77 zK{CMQbg0$X0t2HhVyLlI(h3CAQFk{30*zWlzBUUb1b`0$av--Ym`__kCTzby-|4;~ zA_>_>4j2%h<>7NCu?%Lw{vm>pIXw4UTFo{@tEd8GuMnTZYeTlNLr4zCcXP%d4l6M1&u_glX<%)1+3=22fa@dvIJ*4iXfa?=0+002ov JPDHLkV1lQE-QWNK literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7bb602aac3031ea54189a83c4fba32ec54e1e174 GIT binary patch literal 534 zcmV+x0_pvUP)AQe!M~?Ce0mfxYTXVX$6AJ_5E}PJgisi;*EaBN_+q@ z2*?S|xL`4D0hzEhfByo%AtDLcMh+Md%kqdhxz3%=0RJI^kU3;pU9Dyg(JHC{*;h!+ z;cG*-u|r6by5d{Ma2cqz11L0chEHAz0Pu(ss$&;GwREyGRE9YhjR*6gpkp!#KmZXw z1LQpW^`XkDn;M1&07*qoM6N<$g4Q48g8%>k literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c784ad397c213b68beb3414419da72f7aec6d2cf GIT binary patch literal 539 zcmV+$0_6RPP)WxXdNxzPKURnS|71bMjoy$nk1auJY@0 zQ{0pjx35KKq+Qrh8y`Nl4*;-X?KDDN>nl;IEX+wW9+BegqR%(!GMq3>AnIEWcqSWTz=IgVGCZug7$#<0|H1N9(Hn?%_c;ts3OQ- zA+~_mhHRq)#EIs8`)SZnD@S|g%HhnDR{#NAqJ->>tLx`&D@~=Dsfn>ce@GaZObh_D zb~op)-;cgNR9SYLh)w}#t4pWieC*DAb~2 z_kWFbziAKhW3$`2oH=J^8r*g&ZrQ82`_7q5qEoj@LN`9oySr}1Jzj@y;@`d6iF>%J znvFw@-T?qSxWA^c-AS|Hy0x4eHFB<9K60PlE|B#swp)3D5;-{H(xEZI2@tmFWyt`# z)noVEuNffmvsN($u&O=@$|P|BAPC!2FEk(k1iE9u2g%&f6@VDw17JIk4FCxOeCbzH z27FLylR3Eo7+n;Ny2NNCDt&5dQZ7$D&o%pVXy`tW=dYBrk?rJ{-;dxh8nUK_HF4iG1rxAM)U zp;nIe%$38LC$9hkxI_ur?H!=VR+`E_N^PzCL&CshVgR7EyE)JOe)ILA%Cg%;bP70I zT{;#2GnpOP1na|c0M6f=|H6eUgB5wU-?Ur3*32tc=6f9KB>n)HMTh>VP33O@0000< KMNUMnLSTZ1tK-lB literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..390161f2181bf7490a1ed9573c788f4b7fec3160 GIT binary patch literal 540 zcmV+%0^|LOP)`f{lz1lBlm3al?f4D#H0GhQEgk*yF0072TKZ+>`fI&kA90+Db zt^o+PI{+V#z5*!0fEU#nr+@>Q-dpbS?ZHV5w#HPtmeTRfl|Ud=0&p$_ zqk2i*SG7e2lYnWE3^->J;jaqVAeq3{<+5gD3N(zexI>MNl2QQN*603vz(pxPC133o z1rmS_06xHN3TD$1kO}SQI|%0u2q$D4oM3|Z%nzG)Q;%y8m_HzZ^x?d^pxJCfl!_{X z>=k13cx}iwIzXIg9;2hVG}Ow`o~7JV=gBL804`BNcE&{@ifpB+G;=A|6ZVIMp2@@j zz|}sXf$Y0qAF3?7O+=@Fv(=?j`TLp7j%Z00005l8x8vpJ!$7nZ?*Xm2ZZ&3b!!O2nJ7A KKbLh*2~7YD{3T%k literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9fc25b98784a1656114f2e12acc5a3735a3f988c GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`)}AhoAr*6y6C_v{Cx~2-`yyif zFaP}J-~Il)!g`&t#X|qPxeJZ{{5{W;HaVvu`c#dZz~8^e^(~~O85lBC1t(aZHk}VN OhQZU-&t;ucLK6U25+xS^ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ce0e9e2eb5d23c3c99353537bbc8829797c80a85 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`)}AhoAr*6y6C_v{Cx~2-dt#RI z=lmMapZ)&4!g`&WtAGFF?&LE1^Z&Q}8MT`Yb1o>k3H*J0+}}c4nt|cHrO@8Be?pUh P#xQug`njxgN@xNAp2sIn literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5192cadb8e86696585726a3eb9969a7f1487db82 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`)}AhoAr*6y6C_v{Cx~2-WBGRF z-}mhGKl=T7h4nfw#cKci+|g}d@b52s+TbP0l+XkK#; z$6i(Qi@lwx&kmJyJ{f=XH4mKrFnuED8MV`_vrk|8x80rn!BrjxBRhd0(~nnv0nK3W MboFyt=akR{0Qhkw!2kdN literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ca2e4259b321e486ff60c0e4c2bb5abe7be20f19 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`=AJH&Ar*6y6C_v{Cx~2-lTdx} z=X(FuU;X~P!g`$N*`EJ@!}Ny7=l_fYIh$e7A?^`Pwcb37HjrUyUrE`aXMlg7~ L`njxgN@xNA0>&nc literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..20ff286367925a3a3754695cc06e2e2a6000b6d8 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`)}AhoAr*6y6C_v{Cx~2-^O^bX z^Zxop&+BWlW)yhJ*arTH51KUl;rnbP0l+XkKtUo6V literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f6fd60f9bb52a4ac9e8341a98cc5833d8bfba711 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`=AJH&Ar*6y6C_v{Cx~2-+hHN{ zw|vXl-~Il)!g`%cZb<&$Y0)YvG4o&J&6J%7&Tsy@e{CvP+*t;#KfJ46+n)OZG=jm? L)z4*}Q$iB}9jhm} literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f85da96353d76577ac9eb76bbb1aeb0abeb01f71 GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Hl8kyAr*6y6C_v{Cx~2-dvj;+ z-~Y>WrT;w+KHTE{==OR2|4*MhmH7APCwJQ990qY~e&vpTpPq8h>E&f$m}nqUP}%o4 Q31|+3r>mdKI;Vst0DQ7jqf^N&dy2Hu-5&*!gS!HK%D-m@+f`7vaC^bLD71&mRp1U!`-di= OF$|urelF{r5}E)!h9wmM literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a9e1b652a90eabc9a87e1d51fa94e81a8ef07dc4 GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`7M?DSAr*6y6C_v{Cx~2-bNN#7 zpFi{akA8n%VZF{{5NX6nX*%%wD89Nwv#I>Oqm%t+ywNNC&|hK&0z3! L^>bP0l+XkK;bS9b literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c8f8def3d75fa5b084620a3d242a968bc6df4815 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`E}kxqAr*6y6C_v{Cx{5J)CI@< z+r9nv-{Z^MIH$XOI(6dze!Kr^KR!RzcYe3dWl!6K(njZns+D>SjAeCZY-NUFd$ut! XC>shphLvptnaAMi>gTe~DWM4fe9tR9 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5746c6ece28346abfabe58476bffcfea630b24a7 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`E}kxqAr*6y6C_v{Cx{5J1Z&0q z+y4CK-{Z^MIHw;uweQ6L`TPH-{rL1(|L{7?&I;axubU28cz=pvVESW|!;{3crXrV- YVZVlm^+eW8DWG`_p00i_>zopr0I;MiF8}}l literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..dd34af3e9997ade1342afc05f26ce6f7142b9ed1 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`E}kxqAr*6y6C_v{Cx{5J9F?v7 zZ=4o$L}+)`Twgq@zg83J#7z49aE|_D)kr`<>K<#7z69}Y-3>H X))v{_vHH*xpm_|Qu6{1-oD!M<1m`LY literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..24266842587725942f78ca461e21af2651fccfb3 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`E}kxqAr*6y6C_v{Cx{5JEDVnN z_j_yjpX1BhIH$W@J2mrveciu9AAX-UZ@Uz${XwefI_tXD%qKe;SS)^2N?IIk`EZMg ZL2;$X{nBgit^mzr@O1TaS?83{1OUr#FI)fs literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a6d0c926ff58e7c71bd0c0020869cc5c27f08070 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`E}kxqAr*6y6C_v{Cx{5JbZ>h6 z&)<{lZ@)jUuwLg}-=+WU|Nc1m;pg-GHe+F_k5Wz7Sxpz(J=w{?!m`s+LZ!m;<1Hoz Yjf)~r&u=)A4>XU#)78&qol`;+0PG+tfdBvi literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8527c48db0a53f2eb66abaa1a145470085f6d470 GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`&YmugAr*6y6C_v{Cx{5JsAc~8 z|228*zsJFcTf7hLJo4@T{P*<||Nj0s{@~_=p6dd8^e%i0RzJ_GaNyL@LkA9>@3}6< Zu$fWd^Mu8p_5zJ#@O1TaS?83{1OQEiGXMYp literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..baa5f1d9b19cc553664cf0827c535ef61bf4731b GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`&YmugAr*6y6C_v{Cx{5J_`WOq ze_BTO|Ks4pE#669ArJoR@2@wm`Tco%VquX=ob!iW3U?x=+lV(X=vzxS+sO0BMKdfe W6{<7QD)Oe XIYP1ZM@v@#jbre1^>bP0l+XkK?wKkr literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..104efef51e773e9dba47861ebcebd58114b53364 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`!JaOTAr*6y6C_v{Cx{5JwD-&Y z*`Im3?f;J}1`j9g`2XVF|L^bb8Q1*yF!AB-^ZFLN2QwQM%`sZMV1mNo=jZ23?zmAY o;c3Re;^N{Wk&>GFK@(_b-hAK0)PB2ntUawdYn;@I)K9Ad>VQ%}}M&}OU^|}m) XjD=P>S@_Nc8pq)2>gTe~DWM4f0*xuZ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..90ef3594cf82550911c840d0b7161417108e9a7e GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`uAVNAAr*6y6C_v{Cx{5JwBD`z zfBCh|zsJFcTf7&g#$EcKKfm6v=KrtRiI;ZC>}h*Y>R2(2Iqs~^50#xiEhJc6>K<-o ZW!PmV@@HqF!GEBE44$rjF6*2UngHw=E~)?k literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..64cb4de4f204babc1dfd5831222a80bc6976b28b GIT binary patch literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`L7py-Ar*6y6C_v{Cx{5Jcy~wr z_dmblPrpB}uwLih*y4Znzy3{qc)35HM?7uK!AuT6<~gT>Bz{`#l-&34*TIAdf`>dd nF)ApWID1;*q-Xa&_x=5O%s{z}EzbGFE`?(@Z8qW!4E)mk%>uIp;-VQ` X?g&>OYFlvvXdHv5tDnm{r-UW|Ob075 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..69f228ecccf4aa03e753b37e16184ce0f2f1ea6d GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`uAVNAAr*6y6C_v{Cx{5Ju&z%2 zxBM*U&whViVZF{i<)#1k*Z(>B;q&GEw#@6&AEcVDvrasFuflZmgUL_C9;G~(`ls=_ Z7(=O_m}&x3c@@w=22WQ%mvv4FO#p|vEq4F_ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1f2a4ccdf8be4176679d5063a29626453f2b0f97 GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`9-c0aAr*6y6C_v{Cx{5J7zY3O z|6S+Q-+q5yVZF{nQ#JqB*Zn(M@Zya5V1! z-P>>fJq|wH;;mF3{^FVdQ&MBb@0OepYVgLXD literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..14251bdf62547095725ce061cadd3e4c8d7bdf93 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`fu1goAr*6y6C_v{C;VtWx;F0r z?ay!iJq|wH;+=GT&XND}`~M{U`1DtQhVLfEJk8IN_VvHd9yolGCv9>L1ILG=jYfNZ neUP3n^oOmXVFrVC94o``NfO=0@{)UihBJ7&`njxgN@xNAW(77% literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bb398d06881fafc854ae57a8516715baf91f231b GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?w&4=Ar*6y6C_v{C;VvswQ}lz zW_)glvB0RN;;-O()e2q)M#jLp bJzNY+=Zil!nQ_PuXe5KDtDnm{r-UW|L%c0Z literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..76bcb32763ded4814b7e2905dfef6ba1c6d79f61 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`fu1goAr*6y6C_v{C;Vu>aa8#K z@2%l~jxTTHobK{+o#_Ainm=bg{61}NFgt~L*Igxv`nrFI4xBp7nl?Fyfn&qxPX;yh nU-{+>{b6fhSUy7_j+Md9T;ibS7nh$v!x=nX{an^LB{Ts5^9?l- literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..cc8c2deb584c033a20d5668e82f74736564fd6b5 GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`9-c0aAr*6y6C_v{C;VtWo0|E5 zxk~H57Pn5`r3`avKdwwXr26pYgFpYjZ@1_9U-yT3^U0z{$2Dd@^%xk%{KVSq<^Mn0%Cep@!THC` ck6H{2_OnE|i(ahp2O7!X>FVdQ&MBb@0IlUOXaE2J literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c95aaa35b9d9d014f2b704368c8d1dfbf0fe7547 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?w&4=Ar*6y6C_v{C;Vuxv!DJy zwQt)0k1G=oscy8e{Ph3%{QVO9{{G}noBXuNNZtEWECZ9xnl(K9_O%DIIpdfe9Om`2 cuV-SI`&D$#eA`X?fkrZTy85}Sb4q9e05xeXf&c&j literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bfbca1eceed370c9a69cb48b277055a06abe7f50 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`fu1goAr*6y6C_v{C;VvMDt+kx zcmFSc`u%x@^*R@;bN#Qc_&@pK=jZkbW+&MqqQ4l|{rb|~IDIgTe~DWM4fj?yyf literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0548d11cdacc58f3d31d9326b65201d6a20d198d GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?w&4=Ar*6y6C_v{C;VtWaP7kX zbCvJ@e_WY(NOhu-^5g&K_3b79)%@m7oBWh%x=s0~SO%t?J8yXG@6{g9=8R)@XmIWj cUeCmEV!r5!`b8pVfkrZTy85}Sb4q9e0Frzz>;M1& literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..25bd76a6987719f13d5b25ef40472acf2a8d47ed GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?w&4=Ar*6y6C_v{C;VuhH8b)5 z<<~a<9tR(8@lLw5YtH|8`@ac4{(Uu{;X94nVcX=lOac!cr6&LQ@Qgjq`-2n%6O)om cg(w39+gWiv-J`od0F7kuboFyt=akR{0H+!*=l}o! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..30f73eecef67763a51322cbe62e2db3393530c03 GIT binary patch literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`L7py-Ar*6y6C_v{C;Vv6-8%W7 z|M?Yv`u%x@^*XtYul=e2|JC^La{2oQawhQ_oZv|O^X0ELvpl=_4Bt(R3I~p#Jp19# nW$PNR57G=wlWLqQL>U-Pc}Pl6DpJ}CG@ZfI)z4*}Q$iB}MfWkn literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..602c2364c21682d76e4585408248c0b6cdaf2d75 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?w&4=Ar*6y6C_v{C;Vs*JAdte z<+jTIA6F(GQZ-aAJN93H|2~77-=BHUsGVl5EUSF7n}KCVay0S3 z^DWzdkAn}lct1Mv_viop^?yz-IIMg+V7E5^dPNJzjNR%#^%xk%b#2@7*VjGR%CerZ jUH*PTfzg$tuYDMHe37W^s@fI}G?~HE)z4*}Q$iB}JLog> literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..983eeeeea3f5babc38e430d388bc7ecc9b297ee0 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`sh%#5Ar*6y6C_v{H-ssaY`k7C z@Yek3)BV-E@7AXnmK^9fJ>gDl=YRQoRcAhY{;bbtnw;8pGVimbXIZ2B?!WcVv$FT- zB^+RPh-;8+;5HC6YH4kkTyGP{eBbBwu-t&Q0#l4g$$mqelF{r G5}E+~H9NEb literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6480e0379c44a06d2b74c77f454af56ffdfda161 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`sh%#5Ar*6y6C_v{H-s&y%X(Tb z5PN6hcl*t1Pwh8JSS1`uJu&5K?f>`pYY%*Qd)k~Ww^p}p&IKj6NwE_mC;zfvXu!6f zTjB%b1n~s62TVRKJP)5dJD}Zvok1=xukC$&{e*l5Lk5PBW>rx>gIWK87BYCc`njxg HN@xNAtt>iG literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..dd4ef111571418e67e7749c7f2007554e276ed04 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`S)MMAAr*6y6C_v{H-ssaeLV7C z!K%dTbp8HsUH?xcy=V}euDEn}*q{1>*L;W1pO2Tg(#tEc>#ovMU2dL44<0POXcEvBVrqPA}V)$IQ7`Hp?SXe8`iEE2Mz{?4JI0QetSNU1KP^q M>FVdQ&MBb@0Ae*i6951J literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..78cb7a58b59bfd433ff74faa2b8a020af8130eb9 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`sh%#5Ar*6y6C_v{H-se=N8YLz z*sEdv?*Eh}7yh3}deI;_T`^tFhwGK3XW79iPd5C2dy%ms z_CN!F!yX1>2Jr-?6b^lB?YPQ4Y#c?!1~vbF&aPqZU}Px&q-t-dc)!2?iL?U`1A|JF+*S3PGLL}vF?hQAxvXt2+Du literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..81b05aacebeba012665e851b24dd2dcd27fb93a9 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`sh%#5Ar*6y6C_v{H-s&?fBva` zM_$qP-|^2fe#%Gk$QnE{N+~RQ^8dI0JfoVQUuQdpdp0VTy(@B?6dUj?<){7eYdq_@ zB|b1t5Kmxxz~s}y^Drs#n0EhlhPX1bw*2~klkyo185m;R6g^kU2>tzopr07!v74gdfE literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ecc6d59617ed7e3bd5ec2509147693ed3c97f491 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`sh%#5Ar*6y6C_v{H-sHHzxk_u z$G3uYf8J-z{w^QMBWv);NJX>k*#GqNaz=mte4XkT=-8cj?-7sNq}T^3)4$)pX2iOl zTjB%b1n~s62TVRKJc)@94{7&bXD~C9YqPK4H!+{V5NMfzqRfH%OJYC^89ZJ6T-G@y GGywpuP&pz1 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ab02da40ec28d2f9dc5fc4884f15f348409b165b GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`8J;eVAr*6y6C_v{H-tU-wRZJ? z$1e|)+5hL?+Vs$VlY~{mA+;4Nm!19b_PO{DHUViBw=Im<^JD*>KYH%)kAHWo+xX?} zj2dpJ>~3gmY;+9p5OD6%V4l#}z+fL&xreQzqoZN3!#2hv3=CO(>J`g&{QeKLlfl!~ K&t;ucLK6TvmOkkK literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..68ef08ce88b5e3d44ac405d57bce73b2f22114f9 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`sh%#5Ar*6y6C_v{H-sr{F#TfR z@om+Y-|y!<|0f^GBWv);NF~+n*#C6?`G$Y~{F>|-=shvf?--BUq}T_Op8vaVca(EI zx5Nj=3E~NC514#fcoH8b9o6o?&QK;-)@FadZgM_@Ap^s?GR1{ur{0MJEoAU?^>bP0 Hl+XkKrsz8V literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..14ad8bd1269866c062d3cac4df68b4a84d69d6ca GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`sh%#5Ar*6y6C_v{H-s%nOS@4o z5PRe8cl*8P9@}q{uu3?RdSXeb<^T8hYma<*`&pkYmszxJ&jQUJmE8(JCG{~IjpM`( z9xyBDAK*E_I)g*<(8;r1;d1L4@6^cf+~5CC?LI>i1H&Ob<%j-@Q@Vi`GI+ZBxvXxw literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4e44c190683db3738fdbf97e2704fd6d4cf151fb GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%``JOJ0Ar*6y6C_v{H-sfbzg_ZQ zp(-=*_5YWWQ~ysqdVx_{&spzG#OMF7*3RaczpplNgNZ?!!3mCotEO>I=XQ{?tNnlK z!^`958`5I*5)P@oxH^Y@TW|klY3Cjd<_V1Q?Ba2id)PRNJ~!=k*v5E-fk9kPy|d)6 RS1QnI22WQ%mvv4FO#n05K7{}P literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f96239a596f2ac8a1c185d0b31b69337c594810e GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`sh%#5Ar*6y6C_v{H-s&?y7{Yp z$GVbrf99vp{w^QMBWv);D8=nf&wu{;wkbb;z1D7?)+FY9>=BRKq}U1R)4$svHDX=Q zE%AYIf_MVk116sqo`*>f4{7&bXOJ_KYs;_SH!+{Vkbz;zJZ1LtGv)pOEoAU?^>bP0 Hl+XkKV)8j| literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5f6e10e6e3bb4b067a4a81acc93b0ffed45d7f6a GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`sh%#5Ar*6y6C_v{H-s&y%70Za z5WB(ZS^cd!6aJq_deI;_UGefd^FRAbpYk2v-fu6#v!+yHlZmv1XPM)#IT!wato>IJ zd!T{8VGn~bgLr~c3Wv44c3kBiwgT=#qd$MX%&uYXU}O;grn=^H3;#Z#g$$mqelF{r G5}E*feL7(P literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..84ef7762eabba9d46467549fcf6dfc3d655432f2 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Wu7jMAr*6y6C_v{H-ssa7T%~A zkTpK~zusf_@%j|Qk^>#5C)|py{GYn7*yzo^vWW{7l;#|CGZb7N#k1j2f$@!P7s}56 zue*Bg|HPvnOoqXK{+s*w9bG-KbAn>{KAU6O{nr`fYlYk5_^ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7768fbd248ea2942a23460d5a081a7f733507349 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`O`a}}Ar*6y6C_xh1zPmJ{qpaV z32Rljwf8RHxwHdJ5|RZCcVavL%ipUy^Wp2yayH#+)3%d&p9@zVWiYt?XW5QFa1S)J+6Me@N)4(}jMVw!q*;?E>&bvU0f$K_D#!PC{xWt~$(69Du)Kso>b literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2452278c72cc76230acbd6d6e07a487b485a552b GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`ZJsWUAr*6y6C_xh1&-*=`!Qd} zat)W`miTJcIcFPK4U8TzEZrUUr@r7d-{I-c*GrVVSu3&YuF{58sfW}!Ht{Zdcz(Nl z!dVq-c^0STTMq1HU~-XWVpcf2t~Im5)bQctl;=+q6COS~u$*N(;{u02KYw!1>Afxz p!|){i{41MJK;>&}Vk$%#7=n-4Cr%a`t^!PC{xWt~$(69CSmNQwXe literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9cf426db5294f34ef424a3fa8ebf76776267e248 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EuJopAr*6y6C_xh1#5GbACPe znu(`jjX(;+8SWQFE{&Qe6AQ#2F!}sY`DtMxvEydMhp48@3;_ytzdkabQ+p8chT+Nc nZ!Z`=?PXxv^JYzjC<6n_6T9j2y|+pN-NWGN>gTe~DWM4f<2goO literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b595e5f0331d716704a9556d0e4ec04f61dfaab4 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jh-%!Ar*6y6C_xh1tP>G{;Rw5 zt#%SvE5DjG-8g}*wzo{Hggr+0iX}R$}$xxH(yd3}?(HoBaKMtL{}r zYy;y2(I%dTO2*hejRb+!yyc8~2U`3mwN7qr?3CSqy-xljR{|9ci#B_@`{8=Nt j%5k6g0WOOV+Kdd^KMbR8$OkF|9mC-1>gTe~DWM4f6>>vd literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e9b6c4b11fa3cc49f5456f8aa6f801fba2e8b274 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`&7LlfAr*6y6C_xh1-|^=`A6NI zZ?%&^?6VBcbmIiZ9v+JWkDi?P|9!qqYQ@*L?9Dr889BeX^VH&M62pvK-*;vI5BHXS z+{M7Gpv@x5@R@0sOyGhuCxzZI#WZlvSK-&zZq^W2kMk~&V&FQWzrX(Q&6b#M(S|>B mlC$0Ri90lOw@R*OVpzGsEK%!X$Q7V-7(8A5T-G@yGywq4-$j)G literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0487635d34a7ecddc2839568c86ef86a85194981 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`lRaG=Ln`JZCrGe13#_>-@Nd41 zlK(FL7PA?-6H*Q^_RZ7yQ~&r^ZQFAH{YDnMUl>G0e@PBK-Qp{dBJFc{dw%`F zS%o_rIA=e5&@i>&_K~AE51M%J%vSVy!E|DleeJKKA3ibP0l+XkK DRDMom literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4cc919e150f78c879eb8bcd016f5e59073c96c36 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`&7LlfAr*6y6C_xh1%6a+`={>C zx7tbIZN_Z&bmIiZ9v%yapf^4L&(E_>`SI(mY4fTs&cl0-N?Ke^VwjODcW&zcwP%t) z>|$V6&}NZj_{_9RCh)*XJ^pu0F%6vaRiw4enT>_nNdW)= literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3ae23268aaed6fdc789a38ae4043cdee3eb46def GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`&7LlfAr*6y6C_xh1z5JV{Zn`6 zTkRz9cFuFYbmIiZ9v%yaQ$0QZ&&$~*|M>NbyLnZo)ZsZjk``B!7-ra1RhX5FZ+%urh#+5inO^kGdDYToOgi~1J{xG`1(UPTVlFJ8~)_X lf8?@H+@YbhTXa1W!=o&7_07D?I)Tn%@O1TaS?83{1OO;HK}P@p literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c5df912dab0924b38a0571e0899c3c4901563c2b GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`&7LlfAr*6y6C_xh1+JXo`R(5) z6V|F=wf7wJxwHdJ5|RZCp0A7k-QWMaHTbW6a%(+uco8hPB lx*IcV^cxt|&9&oL89w-0Uq8alX$5o+gQu&X%Q~loCIApGLU#ZF literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6af34c08c70334c382a2a7eceee43703d89568d3 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`9iA?ZAr*6y6C_xh1#(u;{W4$1 zat)W`moGhD7PA?-6H*Q^>Ya)B{QuS3**yOD_9hi<-;io>g5%(-X`HhaPMFPTTfe`q z!F2MQ8i9zYD_q~1I0SMzczn*U`4uldwJ%&)*v`|=FOMzHjIYM4K$?N;i2wclhi<9> pSr(OooEEcFm=hZMo4MCBF)W^MUmBIQq!s8U22WQ%mvv4FO#oP-L!|%! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1b1c348031b296b23362e28f5cf2d4fb97a46d49 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`&7LlfAr*6y6C_xh1-4Xe`={>C zx7tZyZu)HYbmIiZ9v+JWJvSu(%iC3-`0(p?Hk+`ha9ht&NsFsV3^Q`4o}2nV`AqVM zT@1_$+ANX`pP6>a1S*`@DX>ZTK@M lX{OUYafgQPR_^so42}v`+~vltXMxUP@O1TaS?83{1OS6UKJ@?q literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d9aed3872fa950c91f573bc7321266dfa40614f8 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`9iA?ZAr*6y6C_xh1w!8Y{`K#Z z32Rlb%Jt)zbGCuiz~}+P<#pzN_Ln~8JN*0je91Gmypo$tq&KWeJ*395iFet<>(}iQ z&Z=0;vv7qSKd_g9$wiup`DL-we|NL$$5)TE_)nTVe{N&%Y}WZgci0-3J_5}sFpCQ= rV4N`j@$Ww;zcX=c_`LB^C5|7>NGv@BH;8~sK#wN3%Ed1X8-`nMkR{Rl9{;~Sp$qR4HIG0E9Fl^RM>-t~6 z-idvW-T{UaTK$nDpEP%R??E3=(e^2{(S|)rp zeSY$lfrW>eperx{OrhTtm;VlhmjB7pjBWr)h9GNjuC~Uji3yt^%%-0oe=+=g`wK;k zIE41_4zjgyBI58OYj=NE5pt3^VM(i4FCaVF8oRW XDZ*Dy7VRU}00000NkvXXu0mjffbv{W literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..886c41a7bcaa0867eafb4f4c2e86a170c278e722 GIT binary patch literal 221 zcmV<303!d1P)IE41{Ovb`m;ftYOYj;XBgW0}>cemH4FCZycKk{J X;m%uh(h1V`00000NkvXXu0mjf@6udi literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bfa6c6a45212383c13e51f8de5af003b5460ed9f GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`OFdm2Ln`JZCrE@WsLOg3e9Mux4D{MDA&bI#Wfsk!kd<^ujbro6)6duQ%)eLbCa7#F2Gn(S z!P@n$#$pm57{3@CVB1i|$hNQc=Q#z1Q~lS4_ONw$b{W)E{GC|C?9ec`TXsDYgV}@F Vy;f(dTY(N{@O1TaS?83{1OV&_R@?vp literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c26fdce20bcea2c93efa800494de2126d01f0f0f GIT binary patch literal 231 zcmV4iGjO1AO_~bc*y0HPySYW^hkOL7H!0H7U`1$z@1E-h}UQ6&Az%L`o@cq?0 h@(ln17A_9F3IP2MT!1k(ydD4m002ovPDHLkV1iX@TLJ(8 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f4111beaed85a45d3312cfe6c0c1d1b227665e16 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`%ROBjLn`JZCrE@O6i42wPni{A zDbnE2=y=wk;XLb$hKY>q7RC!d{{NirFS*X9_UMDGtP=@A0sW!6!gjOe_WeC@;Pg4K z3!)MX%L)R^?);w>F#mr_rki<#it_~1E$-|Ot{!Re6-c}Md%e9xT>alZCAT6So0`w_ z4m$a>r|TFzV1ALB8$(D|jb}izQTiloVo1kz`=HlcQ51%D`}T XK^)_xm67*=PG<0Q^>bP0l+XkK5inGR literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..266020c62957df207c4abefbf97d30dd689068f1 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`OFdm2Ln`JZCrE@G*mU5By^-%4 z8Lk7%8y2KV9C*%Da^OS*bA_43|NkEzG9RA4JYF(o%Tmd0=5LO!n#MWb_x}BV2?>u9 zlYK|{LI|;#&O;sqz-7FIr!nZvI@@$BZf5%viq+yI?wP6 UdQ<&e7wBLHPgg&ebxsLQ0MYhf;Q#;t literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d55610b7094e43192fb2fcdbcbdd502d77dda8a6 GIT binary patch literal 222 zcmV<403rX0P){k^t0^eyA;=nXY|Zd$V!|c}v+48CUkpz^e?<`^ zIToIO{>q@Mq<}LP81Mn~Fu(?|dI1K${Qk`#&&Pw;61)aT@^CXe{Pcx<13*BOixaN` Y0LT+m6q)U5A^-pY07*qoM6N<$g6LFS=Kufz literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..82985661ca24d9ae3297c841ead92c5d59c055d7 GIT binary patch literal 240 zcmVVSa|gC6N8z#2Jx}L00kfoAQ!xR`4gvRyas^4r%%5a#Kqb1 qDZy`moIEes1!Nll0?4s|4FCX5Okdf22tV`y0000eyA;=nREmQDnV!|c}v+38bFAP6_eMAu> zITk*DdC8!tpoKFQ81Mn~Fu(?|dI1K0{r<|p&L)J{61)cRaEmki{Pm7}13-Y8i36_! Y09lz+^SVACumAu607*qoM6N<$f~B}z(EtDd literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1f8555033f2831b8c51ca6c78da1c10c3038c73d GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>pWc?Ln`JZCrE@m__cQR|B0DN zPXie2SXoRDGuVj>@b3Hj=ac-B%!`v+|2yWyyqfXhX36hsxonJ#b$iw&IEh~fxtzwL z`6TIiqKJr4O2wZaoXj1(Ld+)xpECLCa3!({KV@Rm5D*kheDL(?QLXmN3<3=|zdSoD z-S+(a{KXv;Ww>W=%Tdr3lUTqYQlKDyfN5e1v%`bGyT9{n+GJD_+jX5G)HHMh_X#rw fmI=v>(hLlK!TD28@SL9pbUA~ktDnm{r-UW|PGME| literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..71b709f2836cc9e1c5b3e0b538c8103497fd6d4f GIT binary patch literal 222 zcmV<403rX0P)@4t17-G8z)qZ>eyA;=o+Q=IT>V!|c}v+3uTpA0`f{y-5U zITk*>{KTNBrHC^Y81Mn~Fu(?|dI1K0ef`P6A;gK-61)cRit{o2c=w%r13-XpE4`L zQl!D3(ebQ7!+F*h4HFsJXKc}X{(trL^%8P-t4=2*tvxwG+=O*?lv<71-nw6%jgx0j zU7&5i;FFlR{r>+CI_>{cGTqD@RGcT69uc*EeDz3+uRz-6>;Co;dX> zyzRi6u4C|k`9)#_Z^Bn5o|@l(x*Z)_nAfXT@CrFVdQ&MBb@0RL@OlK=n! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f7fe932f2e622c4d5e9e2a43bdfbb47fc39742f5 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`n><|{Ln`JZCrE@OM893~|AfiL zA`OQ5Oii;A8Rm0eU{q%2D@Z&x>;L(AcF8;b{LpLO-KyK{=*AJY)#pb})sJVa%<}Bw zj^POmGY&0vUHkv_qDvpyjNH(De+Su6{1-oD!MjhB>hGiQr?fg{VQ+cL-lgVOfhe?Vjq=IyUKV&5xQsdbC^7MLr9{KuO7eQr9vADX* zlM9wEXf+m-_`vwZ-~ii(Dn_<_|Nfm)IHJ~aU1$$mM{&3Dp5I^lYM31wnmd`-GclBU WMr``4opm4RUT${@Bd_JMmK;YLy$GZ_xa=1#Dq-{X4BVq-xQ|DM6XS_fw=FyI5|VSo)_^#Tlh|M-)ESCSL2C3p=GQ50bK{QNul27mw?Hw#_` Y0G_{JIM699(EtDd07*qoM6N<$g3A(I`Tzg` literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a03fd5be8edba4dea2cdc73ec0941480eab91d3b GIT binary patch literal 256 zcmV+b0ssDqP)^2Fj zS|(gJ?Yw=S;lq>93|GE9W^h+E#On$S08=<~WBGrtLI>gk4+fAG#!T`5U)CNE=M!xR zvIf6uXS|x2unEF!GT~EX`2O}MiWt$cP`fMd|BII|7~Vhm#Gq-chBFoz@B#ENzy`2- z0S114{>5;Q;U!*6@EQlUIPFuVr1^9C$fnE00005Y){ieA5cPO;P@D@%d zGobm^quu_$bG7w|y41d4V!Z literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..aab48e4e9ba4acd0ab7e7d4923f06f10aec47371 GIT binary patch literal 275 zcmV+u0qp*XP)9A;tY9%7NxT}-Z2=1~Ffgz%GchBJp}UTe0S5pnymj|6 z!{@KR7>xCl8QfClV^zz9O(TeY`SK+LKMxzjm+ybUY;3mU1dE~0ol@!Yzc9`c!&^9= z%z)9A;te_r`Bwmf^wtxi~7#NtDnVFHr&|SyKfCGRO-oN{R z;oFyQ4BGly3^}1iSk*FN(+Hwpzk1EU!^_R^{p$}f8=LJoK|R#D#T|M7Bhy1MyoJ-r z3}}AMtV#W!P#E(cn;c%7k@+A4-~yz$1m*=~1F+f5gf4(9v~kHXp$i~8@!Oa03_rj9 z#43ju)I$}5=**gw|72;Nvbyg-EDW%vP@({GI=}@m!T=e7!azWjAFm~N4dCM8#P37~ a1_l80BbYwc^?rl^0000xeb6|qk*w<_rl$M6B*eVG;0c8^Bq2aK3?KVFR#R| zyGk2Yr5;))=(4}!=cLBw`O_bMpPrv!W_G)iWHp z_NSNLtIsK_$aQ;K(u{?7F|50AO!at+Uc(!g0Fi$`zcH_ti4))s z9A;tY9-9NxT}-Z2=1~Ffgz%GchBJp}UTe0S5pnymtF8 z!>8}x87%a47)%Q4v8rXlrV&IxfA*9?keh?y^UvR4Ha6RFg3VCpF3OJkUlZzs;Vqm_ zWdLHoDOgSj4(h3pfHf&<-}_VUIX|zIPg1> bfq?-4gwvTo+>zt%00000NkvXXu0mjfAX#zO literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..611516c94076e320427028f4daee0f6852acd258 GIT binary patch literal 269 zcmV+o0rLKdP)tPz!K_QlQjMR+J5R7-ooi* z1~k7K#A^T74b}LMO%AWk$b66iZ~;CWfpIE9l1~iB}`KEnoo#1_owEMrLF&bk{L5-~b?n_n$mv z`10#FgRYVSL+sq;Sk*FN(+Hy9ynfBV%g)B|?ayB@8=LJoK|j>FP40I8!;N(@yoJ-r z3}}8WbF%!OV{7&wn;c%7k@+A4-~yz$1m*=~1Bea-Tm}#o3;jq={PO!Z!|QL~vC82E z{ZNG!ArB?=&?16%+j43GgR4CMKE@LGb`03KFW{7z(GU;qH* WYlc1N2R#!20000t=`Ln`JZCp0u|l|J;p*`TBL zi;Ln6H#P&ql+uWUQ8tq*Oc&i|5=#Jr#Ka^wG3RnwWoABxpo+)8YTNwh*BQ;2nQage z{Utf{bc?TYN8QIqlFbbY)`y>;uRoBJv+XfU_QG>>t?eJwyG|8u+rDAf1C2@lo0-Fm zntsf;`n&3Nf2SJN#KD7S3ZhCsBZBtK_l&AO5LtGP$E_!OOrHv#{5@ zk299xX6FKfAK%{Uhgt4P&<#=ScsKurXN-=4LS|bls|Jt5O9or94z?378N?41Fd8wm rHtw*nj`RK?b>R5%w)>qtJUk2u3zq~{zg+eL=yL{7S3j3^P6T_&=g&7V8=LJofgjYl9?q5jt;}OEyoJ-r z3}}9JvdjB#Ynk#Nn;c%7k@+A4-~yz$1m*=~1Bea-Tm}#o3w}sW{Pp`Q!{2{Du*%^D zeo%!V+R--eKUtcSVrTq^c>!ArB?=&?16%+j43GgR4A|L(@LGb`05(=`{7z(GU;qHW W|Ak^xy~#fS0000Gq3+y>G$?4U&li0B$FLult-(lCNn#rtqz&~X}&`JZ|7{D=mr?zb;K z*zeEFX(=3&b*fZG(rg@WaRDL7CxkvWqCnh}!&4I(%IiCWH-YAA%hT+fro^%p@tZ~+eR4#t1M9DqV-z85F3%{g;` m6mXDb8}nRqK(bEEW+Z>UyS_rMeg0qo0000g` literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5f1f02459f8357d094fdcbef9027c8d9c478dd4b GIT binary patch literal 272 zcmV+r0q_2aP)v6Sk*FN(+Hy9zJ1HU&cn{|=i6^E8=LJoK_Jw*UX_0Ttz+ykyoJ-r z3}}9J$#eg2pW^f%n;c%7k@+A4-~yz$1m*=~1Bea-Tm}#o3xP;Z{Pp!G!=E32u*%^D zfl!4Y+BwhtKUtbnW@P+_c>!ArB?=&?16%+j43GgR3^;^1@mhk{05)!R{7z(GU;qH) WN{9tF0^{QV00009A;te^&uBwmf^wtxi~7#NtDnV6Bq&|SyKfCGRO-oN{Z z;oIk54B7@N40%CQu&QOkrV&KHdi{!ln~#Ix``6!KHa6RFf*PoE3%mXPhi5rpcnhbK z8PNQiUgz;YuGslMHaWaDBlAH9zy(Ng3Cs(~1`r(vxC|gF7HW{32#Ug=-~VEj!wYJl z3PCg|Aj#4^X006P@({GI=}@m!T=e7!azWT1Ft1`4dCKs!|y}}1_l5r#gs9N SXr;OU00001|hVD8>1{?sS@anCb z44=MzVX!nXW-!PI!K#)Cn??}*?CCQGL2h1#Pd~na+1PBy3ARC2wsLG<*D%Kv0(zA$6We^?k`OQA#o0o<(I_?^hWzyJUO W{f}vxyTjlB00009A;te_f?Bwmf^wtxi~7#NsYn3$2p&|SyKfCGRO-nw#! z;oHX_3EJM>cz7cnhbK z8PNQiJ}2~le4qb+Y;t&QM&^SIfD4e~5||f|4ZvnI6S@Gd(8eXlgf4*W#P1(}GW`1b z2df-jPz_ZGqSNMt{3lEEwCfH3VPSwRg%Smj(*Z7k5eCQr6b8JKoOmt4YXB!dJANlJ bFfafBQ%0M!89vFk00000NkvXXu0mjf5(03_ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..174b0c47aefbb036e132041ead3e64feb40ea035 GIT binary patch literal 297 zcmV+^0oMMBP)Avi%TlIb8XG)zu~^N9`v zWCPG$Krj|kk-TBRC&%#T+h445c)<#&KS3Ho+C5MLkRV7!$`7zGz?MRZ0w4pt3LQub v17rXS11>QRyq4fK;KHXz3>MO=c%2CVJyMsIt%S~<00000NkvXXu0mjfKfrS| literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c1c53ad2ca6f4ff6f27b8ec290164eb28cf0b12b GIT binary patch literal 343 zcmV-d0jU0oP)^4TfDK7uNKL5_JxAiEP4N?P>V?YOfPz5lMyDRa(Q?=E9 z_jbGgAU3*1Fg6p6u_Qt-$ z?Rj?pL2Pu3U~DEBBd2{2hN(PUtYG^6rynTd7%rGn>GHol-~K<$6)XE9|HEu5jI#u@ zd&(fT!qmZCu^7oY$eLjW!wi6V3!k?cV74H;02Brw_N>N06gd>IxYY~pd}IJ}Zgr|P zhB&epSU?O|pn#kR3b62^lnC+yzLdy-55Nq-rv{#su>lPQ0R}Mv pNOC620Fa-*eE&4+t>gA002ovPDHLkV1g*|kv9MU literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1e137a3cc25d3f95433e7f508bb282884b585b85 GIT binary patch literal 343 zcmV-d0jU0oP)dO$jLigN^j1v5FqM;=6HI^l@EJuM!v)11dH*wOQvbtT(KfsBKg_1c^iVK6 zzabk;!_>iDQIF&tWX&*xVFtjwh0ogzFk6sa015*TyQ;SgMGghjPpyPI9~pq03kpbd zabz#BfEchq0XY#AU{$I0U_KWQC&Txz-!Z%glSlVH1G-<40}$|p4N?P>V?YO?Pz5khx@*OMkLtYt ze(e?iL2Pu3U~DEBV|7jqhN)~kTwwa^`;RE%7%m8%(gL;#=8CM9GylVEaxF{)vm<)y z!8A-A+!e7%&Oz1;GZc6n*##gQLF~j?-6(P>Aa?OYxbu+#NV8{k9)>uw z7g#_HSfGHM2nw)i;pt#LJ1-Bz?=Rmlya$s<_dWxWgz7^d=avV-ZjpT3}oW4K^ZcHI9d$zlItuGraB`X6RfO{fo; zJu4>>OvBW{U9lO-Imnt}2Ez=1c?+Mn8DO>`y8sjhAoj}gEEG8uu(>P^?tEkba&CKc z0ERfS7g#_HSfGHM2nsOwx^6I^kAs8Z^N(K`-h;`bd!GT_ugHOj?th}dl;kjY7~ldd z$Q+Q358r+OI~|lRK=h~Y-?64r43ie21tQ45pp*#m0=|^UfDgb7z^4YDl(7LF8F2;) rUQWE0;57i`=g&WXlWzbhzz6{V|KGX=veb9!00000NkvXXu0mjfO6r(& literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7ad7f9fc2ec2dbe49231d8407d93eb6fa03d307b GIT binary patch literal 343 zcmV-d0jU0oP)#lmoW!dXU>H2wcS-~VK|y!r;14N?P>V?YNcPz5mH+2H(NCsgCV zeyrAi5F6bh7@G;kI5X=ahN&zZ%wYQ0mtQF27%nhL)BkS}tNkD53g;5r|1g`h{nWv1 z^8|>kFm-TOSRy$GSu@OFm;o?v;qx{F%ob!9fWiR8w#_m}kwXEN1;%jaBLk3gbwf2U z#F4$g0%E`d1>{6ffbH!$4Cb?NvM~Jp@fX8;FnM(EGobqwIS|qPPZThS)rN-wF2I7! z0onNd?GLciLFocS|Nj0PYbwPs$pkGBLH-4$M35Kor9=jN0A>I_HSna24e&~HGqCVO pk~3Kbfc*UL$3OB700kH!005R8n_=_ota1PV002ovPDHLkV1i_hllTAt literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..090d4f3d1362012b392c021c7b9ae62512241070 GIT binary patch literal 344 zcmV-e0jK_nP)P%H+x;(dviuKo#gwSP|1g`vjdj87 zYAo@8<${J~99~H^i^%<`c qL|(uKKz{!A2N8`V8vqJ0LI42q1*f%1Sf||p0000V?YOUp$cH&=!wGrO)W0} z`zLz-2eHvDg0Y!kjO4@(7^d>_vVrM$@4lgkW4K`M{DA-c6TSY!T(Nmu`hS>B6;)1P z_SEU2U>c?l?uxZY&Oz1;GZc6n*#)350I?S@i$#$`0c$se!<~-|K+bJy zam5fv_5urt0Sgq66F~vy>opV1=i_5z`26`dhWB9d=-y{Q_bYNBqWd2s8j*puML*bv zM-M+Uh>NqMh@k@(WDdwikS37RLFocSfBN(jYbwPsX)anIg8U0gi6AfFONk8l0L%b< yYOsa@3~1{J!^40q13-TM{P_?027m&L5C8z0-oNU)c>~x0000022_do`nnbLIc9-(E8uK0XJ`2C0F`F`xqvr~(*BikSDfSN?ah%li*=MPx|Vf0#{H<}qNl zms=5-hN*+Q!Vk$g$eLjW!wi6V3!k?cV74H;02BrwcA#$^iW~~?^K6AX9~pq0YipT; zA&%??77zm#C?F?-0&Mx3GBBTwm7C%B?{661gUO?Np8?&k$bpFNf1-esT^>9PZ~+!% z4#>tYUtfZq4oVjw`sc5&SW_v6Ngil{2=Xr|C4#(wFC{YI126;dsevbDY(Pjrk%65} r2(Kl04FLK1&mTlIl57Adzz6{V0Vbwnk{%(b00000NkvXXu0mjfDXEG~ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..18069c819a4f4b91143f77ad4064a06455ffef77 GIT binary patch literal 375 zcmV--0f_#IP)D}P{CUXq|}P_5(u^u5j?HD z;4G8b*5bSD?9A@WdvDhxfhZoBG)*Z80@`lwcww(=#?LQwba-r z#pSuVzPU1p^&pOY4q69or)#CMmaj>Y6!MaR&(kr9S&UytW~IF9HJS~YOx|d7W6Qhi z+~zetXIVso4qukCPR~y4UQ5xkiKlQAG{;25k5BzVt$-*VSo#vU3?p@3N+=;SD+`u%swbN>%>MRZsEf0#|yF?L|K zcacAshN*+QA`r7w9~pq0YoFqT zA&%??77zm#C?F?-0&Hp7LNK3=o1NkJx8E4vgUO?Np8?&k$bpFNf1-d(o;y4YZ~+!% z4#>vOFF%2u4oVjw`sdf5SW_v6NnU7y2=Xr|C4#(wFC{YI126;dsevbDY(Q91gn>hd q6R#zB4FLK14^lLeYyc?02mt`NN~o=eWhn3f0000fH-wgVey}7|=l>Q~?Z3T9@-buGr~+ zdY#9A5F6bh7@G;k=r7%bVJas#8<_s|;TwuLh6@V2{lGTCT+uQw=|9Y-@GJ)~JFhtq zOvBW{T~UMN9AwQfgJA~1yoJx(3@}@eT>!EX#IBeSi6VyrYG#JPosSGan&XO{F~pI* zzye~x0tMtmP=M7W%>(nfc-a`ffBlW&J(xVY_ZiUriX4dO{wE5g*LlFh02g3E=74N` z{qz&q>7aB0qQ8Cqg*BC8m{f=sh#>!hQXL4_IPhA6 m*8q^8k)x4h13&>r2mkVaA&OoeBB> zr)O0D2eHvDg0Y!kjOe~<3{&|yxxw_?PajakF`y8sjhAoiNtJ`_0=u&s6y-1*1=l8r>Sxx^PJe1cx3_AR0lcM>EkZ)48h9*ft^ z?C#vmd+#P73#za5`Ff^mxk~fxJdjv=5kgh!2K3_5v}!#&5SY*GW1iLN5%21m7l-58S|4ldkeRG-?g1m+Rgk l-UiT|++V-(?*=gJ8y?fmuOvpCfxG|!002ovPDHLkV1i6ck?sHh literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f92c1cba39279ffad1f5204da0b12047e781295d GIT binary patch literal 345 zcmV-f0jBX`rUAAe?8ShNw$2C0F`F`$D2r~(+6cD><$T%X_n zv^gRFL2Pu3U~DEBV?yW>3{yGz*unItw_j1jF&B`=2O~J|`3&2DktV zG6!VioBJQYP6wq65dH1r53H#a!=wVVKm_?0loCN+z?Tvk@Bx?s_|(9YGBzNqFV4U# r$%)qzyas^${PWXq@(ln57$E=v`31afBTy*600000NkvXXu0mjfFiw$K literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8abe9e18e55a43bdc4e057a22c0c7ab0f41d4d92 GIT binary patch literal 369 zcmV-%0gnEOP)8^e;Ejf^f@dJMa-U4+Yh|M-)Elb@YocI+z5G!cUqB_RKT{11vod?}Fu z9{?Eu3jPx$M@d9MR5*>DQol>XKp1^jua<}ig8mV%x@Zffq;Q4M;g-C&Y`DVU*ye~gFN*ikpTcVI2uR$=|eYk==(EH`LdyzD0+la>$_kF7WJm> ztq-|gbndU{^z0bX+XlPx$VM#DQn6|RK@fdwmRzn$k$(vUgajOp36_-I`n^uiBY;`{vE;GDOg~GGrPYo(xd$E|_Br zdVcvt>;8%LtqcKxFE_C69vO6uI$4Uwvq6y@TTrW-rrDqvt0^%6NU1}qIghC>{WVO3 z!`R>3YF6(qLN1Rgng&Ou?XpQPPld*mjXGJ9s||9sF>{Ay5*H85u|?Ru(smiTS7$MM zlU_cI9b3@N`AHbN!*YzP--Vi05l5YDD4=rD2C)T3twr;#YWl~#>dqZokXoQ}kgJUu z0K9(qTMn208imG`L3@oDl-=kK^!ax}-^$Q+={WHs*Jtx&0Mp_yYfqxKe<0 R;kW<*002ovPDHLkV1ie9yI}wT literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..170ce9421512b82a21b3a183070725daeeb09baf GIT binary patch literal 396 zcmV;70dxL|P)Px$MoC0LR5*>DQq4{RF&LaBu!|auCq4LF9`qn2!X{)%l=X+M!Zs=(2NpT7kq|GO zeJ*3f7ue$A^Fo_;5s1#EKl61u^R*T>dM z5}lr(7<)Vph{u7dMWs<%vaZLH0st_28yL0e*yJb4zd&~{afET*7q_(iD zJJ2J0p-TXe^+K28hlwREe!kD}c+pc$+9_-1c{qoT{W!QEE^I2 zgjErAWYY&kB7nue5Q#v}&M8jT-Fr`)e`0^yB_0QKc3q^6&$kLJ@>LI3A+wGY$$aA_ qYXx@q3Yd%U{|ksjz;<$L1%3eD2DbZ;bXB7O0000Px$M@d9MR5*>LQaww=KoET!l1pME{;3oeUXdmUsSXab2^Po6HJVC7Ah3-><*I+{1Sat_Nqc9< z#4}L~w3vp`tP}7v*;2r8Wk{|J2>^6Ilf*-rta5sNTH|8>upZLq`$tD1$D7+|f#td~ z?6jal>vP7AC-A*S)u%#Ndv0DL0F;}TI`+1H1^`?KCtWhNpJ2JDFHx1>S>I1k@1PI8 rGhi6D)!M?J396!mZVvuO@SB1!AD+Mqo;hv300000NkvXXu0mjfDvG8I literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c81c452f28d942d0aba5443f4916d435d2b6d831 GIT binary patch literal 379 zcmV->0fhdEP)Px$HAzH4R5*=|ld)>TP!xv$h>6iU^@)6d7F?`_B3z{0p;JHz#mUlAq&Q>{3!Sn! zWat!xjy^!gzCo8RmJT+SWH_D90#D_;CL8l5=gl4YV8we_6H% zEA}G1xuV#Y6nTP}4girSXg25)0K5lx#PrA$q*9bc*Q3sdJu0g)AeV$GI_=@|i~wLY z8Bv*uBJH`AB+$v6ydL|KcqyyNh)&!FI=7E%Nk7R>y;!Ul$ImtLaydb1^ka&Bscylf zdT};B_k+;dY=7a}wyJ$^6P&hN=m%l-FL5^L5|3o+HA>%sNwq`8rehz495gWf3zZG3 Z=pU#jw*n-pI4S@D002ovPDHLkV1kJwsOkU! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..eb46a67131a767d616442126953108e1bdb18a1f GIT binary patch literal 392 zcmV;30eAk1P)Px$LP+nB}4KemkzG_G)jhzo)@{g?x{mM$y%&jaLi}(mRQSy z3?1@gNs3u1DhB{C7zd>8y4QOoLx);+0N~{INY{QWY5!tJ*JpR9OQY!Ari0z{?S_Nn zo5SWKWlLK!6jX#d{8*A2y5&VKsi6$U0j+HbJSEQz0IH%nz)>=!-|qr1_pb~KeojMW z^&(f#!2HUUuq;9ymYJ<8DsaJ(PBO*?N12zpS4?MmOIu84p20X+X%jnP?!hATx|&r{ m{VUQ*unIZ}xZvp7-5P&&-I;rB5DRVq0000Px$NJ&INR5*=eWIzH9Znpp7>|KW$b8Jlh|M>HVVa|yQj16wK|M@xC89x5_$UO}Is9+;a`+E(1wExKN~W|(aaZnhXMfYGRaaA`M=%E;eUah*?)BBBd0{Xpwh_-Yb@aO0y3Px$T}ebiR5*=|k}*reKorOSDXq4tV5R7$Q$IwZlZb_85IKi{A_$^O2kAG^NeV&; z#6>6$2Zs)k&_yV8EcDA{Z7Noui+5ZuY4x|2@@{qA+sl_HLgh(_YH=G&oXrL0-(L+dCTo zfc0`QlkEC(sNNO;fD1-kF!BS30AMukQmg4%0Przipw;v&@p3^jI~R;p#d)R6I~R;R zzoTqZiuo@_<1XnZ7mV)vhm_|_;RgFr~;b=INId@;>SnY}U#Ept72zhRg*c+b#jxUd-nUPx$M@d9MR5*>5Q$0(=P!v6B9|k`*@wW&S0|_LM3~}g^B}=DHC0hm|bP3okIQ36B z=puBmpg+X5leR%@6H>0zd*t=KRy`1S_v4*&?|nB0T5zm{Sl0vq%;pm#a5GwOmYBcY z8=;?5(^S}0C0JguWc7wLh^JD_vr}Pr_~GgKR$^V13ovG4yR8+m z*?b~b5c)askE;Vf;AUiBj})J0ry^G=y?-+nwr8h;0082skaBnL3YE5+)f-B_sDCG4 z;)#xxD1pGu=<0Hy_#G>uz|9B%Sm@`(2N*{MeXo~zcpQr%b-PDWg{yKQ;z|py*OBsP+=tGg rVAE8;iX0>Wp#2yAOu(2a?ST$IQB$r&!Eiv&00000NkvXXu0mjfzzC{# literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..154247c47e0175455a1f5f79e56427dfba263986 GIT binary patch literal 418 zcmV;T0bTxyP)Px$TuDShR5*>DQcY{ZKop#nfF#CaAmn5(TG3M4Qu-T8=?`h?Un=dXl%7gI=uO01 z2u7sFpn^xSN{xpn1?lz1m>yPK$=o5Z6~X zEC_v)ywl?|1|9J@BDJ1OM--1EdVG4I`Eo|TaSQTLuQs++%jI%rNFLXaik$P*-efu= z*YQ{o`n399!F4<)Hk_=Y&Dxz7mF!Z=HR5qZs-h&y+B8i7fK{~Fd^sc6@zS0i8)Cx= z0DAo{Ny5w9GpRlOJq!Q{LZ1?zKu$h7JYfL9IfoD;bpQaa<1sn8UTthg==Hl)+pneM zgeMt?>-8EkhWfR+QG(FVM9@*lyHp+M5p)=8A-{9+wZO&sCDVI@&jBiXmHbWA^N0Px$Vo5|nR5*>TlFdrPKoG}g>uPF>(&rHhDQz%;1QH}5fgqF~LJyK#kV23`Ajh7h z2N68?&`K|Yf-fL=^$~g$MCnJ$c#vIo(^9B7r=6Ld-|T;82?(Y~22zCrRVYk)V`9b@ zPT!~S_V7x~*uvT83;+OLZk`DgO^*x|eLoA(O+D1Y2DS&Gl(Q3u`z3aG>OV?UwOWCE zzJ$F43f~`JQnN{KEWf}_J=7xu8Tq2$LI8kzr-@qFkYajdpcz}}rXKQQ5$0W=qX@3G zH0~Fr6l=k`I+MEDiGwFWO^S&PBvQT8Tua!AgN@76wRpYLPx$N=ZaPR5*>DQawwj-aE*dIAyF>&-2&F^OC3cb6 z#lfkA4i5Tz3JxMjDMH&AxK1y;_tHl3Oz+)$?z#6|E`tCsvgv&~Lv62un~P`W#}0kG z%@OxsnHSjv0AI5uZo?M_6@KiH_#Zux>~op`0000Px$Oi4sRR5*>DQaww&U5y|@J4gv4!47eVNJ|z&2CJK7 zj%&cZKfoWN(3++;U9OAwk-WB1Jkz@$@0@$?djbVSwnty<9Q&<3bbUvRPX{z#d}8$S zEF#+@L(}oGn4|Y_C!iv6Ln_A8AfnjuY0@9kG>A&I*zsjtz)7rL(`FIjSYJp+Y(zXsEvsm(xg8u z*-}y4mSlxxzQSsqmvSoVsyCyd13&+Q&pge0Is*V$!Oh=(BEQ1hV_f}wyAatPjZQ8q wo44+OVQ4zqO|w#@nxLU$mZkqE0PyPs-&lveux1A3i2wiq07*qoM6N<$g2HFCjQ{`u literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..efca6fbc5ec6a404a211f97e5c849fb521b9377b GIT binary patch literal 379 zcmV->0fhdEP)Px$HAzH4R5*>LQL$>nFcdtc#x5m@{7s^v``Z3NDLQG?~MIFjhWhrqfJrKO7C!Ow23^Fql4^c4*Ztyl(K)M0?90WhP(+YiCmjWL9y&lX7&9zW zfvJo__hckhzR4M}kFG{Y9ufusJm9G6>L}UOViC{9{1 z;n^3cUOp`u0JNX2_PwpQ-~rdO4o-b1S+M0h-`8h>GB}4p-w*)&3%_^XOAvU$Z~XsP Z@C68Yt?9Le$vgl6002ovPDHLkV1nDjo~!@> literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a163e3e65a4b45c0e00eb28ad5bc404294331d19 GIT binary patch literal 413 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D%z!#!ObLo9le zQyiGCRtNvL-~Y4C(W7nt!sGdj$tRb!{GT6Jn>b_YrnZeK!H53q=kGVi zi8~awo&R3{_1=~L2H{`kuKUBkS##HIcGoo^!(Z)P`QO`2_0RDFK4xZS=fBrvEaY!8 z%-CK~*~)lRY{sEUzMTIrKWkagp%~pD)UdI3pM(&|#p*tM2L$|QiE(__^S;;h;{OJQ zIc0kv{_oefm+bPnEh#A>AyHTNw^yj+#V3h4hws@SPbHp}(`fV%T5)eS7e8|hgX$!Z zz5lfu$w|1Jaq!<)g=)z4*}Q$iB} DjRv_# literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..455f17ed7924983f34a8ba9caa86e6d8725ffe20 GIT binary patch literal 434 zcmV;j0ZsmiP)Px$Y)M2xR5*=eWIzH5vjYErd;fzW$jXW#!nT&NZ%O|DeOE6sY-vBhn7TOZ|L^a= z8O%gf7_x%885z()>f*5f$o$$}dH=&YJ^$BENc>;6A>%)~MKCrKj4?ZQ6^g0us)h{w zQoIb;zdvVS=VC*#Y(d(3R2L-73j9BRN6mkj$ysw_|1&T!FwEak^WP=M>OTVm14F^G zr2jCr39|zKuQ=TNAFI=motwHi?7v5mEu0TC1edqr3Tk)d{f8-NnVF6vhHePlB)F5% zycW>lf>j(Ikn?xcpg0lP3o8yc|M#hMfb+{XWc*)$tPjqQp6H9|8eCpDa(_N{#rQz# z;;{cA?H+hFvLJH;8(sg4Cj={r>)&;rI7H3`_Gj6HbX`8#4Y! zPxSpC(BSeP<|SNeae{ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..86509a43b0351ef9683aab87ddef938c35ff9be1 GIT binary patch literal 382 zcmV-^0fGLBP)i83voZYq_={mv&K^c|xnG}uGw{lAGpvr?h9Uj$QPuiQarqCzp^Lr1Cc|t5i8)tW zqlkfA3R4f)%zy-8`Pc(mL9x5+TY ztC0m;N(2Frw|;&3&A=_s3Fd>m$|K3e@c!;chQs}*F;k)kQtEpnmY*BGoDrl3A?zc cB_w130F1xGa0^Xf3IG5A07*qoM6N<$f}UWZUjP6A literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a53d178bdf589f823819c0117d933a76721d2ae9 GIT binary patch literal 381 zcmV-@0fPRCP)pCuRJBtoUH*gc;#M!P$uJv1V%4eE zC}JR&!qmexGa!Lkje&4J$iTulOE`bmoJ170=z1Aonvrd5&$B}jL$-hc*`_JzrlENO zT|F!ySwObHq6Or{2TwmRq}8v72h!V5zc5@FTMdzig&78bDMWSwy8np+?fLfqGr~>r zYGlEd5so>F^Lgf?%S8|3}TWZ42{|CC~{zsP#E){0SUCtZv3BFlltF1 z(B(gfjVuQehq0Mpj0OEmFihp*;bagJ6GRtgnBFoQRc&!c-hU9TpIQkv8D=9$4CXSJ z7>Ey357*3q1gd(=;CzsQk?Emu{*={yC~DF5GQcz=+m>0Af+B`&0Rys4#ptG?c>!HL zEFf7x3SiL!a^kZ`FBsa2yWoNJ>D^}x7sAxT!VCkz6e7C--Ty>^%$n5yLGk{0HL_q! zi7;n=|N5OlTvim!2f0L8T!`W6{bvj-X0E|ZiJ3^L3+9c8^bl|~qK7=TfMr0}3{!|6 zjX1pki$+j}fyDwRHz&i5^S2;|rq(lp)PTI8uBVEcq0plP7UI~FGA=z>0j`9E3;-sc V(3uSbr3L^1002ovPDHLkV1jb1q7?uD literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ea5464615a3a1f4a6033ffd791effd7ba9e10299 GIT binary patch literal 393 zcmV;40e1e0P)8%W9(?1gkdT>FAoE+gc!Oo!=}m(Mic`=r?mVB;n>9!!6t)joEDxA zR>Z=^!2n{zTmf<^Og-3yP#6OW5@&V8`5*&b3)A5I(p@W1)S~NUfN4gy4d!2%7_tQn z$To$dn+CPP6D@FI>R|@6fNX(93&@FY9z154pH>PFq#tiTV7PETR6Q)rFaS&;vJ24t zPZaQLulVnn5rbO`e$RNL_eg|1@nee zVJbKp(L)|R)iR(1m$OXar>#SS+yda4|ePeF-cNN{t{jATLN8>7ZsP^yq+v nIC3nYy8vetA_H6r2^jzY7I4rAn8CM~00000NkvXXu0mjfqLiNo literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a00bd9497514a3b705bdd2c1459ac75bc616d3e3 GIT binary patch literal 381 zcmV-@0fPRCP)LNyTxlccSFvtrFF!*-OLXiW5_9*}V3`k&SQ|bRH$zlH! zU2Xq^*vN7qaTuEk#;9Dj5yMnI4h{xs0e*C0hMc*pP}MHVj{6V7o6FL`Cc|t5iM2-u zpooE73R4f)%zy+|mS@5FAOmYcec=2v6B<#}qU&XVX-2kfN>V6_7_tQn$TlrPHx11T z=;~ns$pW$k7A+tr-hKX(A-r=MJdj?0{f^;6U#L7R%rF2-pjtrxEuTGnpIOo>yFQWwk{HNl?XXhaWr^i<1$ z4qzIvMI%lxz@ib9VPLVq%gN4g?CxW*yn9_YBS;O%3+BqQs2K`9I$$A=Eh*#DgB9RP bNXP&HTKUoiIY!9O00000NkvXXu0mjfZFrvQ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8fce21ad2d1ff1640fbf45b245cec0ccfdf0766d GIT binary patch literal 381 zcmV-@0fPRCP)Ow(MOAB(rvD#=EenjnCc|t5iRnUJ z1``9h6s8`onE?sdW|_nJAOp4i)Zu*324@tt=z1AonvreOkJUmEL$-hc*(MWo)6l$t zt{xVUEFfE8(E@VfmsejH4o^D?52W9p{$jZB@C1lFEX*(fOd+xh(EU#oFo@Ouui>tW zS0f9yln4SKZ~gi4mw{c370d^D6_h5vzWBy)eba5slxTpIx?tYW^iu^#BYMcAr&0fhdEP)8%*Kp)ChN(QPtPH|j9O%LfUHguss%>(&`wznXelB2>VK#!qa%{~| z#6T{EsfTN3KmzSSo^U?Mz;I(-IDc_+B#K&ey$mqT$hMU^TB3*{Tfl&9Qxm#rXkI{9 z4+}^ZkS(xi0Xgx>`wtA2>$bxK>B;A>7%nV?%EQ781Hcp_y8zw)M1e9V%l`oe+ITgx zU`vT00P@ziUw;_X1o^;xkXOaHIT^0Lddsl#{8h}9Sca6kVBQEf)CNZ*ddQ=vS_X6g z(||1+ae4t3ji3wziv=z=7KW2gUqNhLww@8B2IK_`SxM9kg&rNS5XY93ap}Pda3v&U Z004@{ybt)-Oa%Y{002ovPDHLkV1j~lpVT&GXsbXa|OtyF!f*)=E4|Iuy|Q4oDVXvqRI)*KYF4NMJ>8s2AF1K+xjPZqKF|| zz<_MiTy)c*HZ--k{>P>s7LY6;TVT-wa^k&vZx~{u7Q+MS&6}SXE({KU$iu=61Hcp_ zy8zw)M1lT^UjOq7?C@%2!Ilz10OYODpMNnZDsqGQAg@YG^Dx}L{hpzt?I31K>_=0-Edx4$X}}hZIK2RiMo@-<#R4xc8^ej?FTnDk)Cf`o@`9nl-w+Om0!@fh4P}O=kSN;cKKhIXM$uJv1VzyA1 z!Nfo=g{g;YWo+&S1L^0lj~FgozZs$)7G@X#rV!Z$=>8`PIN9a>H!}{! ztC0m;N(2Frw|@Qp#=y-b3Fd>m%EKkf@ZsZQh7)I&V5USTq|^oThJ{HCI2zGI9zE4E zpaYl&Y|)6*3$SPeWf)j2u(5J6ynKBXEWdnB86!vy$O~ekny48HJvv|^jx8zU(t{P? cN=V2608w4LlHwdR6951J07*qoM6N<$f)E*+DF6Tf literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..394c5304eea35ded0f7c2ca0691f006fe347bd87 GIT binary patch literal 390 zcmV;10eSw3P)1-9ShRqgc=hTv22&$5cz`{B{v5-FF!iu7!vHXa$Sy$lKT0g11DFdy z2?yo^E_NQQ(a3@=CBmHf;loD;O-&6jALJ56B?WN0$j;2cG;9-6>VkO#6onv+9`e`% zmH}NeOd)zS;`9P68bSVsg@J$oKf|t_yTS6H)Cf`o@`97IBWi|1j}BOfBgX=|3t)P{ kv4EaEv4uE#W`gMf0E%n=YW1vsNB{r;07*qoM6N<$f);tG00000 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e496630a4685593393aa29565acb05d39d5b9533 GIT binary patch literal 382 zcmV-^0fGLBP)Mv(&pyA;R&3`iilEB?Prp8J0T z52ODeHnJQ@9L8pXF%Heyk6|hsH#-Bj2oJh2!=6byQPp}?`uzvtz}8T($uJv1V)iLc zC}JR&!qmexGa!NBx-d8&WT1779h{#sBLhV(x?TpDW@Ou(q5g%5AzQ$JY?BwdX=q+R zR}TwF7LYBlXaPC#{j+xrYnxWV1L?=d9~drNTMdzig&78bDMWSwy8np+E_v?%%|os5 zYGlEd5ynpBx;62j}BOfV@t}o^k4?Fw*Z=?k07*qoM6N<$f^1-$r2qf` literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..81c71ae3eec7525c3653a5368714edaefd529752 GIT binary patch literal 379 zcmV->0fhdEP)j!MVVKIr%f=ui&Vw$@Ftcd~s@lSCzyBayGcycqGR#JhSX{9) ziWtbHF!gZF3`n42LL{6IGB7;L0nVSaE(b*|x?TpDW@Ou7{)LGlTfl&9Qz5!(XkI{9 z4>OnrWD6`>Ku&!2=q*D>!E$&YeSY^7(}n2}d03cX0GL8#7ohu}D3D&~@jo!p2CqgI zY$*{0K;HWP^%sMfEF>L(yecfg!|?R}dxllh4r8XobfnY;^F~;fEjSv{LmoZVGN1#P z25ixY(+jX@1Z5alEO2tOG2A@=0xVyXG>;La2IK`beM!^|g&rNS5XY93ap}Pda3v&U Z005nT%3Xh2TbKX<002ovPDHLkV1oTrosIwi literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..debe058babd337b191629b67c587ada1b5f6034a GIT binary patch literal 387 zcmV-}0et?6P)Nkl zkD&h`HnJQ@9L8pXG0GQA#4weQlbbh_i(3DK@V44XV3R>MI+vw@ z6>+n1Fo4)FSAbj!Qx7&_DU1OHYij%8e2{^4QR#60g&Av5)S~NUfN4gyZF)u}iWss5 z49GSuMK=v<1A5@X)WZUj1*8BLEg&b}dHRSUq`3$lNUy(q#Bd=@JuJ*H08AmW3();f z6que_^}i$}0k1|DY$*}uOi;>G7Lf$=K`xOI5@Wde>>)$bidmQ`aXM1!f_bAZA`Kjk z=pm0SU>VRg!xW-NBTg^Cq7me5SS)~&@{wDY!1AEf2vP&`f`zIMYKB6O4p@jI#{#+w ha7H0Az?G1Y0RZMO*=@?1yCVPq002ovPDHLkV1gR=ooE06 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..944ec941cd3baa4336832904cc8fef88365bbdef GIT binary patch literal 380 zcmV-?0fYXDP)H42%m-pX8 z$KyYUjVuQehq0Mpj5){WV3^9y%FQ6cErKr0FzL`FRJE1PmH$Dw)w30BGR#Jh7|dlb zF%Tc79{5#5|#Jb-vNdIlAT=N_Xo_m0W+?RNfQ2}=q>M`sR)8xZ aAp-yly~T+JdR!F%00008`Pq|XWcA6(&% zS0f9yln4SKZ+-vtlR;R87t9BFRY;bP;rWd>3@dAQV5Y=$q|^oTMtHLaI2zGI9zE4E zpaYl&Y|)6*3$SPeWf)j2aPqM;+&TONEMH;M%?MHh@`8$$ENX^Aj}BOfV@t}o^k4A;Pv6MGg%7s-6EcAc4Y_DgQ&;J^#mL z`TPg5k>x<*Fg6p6v8i=0im8r@x(w{RYz%MMzc8SK)s@>(T@W+H|NqR5<^NL`hk;Fo z*$5JYxeO)-;=|O#H8UWA^jXnxKFC0?LI*g%c2^#XT6Db(FwMxe^(@Lo5kt0s0okUR zFejnefF8Io_3(gfn4E&*L}VL4hPr0h!1*A#MLSwhyvTqJzzhMopkZ<~vxx@MR{^k~EhKp_tD0!#zURpvp4D6s-^6-MZz3&27gTT+IB6^EM%#|m;Z a;sOA649%Kx!Q}S<0000h!yO|*neiXw@kivgQ?Uiw{Aa{>}Fr$ z@{QW~xMTYO02|gpcdlz;dnma~N5bq#(y6AizbBAE??YGf3(RrQo9jVpBUU9G0>ZXe zoG4%`-H~Q|uR!icg>w(!!$~DOCq4jxu{El93IbrzL;*iIvm)03INKS3VQ--TQZQh> z^5hlpL!@EvYkB!oB^Gx^DxFAx0COkW9ZQ(&`xJ15iUXI6;Y1I~yIq?pm;iKxV8Hn& z5cgF98zke{ZM|tUxt#xMUh;Gh&;%JI>USK=J70pJdB>w?)d1!O|I zzW7c04M+>>WE&i3oOBkJ_pk+r^=GXC{Rae)I<(?PjbFA)jkyii?S}do8=sE|^5kc_;(v zeE4V|0ARy99KQIPNbFfGwr#2OfkmTR_Bwc8K*p1yuZjy4I2sN7VqP0o}Jp~*N1}$zy<)H)hWp4B_I>p&+qqQ z-hgmIw%`O4#3w&&!QFkwd%*kw0i+MNt%hgQgeVnN1nCuG3wUkF79Ai?G>_5ITpFr! z)HBXJc?S@{B}&N7xClg%R(xn?B(k>X4+#Uw!~j6G6Uct`^`T1HH4&cz&Z;Y%O87I$ zj%Czn(8wFLuAs}q0 z!SzE8vG6KJ~03M{(JeKp<2CaITF5J*4h<-c>LOm_ z{8a%PBoml?_B9(*pkb878ER~llmZ}r?`(R&L32`Zf=ab~st P00000NkvXXu0mjf@OtF! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ffe314c0a979a0570aace70bce94021557cfae6d GIT binary patch literal 525 zcmV+o0`mQdP)l2U9&WaQ_h+KEYLoRZ5)M!arJ z^0htb-KEvWhmY+Y0Bl&NuT@>onlW+95h=B!a(ucY4=TBfMB}=;D31v zpacUB7nwi-2Qn=_gUk6xP*SBGSLtK|1Q?%McV7y%Xix%yPzk`f-irs9tGY-2iGoSM zG)M-VGl}q51#FN^;N-ce*_Z+iqb%-FW22-L0OO^*?g1CAVN#Yqo&pKL1^^%6HU+b3 z3CM)@`_~WW4G1S>8=PQ*_{+512n7fb?NFcQu<$h*D8Ski9}|4zCT_MhA!! z&0}=>U{(#aatNXv&OCVq5Wpo$$j-P3M3JpDm1ZVVTVa1l=$K3l001#(0@-iAK2%wD zn}|*UXRC{|{Y+*@Ho;^Dz}f%y*8f7O6&R6c`%SymYt5`*#O3xWuao!(lhd~M;_OBY P00000NkvXXu0mjfXKyV96XOE@ zn>__kf&uR~>b?RFWcqSX^zzeNkywlQ4b*Zx5MX@Vg;gm=l70yULL~s_PQt&W?)y?x z!6aZBBm>TwMEI)$Hb^G$rMj=#m;w!>EbdTaqofo7PsP@t2V5L17v#5fu0R5?0l){i zO~Gth0y3ffUA>0$280u`4NfpYeCCJEc`UcJ2h1N3K>Bc7a5bAvh*D8Ski9}|4zCT_ zMhA!!&0};lmxfw7+OvqSiYKoC0=Ps8*%?4)Q&@q`90BG&rocqCk z`1PU6vfD&-3OHL`I+fsOGCQ&f)`#T*IR7+H2miu$G^Ix5*?!n=^;$FA@r*o|cXbl~ XM7Yns3bDHN00000NkvXXu0mjfN{Qzw literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..19e0c4892711b9d2ccab6551dc93f44ed6ab46a2 GIT binary patch literal 527 zcmV+q0`UEbP)-eew45K?wvxB>-nXTGvbJ?wt=6Oai7s zGT@v^gug0agJc3UK_HF4iG1r z$LMG-4YhIzq8!dVc?A%_B}&My?_e2-B3o%H&5UoIt@=Yk$7EsvptUdOOd$Ks*M}<0 zZWGZd;B0m2RQ`V^vm={eG6Uc|_rBKuLNR=;M&#Lk({A-zGpo^>jM8s9i9haWsEoaS RV*~&I002ovPDHLkV1hWO;>`d6 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..91ebbd209be5e4f7b8eda5b35e70e68414fbefbf GIT binary patch literal 535 zcmV+y0_gpTP)(RCt_ClWR)?Q4od~`VbLBnO3BbdC4%04a-o-O3~7^h%TB% zbPpmbyFve<|2+B3I-4JsbIzQZXWp4P>l|-J<$7mc+FKDREsx86JubEEq_no9a#4v( zeKjb>^q6$YF}3mGV|xbx8`if|SJ#pol0teysw)9mi;u|biR(k&TduAa=U8C3f8ovz zs}e2&VQc2Y3MiyTQE#(;h&x_JWX15FY@**e&#UEB^dCw7V{KvAk$~tyZmT-606x6m9FLVK!EY7=Vqmt33??E2$cYwo9iLHr0%=D zl!8gXG)M-VGl}q51#FN^;PYWxvoQr4Mp@jU#zsjg03I8O{~mC0v=Nb?b598Y*Z|-I z+@@eQEdiO(eqYM|yaC~aY=aX_5TE&Ba~_(D+5_ef2q1m9sV`_Yn-Hah|YtD@~=DOW`5EKO}TaCI$dndvDI& z{(kWFp~|w`M05%`TU|Pp{?BA~WD~3pE91R~@6N!#P;molM4s&j?N+Zfvyq#Ur~RZ( Z;tvw2tyfdUxpzLBr7cfgRD=Jp0w1hBP6bTa( zM8Zp25j}M8A^Hw|*=c{Xjry>hbLPza=07uMoyvJcTIHzJycNkEOiHgBlZ&Gnx%Sqi zQQ8picvdpI6H+fm)y9X9?HvGYSYKMMt~qy3(%Vy#PlsebHYU$aw-0&ixVl=LV}Y;j z;363rRV7>k!d5(8Qb2lZT$<&$0`V{976O1~^@EU15FY@**lsRk3Ibrzz5)&evm)03 z1lt{e&#tQgN-$ujvK}blK&FpwaQS{4NX#G3t8^{L2LZ;%%PvZ0Z#pP}K&S-ZTs#Tu zC3SbJ2?djYX^;#!XAe8wF|4e2_Ho^L^d;sUKUTW|!oTWl)M4s)3?N+ZfvyctT dV?Cjh_yaLt&mBHe0yqEw002ovPDHLkV1gwFIqc>Gf&roPRUFJ|lpI!h~&{B?U-)yOl8yq+!)LQ6`B2 zI>4Oudx5}LgNW`}JLVo6Dl!+oh82JWlHFbTBw_n^z8D~ZJvHd( zZ%>a6%a%W@fm8wraAI=Rh$VwhLkZo^inagdm4MD%J*-P~S1(cmrW$S_7jOzvh$RlL=nFBhaxMVMnIv3a z6-DRexj*t7AcCOnEF~E!B)T}xyschZJ-~lxp?h~HWtCq`s^%O*Dl)JVW`J_$@!FtG z5CcGvX)e~$TpCIetVlu*`{wqddG%UM32220E?^fg4Qb3Uqp3Xg(Bhbw06;;{(d2+f zLY1G*v=UhZ?p`03;uNv;WAqXUcE5`~39CU==T57B=38axvp=}^-~U49$CMrk^jH(X oaBD#L;#6h7ycM>_WlB!G0=BZh(@m%Gp8x;=07*qoM6N<$f>PHEZ~y=R literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..cc7a14bcfa0cc9383a38d831939e1348e1d86b71 GIT binary patch literal 427 zcmV;c0aX5pP)I6M5VR<;+PSc3=enQfUMOf2ZlXnyB}SuVL_+z2Wd!EJ zK3+Uw2F=DI=&UZBbI*PE+z0$8)|dPw8IO=*8qF}0=Ztu1ckpL}-$0{ABw`|2S@a<2 zvtnmEN`5p*#Kb<4&uvHN^#f*;{@ZNiS|=CjOp&1k-J8}@sRHsYz%ZgkquEj#Wq!bb zf|BvoAOr_bXj8!N1OtMzLan=o!@?qaQGsd(=}eI+*II~%T;NQ4Sa<_;EDM)lg*a)$ zGAGNbTiSwW^?*^nRLu!6yQs Ver3%NFAo3!002ovPDHLkV1l4;xS{|6 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2595e6adb5b8d81f414a9381ad2e9d5b7adeacb8 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|vOQfKLo9le z6C~;qLeoFgmuzJ1{U?!RaG*u6;Pt(19_M#<70p)@UN!$qDi?{qFt_ils774Hzfa1C zzi8#}Sfqab-eQTWpU1eZDpaWw+Uvl; Y@RZp)?ockD5ztx&Pgg&ebxsLQ06qgizyJUM literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..790dfa88942111266841f41416adb34fd0a8495c GIT binary patch literal 187 zcmV;s07Uu;)!|y+T@mj)!Px9-hKMbs_tmGTO$jrd-`R{iIvc15= z&B?&WOMwf%e*Vtz^Upu>4PfD6Vi4fqCf@*2J|2cwKR%Lgz_XVh8N@jF$q&SrPrfj` pdw!pM1HOKK$H2^l*O9{k003j|BT7X!w6OpH002ovPDHLkV1gc_Qr-Xn literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..58b8be66bccdacd67a3e4b58678090a28ede9bc4 GIT binary patch literal 421 zcmV;W0b2fvP)$dFC=l8d2>Ag9P_J+GH5`H+rK>VbGstD~O!fH{u|yO$&IaDWgJoHWZV|zm04jG+ zI6uBHrW-Gi6^YOWdNTV2kJ6=z`K38z_YU9-`rz`2I5|4S#+FRwq!N?lT11$+d;s+fB+puz9+?C;5*|_upr*r@C%_ n4fDOazvm8|In#5!0qBN|AZ33B=9Vo$*D!dx`njxgN@xNACw)?_ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9880f7664828b23aad473ee9611ec6300a199c1e GIT binary patch literal 428 zcmV;d0aN~oP)8Xg1R$a{GPwczuJ(X8AE2r8X!(LHDNh<#7XE@(Cl$;^F32ZB+O^ z0}4t;R?^^j7oknUlnBBwXdO!O8fK>*7nLLEW>77bnEU26{D}xy%Q(!O4Mu|j4#5M@ zObFe^85&zV>U8x5(QJm$26{51gF~xagSe2uUSS=A7yvgZK-%0!Jhx2cL_3hty3rkj z@d(DO7Bmke`2u#Y2i^K9oS^_Z(uq7on*r0a5CEIoIT~ACdiTXDA$iy9qbo2bhWymnP@-FQ1As@ W@P6oSNmAMX0000XH literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c4c479399049cb500ce821a9bb031be4155b876c GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|QaxQ9Lo9le z6C~y>sQ0>8pHk=SeW^YsYvu;dxV;6^u9qjXpZ_T3WZUqrBxz66qt?~pdB!4BT@Q%H zTGY;6xL2L|sP>DtAbEw`0g=+b)LRIa*8C Q04-$jboFyt=akR{0MPS0M*si- literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c772bed7f5bbf82d71bab891918f29bdc6ba8a8b GIT binary patch literal 187 zcmV;s07Uu;)!|y+T@mj)!Px9-hKMbs_tmGTO$jrd-`R{iIvc15= z&B?&WOMwf%e*Vtz^Upu>4PfD6Vi4fqCf@*2J|2cwKR%Lgz_XVh8N@jF$q&SrPrfj` pdw!pM1D^l<%fQ5hHz5uO002j%Buy=K#ryyO002ovPDHLkV1f-~QX2pO literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..116cbd1dc7f1a137a1bce509ef08cf97791a124a GIT binary patch literal 431 zcmV;g0Z{&lP)L=1<(Brk+#lH>y0+kYxjE2Zs z&(nQVcnwL6G-r(xtcm<@WcEDOP5 zM^NN(*=%92Sdyp9FGxm1gf`HV*>x;VDhvYD})FJe0$rgAbkkQsEN zJBH`IFzK|&muvkCxEwZIG+XfTb`)>!`$GmZV1^a~;Ix?3TdU#T%B&lQrE9n+ZQ#@l z&gyqVjfw`TM2yfWyw!q5kBDab5xH_*4*9Feh=Bx}OF-oN_3hIO(g(+iT1C)I20zVM Z@Ciu(ehDjU>aYL+002ovPDHLkV1gxUzZd`j literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7ab25e13cf6af131e309e2432bb0a3862af0f266 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|l001;Lo9le z6C~y()VbcMPx-fOTg(3)SBw&cYyLdaJ>2yxW5+V??Q)MzTXr$r{CQ$s!hwgPJol_{-T$!8{hG_P&#M>9{#(rcMB@Mp!{6&RJK4%s R?*iJ!;OXk;vd$@?2>@>vM4kWu literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e056363e4b35efcdc827ff08bc9518d8b1f23c64 GIT binary patch literal 187 zcmV;s07Uu;)!|y+T@mj)!Px9-hKMbs_tmGTO$jrd-`R{iIvc15= z&B?&WOMwf%e*Vtz^Upu>4PfD6Vi4fqCf@*2J|2cwKR%Lgz_XVh8N@jF$q&SrPrfj` pdw!pM1Ae{#!tj>~uOo*8002kyBum3?(+vOs002ovPDHLkV1f>!QYHWZ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ebbd74fc57c35b6a8c40df1aaba250aa21a1252b GIT binary patch literal 405 zcmV;G0c!qDynqoQ#3;6CMMcE0W}CDrV$ql| zrY3(RWP*(!~=irgRyKHg{ex4~Z^#t~K9WQBuG=%p0)PAvATLDe=F zM0!ETd^U$nq#v^hYB?x+t%1M^emAe3o{KD_kQ50MZxS{J{E`6&Co4xK5K0(tqT6XO zfx)>N`DZA)jA6$`YzDp7KzO^Kz}U?~Q4>&-3CNNRJ*y#I*5D1sxVspJ)58s_w#j${ ze=<=Q;kF-<-#5@cy+)=;p&Bas=eO87u5dYv4iutp{KjG<4~a5RgV zznd%>1mL;oX3DRp&J>-qZmc#IekPGmvle^-sq=jl4JVvW00000NkvXXu0mjf!F#Yb literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..227886f4c34b81e42e58f21edc5dcc9634689d2a GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|3O!vMLo9le z6C}PU7+?NnZ&#`2#AZ|dXWqhP$3)jFYAD#>=UbkX!E7_}hPqqM%~c|A~+1MXY~d fIw8rq&60s(lekIicTJxppydpnu6{1-oD!M<&G$r$ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2894ea5f72e03ecbb7b2b354d8038706dfa8ca49 GIT binary patch literal 187 zcmV;s07Uu;)!|y+T@mj)!Px9-hKMbs_tmGTO$jrd-`R{iIvc15= z&B?&WOMwf%e*Vtz^Upu>4PfD6Vi4fqCf@*2J|2cwKR%Lgz_XVh8N@jF$q&SrPrfj` pdw!pM1Ma}1olQZCX-n!qGdm<{7)IK;mV{(^uXp%*l|omoIOAz^>3 zOn)`d3)+ZiF&@X;$0x*K@W*VNnm9$R(c~Dx_Ga}>#{^Xs@Py$0dEhoW{Fng)BX{#T z$f7`5Q&y3|QHt}nWv>zEL#P`a_-0URG&$pGfQ?iVkx&R?m){dgw&jNW-DJ$b0m~(qknGwVyrOz?;j8rp%f$O>rh+e4%Y7cCZsouL0000< KMNUMnLSTXe`n&f4 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..573bdb6c541523d3b34c5a17bd2a3e46c809106f GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|vOQfKLo9le z6C~;u*dBaoZ}ySZwJzf5%nPh?du#ebKh9Opmss|^BGHs(JumOYZ#zsCcRzUY^>~5v z1m5cZFSQ+=4IK8ZKUtr1?&wo5ivzFSR~-DCnYZKWm6piA?%P{ao-b~`!N?lT11$+d;s+fB+puz9+?C;5*|_upr*r@C%_ n4f8$wx|0Xav|OKfn2~|Od$qEDa9~d*&@~L6u6{1-oD!M<59m@9 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4f734661dc983b198df5a86d106164498b23bb36 GIT binary patch literal 431 zcmV;g0Z{&lP)=GY%BuL>cTnq+;`7?z$me`?Iww2m<-dXhLHxt1lq4}__x7dpi&~Du>jfF zbiup8WB*{C{Av)51^PrT*EBxfJK(snAG48ajZ|dPMTQb|Z(5g1Rdk3AEUQ7|xg|GB z{D1)kC3klH5G)*_Oz76S}m+L zGkks?w>M3ko!-gQ^Uq0t@En*r0e5CB2YtE2Iy&y|o37v~i?ohIm5 zpm6on*QjWaNQMcWB3L*CgBH~5FA#GzIppsq0|pXkE{i_CTUV=X9Hm4>ts-b9y`N?z Z_yXffe|gC(aKZop002ovPDHLkV1h8|yypM_ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..654a885ed45df29a18d1e37c4f93971f9758ffe0 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|GCW-zLo9le z6C~y(++1?uzrnY*n}Pp7u1r0oR`Kjn@D4@w^R{U-Zi_Zt7kI^#^4xeqC1Y$K<7{!g z`1;00A1-vV7dXq=*0o;+%Ep*I;PT+nSFjeo`M><#e$~4_WtX1&&$+ZY@W25EhU!N?lT11$+d;s+fB+puz9+?C;5*|_upr*r@C%_ n4RhU}pGQ9YmXCAiV`pH{Ij!m^$1ra_&@~L6u6{1-oD!M<14L0% literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..578d45e0a23378e19e4ad5f2db4812e595f0cd43 GIT binary patch literal 420 zcmV;V0bBlwP)rsMOs>{6_F?sBvv9sO(zB?M+bCe_NTG4xwyI*Py-2Kj6=hhh~J`#M1AHp zX;Z|aG2u)%Ip?1H?zs;bC*oUCqUF+Ll*ToRoaB9Yd+Fof27iIeiAZHtvbY(6oDh-O z)5xy|sjNC6k{5#b=zqd1cz?{stUYE?DbyHB(7kD0ueLBt6tJ8d&)uHYX!1h_6qHPE zCm<+1p-sw?3@`-slPhBlZiLZ7byOCPM}$XfE=yWYoRJD~kEDqt+2L6Z@wb3%&r<+I+n_;7vsU O0000^A>J9`rDqFnfdTy>-7(Fni?iJ<$Ti6t0?#_ zdgo{A)^`$J@%FzRE_fGAn3D8SK27;zTmleiXcQj{m=m7xeSU`XC$2aD4)1Z?Qe4=$ iM5Oz_h_n$C1B233i@+&W*UW(qVDNPHb6Mw<&;$T1B}Tab literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..331101d516c8155a6f9015c90b823bd75972e753 GIT binary patch literal 414 zcmV;P0b%}$P)4C4-7c>*^rdrq! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..74b23123464455c4783498d318e6f2de04c0bb6f GIT binary patch literal 187 zcmV;s07Uu;)!|y+T@mj)!Px9-hKMbs_tmGTO$jrd-`R{iIvc15= z&B?&WOMwf%e*Vtz^Upu>4PfD6Vi4fqCf@*2J|2cwKR%Lgz_XVh8N@jF$q&SrPrfj` pdw!pM1MWTi$-vBn*O9{k002nXBP`YlYw7?1002ovPDHLkV1g^jQ&Io` literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..be02321d359be565ed5263694e7db48d68a8a764 GIT binary patch literal 431 zcmV;g0Z{&lP)MKR|S|C2Flke+?p-*lbib z`48A+5PtDJc#miKECSDT;hcN!chCKRY2xVkkfhQ{GD)MEM6xW4{(B$)HuwuPYJ?Dr zlKq1{@H~(6%o+LBK!`<0L@t*LgTV)kCga#_q*j;qVp=a|Xy*|>YYLH4N37x`m90KbBymh;BaNjR5)<6Qy#phcS>zC(OWHT44T2;_Yl%HlQ Z_yQ33g3$O*%}@XU002ovPDHLkV1iilxC8(I literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5556fc9fcb1fa31175a09e201e03221c61ddfa73 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|@;zM~Lo9le z6C}PQ{6019|Boj#IV21IJ<4r6dinGRsV2s2dMi|;n8Ug!*4kM7?w-$jo@LV6E0Xi}eevW#^xbNPhTeskKI8;n!QW er{>!CFfs@?*l%Y1wRI-YY6eeNKbLh*2~7ZSKSzH6 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..08c7daa6f1a79561372ebcc64fed1823abc0a0ef GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`^`0({Ar*6y6C|!AJYCfHKRc}a z&++ALtn-&l;7~vO-oE~0)S(vtPp_BX=UKC6%@gSZC(a!B@bi2*+ort-4xc@G;P`R3 zecb!%ejfYq*_<`;z@f8e6b_tp-p9D;&mNxj`)U>LH>B&|GwvwloFLz!Kff-m;`<}M kpKO0vy^SB6CP*+a+-p*-YF`_?7w8lQPgg&ebxsLQ0B5LCu>b%7 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e2442a79aea87e36346745b27b29ad6f2ae621eb GIT binary patch literal 416 zcmV;R0bl-!P)^}spLdEVzdFECFO_SQ(LQYN!BfmtLU;W2(4>llt zUky}Un-Gbq1U}wA5sGp@X5-YXQyA4cLkYS!t-H+*6tWC9#A5V3bQ>Lh%7B8B8wW+i z#5kc%az+MWfX)S#U9kPTfSNltb7~I+Ot!3e&JM8Nf3ocxF(H^d7c74H) z2iJO^^R%+c{g;%Gkg&SdY$#%1`GM=5QImrC<#+aHCcM(pe`I24V34qN;ifb1>=zzr rXak(u6{1-oD!Mu;)!|y+T@mj)!Px9-hKMbs_tmGTO$jrd-`R{iIvc15= z&B?&WOMwf%e*Vtz^Upu>4PfD6Vi4fqCf@*2J|2cwKR%Lgz_XVh8N@jF$q&SrPrfj` pdw!pM10H{R&%n%t*O9{k002|3BRKgis38CV002ovPDHLkV1foJQSbl& literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..21371aeb84012e367eb53a8fe0f572f00a8e9a91 GIT binary patch literal 424 zcmV;Z0ayNsP)>yN$9oCT-3F6aDz zym_P2@rU+jQe7C6=JX4)oiK~p^`qs>h7*1p4!z=yc~rr;&B2vDVzD4wob7*)pji?t a85nBzSt!3Um46Min8DN4&t;ucLK6V~YC|Ld literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b9d76284ae6a9338d66797bbee9c329f9a2e1761 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`O`a}}Ar*6y6C|!AJUuk+e|Ff` zKgXB1vCdyIfrI_!N?lT11$+d;s+fB+puz9+?C;5*|_upr*r@C%_ n4fDOa-zN?nIn!~y0qBNAQ)Tzp)30X&UBlq%>gTe~DWM4fIv-Q? literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1d2c1ddb0b0ea4d4f6824988018244ab2a770ff2 GIT binary patch literal 435 zcmV;k0ZjghP)=*`T=f=HbHJ`A&~{T@B_>+ z5hE}OR~1CYizkeX*;oXg)rE8Jx$mC)fMH@guu9@WgbdP*3?g+}7B6qF__x7dFd|1p zLju|G2jS&i*x!kfUk#!mp-1Gl@px~4K(E&Rn2lJEibW!oWGF%Rrgg4z3*!8QdR&D@ z>$%$~@_hyrl-yle2WK=B+B9c(fdPY?a-p+^nVmqol!I&riByuQHXpI<@q^W9VPN%8 zDwVKVteEHBDAw!zPj&yiJ{Kl>e<-X+JwXN7D{*sHb{D1U_EipZQI{V zbJ=E*0%fbT>nYoZj6}> Z4Bb68oLg^lECt%j;OXk;vd$@?2>>)@J#7F0 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2236ecea57695452df877ab32a741b74afdd545d GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`O`a}}Ar*6y6C|!AJUuk+e|Ff` zKgXB1vCdyIfrI_!N?lT11$+d;s+fB+puz9+?C;5*|_upr*r@C%_ n4Rc-nkMke;IqMbpm>C$1*i=J}|KHC6x`x5i)z4*}Q$iB}=!H4qH6r5-g_Woi@*dPw6tM2aUO)^BV4+u$$oc@ZQ>Xen7jDw0C&x<-FB zAUU!libvwud~6^Eq`lcVHSZMWz~mUg_Gb0S8iA@50e=9im({k>;eQw~FtU=ZK#>&6 znzS>x3drcMO6IcioEMF9qnlwvC|j?2pBvJb{ahmjDkVg6h%^yJ@{$}a!D&`yPm(!(YS4RYCXX+aetbl;1ho!eb*`U-)#T@002ovPDHLk FV1l5=xTOF9 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1d43901572ec779587e7512da392e523ac0aff5a GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|$~;{hLo9le z6C~y>&{FzfzcFj(2F`y!KK3St#YtUkJK&g{Bhj|(+>(qvYzuchc>KJdN7z^>z+_L& zcQ!q@69!ER$B+NCHw#Zzopr09GkR+5i9m literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a8120530edde4f8cd238e25d6de5714f45d933a9 GIT binary patch literal 187 zcmV;s07Uu;)!|y+T@mj)!Px9-hKMbs_tmGTO$jrd-`R{iIvc15= z&B?&WOMwf%e*Vtz^Upu>4PfD6Vi4fqCf@*2J|2cwKR%Lgz_XVh8N@jF$q&SrPrfj` pdw!pM1KvFR$-vBn*O9{k0032bBRb8<;^6=Q002ovPDHLkV1hM2R3ZQX literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..cfb930b9322fe501760e988e74634881ac160021 GIT binary patch literal 187 zcmV;s07Uu;)!|y+T@mj)!Px9-hKMbs_tmGTO$jrd-`R{iIvc15= z&B?&WOMwf%e*Vtz^Upu>4PfD6Vi4fqCf@*2J|2cwKR%Lgz_XVh8N@jF$q&SrPrfj` pdw!pM1D^hT$H2^l*O9{k003IzBS8BCeSZJ|002ovPDHLkV1g>kQ#Jqq literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a901daf4ac4d7a5cdea943aa03de1803ad577ffe GIT binary patch literal 435 zcmV;k0ZjghP)*~d56++iD;taCSA$q0(j?-&4%9zB!I`>$%to%e2TZ!w^t=~==(Sr%zCh_ z4i0BOgwOyU&Yp0xbJ3XIctI=?A+&*>jI*&QWJ(Awc(J>ghTtE9)ony}JCFJGNh&AG zfsE3P?iidNMUPR3LROS6U>B^oJ1v7Bv!QfcmWC)ZV44;JU>-DT=hi0bz9~1(_itby zwnD3CaC`LF)Tn9@PeuuyV&P5jgq^6|KjSJRHbVYx(qbTk=Hd!Dq`E5Bu(x%fs#OKe dMEPktf-mTQenhj)0kr@C002ovPDHLkV1oK!zp(%S literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2959c14bc0e9374edc77c9ffe3581e9c47df1f65 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|vOHZJLo9le z6C}PYD0eziU-QYQg{R{CE9S#{TsKct)wAKtCML5hdn zvoq}f$s#?w3%3M)q7)Wcf4seXJxekZYs!+_kG`;ZvL#*)2zv8LK3^fJnD^wiJ_iN{ Ye+6r=jTL*`fVMJty85}Sb4q9e0Oy531poj5 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..280bab68e7ea7aab6a2022df0c1dd83caeef2f28 GIT binary patch literal 187 zcmV;s07Uu;)!|y+T@mj)!Px9-hKMbs_tmGTO$jrd-`R{iIvc15= z&B?&WOMwf%e*Vtz^Upu>4PfD6Vi4fqCf@*2J|2cwKR%Lgz_XVh8N@jF$q&SrPrfj` pdw!pM1K$1r%E0^|uOo*8002%ABvX^oEad8YX;_Ts)i%*PcFPAlm>rJ`wy*#Akp>fbM?|10Du(Rbd9_RIC34 z4KNANMNwpDsL$~C*Ix!p6%7nct^uZSwT$S2rXeNEux`VXe-Jys&YD3;R)FEgv&Ud>aH#V#2r_Ws4udlr zE;GJ+_>tka5+ef#HwVL|FHab3<+T}v#043A9W5B1-+axmd&6lISF^wajGKeu$JZYW zc3PSYoA#Yxhz)UJm^gJc!yUy34E$0&4728KVkpQB11bLxik(NF-heG+L=OWMBLxO_ z9yW&i=N>b-SQ#=rVfn&EA2PC?BMsxw2Xw&~7TTIl|8NNyVWsv^O$FOn7QFtID+m6)$7yyNf xxVkWyE&PRtVbRnrIMw0=pm+y`3&|Qu0RZo)fs}o~_8kBK002ovPDHLkV1k`8z108! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..adf87fb78bf50b49af01daca74b95a05619fa476 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|3OrpLLo9le z6D0m6T$yH3gd7+4YUbnMeP`$xXlGV_*C3VXI-dyI`4EJx_Dso`!e# zub;PHAo1zpS@kt-2OOiiOux?QKkIsf!A(bD_k(L&(+kvvWrZ^}ul?V6GbZH0kNr!| f%&od7?Z&`R=54X4rzvhd&~64#S3j3^P6!N?lT11$+d;s+fB+puz9+?C;5*|_upr*r@C%_ n4RhR|KPL{HX}Lb}Fe3v)f}66N_Wxf%76XH)tDnm{r-UW|DRxs4 literal 0 HcmV?d00001 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, -- 2.54.0