From aae33f10370218c33a6b817b9f3da9fac185a3b7 Mon Sep 17 00:00:00 2001 From: baka4n Date: Thu, 20 Feb 2025 20:33:31 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=9D=9C=E9=B9=83=E6=9C=A8=E8=88=B9?= =?UTF-8?q?=E5=88=9B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wild_wind/common/init/ModBlocks.java | 3 +-- .../common/init/ModEnumExtensions.java | 24 +++++++++++++++++ .../wild_wind/common/init/ModItems.java | 4 +++ .../common/init/items/entity/ModBoats.java | 27 +++++++++++++++++++ .../wild_wind/common/item/MagicFluteItem.java | 1 + .../resources/META-INF/enumextensions.json | 10 ++++++- 6 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/polaris2023/wild_wind/common/init/ModEnumExtensions.java create mode 100644 src/main/java/org/polaris2023/wild_wind/common/init/items/entity/ModBoats.java diff --git a/src/main/java/org/polaris2023/wild_wind/common/init/ModBlocks.java b/src/main/java/org/polaris2023/wild_wind/common/init/ModBlocks.java index 6a1c92cc..c43a3871 100644 --- a/src/main/java/org/polaris2023/wild_wind/common/init/ModBlocks.java +++ b/src/main/java/org/polaris2023/wild_wind/common/init/ModBlocks.java @@ -4,8 +4,6 @@ import com.mojang.datafixers.types.Type; import net.minecraft.util.valueproviders.UniformInt; import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.Items; import net.minecraft.world.item.HangingSignItem; import net.minecraft.world.item.SignItem; import net.minecraft.world.level.block.*; @@ -238,6 +236,7 @@ public class ModBlocks { Type type, BlockEntityType.BlockEntitySupplier factory, DeferredBlock... blocks) { + return TILES.register(name, () -> BlockEntityType.Builder.of(factory, Arrays.stream(blocks).map(DeferredBlock::get).toArray(Block[]::new)).build(type)); } } diff --git a/src/main/java/org/polaris2023/wild_wind/common/init/ModEnumExtensions.java b/src/main/java/org/polaris2023/wild_wind/common/init/ModEnumExtensions.java new file mode 100644 index 00000000..b69d93f3 --- /dev/null +++ b/src/main/java/org/polaris2023/wild_wind/common/init/ModEnumExtensions.java @@ -0,0 +1,24 @@ +package org.polaris2023.wild_wind.common.init; + +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.neoforged.fml.common.asm.enumextension.EnumProxy; +import org.polaris2023.wild_wind.common.init.items.entity.ModBoats; + +import java.util.function.Supplier; + +/** + * @author : baka4n + * {@code @Date : 2025/02/20 19:47:19} + */ +public class ModEnumExtensions { + public static final EnumProxy WILD_WIND_AZALEA = + new EnumProxy<>(Boat.Type.class, + ModBlocks.AZALEA_PLANKS, + "wild_wind:azalea", + ModBoats.AZALEA_BOAT, + ModBoats.AZALEA_CHEST_BOAT, + (Supplier) () -> Items.STICK, + false); +} diff --git a/src/main/java/org/polaris2023/wild_wind/common/init/ModItems.java b/src/main/java/org/polaris2023/wild_wind/common/init/ModItems.java index c5752c4f..557136c7 100644 --- a/src/main/java/org/polaris2023/wild_wind/common/init/ModItems.java +++ b/src/main/java/org/polaris2023/wild_wind/common/init/ModItems.java @@ -1,10 +1,12 @@ package org.polaris2023.wild_wind.common.init; +import net.minecraft.world.item.BoatItem; import net.minecraft.world.item.Item; import net.neoforged.neoforge.registries.DeferredItem; import org.polaris2023.annotation.language.I18n; import org.polaris2023.annotation.modelgen.item.BasicItem; import org.polaris2023.wild_wind.common.init.items.ModBaseItems; +import org.polaris2023.wild_wind.common.init.items.entity.ModBoats; import org.polaris2023.wild_wind.common.init.items.entity.ModMobBuckets; import org.polaris2023.wild_wind.common.init.items.entity.ModSpawnEggs; import org.polaris2023.wild_wind.common.item.LivingTuberItem; @@ -55,6 +57,8 @@ public class ModItems { ModBaseItems.init(); ModSpawnEggs.init(); ModMobBuckets.init(); + ModBoats.init(); + } } diff --git a/src/main/java/org/polaris2023/wild_wind/common/init/items/entity/ModBoats.java b/src/main/java/org/polaris2023/wild_wind/common/init/items/entity/ModBoats.java new file mode 100644 index 00000000..5d719223 --- /dev/null +++ b/src/main/java/org/polaris2023/wild_wind/common/init/items/entity/ModBoats.java @@ -0,0 +1,27 @@ +package org.polaris2023.wild_wind.common.init.items.entity; + +import net.minecraft.world.item.BoatItem; +import net.minecraft.world.item.Item; +import net.neoforged.neoforge.registries.DeferredItem; +import org.polaris2023.annotation.language.I18n; +import org.polaris2023.wild_wind.common.init.ModEnumExtensions; +import org.polaris2023.wild_wind.common.init.ModInitializer; + +import static org.polaris2023.wild_wind.common.init.ModInitializer.register; + +/** + * @author : baka4n + * {@code @Date : 2025/02/20 20:11:15} + */ +public class ModBoats { + + @I18n(en_us = "Azalea Boat", zh_cn = "杜鹃木船", zh_tw = "杜鵑木船") + public static final DeferredItem AZALEA_BOAT = + register("azalea_boat", () -> new BoatItem(false, ModEnumExtensions.WILD_WIND_AZALEA.getValue(), new Item.Properties().stacksTo(1))); + @I18n(en_us = "Azalea Chest Boat", zh_tw = "杜鵑木運輸船", zh_cn = "杜鹃木运输船") + public static final DeferredItem AZALEA_CHEST_BOAT = + register("azalea_chest_boat", () -> new BoatItem(true, ModEnumExtensions.WILD_WIND_AZALEA.getValue(), new Item.Properties().stacksTo(1))); + + + public static void init() {} +} diff --git a/src/main/java/org/polaris2023/wild_wind/common/item/MagicFluteItem.java b/src/main/java/org/polaris2023/wild_wind/common/item/MagicFluteItem.java index 50732f65..d4bb93bb 100644 --- a/src/main/java/org/polaris2023/wild_wind/common/item/MagicFluteItem.java +++ b/src/main/java/org/polaris2023/wild_wind/common/item/MagicFluteItem.java @@ -43,6 +43,7 @@ public InteractionResultHolder use(Level level, Player player, Intera player.startUsingItem(usedHand); play(level, player, instrument); onFluteWorks(itemStack, player); + player.getCooldowns().addCooldown(this, 300); player.awardStat(Stats.ITEM_USED.get(this)); return InteractionResultHolder.consume(itemStack); diff --git a/src/main/resources/META-INF/enumextensions.json b/src/main/resources/META-INF/enumextensions.json index dbbed4c5..9ae2c6d8 100644 --- a/src/main/resources/META-INF/enumextensions.json +++ b/src/main/resources/META-INF/enumextensions.json @@ -1,5 +1,13 @@ { "entries": [ - + { + "enum": "net/minecraft/world/entity/vehicle/Boat$Type", + "name": "WILD_WIND_AZALEA", + "constructor": "(Ljava/util/function/Supplier;Ljava/lang/String;Ljava/util/function/Supplier;Ljava/util/function/Supplier;Ljava/util/function/Supplier;Z)V", + "parameters": { + "class": "org/polaris2023/wild_wind/common/init/ModEnumExtensions", + "field": "WILD_WIND_AZALEA" + } + } ] } \ No newline at end of file From 63a20dbaf35d4c8a1739b269c75704b693f31c45 Mon Sep 17 00:00:00 2001 From: baka4n Date: Thu, 20 Feb 2025 21:50:58 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E5=8A=A8?= =?UTF-8?q?=E7=94=BB=E5=92=8C=E6=B7=BB=E5=8A=A0=E9=A3=9F=E4=BA=BA=E9=B2=B3?= =?UTF-8?q?=E7=9A=84=E6=94=BB=E5=87=BB=E5=BD=A2=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/piranha/PiranhaAnimation.java | 201 ++++++++---------- .../client/entity/piranha/PiranhaModel.java | 45 ++-- .../client/entity/trout/TroutAnimation.java | 127 +++++------ .../client/entity/trout/TroutModel.java | 33 ++- .../wild_wind/common/entity/Piranha.java | 36 +++- .../wild_wind/common/entity/Trout.java | 13 +- .../goal/piranha/PiranhaAttackGoal.java | 14 ++ .../common/init/items/entity/ModBoats.java | 5 +- .../wild_wind/util/ItemPropertiesUtil.java | 10 +- .../textures/block/azalea_planks.png | Bin 437 -> 432 bytes .../textures/block/baobab_door_bottom.png | Bin 0 -> 500 bytes .../textures/block/baobab_door_top.png | Bin 0 -> 538 bytes .../textures/block/baobab_leaves.png | Bin 0 -> 6071 bytes .../textures/block/baobab_log_side.png | Bin 0 -> 406 bytes .../block/baobab_log_side_stripped.png | Bin 0 -> 445 bytes .../textures/block/baobab_log_top.png | Bin 0 -> 463 bytes .../block/baobab_log_top_stripped.png | Bin 0 -> 388 bytes .../textures/block/baobab_planks.png | Bin 0 -> 484 bytes .../textures/block/baobab_sapling.png | Bin 0 -> 921 bytes .../textures/block/baobab_trapdoor.png | Bin 0 -> 505 bytes .../textures/block/brittle_ice_0.png | Bin 342 -> 199 bytes .../textures/block/brittle_ice_1.png | Bin 417 -> 419 bytes .../textures/block/brittle_ice_2.png | Bin 541 -> 531 bytes .../textures/block/brittle_ice_3.png | Bin 639 -> 614 bytes .../textures/block/deepslate_salt_ore.png | Bin 0 -> 653 bytes .../wild_wind/textures/block/palm_crown.png | Bin 0 -> 193 bytes .../textures/block/palm_door_bottom.png | Bin 0 -> 507 bytes .../textures/block/palm_door_top.png | Bin 0 -> 433 bytes .../wild_wind/textures/block/palm_leaves.png | Bin 0 -> 5887 bytes .../wild_wind/textures/block/palm_log.png | Bin 0 -> 185 bytes .../wild_wind/textures/block/palm_log_top.png | Bin 0 -> 223 bytes .../wild_wind/textures/block/palm_planks.png | Bin 0 -> 205 bytes .../wild_wind/textures/block/palm_sapling.png | Bin 0 -> 187 bytes .../textures/block/palm_trapdoor.png | Bin 0 -> 474 bytes .../wild_wind/textures/block/salt_block.png | Bin 0 -> 359 bytes .../wild_wind/textures/block/salt_ore.png | Bin 0 -> 585 bytes .../textures/block/stripped_palm_log.png | Bin 0 -> 186 bytes .../textures/block/stripped_palm_log_top.png | Bin 0 -> 187 bytes .../wild_wind/textures/entity/boat/azalea.png | Bin 2595 -> 3440 bytes .../wild_wind/textures/entity/boat/baobab.png | Bin 0 -> 3720 bytes .../textures/entity/chest_boat/azalea.png | Bin 4593 -> 5527 bytes .../textures/entity/chest_boat/baobab.png | Bin 0 -> 5781 bytes .../wild_wind/textures/entity/piranha.png | Bin 671 -> 780 bytes .../textures/entity/signs/baobab.png | Bin 0 -> 877 bytes .../textures/entity/signs/hanging/azalea.png | Bin 1089 -> 1023 bytes .../textures/entity/signs/hanging/baobab.png | Bin 0 -> 1072 bytes .../wild_wind/textures/entity/trout.png | Bin 778 -> 859 bytes .../textures/gui/hanging_signs/azalea.png | Bin 448 -> 434 bytes .../textures/gui/hanging_signs/baobab.png | Bin 0 -> 455 bytes .../textures/gui/hanging_signs/palm.png | Bin 0 -> 427 bytes .../wild_wind/textures/item/baobab_boat.png | Bin 0 -> 471 bytes .../textures/item/baobab_chest_boat.png | Bin 0 -> 545 bytes .../wild_wind/textures/item/baobab_door.png | Bin 0 -> 419 bytes .../textures/item/baobab_hanging_sign.png | Bin 0 -> 399 bytes .../wild_wind/textures/item/baobab_sign.png | Bin 0 -> 325 bytes .../wild_wind/textures/item/palm_boat.png | Bin 0 -> 474 bytes .../textures/item/palm_chest_boat.png | Bin 0 -> 550 bytes .../wild_wind/textures/item/palm_door.png | Bin 0 -> 437 bytes .../textures/item/palm_hanging_sign.png | Bin 0 -> 413 bytes .../wild_wind/textures/item/palm_sign.png | Bin 0 -> 337 bytes .../textures/block/azalea_door_bottom.png | Bin 0 -> 503 bytes .../textures/block/azalea_door_top.png | Bin 0 -> 517 bytes .../resources/textures/block/azalea_log.png | Bin 0 -> 428 bytes .../textures/block/azalea_log_top.png | Bin 0 -> 449 bytes .../textures/block/azalea_planks.png | Bin 0 -> 432 bytes .../textures/block/azalea_trapdoor.png | Bin 0 -> 490 bytes .../textures/block/baobab_door_bottom.png | Bin 0 -> 500 bytes .../textures/block/baobab_door_top.png | Bin 0 -> 538 bytes .../textures/block/baobab_leaves.png | Bin 0 -> 6071 bytes .../textures/block/baobab_log_side.png | Bin 0 -> 406 bytes .../block/baobab_log_side_stripped.png | Bin 0 -> 445 bytes .../textures/block/baobab_log_top.png | Bin 0 -> 463 bytes .../block/baobab_log_top_stripped.png | Bin 0 -> 388 bytes .../textures/block/baobab_planks.png | Bin 0 -> 484 bytes .../textures/block/baobab_sapling.png | Bin 0 -> 921 bytes .../textures/block/baobab_trapdoor.png | Bin 0 -> 505 bytes .../textures/block/brittle_ice_0.png | Bin 0 -> 199 bytes .../textures/block/brittle_ice_1.png | Bin 0 -> 419 bytes .../textures/block/brittle_ice_2.png | Bin 0 -> 531 bytes .../textures/block/brittle_ice_3.png | Bin 0 -> 614 bytes .../textures/block/deepslate_salt_ore.png | Bin 0 -> 653 bytes .../resources/textures/block/palm_crown.png | Bin 0 -> 193 bytes .../textures/block/palm_door_bottom.png | Bin 0 -> 507 bytes .../textures/block/palm_door_top.png | Bin 0 -> 433 bytes .../resources/textures/block/palm_leaves.png | Bin 0 -> 5887 bytes .../resources/textures/block/palm_log.png | Bin 0 -> 185 bytes .../resources/textures/block/palm_log_top.png | Bin 0 -> 223 bytes .../resources/textures/block/palm_planks.png | Bin 0 -> 205 bytes .../resources/textures/block/palm_sapling.png | Bin 0 -> 187 bytes .../textures/block/palm_trapdoor.png | Bin 0 -> 474 bytes .../resources/textures/block/salt_block.png | Bin 0 -> 359 bytes .../resources/textures/block/salt_ore.png | Bin 0 -> 585 bytes .../textures/block/stripped_azalea_log.png | Bin 0 -> 384 bytes .../block/stripped_azalea_log_top.png | Bin 0 -> 422 bytes .../textures/block/stripped_palm_log.png | Bin 0 -> 186 bytes .../textures/block/stripped_palm_log_top.png | Bin 0 -> 187 bytes .../resources/textures/entity/boat/azalea.png | Bin 0 -> 3440 bytes .../resources/textures/entity/boat/baobab.png | Bin 0 -> 3720 bytes .../resources/textures/entity/boat/palm.png | Bin 0 -> 3336 bytes .../textures/entity/chest_boat/azalea.png | Bin 0 -> 5527 bytes .../textures/entity/chest_boat/baobab.png | Bin 0 -> 5781 bytes .../textures/entity/chest_boat/palm.png | Bin 0 -> 5441 bytes .../textures/entity/signs/azalea.png | Bin 0 -> 850 bytes .../textures/entity/signs/baobab.png | Bin 0 -> 877 bytes .../textures/entity/signs/hanging/azalea.png | Bin 0 -> 1023 bytes .../textures/entity/signs/hanging/baobab.png | Bin 0 -> 1072 bytes .../textures/entity/signs/hanging/palm.png | Bin 0 -> 1117 bytes .../resources/textures/entity/signs/palm.png | Bin 0 -> 851 bytes .../textures/gui/hanging_signs/azalea.png | Bin 0 -> 434 bytes .../textures/gui/hanging_signs/baobab.png | Bin 0 -> 455 bytes .../textures/gui/hanging_signs/palm.png | Bin 0 -> 427 bytes .../resources/textures/item/azalea_boat.png | Bin 0 -> 471 bytes .../textures/item/azalea_chest_boat.png | Bin 0 -> 548 bytes .../resources/textures/item/azalea_door.png | Bin 0 -> 382 bytes .../textures/item/azalea_hanging_sign.png | Bin 0 -> 405 bytes .../resources/textures/item/azalea_sign.png | Bin 0 -> 345 bytes .../resources/textures/item/baobab_boat.png | Bin 0 -> 471 bytes .../textures/item/baobab_chest_boat.png | Bin 0 -> 545 bytes .../resources/textures/item/baobab_door.png | Bin 0 -> 419 bytes .../textures/item/baobab_hanging_sign.png | Bin 0 -> 399 bytes .../resources/textures/item/baobab_sign.png | Bin 0 -> 325 bytes .../resources/textures/item/palm_boat.png | Bin 0 -> 474 bytes .../textures/item/palm_chest_boat.png | Bin 0 -> 550 bytes .../resources/textures/item/palm_door.png | Bin 0 -> 437 bytes .../textures/item/palm_hanging_sign.png | Bin 0 -> 413 bytes .../resources/textures/item/palm_sign.png | Bin 0 -> 337 bytes 126 files changed, 252 insertions(+), 232 deletions(-) create mode 100644 src/main/java/org/polaris2023/wild_wind/common/entity/goal/piranha/PiranhaAttackGoal.java create mode 100644 src/main/resources/assets/wild_wind/textures/block/baobab_door_bottom.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/baobab_door_top.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/baobab_leaves.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/baobab_log_side.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/baobab_log_side_stripped.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/baobab_log_top.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/baobab_log_top_stripped.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/baobab_planks.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/baobab_sapling.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/baobab_trapdoor.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/deepslate_salt_ore.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/palm_crown.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/palm_door_bottom.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/palm_door_top.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/palm_leaves.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/palm_log.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/palm_log_top.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/palm_planks.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/palm_sapling.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/palm_trapdoor.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/salt_block.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/salt_ore.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/stripped_palm_log.png create mode 100644 src/main/resources/assets/wild_wind/textures/block/stripped_palm_log_top.png create mode 100644 src/main/resources/assets/wild_wind/textures/entity/boat/baobab.png create mode 100644 src/main/resources/assets/wild_wind/textures/entity/chest_boat/baobab.png create mode 100644 src/main/resources/assets/wild_wind/textures/entity/signs/baobab.png create mode 100644 src/main/resources/assets/wild_wind/textures/entity/signs/hanging/baobab.png create mode 100644 src/main/resources/assets/wild_wind/textures/gui/hanging_signs/baobab.png create mode 100644 src/main/resources/assets/wild_wind/textures/gui/hanging_signs/palm.png create mode 100644 src/main/resources/assets/wild_wind/textures/item/baobab_boat.png create mode 100644 src/main/resources/assets/wild_wind/textures/item/baobab_chest_boat.png create mode 100644 src/main/resources/assets/wild_wind/textures/item/baobab_door.png create mode 100644 src/main/resources/assets/wild_wind/textures/item/baobab_hanging_sign.png create mode 100644 src/main/resources/assets/wild_wind/textures/item/baobab_sign.png create mode 100644 src/main/resources/assets/wild_wind/textures/item/palm_boat.png create mode 100644 src/main/resources/assets/wild_wind/textures/item/palm_chest_boat.png create mode 100644 src/main/resources/assets/wild_wind/textures/item/palm_door.png create mode 100644 src/main/resources/assets/wild_wind/textures/item/palm_hanging_sign.png create mode 100644 src/main/resources/assets/wild_wind/textures/item/palm_sign.png create mode 100644 src/main/resources/textures/block/azalea_door_bottom.png create mode 100644 src/main/resources/textures/block/azalea_door_top.png create mode 100644 src/main/resources/textures/block/azalea_log.png create mode 100644 src/main/resources/textures/block/azalea_log_top.png create mode 100644 src/main/resources/textures/block/azalea_planks.png create mode 100644 src/main/resources/textures/block/azalea_trapdoor.png create mode 100644 src/main/resources/textures/block/baobab_door_bottom.png create mode 100644 src/main/resources/textures/block/baobab_door_top.png create mode 100644 src/main/resources/textures/block/baobab_leaves.png create mode 100644 src/main/resources/textures/block/baobab_log_side.png create mode 100644 src/main/resources/textures/block/baobab_log_side_stripped.png create mode 100644 src/main/resources/textures/block/baobab_log_top.png create mode 100644 src/main/resources/textures/block/baobab_log_top_stripped.png create mode 100644 src/main/resources/textures/block/baobab_planks.png create mode 100644 src/main/resources/textures/block/baobab_sapling.png create mode 100644 src/main/resources/textures/block/baobab_trapdoor.png create mode 100644 src/main/resources/textures/block/brittle_ice_0.png create mode 100644 src/main/resources/textures/block/brittle_ice_1.png create mode 100644 src/main/resources/textures/block/brittle_ice_2.png create mode 100644 src/main/resources/textures/block/brittle_ice_3.png create mode 100644 src/main/resources/textures/block/deepslate_salt_ore.png create mode 100644 src/main/resources/textures/block/palm_crown.png create mode 100644 src/main/resources/textures/block/palm_door_bottom.png create mode 100644 src/main/resources/textures/block/palm_door_top.png create mode 100644 src/main/resources/textures/block/palm_leaves.png create mode 100644 src/main/resources/textures/block/palm_log.png create mode 100644 src/main/resources/textures/block/palm_log_top.png create mode 100644 src/main/resources/textures/block/palm_planks.png create mode 100644 src/main/resources/textures/block/palm_sapling.png create mode 100644 src/main/resources/textures/block/palm_trapdoor.png create mode 100644 src/main/resources/textures/block/salt_block.png create mode 100644 src/main/resources/textures/block/salt_ore.png create mode 100644 src/main/resources/textures/block/stripped_azalea_log.png create mode 100644 src/main/resources/textures/block/stripped_azalea_log_top.png create mode 100644 src/main/resources/textures/block/stripped_palm_log.png create mode 100644 src/main/resources/textures/block/stripped_palm_log_top.png create mode 100644 src/main/resources/textures/entity/boat/azalea.png create mode 100644 src/main/resources/textures/entity/boat/baobab.png create mode 100644 src/main/resources/textures/entity/boat/palm.png create mode 100644 src/main/resources/textures/entity/chest_boat/azalea.png create mode 100644 src/main/resources/textures/entity/chest_boat/baobab.png create mode 100644 src/main/resources/textures/entity/chest_boat/palm.png create mode 100644 src/main/resources/textures/entity/signs/azalea.png create mode 100644 src/main/resources/textures/entity/signs/baobab.png create mode 100644 src/main/resources/textures/entity/signs/hanging/azalea.png create mode 100644 src/main/resources/textures/entity/signs/hanging/baobab.png create mode 100644 src/main/resources/textures/entity/signs/hanging/palm.png create mode 100644 src/main/resources/textures/entity/signs/palm.png create mode 100644 src/main/resources/textures/gui/hanging_signs/azalea.png create mode 100644 src/main/resources/textures/gui/hanging_signs/baobab.png create mode 100644 src/main/resources/textures/gui/hanging_signs/palm.png create mode 100644 src/main/resources/textures/item/azalea_boat.png create mode 100644 src/main/resources/textures/item/azalea_chest_boat.png create mode 100644 src/main/resources/textures/item/azalea_door.png create mode 100644 src/main/resources/textures/item/azalea_hanging_sign.png create mode 100644 src/main/resources/textures/item/azalea_sign.png create mode 100644 src/main/resources/textures/item/baobab_boat.png create mode 100644 src/main/resources/textures/item/baobab_chest_boat.png create mode 100644 src/main/resources/textures/item/baobab_door.png create mode 100644 src/main/resources/textures/item/baobab_hanging_sign.png create mode 100644 src/main/resources/textures/item/baobab_sign.png create mode 100644 src/main/resources/textures/item/palm_boat.png create mode 100644 src/main/resources/textures/item/palm_chest_boat.png create mode 100644 src/main/resources/textures/item/palm_door.png create mode 100644 src/main/resources/textures/item/palm_hanging_sign.png create mode 100644 src/main/resources/textures/item/palm_sign.png diff --git a/src/main/java/org/polaris2023/wild_wind/client/entity/piranha/PiranhaAnimation.java b/src/main/java/org/polaris2023/wild_wind/client/entity/piranha/PiranhaAnimation.java index 575a81db..18b95f0b 100644 --- a/src/main/java/org/polaris2023/wild_wind/client/entity/piranha/PiranhaAnimation.java +++ b/src/main/java/org/polaris2023/wild_wind/client/entity/piranha/PiranhaAnimation.java @@ -11,121 +11,92 @@ * @author baka4n */ public class PiranhaAnimation { - public static final AnimationDefinition SWIM = AnimationDefinition.Builder.withLength(1.0F).looping() - .addAnimation("bone", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, -14.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .build(); + public static final AnimationDefinition SWIM = AnimationDefinition.Builder.withLength(0.5F).looping() + .addAnimation("mouth", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.25F, KeyframeAnimations.degreeVec(7.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) + )) + .addAnimation("tail", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 20.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, -20.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 20.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) + )) + .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 10.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, -10.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 10.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) + )) + .build(); - public static final AnimationDefinition STRUGGLE = AnimationDefinition.Builder.withLength(1.0F).looping() - .addAnimation("bone", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.125F, KeyframeAnimations.degreeVec(0.0F, -20.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, 0.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.375F, KeyframeAnimations.degreeVec(0.0F, 20.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 0.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.625F, KeyframeAnimations.degreeVec(0.0F, -20.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, 0.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.875F, KeyframeAnimations.degreeVec(0.0F, 20.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, -90.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone", new AnimationChannel(AnimationChannel.Targets.POSITION, - new Keyframe(0.0F, KeyframeAnimations.posVec(2.0F, 1.5F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.posVec(2.0F, 1.5F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.625F, KeyframeAnimations.posVec(2.0F, 2.5F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.posVec(2.0F, 1.5F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.125F, KeyframeAnimations.degreeVec(0.0F, 20.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, 0.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.375F, KeyframeAnimations.degreeVec(0.0F, -20.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 0.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.625F, KeyframeAnimations.degreeVec(0.0F, 20.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, 0.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.875F, KeyframeAnimations.degreeVec(0.0F, -20.0F, -90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, -90.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.POSITION, - new Keyframe(0.0F, KeyframeAnimations.posVec(2.0F, 1.5F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.posVec(2.0F, 1.5F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.625F, KeyframeAnimations.posVec(2.0F, 2.5F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.posVec(2.0F, 1.5F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .build(); + public static final AnimationDefinition JUMP = AnimationDefinition.Builder.withLength(0.6667F).looping() + .addAnimation("root", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 90.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.1667F, KeyframeAnimations.degreeVec(0.0F, 10.0F, 90.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.3333F, KeyframeAnimations.degreeVec(0.0F, -50.0F, 90.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 12.5F, 90.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.6667F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 90.0F), AnimationChannel.Interpolations.CATMULLROM) + )) + .addAnimation("root", new AnimationChannel(AnimationChannel.Targets.POSITION, + new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, -2.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.1667F, KeyframeAnimations.posVec(0.0F, -2.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.3333F, KeyframeAnimations.posVec(0.0F, 3.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.5F, KeyframeAnimations.posVec(0.0F, -2.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.6667F, KeyframeAnimations.posVec(0.0F, -2.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) + )) + .addAnimation("tail", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.1667F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.3333F, KeyframeAnimations.degreeVec(0.0F, 37.5F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, -35.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.6667F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) + )) + .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.1667F, KeyframeAnimations.degreeVec(0.0F, -5.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.3333F, KeyframeAnimations.degreeVec(0.0F, 35.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, -22.5F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.6667F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) + )) + .build(); - public static final AnimationDefinition BITE = AnimationDefinition.Builder.withLength(1.25F).looping() - .addAnimation("bone", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.2083F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.4167F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.5833F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.9583F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.125F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.25F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone", new AnimationChannel(AnimationChannel.Targets.POSITION, - new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.5F, KeyframeAnimations.posVec(0.0F, 0.0F, 3.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.75F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.posVec(0.0F, 0.0F, -2.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.2083F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.4167F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.5833F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.9583F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.125F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.25F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.POSITION, - new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.5F, KeyframeAnimations.posVec(0.0F, 0.0F, 3.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.75F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.posVec(0.0F, 0.0F, -2.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone3", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.degreeVec(30.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.25F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone4", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.4167F, KeyframeAnimations.degreeVec(-2.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.degreeVec(1.88F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.25F, KeyframeAnimations.degreeVec(7.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone4", new AnimationChannel(AnimationChannel.Targets.POSITION, - new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 0.0F, 1.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.75F, KeyframeAnimations.posVec(0.0F, 0.0F, 5.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.25F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .build(); - - public static final AnimationDefinition BITE2 = AnimationDefinition.Builder.withLength(0.75F).looping() - .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, -10.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.375F, KeyframeAnimations.degreeVec(0.0F, 10.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, -10.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone4", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, -10.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.375F, KeyframeAnimations.degreeVec(0.0F, 10.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, -10.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .build(); + public static final AnimationDefinition ATTACK = AnimationDefinition.Builder.withLength(0.375F) + .addAnimation("root", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.125F, KeyframeAnimations.degreeVec(-15.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.375F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .addAnimation("root", new AnimationChannel(AnimationChannel.Targets.POSITION, + new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.125F, KeyframeAnimations.posVec(0.0F, 0.0F, 1.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.25F, KeyframeAnimations.posVec(0.0F, 0.0F, -2.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.375F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .addAnimation("mouth", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.125F, KeyframeAnimations.degreeVec(25.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.25F, KeyframeAnimations.degreeVec(-10.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.375F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .addAnimation("mouth", new AnimationChannel(AnimationChannel.Targets.POSITION, + new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.125F, KeyframeAnimations.posVec(0.0F, -1.0F, 0.75F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.25F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.0833F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.1667F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.375F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .addAnimation("tail", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.0833F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.1667F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.375F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .build(); } \ No newline at end of file diff --git a/src/main/java/org/polaris2023/wild_wind/client/entity/piranha/PiranhaModel.java b/src/main/java/org/polaris2023/wild_wind/client/entity/piranha/PiranhaModel.java index 87290365..410b8fd3 100644 --- a/src/main/java/org/polaris2023/wild_wind/client/entity/piranha/PiranhaModel.java +++ b/src/main/java/org/polaris2023/wild_wind/client/entity/piranha/PiranhaModel.java @@ -16,36 +16,42 @@ public class PiranhaModel extends ColorableHierarchicalModel { // This layer location should be baked with EntityRendererProvider.Context in the entity renderer and passed into this model's constructor public static final ModelLayerLocation LAYER_LOCATION = Helpers.location("piranha", "main"); - private final ModelPart bone4; + private final ModelPart root; private final ModelPart bone; - private final ModelPart bone3; + private final ModelPart mouth; private final ModelPart bone2; + private final ModelPart tail; public PiranhaModel(ModelPart root) { - this.bone4 = root.getChild("bone4"); - this.bone = this.bone4.getChild("bone"); - this.bone3 = this.bone.getChild("bone3"); - this.bone2 = this.bone4.getChild("bone2"); + this.root = root.getChild("root"); + this.bone = this.root.getChild("bone"); + this.mouth = this.bone.getChild("mouth"); + this.bone2 = this.root.getChild("bone2"); + this.tail = this.bone2.getChild("tail"); } public static LayerDefinition createBodyLayer() { MeshDefinition meshdefinition = new MeshDefinition(); PartDefinition partdefinition = meshdefinition.getRoot(); - PartDefinition bone4 = partdefinition.addOrReplaceChild("bone4", CubeListBuilder.create(), PartPose.offset(0.0F, 22.0F, -6.0F)); + PartDefinition root = partdefinition.addOrReplaceChild("root", CubeListBuilder.create(), PartPose.offset(0.0F, 21.0F, 0.0F)); - PartDefinition bone = bone4.addOrReplaceChild("bone", CubeListBuilder.create().texOffs(21, 4).addBox(0.0F, -7.0F, -2.0F, 0.0F, 2.0F, 4.0F, new CubeDeformation(0.0F)) - .texOffs(8, 12).addBox(-1.0F, -4.5F, -5.0F, 2.0F, 3.0F, 2.0F, new CubeDeformation(0.0F)) - .texOffs(6, 10).addBox(-1.5F, -5.0F, -3.0F, 3.0F, 5.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 2.0F, 5.0F)); + PartDefinition bone = root.addOrReplaceChild("bone", CubeListBuilder.create().texOffs(13, 0).addBox(-0.75F, -3.0F, -3.0F, 2.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(24, 5).addBox(-0.75F, 1.0F, -1.0F, 2.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(24, 9).addBox(-0.5F, 1.0F, -2.5F, 0.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(24, 9).mirror().addBox(1.0F, 1.0F, -2.5F, 0.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(-0.25F, 0.0F, -1.0F)); - PartDefinition cube_r1 = bone.addOrReplaceChild("cube_r1", CubeListBuilder.create().texOffs(0, 13).addBox(0.0F, 0.0F, -1.0F, 2.0F, 0.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(1.5F, 0.0F, -2.0F, 0.0F, 0.0F, 0.7854F)); + PartDefinition mouth = bone.addOrReplaceChild("mouth", CubeListBuilder.create().texOffs(24, 0).addBox(-0.5F, -0.5F, -2.0F, 1.0F, 2.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.25F, 1.5F, -1.0F)); - PartDefinition cube_r2 = bone.addOrReplaceChild("cube_r2", CubeListBuilder.create().texOffs(0, 13).addBox(-2.0F, 0.0F, -1.0F, 2.0F, 0.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.5F, 0.0F, -2.0F, 0.0F, 0.0F, -0.7854F)); + PartDefinition bone2 = root.addOrReplaceChild("bone2", CubeListBuilder.create().texOffs(11, 16).addBox(0.0F, -5.0F, -1.0F, 0.0F, 2.0F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-1.0F, -3.0F, 0.0F, 2.0F, 4.0F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(11, 9).addBox(-1.0F, 1.0F, 0.0F, 2.0F, 2.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, -1.0F)); - PartDefinition bone3 = bone.addOrReplaceChild("bone3", CubeListBuilder.create().texOffs(6, 15).addBox(-1.0F, -0.5F, -2.0F, 2.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -1.0F, -3.0F)); + PartDefinition cube_r1 = bone2.addOrReplaceChild("cube_r1", CubeListBuilder.create().texOffs(0, 20).mirror().addBox(0.0F, -1.0F, 0.0F, 0.0F, 3.0F, 4.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(1.0F, 1.0F, 0.0F, 0.0F, 0.2618F, 0.0F)); - PartDefinition bone2 = bone4.addOrReplaceChild("bone2", CubeListBuilder.create().texOffs(12, 0).addBox(-1.5F, -5.0F, 0.0F, 3.0F, 5.0F, 3.0F, new CubeDeformation(0.0F)) - .texOffs(6, 0).addBox(0.0F, -5.0F, 3.0F, 0.0F, 5.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 2.0F, 5.0F)); + PartDefinition cube_r2 = bone2.addOrReplaceChild("cube_r2", CubeListBuilder.create().texOffs(0, 20).addBox(0.0F, -1.0F, 0.0F, 0.0F, 3.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.0F, 1.0F, 0.0F, 0.0F, -0.2618F, 0.0F)); + + PartDefinition tail = bone2.addOrReplaceChild("tail", CubeListBuilder.create().texOffs(0, 9).addBox(0.0F, -3.0F, 0.0F, 0.0F, 6.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 4.0F)); return LayerDefinition.create(meshdefinition, 32, 32); } @@ -54,18 +60,17 @@ public static LayerDefinition createBodyLayer() { public void setupAnim(Piranha piranha, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { root().getAllParts().forEach(ModelPart::resetPose); animate(piranha.swim, PiranhaAnimation.SWIM, ageInTicks, 1.0F); - animate(piranha.struggle, PiranhaAnimation.STRUGGLE, ageInTicks, 1.0F); - animate(piranha.attack, PiranhaAnimation.BITE, ageInTicks, 1.0F); - animate(piranha.attack2, PiranhaAnimation.BITE2, ageInTicks, 1.0F); + animate(piranha.jump, PiranhaAnimation.JUMP, ageInTicks, 1.0F); + animate(piranha.attack, PiranhaAnimation.ATTACK, ageInTicks, 1.0F); } @Override public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, int rgba) { - bone4.render(poseStack, vertexConsumer, packedLight, packedOverlay, rgba); + root().render(poseStack, vertexConsumer, packedLight, packedOverlay, rgba); } @Override public ModelPart root() { - return bone4; + return root; } } \ No newline at end of file diff --git a/src/main/java/org/polaris2023/wild_wind/client/entity/trout/TroutAnimation.java b/src/main/java/org/polaris2023/wild_wind/client/entity/trout/TroutAnimation.java index 36c0b3af..338271a6 100644 --- a/src/main/java/org/polaris2023/wild_wind/client/entity/trout/TroutAnimation.java +++ b/src/main/java/org/polaris2023/wild_wind/client/entity/trout/TroutAnimation.java @@ -11,78 +11,59 @@ * @author baka4n */ public class TroutAnimation { - public static final AnimationDefinition SWIM = AnimationDefinition.Builder.withLength(1.0F).looping() - .addAnimation("bone", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, -14.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, 15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .build(); + public static final AnimationDefinition SWIM = AnimationDefinition.Builder.withLength(0.5F).looping() + .addAnimation("bone", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 10.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, -10.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 10.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) + )) + .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 10.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, -10.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 10.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) + )) + .addAnimation("bone3", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 10.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, -10.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 10.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) + )) + .build(); - public static final AnimationDefinition STRUGGLE = AnimationDefinition.Builder.withLength(1.0F).looping() - .addAnimation("bone", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.0F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.125F, KeyframeAnimations.degreeVec(90.0F, -20.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.375F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.5F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.625F, KeyframeAnimations.degreeVec(90.0F, 0.0F, -10.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.75F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 10.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.875F, KeyframeAnimations.degreeVec(90.0F, 0.0F, -10.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone", new AnimationChannel(AnimationChannel.Targets.POSITION, - new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 1.0F, 2.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.posVec(0.0F, 1.0F, 2.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.7083F, KeyframeAnimations.posVec(0.0F, 2.0F, 2.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.posVec(0.0F, 1.0F, 2.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.0F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.125F, KeyframeAnimations.degreeVec(90.0F, 20.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.375F, KeyframeAnimations.degreeVec(90.0F, 0.0F, -10.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.5F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.625F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 10.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.75F, KeyframeAnimations.degreeVec(90.0F, 0.0F, -10.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.875F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 10.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.POSITION, - new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 1.0F, 2.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.posVec(0.0F, 1.0F, 2.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.7083F, KeyframeAnimations.posVec(0.0F, 2.0F, 2.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(1.0F, KeyframeAnimations.posVec(0.0F, 1.0F, 2.0F), AnimationChannel.Interpolations.LINEAR) - )) - .build(); - - public static final AnimationDefinition STRUGGLE2 = AnimationDefinition.Builder.withLength(0.25F).looping() - .addAnimation("bone", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.0F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.125F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone", new AnimationChannel(AnimationChannel.Targets.POSITION, - new Keyframe(0.0F, KeyframeAnimations.posVec(2.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.posVec(2.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.ROTATION, - new Keyframe(0.0F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.125F, KeyframeAnimations.degreeVec(180.0F, -10.0F, 90.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.degreeVec(90.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.POSITION, - new Keyframe(0.0F, KeyframeAnimations.posVec(2.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), - new Keyframe(0.25F, KeyframeAnimations.posVec(2.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) - )) - .build(); + public static final AnimationDefinition JUMP = AnimationDefinition.Builder.withLength(1.0F).looping() + .addAnimation("bone", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 37.5F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, -35.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(1.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) + )) + .addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, -15.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 17.5F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, -22.5F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(1.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) + )) + .addAnimation("bone3", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, -5.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, 35.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, -22.5F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(1.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) + )) + .addAnimation("root", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 90.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.25F, KeyframeAnimations.degreeVec(0.0F, 10.0F, 90.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.5F, KeyframeAnimations.degreeVec(0.0F, -50.0F, 90.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.75F, KeyframeAnimations.degreeVec(0.0F, 12.5F, 90.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(1.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 90.0F), AnimationChannel.Interpolations.CATMULLROM) + )) + .addAnimation("root", new AnimationChannel(AnimationChannel.Targets.POSITION, + new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, -2.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.25F, KeyframeAnimations.posVec(0.0F, -2.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.5F, KeyframeAnimations.posVec(0.0F, 3.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(0.75F, KeyframeAnimations.posVec(0.0F, -2.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM), + new Keyframe(1.0F, KeyframeAnimations.posVec(0.0F, -2.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM) + )) + .build(); } \ No newline at end of file diff --git a/src/main/java/org/polaris2023/wild_wind/client/entity/trout/TroutModel.java b/src/main/java/org/polaris2023/wild_wind/client/entity/trout/TroutModel.java index 6af9f790..eda943c9 100644 --- a/src/main/java/org/polaris2023/wild_wind/client/entity/trout/TroutModel.java +++ b/src/main/java/org/polaris2023/wild_wind/client/entity/trout/TroutModel.java @@ -17,45 +17,44 @@ public class TroutModel extends ColorableHierarchicalModel { // This layer location should be baked with EntityRendererProvider.Context in the entity renderer and passed into this model's constructor public static final ModelLayerLocation LAYER_LOCATION = Helpers.location("trout", "main"); private final ModelPart root; + private final ModelPart bone3; private final ModelPart bone; private final ModelPart bone2; public TroutModel(ModelPart root) { - - this.root = root; - this.bone = root.getChild("bone"); - this.bone2 = root.getChild("bone2"); + this.root = root.getChild("root"); + this.bone3 = this.root.getChild("bone3"); + this.bone = this.bone3.getChild("bone"); + this.bone2 = this.bone.getChild("bone2"); } public static LayerDefinition createBodyLayer() { MeshDefinition meshdefinition = new MeshDefinition(); PartDefinition partdefinition = meshdefinition.getRoot(); - PartDefinition bone = partdefinition.addOrReplaceChild("bone", CubeListBuilder.create().texOffs(4, 10).addBox(-0.3F, -1.9657F, -1.5F, 5.0F, 5.0F, 3.0F, new CubeDeformation(0.0F)) - .texOffs(15, 16).addBox(4.7F, -1.4657F, -1.0F, 3.0F, 4.0F, 2.0F, new CubeDeformation(0.0F)) - .texOffs(0, 0).addBox(-0.3F, -3.9657F, 0.0F, 3.0F, 2.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.0343F, 24.0F, -0.3F, 0.0F, 1.5708F, 0.0F)); + PartDefinition root = partdefinition.addOrReplaceChild("root", CubeListBuilder.create().texOffs(15, 27).addBox(-1.0F, -2.0F, -3.0F, 2.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 21.0F, -5.0F)); - PartDefinition cube_r1 = bone.addOrReplaceChild("cube_r1", CubeListBuilder.create().texOffs(0, 0).addBox(-1.0F, 1.4142F, 0.4142F, 2.0F, 2.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(2.7F, 2.0343F, 0.0F, 0.7854F, 3.1416F, 0.0F)); + PartDefinition bone3 = root.addOrReplaceChild("bone3", CubeListBuilder.create().texOffs(0, 0).addBox(-1.5F, -2.0F, 0.0F, 3.0F, 5.0F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(23, 0).addBox(0.0F, -6.0F, 0.0F, 0.0F, 4.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition cube_r2 = bone.addOrReplaceChild("cube_r2", CubeListBuilder.create().texOffs(0, 0).addBox(-1.0F, 1.4142F, 0.4142F, 2.0F, 2.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(2.7F, 2.0343F, 0.0F, 0.7854F, 0.0F, 0.0F)); + PartDefinition cube_r1 = bone3.addOrReplaceChild("cube_r1", CubeListBuilder.create().texOffs(27, 27).mirror().addBox(0.0F, -4.0F, 0.0F, 0.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-1.5F, 3.0F, 2.0F, 0.0F, -0.7854F, 0.0F)); - PartDefinition bone2 = partdefinition.addOrReplaceChild("bone2", CubeListBuilder.create().texOffs(12, 13).addBox(-5.0F, -2.0F, -1.5F, 5.0F, 5.0F, 3.0F, new CubeDeformation(0.0F)) - .texOffs(0, 0).addBox(-9.0F, -1.5F, 0.0F, 4.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)) - .texOffs(0, 0).addBox(-5.0F, -4.0F, 0.0F, 4.0F, 2.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 24.0F, 0.0F, 0.0F, 1.5708F, 0.0F)); + PartDefinition cube_r2 = bone3.addOrReplaceChild("cube_r2", CubeListBuilder.create().texOffs(27, 27).addBox(0.0F, -4.0F, 0.0F, 0.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(1.5F, 3.0F, 2.0F, 0.0F, 0.7854F, 0.0F)); - PartDefinition cube_r3 = bone2.addOrReplaceChild("cube_r3", CubeListBuilder.create().texOffs(0, 0).addBox(-1.0F, 1.4142F, 0.4142F, 2.0F, 2.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-4.0F, 2.0F, 0.0F, 0.7854F, 3.1416F, 0.0F)); + PartDefinition bone = bone3.addOrReplaceChild("bone", CubeListBuilder.create().texOffs(0, 14).addBox(-1.0F, -2.0F, 0.0F, 2.0F, 4.0F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(0, 25).addBox(0.0F, -4.0F, 0.0F, 0.0F, 2.0F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(15, 29).mirror().addBox(0.0F, 2.0F, 0.0F, 0.0F, 2.0F, 6.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(0.0F, 0.0F, 8.0F)); - PartDefinition cube_r4 = bone2.addOrReplaceChild("cube_r4", CubeListBuilder.create().texOffs(0, 0).addBox(-1.0F, 1.4142F, 0.4142F, 2.0F, 2.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-4.0F, 2.0F, 0.0F, 0.7854F, 0.0F, 0.0F)); + PartDefinition bone2 = bone.addOrReplaceChild("bone2", CubeListBuilder.create().texOffs(17, 14).addBox(0.0F, -3.0F, 0.0F, 0.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 6.0F)); - return LayerDefinition.create(meshdefinition, 32, 32); + return LayerDefinition.create(meshdefinition, 64, 64); } @Override public void setupAnim(Trout trout, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { this.root().getAllParts().forEach(ModelPart::resetPose); animate(trout.swim, TroutAnimation.SWIM, ageInTicks, 1.0F); - animate(trout.struggle, TroutAnimation.STRUGGLE, ageInTicks, 1.0F); - animate(trout.attack, TroutAnimation.STRUGGLE2, ageInTicks, 1.0F); + animate(trout.jump, TroutAnimation.JUMP, ageInTicks, 1.0F); } diff --git a/src/main/java/org/polaris2023/wild_wind/common/entity/Piranha.java b/src/main/java/org/polaris2023/wild_wind/common/entity/Piranha.java index 56e91dd6..0e08d8a6 100644 --- a/src/main/java/org/polaris2023/wild_wind/common/entity/Piranha.java +++ b/src/main/java/org/polaris2023/wild_wind/common/entity/Piranha.java @@ -1,26 +1,58 @@ package org.polaris2023.wild_wind.common.entity; +import com.google.common.base.Function; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; import net.minecraft.world.entity.AnimationState; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.ambient.AmbientCreature; import net.minecraft.world.entity.animal.AbstractSchoolingFish; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import org.polaris2023.wild_wind.common.entity.goal.piranha.PiranhaAttackGoal; import org.polaris2023.wild_wind.common.init.items.entity.ModMobBuckets; +import java.util.LinkedList; +import java.util.List; + public class Piranha extends AbstractSchoolingFish { public final AnimationState swim = new AnimationState(); - public final AnimationState struggle = new AnimationState(); + public final AnimationState jump = new AnimationState(); public final AnimationState attack = new AnimationState(); - public final AnimationState attack2 = new AnimationState(); public Piranha(EntityType entityType, Level level) { super(entityType, level); } + public static final List> FACTORY = List.of( + piranha -> new PiranhaAttackGoal(piranha, 1.0F, false) + ); + + @Override + protected void registerGoals() { + super.registerGoals(); + for (int i = 0; i < FACTORY.size(); i++) { + this.goalSelector.addGoal(i, FACTORY.get(i).apply(this)); + } + } + + @Override + public void tick() { + super.tick(); + if (this.isInWater()) { + if (!this.moveControl.hasWanted()) { + swim.ifStarted(AnimationState::stop); + } else { + swim.startIfStopped(tickCount); + } + } else { + swim.ifStarted(AnimationState::stop); + jump.startIfStopped(tickCount); + } + } + public static AttributeSupplier.Builder createAttributes() { return AmbientCreature.createMobAttributes() .add(Attributes.MAX_HEALTH, 8F) diff --git a/src/main/java/org/polaris2023/wild_wind/common/entity/Trout.java b/src/main/java/org/polaris2023/wild_wind/common/entity/Trout.java index c3264ecf..aaafe47d 100644 --- a/src/main/java/org/polaris2023/wild_wind/common/entity/Trout.java +++ b/src/main/java/org/polaris2023/wild_wind/common/entity/Trout.java @@ -15,8 +15,7 @@ public class Trout extends AbstractSchoolingFish { public final AnimationState swim = new AnimationState(); - public final AnimationState struggle = new AnimationState(); - public final AnimationState attack = new AnimationState(); + public final AnimationState jump = new AnimationState(); public Trout(EntityType entityType, Level level) { super(entityType, level); @@ -27,6 +26,16 @@ public static AttributeSupplier.Builder createAttributes() { .add(Attributes.MAX_HEALTH, 3f); } + @Override + public void tick() { + super.tick(); + if (!this.moveControl.hasWanted()) { + swim.ifStarted(AnimationState::stop); + } else { + swim.startIfStopped(tickCount); + } + } + @Override protected SoundEvent getFlopSound() { return SoundEvents.COD_FLOP; diff --git a/src/main/java/org/polaris2023/wild_wind/common/entity/goal/piranha/PiranhaAttackGoal.java b/src/main/java/org/polaris2023/wild_wind/common/entity/goal/piranha/PiranhaAttackGoal.java new file mode 100644 index 00000000..1694ae42 --- /dev/null +++ b/src/main/java/org/polaris2023/wild_wind/common/entity/goal/piranha/PiranhaAttackGoal.java @@ -0,0 +1,14 @@ +package org.polaris2023.wild_wind.common.entity.goal.piranha; + +import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; +import org.polaris2023.wild_wind.common.entity.Piranha; + +/** + * @author : baka4n + * {@code @Date : 2025/02/20 21:44:01} + */ +public class PiranhaAttackGoal extends MeleeAttackGoal { + public PiranhaAttackGoal(Piranha piranha, double speedModifier, boolean followingTargetEvenIfNotSeen) { + super(piranha, speedModifier, followingTargetEvenIfNotSeen); + } +} diff --git a/src/main/java/org/polaris2023/wild_wind/common/init/items/entity/ModBoats.java b/src/main/java/org/polaris2023/wild_wind/common/init/items/entity/ModBoats.java index 5d719223..6dfdf625 100644 --- a/src/main/java/org/polaris2023/wild_wind/common/init/items/entity/ModBoats.java +++ b/src/main/java/org/polaris2023/wild_wind/common/init/items/entity/ModBoats.java @@ -4,8 +4,8 @@ import net.minecraft.world.item.Item; import net.neoforged.neoforge.registries.DeferredItem; import org.polaris2023.annotation.language.I18n; +import org.polaris2023.annotation.modelgen.item.BasicItem; import org.polaris2023.wild_wind.common.init.ModEnumExtensions; -import org.polaris2023.wild_wind.common.init.ModInitializer; import static org.polaris2023.wild_wind.common.init.ModInitializer.register; @@ -13,6 +13,7 @@ * @author : baka4n * {@code @Date : 2025/02/20 20:11:15} */ +@BasicItem public class ModBoats { @I18n(en_us = "Azalea Boat", zh_cn = "杜鹃木船", zh_tw = "杜鵑木船") @@ -20,7 +21,7 @@ public class ModBoats { register("azalea_boat", () -> new BoatItem(false, ModEnumExtensions.WILD_WIND_AZALEA.getValue(), new Item.Properties().stacksTo(1))); @I18n(en_us = "Azalea Chest Boat", zh_tw = "杜鵑木運輸船", zh_cn = "杜鹃木运输船") public static final DeferredItem AZALEA_CHEST_BOAT = - register("azalea_chest_boat", () -> new BoatItem(true, ModEnumExtensions.WILD_WIND_AZALEA.getValue(), new Item.Properties().stacksTo(1))); + register("azalea_chest_boat", () -> new BoatItem(false, ModEnumExtensions.WILD_WIND_AZALEA.getValue(), new Item.Properties().stacksTo(1))); public static void init() {} diff --git a/src/main/java/org/polaris2023/wild_wind/util/ItemPropertiesUtil.java b/src/main/java/org/polaris2023/wild_wind/util/ItemPropertiesUtil.java index 8d2cf2b4..547a6cb8 100644 --- a/src/main/java/org/polaris2023/wild_wind/util/ItemPropertiesUtil.java +++ b/src/main/java/org/polaris2023/wild_wind/util/ItemPropertiesUtil.java @@ -4,12 +4,13 @@ import org.jetbrains.annotations.NotNull; import java.util.function.Consumer; +import java.util.function.Supplier; /** * @author : baka4n * {@code @Date : 2025/02/16 18:24:53} */ -public enum ItemPropertiesUtil implements Consumer { +public enum ItemPropertiesUtil implements Consumer, Supplier { STACK_TO_1(p -> p.stacksTo(1)), STACK_TO_SNOW(p -> p.stacksTo(16)) ; @@ -28,4 +29,11 @@ public void accept(Item.Properties properties) { public Consumer andThen(@NotNull Consumer after) { return props.andThen(after); } + + @Override + public Item.Properties get() { + Item.Properties properties = new Item.Properties(); + accept(properties); + return properties; + } } diff --git a/src/main/resources/assets/wild_wind/textures/block/azalea_planks.png b/src/main/resources/assets/wild_wind/textures/block/azalea_planks.png index 73b316e20cf17b741d794e6b519568b1cee4d50f..8f4c5fa2c45cbef52b2e18fb11a9dada12a6d8cb 100644 GIT binary patch delta 406 zcmV;H0crlV1F!>-B!72FL_t(I5p`3`O2beP9bqsrDF_t{f(u0#qPTSJ2lyF&o!{c# zonY}nX>4d?lQvP%oVlKxG|^ey$C)$fJ!hs{cegj+Qpb8#V3TksvYq#**Hq3<4-LZt zyv@<)mv@N+m1wYSB-|1CdTl!veymtlh9$GY=M}`f=Eh}cAAiEfT!gkEkHWnC@^>6Y zy92{?JkMkp1@cjqM!=F5rC~gGbHIt|^~I6bgan^Uoxm7f{qV=$iv;!IsZM`tb#WNV z{+=@yK%0xZ_6q^mp45f5*PhS=8jBpg(#K?GL@dzWMCOn1h~YR*POr{SnCtZziT~z+ zerTG^?E`J??SCgC3C?t}G@g@Im;^{u6gDO~-NvjJ_8vnv64!U+pr1LNWD9wiOs%G^ z6#zY9&)XQedU<@XF$W+)AA|GI#c=PcG|HyC8 z<6zSR6tAjJ(fje6pL>7^YR7pPHM2pS`jP(uXR!uyoe$k3p#T5?07*qoM6N<$f{6OY Ai2wiq delta 411 zcmV;M0c8HL1GNK?B!7HKL_t(I5p`3`O2beP9bqsbDO6f4xU)N+r@11jIZtk3!oIE`~{7GTqW{XXRXMNl0&py_2I~f~> z1$Z+?U#AQ49Tl&4YC-T}$!=#m7G9RdxnV)LsCY$SQpEb1YkwEvveI1Jz#}oqek&h` zQNL%H&Nq<^JV(Cr%mT2i)66iQyBu(0dN;YOY68LMvQA*MZvD{5-V1{D;i-5wNSN=s zaz6BUhkbyt0F@3C8Hq#~G@%9*796$GX%I5UYOfrLsv|U_K_6*wdVh08?x4pYj?Dq} z(6{%%E?@~rXn#HtBw|+E*y6wiVY)9Z5Jh4wQdze}77I8ShHNBd-{GTva=MJR^0Hh3 zuX=Azv6S`JJqJ#Vy6E-zqBREy;w<3IdFW#B59WY6AdxzxabVAFwvZYi&gKA#sH^O) zYlDOY`$zUY_no!|NdC@$M4#uMM{7sWz-#{_C05VHKNKF%4Bj3`Y&ie`002ovPDHLk FV1gK9!hZk& diff --git a/src/main/resources/assets/wild_wind/textures/block/baobab_door_bottom.png b/src/main/resources/assets/wild_wind/textures/block/baobab_door_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..442064f35c341798fa4ff52788b8a7659c918522 GIT binary patch literal 500 zcmV%<@)Mk*-gi^(~YS2IHmKmO@f8AN-p{Nv-h4}>2N=x!Ehn`=YC4@ z>2^lrQI#c2@;(;v-NU==P48%$1;T!?=P1kO;j7mGk1 z00;tvFpEI`@B#-A0N3JLWNRrj{Xz(>h8EQxz-|#B#qnq@g);HKb2%N0ph&^04k1#2 zCsf_)0^Cx-S-OTpZV><@Tc2@fkKhgwlxt*S?9uK0XF&h}B8CP(2sgKCfW_bdhDWU? zal6xI=uN7OK4UylOq)QaYiflUBR(tIn2)kn6>T~`QjZ};1o|yxArb+;1&bh`HJwC3 zdC@tjahqlw=A0%kI>Kn{V5l>qMP6`fs)`M8NmP6b-c{Kn2?_V!)i@d+w7$7o%|+$r q@?@b`D))dMsD0000Us|0HyQ0rsOFAt`4gaeVTN7 z`X3{3R>O_#+|OGpx+I>gNy;t&`) zve+2y=A<5}tqMG125PHin`c}C7^DC|dumF-a3V^oRhOvK90?XC1Az_VJCzl|V8Y^Z z8_{c+Dj@t?RSuadBH|4Z7dUJ>C}VJv*2%DZgDzS*&yWK)x~xg|{CKbOZ>%vi*rXbC z>N}D#z_qMEiHJx7xMVp0K0q@T5s07!VKDDW>o5a@c5+8Z{2Q|ma4_RG;uOoogD{2% zmq^||lt2U)5f9a~Ytj0ayfnePL)3XC6v>>-GEo({=s6|25b3%=0|w{@kB)-=A}zbDoprU}q^IrXU7^ zKqRcK2u|Q#ig$?!f&YqcKa(I3A)QDU53Um_9Li!dskC4K%H6{Ppg;tT3V}rQ6}fw+ zwfrHzG%lmZpXhpuhT z`PeJudPljd4td|>0TU@xIWk{3{fH`LOycYdflIq>-3LnU3u|<@HguLSYc?e%F7fMm zcXsaq7WFk&FB||eD1^MXF(}57#{0g*M~>f0mUpCVfP|*x+o=Vu(whkRhwH?G8wVIm zZZ#OcS-ZBf9=85O8PW?$HS_bA3pmk6&1^jR$fb7ToJO*olxt-Wy4T9~k=?&f8rt&% zdv&s}13p#yHW>(N7U1)!^0;4}d}7+Z$}GuijSrc=a^&N&D4dT+6QV#==SgP!J^hyJ ziSqo#zL2~ZpS1Q=``x!s4@g4Bz;~Lzem=7*Oq#AV@%o8&p#M6-7?Csh9F(khj5hhI zsD))gpm>ZeRINGG^qvgTui>naYMbZA>%;<@LOJ0Qp>5rn_0PN7ug6_(vS2mq?B70a z@J6*hZquE?$nmRd3>U_F$Nl!NHjI;M4o=qVn{b&!wa7V-WgaDJew1;tRS&si8{CD# z3m?wO)C=fozn}9uEWx-VJ{evX;cA++b-iXCEULJqF+m}y*qc*G-MC=68ea3T_89}` zbpFcBpA#3)cHq~X?yJ~cJ7Ospa=J;`_kw7tQJHTAHBQ^hme>?=F`-xPh?rJ?QeMtJ zOiR3$M!D}u#bb^X+H|>QT%(R_@ORJA! z(XY`HGO%U+D0O}pY+vq2)tKbL#;|})*Fn3dm`KdtkU7@8U^dsmMPYzr)_<;GTIHG? zal&pOLrTkr-Q`wJEpt=fnsKtO&q_CKQ}p9g(QgXu6V5rC=X%E6jX4yazIZHYgyPSA zrjpW&*rtf?!5p~P7v{Jgy-@6eJC>|K3qNFlJmpiRE269*Dt?nq`lL3I7g)4ebfK%T z-s9Tih}pC$g4}HU;k~!hM3f>6Wk(c&Kh^J=q6={!UCxdil9a03t#H(_ZQ4DuTjB+B zVRzEaX8ZH)BTchO>`x^%%@1nCbxAdDw|hTNo85}9+?sN5r)z$1>4u*C(W3HQ7oyTL z2sM>)Wlu!cdJ)#`aF+m*t_nXd*=dt1uCT_B69gO?w5oet-lKiZmF-7dSRtZH#=(&yosIOpVdw-ZiFW*xP+Q_b15 zDnmGJV^lTdM&0~eg@p8iWrheW?BfRaqTDi>tg_;lC3AU(ois(w8Of(}uK7k$7F`R@ zRps=F>4#X_gW6BWJ}cGwxqTK3IR0KfZSV90#q6quzM{^z$L*Q9zFwlaK3AWPMTZY* zJkOL&KXhsD%c<_ye&ozp{`+b9i>-a^KbrPNHhpw#p6{A9Eb z8*jSl>wI%fu_RS0q}3sJdt&m$8CNyacqfgjDL?k)1`N&0$$OJvckF(}zg>kl1o&+B z7BqP!(DLY}b(i^$MPH{t>CvVTqrrhcpIjA)^Gc$*^~>c?)?^(tFXB>Nry|Tnu1>@z z%4d1r@`gztnEg<18B-oEeezlKOlMai6)v<&<*6q%Q|GnN>xXCPtU*;-PZPJK&Lm4> zJ@mD5_xdA4*l{1(h%SMzc-C;!Q^VC`^yFgv zsSAyj?V%^k5=qiFR>rZhV##Vv7IAL5GOMlojx2l-_KA-57OPA48}l%hSDbdJx;(f#$t;bAGcHs|;ComcdC z{`qO%w(y!_5`|r{-Lr23-03&bz#ZL#Xp18=>6#=8(;v``ptHao9|AEjieQn*K>!!( z4+PK{c-ZWfYcME{f`_?l6Olxg84yUbiev-Mk#;WR$RM&F1!iO@W)Oh`3FrWq1dX5v zGdQ>iJZza42R`$f5isa7gd2p1c@Q0-W=u8!#b{zQk#O?}S{NE;CZv6g2fjK z@C^?OL zE{(~6@;FKU%up^K1_SNTukq1YMB+Dk2Iq?kpdN?_5(|OSL?Y;P#E%{vu6YcMdVKa3Dg0EZdMCIjYS0E4UiBL#*0&7T#@4qi@&LPh|=03C#Kz+O>5b!ll$bol1M zlOTXbXDxeyV*iBX(x~6X`YAS^WjUQ60|DK?@&1JVn)@;sL=lNN0+Srd3(uN>hw=Ky zQJ7>J1-JaD?T;b@6fGS%35`O*F}he3T#u^l57!1z0EVhd#^_M>exR~uaJVD}8Q@WY z#j;20{B4EM)Sbm7`sSZ%B>0AMk?IzLd@vuR*el7fGXibq8O zsr->7e}5!a2Ts+~#lkTd5&%+Rz__p^9bFxNZ8X`RvP?xG<1CnLItd(38l4mXAXtom zWdl!eoQZ=q9){LLes6IICUL2t10F^sk)ig^-z_dQI^fJD@#IA5BGK9yZCxxz3k3?H z{T<{6usL8U@<>rgO|2DT-nihvY(Qm6yg~&DmOa2^aAs_P#AUKwn9N{2j29D>=eb

mQ7ITa^2!c?gS|qX-35g+N;eeJFC^3Mgz)5;k6kH3`7){otAkkXr*?<+aoDEcMMN9Rc;o*S*PbiQFjzYsx7#9>0ht|R&F&an|4vB;zzGRHx&Filz z8zBCVC0@fV8HbX@omBSA{tM}|Kab;VEhkz0I7d>@=N;umg~1%zoft~ zfqz%mZ@GR+fnNguuCD(#xx~I7c>o6Z859m4XuR=rt>9ru$lu120EvMpL52b>CZfR> zQI?e_2LjPl=3RUdMMhy@qcGQ+Xf8Z1E-AWU)oi@qIS7P*hc&^(1$)=^=ry~32bo*Z z8-S+mQq#w`5@3gRNO`8b*s7-FGqE~7*;1sztl6fj{C={oA1ynWPTa6P_C!i@BrWn~ ztxbDO%jB@pK7F4dP9vvdKI--kb=RKgrA0}xZ>9>?yVAZ-mLY8 z-#DU%EIAKle`B?4WAw*E{n-Ng0|}6W!bR%K;xS{`LdmMsMtf3uii^^$1c4rXiiJan5is$|N6Vo2Po&<#bCQD?e75Ok!+!V bpwEp2JM}zv@L4|q3k_mzZbv9H^^5%vk*}uW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/block/baobab_log_side.png b/src/main/resources/assets/wild_wind/textures/block/baobab_log_side.png new file mode 100644 index 0000000000000000000000000000000000000000..c05be2673346847b288241e6cd183636b0abce64 GIT binary patch literal 406 zcmV;H0crk;P)h)UPK*hR1)^rc_pC-?z=aiItW1+jgxQ>^r<&B@N)9oE1!(@f^xn`HLt z?e*o{G?P?Y&WEHJ`_u0+{kX@bo_l?F+o#*pd=`K5{x2z+K=uU)i+$^t0K)KqaAuz$ z+n!Cyaq<2plJx`l!($tNr4VnR!BETWnA+475P4k;qEebs+tdM&Bo7VAEUW{J?LRVW zT^5K~Q~JSv+!JDI9;L8$U*AIsBw&&&-#4?A^S;`owO^DO8zh1bV$MUi)oF61h*&)l zTP&YB?-JZ=62t(m*@*EDVjAvI845V)C41ulK@FydBbCH74OAI5)vqiP{0A05B|TU< zbOQha$}!cXNpvYglE8_R11O6Jh{Zz^8v!wD_9{UHL&p?{-)sXwZJt56Ds(g%e;6b*{n^uFDU7XxzfZg*yOZZdg& zdG43h!p6_OJDB!(?{*XW`Mr3_!~M*vy1$mErk&?Mms~V66`M`+UVsG9AvaAOh)w_j z;Vf-8rz@L^S*sexU^QDfc+=j|@9)$=m_UQ=R_4(fyBk1kSfhbPHPe$~HqE8Acl3Sd zgoE^R{xc@~^TV`WO*3LhYg$QW&ao!}B=Z=hY0b8qV;LbzG<%UPGs6?J&yTZxeGk%d zQ=(C>f>?F^AQ_NiuoP7_`{hQ`G-}kq>{4kK z26GdrO3XA)nVfFg@I%s-0YJHb5hT!=3B>UeMMOB1tXGjtlvefJws!Jz4-)8dS&T^L zQT9c^d9cU1D}ar-20B?FZ6Os9z`9+&p&|ccD``8V|$G_?f-EN0|NrT;cq9S?JWk00000NkvXXu0mjfl4#EO literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/block/baobab_log_top.png b/src/main/resources/assets/wild_wind/textures/block/baobab_log_top.png new file mode 100644 index 0000000000000000000000000000000000000000..465b2150b38272def949d8e142c770d7f2764d6d GIT binary patch literal 463 zcmV;=0WkiFP)i5QT3`z?#Iif?9N;Aa+;LUEjh-@Bw_&f(ym$B3*Q$s0B6sQz+E?O>)w^a-f}i z=jY7KncT+R?aij$-g8L1vunEeUe#v|;hnSDikaz%|8<_Z^J5P(H=8?2H!i!Mmo{(e zVy=94_Sf;-%tifyi>Q9uEISy#&fH?LCftO3DEN{jGGGc$ywf@$NXf(Nu1n%pm}lq3 z^2aUb4fpi?X|Vt>a%6M+_CP0@pe&zSl8seC#i?_#AMNsD-#}EsI-t6e?R<40f2}{> ze+>W-34}&s6{C{Xt^!FqJZibo#It8N{gCza3yjnpJL@}f(8%Yv5Neu1q z1Sp#r^gStFjDwIY+7AUV{Mbp909?3=1AQEFN)IbCNv4~!(3Zq{jpMwWM;{S^nc23p z({d8;7?FyjkoBZ_s4{x^vX!d3xaIi5QT3gU`ZlWs6w}*E0wzI#uw_NcBhzKirYdhDA*JQA?6!$CSx6F@7$Sl&iver zmXEh>>a8d;xv6P>%#Sfoc8>DK0CY7w^L$>msjByXVxH`s*UhJiWRa|(z}%xzRd@=L z_nt*wJWNuNk0a0g=J1sc`%!vXzZ+2Ey z{(P#upKsf56F@`;*E=96vf338(#7RCt)6%P7JDL4JQ)L$e!R%BQ4DhdNHQfM#yBk_ z%1hkcbW7>X1md!2KN@1>i9?hj%zcO`6V64yOvuBBH7pUR38-aS#Hd)+%s9+W%SC=_ zixdv5eTkZfDyydtds0;gB;yqzYZQFzK#M|1A_9r5s>HQ3+W`qJ3Lzy$)CqR-o8dJ&-dG^UP%)7B~E|kztv^uX#C@|6oqe)eZOuib)PPN3^N1DWKFj4li;GGOsx>~NL3j096~1(CiUI=a_N_q9>+Tg*2ixo~uJOybU-gCrKN z=>V+DbwHYt1rlX0yoKZF#}kPfvq;?g_=mpjS_*hrEcHcp9DL8pAa7+M#@*eV>FxIZ z?Q^AibJx&EzIB=MDal$f-2}V&cQ!tJJyr_&5oySgv)fHb0EheGOfKN4`6lr30xYZ}y77#`Qb^0000EX>4Tx04R}tkv&MmKpe$iTcuU14t5Z6$WX<>f~bh2R-p(LLaorMgUO{|(4-+r zad8w}3l4rPRvlcNb#-tR1i=pwR~IKm7b)?7NufoI2gm(*ckglc4)E8@Of@^k0ade% zR3a{9va3Sy6=C!ugf5Iq%+%*ZF$vG{bq^n3?_xa5``n+SN6DEC@Cn4TOgAjz4dUrd zOXs{#9AQOCAwDM_Gw6cEk6f2se&bwl*v~T~MmjZ593d78Z7jDjD;g^C6me8hHOlvA zTvj-5aaPM!*1RWwVK}F)EOVXa5E59#5=01)QAG)5ScuW8kzyi6`*9EdpyLecQmrbxV`?fXf|V;7OMZ$&msy{rNoben#Jv1^RD+?lrf!<~~jzfHZZLya5gl zfsq1buY0^Z)ZW{_XPW)}06`&glX3$N;s5{u24YJ`L;!#QApqZJM(BS4000SaNLh0L z01|Wn01|Wo-ewh92ofG{QU{;_00EUrL_t(I%e9iRP8&fGhQCEf zHa>f?jW5SF5%YoCp) zrGQO-G_y0a^UXi2h5un+4nt%8L1W9z*3$7}x>yZ704jdbY;M*8csLAA`1$4B zZg#|M&w@Q1pKhCK;1R0?01LVwjJQ1S34mB7PTd=TO~xwWp+BPC?1+4~#?4JcyV(&3 zjV+V!)~E&^JG&vxv#$;!(!1~MhHi52I-=qiS&4jpF5Gc>-V?{C+h(m+S&$Y$t@MX$VKZ)WE5CPzFPxenvBVL1)eqr*cEN#+!d^y zeA_dAP)F+_QkDSFdPwX0kIel{qH(luK7RV(V*NOApm~tRG(gG{`f-9>UUJ?lm?q`~B+=(_~CvLCz}x;0N`81Eee=mzSJ^S*X^-_bKSB$W61-yDFmm`k-^avb9J> vuF)#Wc?HU{#NYQQuougKe*Fvc8m&D8t`EZ|W}l0#00000NkvXXu0mjf2+5eb literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/block/baobab_trapdoor.png b/src/main/resources/assets/wild_wind/textures/block/baobab_trapdoor.png new file mode 100644 index 0000000000000000000000000000000000000000..2820e670b4eafd43edc3ef8c7f021081908afddf GIT binary patch literal 505 zcmVt zxHGZ6E~R{poZZP}_M`hWFC->Ix5uY8zmyilX=F|lGqZyxX-0bgF5W4{-b&!&HTb=lPty1j-F3>^U(H5XZ;SqI6!JimcH*EK}((X+AVFcDsBOlHM3Mxg#eANCe4Os zM7Jq$veAObN}Fp!ZXyhuf^OsdqX&T~5eZxfZz5}y&6i2w2q%;a-itFOf^b`u2aqRZ zz|qaX*Bw}C2*Ri>xbFc72&{yG4-UbgZ_MG0Jp?EFb`KOmkwKzToA)}*bQ-{=X`tau z_CPQziEyrow%Lj!L^(c;sxflINRN7Lbpj1N3KE-P<+>Yb79gexpXmQ#Wi;GcE8WYl@}dR@B#znq}MburV{^F28R#qZqW5-qRJDlxlyBD8Dk=YTBP h>vuWh9k&KrR;x;SeCX2jb1n|& z%n8EM0I~nXB+3#LAo7-o852K#*D5ll30jFIiXk$_8L=(pD1VLuh+s=2_Ox#C-pmH| zqj(v^e;v9sex*7@$it?Usn6|yiQk^97_7I%kFl+WWMo&&Y^K!k&qKp*GceK1_P5x9 z*_MgX9mEf0ufdl3Z)oX*&=Yl9E ZegX5mzdcMfOy>Xq002ovPDHLkV1iX$m0D}Nw4Qw0PWe#Q98(&HAC z(FYUY{e#k4^=0b{RMK2Q2y(K<-yeqNG+5DCNyGFyv%;z&N>sw$cQ8VLUy8DIyjzQa zKy9ZQBA{R*ch*DmsGSAi^TV2jU|ryo?U<)}!~|4V2PmvR%SrLt8^=B0JbcCD1@`xY z*y@SZ0`%>CejLy&Y ngXO+O5BgtPm6d>`I?`Wzk=W$7u1tCW00002}5n|Qk(t6#r7CYW=+4MPJE&wu_Hdlk#`SsYc zG&RWSM%#9Zf$stF>ai(S@4)4MJ_m)ldQl9m+#T54VrlOmbBE&*lwa?Fz`FX~&4qP3 zxwX6bul4@8&aT8sC`3275R?^@?4u$i5BW5I z$Y1a^f^RN(Ls7h}M4GV5&bq|i8T<55vm?QRxpY;XQ`M)s&Cc%29%}Y!KEls+gWe7B zI4VNq?{HdWd|8aE|I3F7W-IR|c%kt=m~k43mDC20e<_$jt$)mzg6eSvGj18+L#G1o z28A$4qhCqtmCL9n&?Nm91*EfRKoYIQ@3ouCWHKYx!d8<=K<qXAcEd#rTel44w@` z!Q$9B1yUN6qJob;|Ux^++1sh*7+s)@G|R05!_Kf4-?XkD-B3OQE12gX=s^X5>nW2?MCnS z$xuG0#?8eDBrF(Cq5^f!tdRG~!g>s*eBym2|;D2x=oIslR4Z{kR zrm>sMi|4^%t-9Iu<*=^KHo>I_U?on4$()StTfxk;r}qf+#V$(pp&wc%{252v`0UsKyLOJA3~100000NkvXXu0mjf1Yq^u delta 515 zcmV+e0{s1x1f2wsB!A>dL_t(I5rvXZQxicD#b0)Zn2_B~0ZS;tpTLGdQ64yW_2Q@X zTj<5|M=-`k!}mtMbrdV~K&o&$4pRuoi9 zxSjrz3(p=;6#N}5GX4eA$Wws=g!C)Ln&!0rV{E(d*qRo#lYgUbN}aT=#@aUXg!M^Y z5oYr0vWH69$LU#Dj0rHZEXDcxvE&v)`#k17b!L)g@p6Lc&qsvwGm~$h(ZBfWhSu5M zAtU#sVf8XZf{n-)C?K3H`Iy{IP_MU;^$rn*h9w+*Nm0vBUJY)nUJO|14eU_*-&4HU zZzHd4!7B#>8-Kroo9kQo^6F9c{y&o4!HvwrU;Kl8Lno7 ziQ|^m(QNKIkjdv8C1jU>cE;#Vv&f|>M$w#kKBWjV_Zwte<5znEkTd`Q002ovPDHLk FV1hDE{%rsN diff --git a/src/main/resources/assets/wild_wind/textures/block/brittle_ice_3.png b/src/main/resources/assets/wild_wind/textures/block/brittle_ice_3.png index 37b7e07c15fabd43410fcf794dab8d0aa98b8109..499169bbc5d489eccbeeced5c25120afd2d5b503 100644 GIT binary patch delta 589 zcmV-T0{T!YamT|7U1bjyX_cnsM1J6j3c2l9( zs)@Qr36OCDd2X-PO$V->EQi$$l8u{{l!6_cR9Fs6`*x6GJg-U4Tmk`Ms4TTeHZ`c1 z(2|4p7cNY)(yqqzl=IJVBu#ZvV=(3Uib^Of&f0-wCaom=y{hbmwqj1E1P=xQY|DgBFoR@Lt~8Lc z3|L7+3b`pGZmGTm@_#mCAmeJ#bPf4!A3DJd4o877*~x z$GT87^$Cs-s~BFZ(OE7CHVq5czivQq^Y937J_PG&m@5s6#aJwR*2TL|Cs@oP?D@~p zKK}?jg6x^gWoi%Fhz6_qGr{nxFboHF+7+;Ey8<5cTYu}Wi9{&6QFzgS>e3|iL8)+n zyU7@{yEzEnd0LOfGHqN9KSNL1K%^LiQ!$tn;H)_fGU1&K-GZ~}U^clG%8Z%j0z00A z&W{keEgzX|>>m-433MHqz_8J1G(b)4v?Eme$~5ICbpe~YVyn(8?WBNM*0aSJ_eFltp8x;=07*qoM6N<$f^#J) AI{*Lx diff --git a/src/main/resources/assets/wild_wind/textures/block/deepslate_salt_ore.png b/src/main/resources/assets/wild_wind/textures/block/deepslate_salt_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..6143b84667df53ead9048816a6f23c5744250751 GIT binary patch literal 653 zcmV;80&@L{P)Geb)fCPaua=i(be54^{``|;kn=iYIp)9FF8*@R_T7=>xJ z&}wzWn{d_fxJ>K|H95r8>BtvIe?=xGf13Dpl;SN zJsrXL_-rhg0S;?y|8Ut zn2@EEkW8Kx1GS(~1Zhu&LU^#ah+OWg*tn4up#)^SMgwc74!m`JV*@AW=5Qhr$HLHe zEq%uklb7;53Qe_8sY@n5D;0@3tn1FJWJNr@cNNl?5`epnyzTefvT>p*o|) zeE#eyqR~SPm06)qYUtzwGKj~I61=7w76;vYQ2wwUR3y4g@fg@4800000NkvXXu0mjf+utk( literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/block/palm_crown.png b/src/main/resources/assets/wild_wind/textures/block/palm_crown.png new file mode 100644 index 0000000000000000000000000000000000000000..5bb6e642c570d671558f92dcb98fca1741d3dd6e GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b^-|NGn&#aU;#%lrn_y<5 zro5a5D3$B!;uunKi}he*<1qoAhKu?s3@;c?@jA?A{F3s2=D+U~s@F?>RV;#H9u_m qHht%M3E#Ye`(}?BSN3iC%B~&6_wv$R&ksP089ZJ6T-G@yGywo<-Ah3L literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/block/palm_door_bottom.png b/src/main/resources/assets/wild_wind/textures/block/palm_door_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..a17c735678bf20f744c7aace6a6b2e04eea32958 GIT binary patch literal 507 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0gy>VK~y+Tos&CD z!%!5*Poh#AwRO-|6bsfzK~NOj3$Ct;lY^@r9bJSh4lW9vo%#_3m#*p{R5Tzu6wy}O zDt)9iF}5}Kf18xlv=RJ;!?`)HoO{m=CyJu3UY?O>&_xf)ERFew>HhhRmNvHNDg8n~ zF660pm!Qz(D9II#W`jP;=1P>w6^ZvGFIbQjud9zGFE1`oU}D^`c7`{!4J0RSZb_0P z3Wvjn)ehe)aK^F;wgN&kLCT-UX&@=FcXVa?ROORtz?a`uwioQJq*a+w5Zn|$5^3k~ zm{ztUlsb(uJ5Usr#Ucms{LqM-9UQ9TD<*i4?d{UlNtCTo6hQlZUY3J+zNYBR(Fp{b ziQVXWhyd+EoNz2K7xXi6!ZrnyR7P%-Zt&OjfU#_X6Mikot@cfU4L;B|M%=XDW5kuk zDO&|LfMV7$_N>nf`+6e}qxvYT^sRHGebqZkp;%!>rlFLK}>z28N xex{wk7R)YeQ-Jd?vBDi}uIl)W|3gWu(hoNJ=%A?S5{3W(002ovPDHLkV1hnI-J1Xa literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/block/palm_door_top.png b/src/main/resources/assets/wild_wind/textures/block/palm_door_top.png new file mode 100644 index 0000000000000000000000000000000000000000..f8dfa5aa667788e1f7ecba7b4e1d6c1635138972 GIT binary patch literal 433 zcmV;i0Z#sjP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0Y*tgK~y+TW1N`i z^`C`{kpUn0^X)&B1pzSipWl3EV4Rxm{r~K#2MiKo0$@R6!HZWPz%&zx0BLs4uVvu0 z@Bj<)@vvjXAOKSbvk+_m2pl_kn&HvYXK;ns07wp|4h9%gGcx~+KE4Fzz%+mQ@{{4_ z(c(0=U$`0}%wU*$%@XaQ(_luq%)OiUA;itN|I|5=Sur z6xtv^;=||woD!ct_y9Kj*1eYu#%2moDeM50tiONz0X7U2jc^0V0bm0A|gfg6u b2^bgvwAZIv2D=)V00000NkvXXu0mjfpm3_Y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/block/palm_leaves.png b/src/main/resources/assets/wild_wind/textures/block/palm_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..b073073e78355d8c6b00c2e4514e986938865145 GIT binary patch literal 5887 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/block/palm_log.png b/src/main/resources/assets/wild_wind/textures/block/palm_log.png new file mode 100644 index 0000000000000000000000000000000000000000..e81d41efe0aee096c84ec1cb54f25efb8623b4aa GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bjdZf?$@i~F@X8Ev@ix|L z=R7(UD3$8z;uunKOSHFdw2;Bm)z4*}Q$iB}@^L^d literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/block/palm_log_top.png b/src/main/resources/assets/wild_wind/textures/block/palm_log_top.png new file mode 100644 index 0000000000000000000000000000000000000000..beb83655e64c03c80c1d2d6be361300d275068e3 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!T!2rAYi5W`Prm=GH1~;#UKI&m z9pO$@-qtzxCXr5-Nv7JhzQy%Gl{KC&jv*DdO#2zRTori^ugbk%`JcP~_;=O?3X+Zv zQ5l>W9GmydxM!yC^m)#bpy?^hk8aMME_kR-=GVbZ3}SP8@{dU!w%eBO%pi9-be(19 zm+Fq^NB&Aq{}h|xt7^IOSGdWs=8uO`GWn`EWrS(TPgc#m{Jxxb;qJopm5LA9vtn4L U_&(BM2fBm7)78&qol`;+0DQ4f#Q*>R literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/block/palm_planks.png b/src/main/resources/assets/wild_wind/textures/block/palm_planks.png new file mode 100644 index 0000000000000000000000000000000000000000..d40841d9338e6d34db07b31a01c5e5fe5e63dd15 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ^;eglo98hx(W@iesmj|r z$KE8#RNJHP%qO6NVow*xkcwNpKHC`&J8EX9qkXo8e7iYt7rM&`iiMU z;gyu)zS%oed~}Mo3O@gSWc`E2#AVtW^$lWgXD#yhJUc_>gZ1wHdk_2hge+8=D9HO} z=DWzof5GS24={)CGB~K3ELeJE)!OUAPXqflGt_5X7n>k-Kr#YoJ%gvKpUXO@geCx~ CwN5br literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/block/palm_sapling.png b/src/main/resources/assets/wild_wind/textures/block/palm_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..43b185c6f628bd589e2174a9f7ccd7302b7a7784 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(a1=5Y{+%qTG^yK?jBzQ%X zm}Gd{xCW~SSn8j7%>~lKSQ6wH%;50sMjDXg=jq}YQgJK!03VB}f=KWLfsQmGAy%%2 z$cGCZ6WX#?PFTe-A&n;}BqfB!sD;InMUusFmc)%&5;GcjSlOnrtf)N0CLlGtLwd@^ dYm8Hv8TR~TuQ1>!=>?k1;OXk;vd$@?2>|CcHQxXL literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/block/palm_trapdoor.png b/src/main/resources/assets/wild_wind/textures/block/palm_trapdoor.png new file mode 100644 index 0000000000000000000000000000000000000000..64840929221995e2aaedcbbac8d1eea4d113f875 GIT binary patch literal 474 zcmV<00VV#4P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0dGk}K~y+Tjg!4j z0znYRhco6p#6wItP|@O|65~f=L1jU#t$YO^LmLa9!`_Fmv9K|QL@yc=q)=2mqr!z8 z5DLtH+2OuG{Uw{7%*W2m&Tj0mu+h&Nv*brls8aH9T3so5)a?evj`nx^{s1jLC8a2B zwvF_Lt7Q<3VwnNR7oY8v!zH@yn3A8NwzUvgPpR4`#^+R2Qj(x>AR_P1|` zTAl9L1s|sT{6R{7DNSf0sZI_r5Avu5*atC%^&BbT8)wHgGZR>VZGIHF2Z+ZtvG+Fj zs6=VeE9=52Jl|%wC(82&KfSz?o|>b_M2=jyEo|Y6MFrvc0tD}DZ_)DNg49Go@<}&&^RKX~?4c_6HUoq+H>Vl@Lme66m!0(ILz)QqP88{pqpHjI} zrTg=Gz;hq~RMAD6SYj^}+X5GzH+}$|DinY zNnCtJOFm6gY7mgz&L^8eBnJq#9Cb8sr{hohpa9yo^$02GnTSTi%eZJ7gwZBKNHuEk zN>};ZEeF~FNHv(Sl4{gI>VRC$$F;j{P{;-vLG3Al8n!kvKMsXXI$s_v(aa-2$S= z<(J?$g&XOYFR>PYY_bM!v`&BcvIh8Zo=vMCcK{*#+lW}a8a2q?fp+ACVHl)w>(l{} zyO*AtJ0KAdvZGF6D2>{iKM^_DU5?+cSfH45b^-Z2`~e9x94{AWVYvVR002ovPDHLk FV1hSGofQB8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/block/salt_ore.png b/src/main/resources/assets/wild_wind/textures/block/salt_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..bfcd884d0e9d955e6df974b2e7c8a9476cdc1e1b GIT binary patch literal 585 zcmV-P0=E5$P)A*he7p|6RY)lJxwMPLF)GgYyd>T7g@83c(VIc5yr()1q_ahVR^+ie5i-P%&okr9~bqtR?Gj~uR4D*K5Z{JjxkBOW&^Yz}IIZlp1Ix4w^aH&+< zhbaTPzesWfBj&BXL~pija6h95_Togr^u73I#9>>=Cm#M$X$4GOd*lfkL>ipHWtxoN3 zR&h^Xax_fp;KUh+1oJ)J_lRD$+_Wk#ic?lhecqZc{gY*^_N|&1p|0NX`0ulu?}|^` iF#HL5W;k_kK;6$c#-mH;98d#V$KdJe=d#Wzp$PztvO$#q literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/block/stripped_palm_log_top.png b/src/main/resources/assets/wild_wind/textures/block/stripped_palm_log_top.png new file mode 100644 index 0000000000000000000000000000000000000000..5a14215ef7c7584b504deae9202f0a93cb7acbac GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!P=HT}Ye%@##6+)IY3@m;+Ew1x zIrb)^>pWHgWm7y|978H@*-mKR%BsNAx`XR?|DV;*6U}XBg#HqH$9}Bwufn@~Mpvya zy|eru72Ta-qjphd=}{-89Sn}bg)K_LFKb*e3|Mux1a3?+Q;DO>gTe~DWM4fMqEXB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/entity/boat/azalea.png b/src/main/resources/assets/wild_wind/textures/entity/boat/azalea.png index 7769c4a5fe097cadbda99d797e09c9d9b1d47e5b..c43d768dd177097db5f11de997141e7925c35c24 100644 GIT binary patch delta 3438 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 Qs{jB107*qoM6N<$f~LE|xBvhE literal 2595 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 diff --git a/src/main/resources/assets/wild_wind/textures/entity/chest_boat/baobab.png b/src/main/resources/assets/wild_wind/textures/entity/chest_boat/baobab.png new file mode 100644 index 0000000000000000000000000000000000000000..ad66eefcd8f39903219cf389193631ccd3307815 GIT binary patch literal 5781 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 ZzX3FgHipkZC;|Wg002ovPDHLkV1g;)VR`@n delta 633 zcmV-<0*3vJ2A>6xF@IS}L_t(oh3%CwXcJKw$A4FHRH!9FqFCzWa2$lYG`JYDH=SH0 z4lV(U4&7385-JXYlY)bbT}o(|+9gx7xwJKeQj`@iq~?>pt)>zA_86r@dq`B!fg&Zt$&a$~1WE`Ou*acLFHvd}aQz`O3) zHUQPlx{@_?sc9NZYZY&e%MiP0Vq>Qrh%RZ<2t)w?CW;`hA|lpk3IN>b;vcI*;2bAW zg&m)+$RiVq)1;L2qW2M``s=*-IwD*=O%YlIjqNJpuXrH17H3^V8m0mi}SLMpH0z z&}Mx+&Wt>yI&5}e#P5MzMkj3==ltL|qMRv^®@vWDJ0Ky15i4-%REUHb32;?kyp zWm(LfnJ_G3<8ddDXuEDRJ9$Xy$KWAV2zG_wQ9?cUS$_^KAa!!$4fgDQ@>cIO@K7qD zvaZCT+hx(`jW9U3n7^sGad&xzug6L5U+c1HeGgSYpbumXT{fD6se?A(&RQC9FC(3L21iU(x!o?X{1e~Uw&X+iIX*SnKg7-tCVG}QkKIC2vi_>^8_4tpVg!U z=86Rt-g186_QV9$&AI}3-7hRN1_XTBZYta}B|V3y8J*e3^E`R+tUvizpI`mF7K#8R zYv>a2ezgD{+s5sXT+r*?_qIfPC{rq7Ep!>i#%_6@IXe3F-}6O8L_|bHL|lqLlcN!= TqIBFY00000NkvXXu0mjfVVW|B diff --git a/src/main/resources/assets/wild_wind/textures/entity/signs/baobab.png b/src/main/resources/assets/wild_wind/textures/entity/signs/baobab.png new file mode 100644 index 0000000000000000000000000000000000000000..0a8c2d439a33e3d18dbaa76768d910eacf9c01cc GIT binary patch literal 877 zcmV-z1CsoSP)!wy68w=qwMw;M;dGQ}OzqHb$>$Hq*w^`qO^ae|>-Ln%E+B-CB2bv>~YT z`mHEPwBf%@7Bt+xdHHWO+#US6t=lbo<=K=Tsd~+VqmC(Tid#F>IefnC+grkvMhhf) z67Wd0VAlT8PNugsHfl-jNcn0xIJE$|H!Q4azOkYkd=R`01&uWvb7x7!3+2{Fy99q z65?3ZOIqrl-vd}UYyULhVXI%i>zujQ$pxH@bq+o0o#5KT*45!NPk*eJM&ttmA472D z<~MiV%UGHT&zr5#`J;!vkQIn-bLYH4`MdoVHXg5!%jGMoeD$)-(ETw|-EL2z|M`oT zxy}TA&^%Db<_TAoATSsRLf%DJZ&VFNfF)oXki0{;_;l@N#Recudl&pl(aU`lgajq+ z1ITes$a56*{?}H>0ZQS-0Ukmk%rkgk(*WEJQ6l~K0#aNg(Y)^3A@J28Ajkv+V<9*I zK#>7{a2tRJnEKEcK{SCP6OaWR=k6yT{ikZfJmpknxfF%nG~_F61Ht`HsLZh-&F*{H9(X00000NkvXXu0mjf DLb|cw literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/entity/signs/hanging/azalea.png b/src/main/resources/assets/wild_wind/textures/entity/signs/hanging/azalea.png index 1a6666adb89f8030a5d258f4efb2b49d64285521..bf5768637aa17b76efd0b6e3051e2ab1dde32dfc 100644 GIT binary patch delta 1002 zcmV%C=BYy+NNklK_{O ztLvLo%l*h(w0{{yPDc88=IH+kkDTzdcayd{U?X}9-)E~4ltLI2CSQ(uMW6H!Qxx8p zi<%FwvEBVP&b(4P9Oa5~QdYcVb^ng5Q<0P$J|U^LG1<>WkntQNj$#}(CjMo32K?;E2z zaeuCv+J6a@k2<#~&LzkVA9bFEL#Ec<@i#KDJ3|qw7wIS^74>>J$!L$Lb>beY-qd$5 zo-P+k>u#x7as%148yY-ll^*r}v4I{dgHd*3a@P5Bv_+ZrN(rn_q{ew8h$MgS<#=^( z&Behh8gJ~3@!cJjGMGmV#zW$~1NeLMHCL4bBYzUUP|9nl%6+-&U=uVF4{lttN)Uq~ z3KNmW!sGOrqsFIL0VCNcyvC66+u(P)(vvN6A*WPh)%K)Xn(p!;MM)3K9 z#Q8kZmNOc~$7MYGCaLNm86)F$(S?rzWwI~dDBc!p{j@yL@<7W2Ef2Ij(DFdb12K5u YH)CI1Sm4WDG5`Po07*qoM6N<$f=A5#Hvj+t delta 1069 zcmV+|1k(He2f+xCBYy-4Nkl4-*24cQ5`KFUcqZrePkOP@}=iGD7 zJ>PlUJ29kz=4Q@RayzEPrY=e-oDlQNf=a}KK3g&p@<}jIk$*zbkhC$Sa^Cf4k{a^b zG7I0LGCGo!SpK8(paX&)3HmQH5tWndJ7q7vT{gIW6yt%%wcP-;Sn|pE#I$Vv$W-Sg z+YihGe!sp~VG`+8Q2<*HznGTS;dKfDo@8!R8}(=60IPE!Do z#azJxY38>i6@L%eyPp^i>YQ0*Rw2g)Xh_4cGG04Pfkvd;`M>&P&GBKrsw0wn|`7!*KJD&>H9hj=ng@-YB^=4)9@dM-ZxyzN$@1Oj2w6EQ`t;f4oP1RA@?1I1l-XwtI zhd?;31Ah>BjeMsJ=aj(+Ti|n~%zrl$0LQ}s05pQ-lwP#zR(%V{^>C|x&9&-h>OtnPv*S->Tn`2_)GpJloMhJ9=~0Gzw6fzi&pxT| z&d*lNQdzc(B^iqbWqL9tyQO{ky0#?~V+k4XTYuN#hn0*tC=eh^N3&S8 z-zk6Zd3W!3d&A#M>b?X4J|3_>g9#q`2m&Y>3+wOAYSxy64vG3^DNmL?I^}F;4@`{v zx2{x>T>u6#)0mUj$md!iUy@+huR4@%rB5DYoO9^kdHB?>LfAcO^1_LMgin@MvVsz3 z`G1Cvd1Yn8`U{tghGlptC>xsv0Uw}I6)5LPiMQ2v>SllDWpX%Pr+?Id8~5{ofxafO zUjY&XhY22Q=APB_Xa`a|eFThz0JqZTx*MZsC}I8Gbsk^<3_|um$TonWIv5P_(bt{o z!;YJz6~Jt={NWH%V75pxEkQ+>COcfT@I2@m+W?=*PWevt)mZ=0k0wAr n0{sZ|BhZgPKLY&-xDbI~5h|L6q*68+00000NkvXXu0mjf^PLJk diff --git a/src/main/resources/assets/wild_wind/textures/entity/signs/hanging/baobab.png b/src/main/resources/assets/wild_wind/textures/entity/signs/hanging/baobab.png new file mode 100644 index 0000000000000000000000000000000000000000..0ae333b761299664bc134e1d5a4553a3978feda3 GIT binary patch literal 1072 zcmV-01kd}4P)D5()b{Db@elnOdh0>TyIA%Uz2 z#Znx{_K^_6ao=pdyY76N%ye&OT5C7eEa%acJ_{B{ZmJZ#iHE18bq{nrKt!94Zxez0#BfOvT{pgf&j1MvFXU09O-cwg2t%t_EOn*_wHQW?1TXpmfX;@ zQ_`$81s=?M6}=svH*ge2gozT&n@vL}Qc~l)kv{X*1wdb^`j+^ZkvcIS3EuX<_!#& z6~}q2tE&Mb3UoO0{*za6NGjF;eYo%@iyQ<1j(l#leyRr>+onu-g}9hO1QV`~hCd>u z>pPkv_8xd}CTO9Q)`YEsrhwl$2n`mWS>O7jnvu@$%!c#0*y`p5Je-x4m0)vo)2UXg zL9JFB+S>3O<`PI6lmOYO#vt-a;SRZ01 z$*BCXDCuCwDGVE@vgq)W@9kt_I!y;&u$LkB> zj1V_P&U}huAKtcs1@hf{69w2Cmft=%4O}At!UN#Fa%Dzyn*R%6orMv`unQ#mhPhJw zZXbpp=cfrSm8TF;f|VY|K;AR-QTPbV{ZaXOURtBu+qTAStZ7{v3Ax%QTG~OEbte^KFbj$Va)&l0000Px&6-h)vRCt{2nK5V+VHC&zS28#xCCRnYkhV}tZHpaBT5u5@#ic`6g-~!Q3L;vh zn9(9ZMLHChf>i9(!{#N#`+rAF6w13g}hBK?WKzvYXq^r!7K zOhD*D$ZEsUH~?5}5b#t1vB8nnd(t5qCLkh59c^-Gxb+kaKpt+S&uM2Wn3o zY9ywegi@1ZC?#Y7aM1=Ew%?r$uo2RS?>V6y=B&Yul%A=b zxQ_PWXxw2#*ULBeOq?Ml=TmiK@Ow9lSxB*g4%>)oZTmDufr88L( z=}%aj9<=ZwT~9jS-tVUQiF76_yqxn3Jrultbb#E>Hq5+=$L3KL7x!$uX3SB0hin3D{-_!tKe< zFD?tRGc^NSub%qy=>tHB7Bfi5md;NO4O z3rm7jBr4S~x3DDYUlkzi!Ph&-_=GbXoMawBd{#FiZP0Ds44NuaQju=d zQ;U8ggeJDGBmD`yfB6tsZ#{6_^yAwXxN-lvBMH^4Zf*%bd}eQI>pGpu3QI`Y*jF{j zv0DYKtgQ>$Yv|;F+0-AeZf*&e*hQRN+*H;3y=T+002ovPDHLkV1ji8f*1e* literal 778 zcmV+l1NHogP)Px%#7RU!R9J=WmrqC(aTLctQ$o;!J22>OyX(l347n`3tRg4~wTB?24nh$0?+`(- z5p;>5I(PAq5CmR2gqJ|@P*~tW4}qQ(V^Nrkw65bWGBCR^$C?iAZ=7*AGe^DT_cZS} z@BQBQ_vXDf?6F`ICIyaC5+}TL6UGWfo?p zk3IA*0qLf8l42lE7Z)V!qf9M@qn|8pO4f>)ftcf3*qx2}IbfssSycuoq%IuBEW525mtJ z2#0Yk1;D1hioUdn5=~%M%1!#-^|+P_PGD1C#WZ#unMT=lBL1!|Ni=K%6EKak@1)|{ zu3M;Dx=FvJ7kzSI0?AI9Wamz{N4vU#?7mfC_h)_iacBY}`8ql}*xug8sv3mCGD=sn zp|O6Td&8j#cr#p7z+vDLc=6$rV^s}IqfF&{8EF&Tigv38ZpfEPE z@3^jSnXqNLvK)!==F6fZK9RWkc_E2SMKkf16o3*-AV*@nzJEj7dtXqsG-_`eZzJ+T zte4h`l=NcD3A;@=G>tMV^Rx8i27C%D^Rr~HT!qH8Y}YM!YA)$J7ua0>8geAoM8K*V zEYE%Q*)$Qz^mMy|T^m5{ZLZx+Pd6W17^_+uC6=JHR&3dJO{0v~H`vrGd;}^RKU`s` zKZ}~q?Y{l>llb|w2%THE@A!;G$(bALt^59^i$0x&ndv5--{0<5hhE+dJOBUy07*qo IM6N<$f+eYMWB>pF diff --git a/src/main/resources/assets/wild_wind/textures/gui/hanging_signs/azalea.png b/src/main/resources/assets/wild_wind/textures/gui/hanging_signs/azalea.png index 848a4431210ac081dc0541942c04f99dabcc093d..38f2ebba2748877d28225836a6b3eb3eb0793d42 100644 GIT binary patch delta 408 zcmV;J0cZZe1F{2*jFE3ubexUH*b(xnopb81AAj?Y|pluZ_^Kum3G*4VR4h2*|fc4nvTHX>X^@?7EGwuG&#-Ly|i`=ewGPT+`a*J``+x+fXT?VoY z&w(r^<^ui+uz$0;;VU0+z#%9FMXPN^9&73-liiDXp6`9q6O;~#Qd#SzCoE-@nj0000;^)r)oPl>o~?}RmSUEA9XWEZ+|#Lyj$`iyBHj+JQ_Ukq}2DGa{o9l7G)iU+hoOwTRe6e(1KmIO+vO=z%f+&9x% zLj=h{ySuY*-n^OFI8S%yMa%c-@wG$gaz^)Ob4s%n!3V=WTRJpbZ1_Cb_8E8EoAS9C zgnMSQVdv*GrX()R*)cyM5uz3OZI_ACXhy(Mk8BcVI_+N+msi(_{@1EFSJBF8#A{<+dkq?*Y7q$M6z@*H9=5icOHBF-;7LF~12D z(^RDc?VC6Ay>GtEyyu)9?Uie*pk!d-%wjePV)%LXF6Wn5jw-kv#u^~;+d;+$ zk>#WKRc?k6T;lS_$oyatcd8zWvo0)=*QInn5NKTbiNmJHLAxWpNF;6^+>!#UvLyDPv{BIpq VG0z2Pu<_I`V)wk7DH4l znY6c&WwPO(gVV|g=}3U->3M_7l@?<%DT8-io8-NEZ&LfSOT#1{0l+B21X#ZL;8>RY za-94mssI7@19ja!VL0R}fU;aR>L_#vfmrppL_ZV2 zvCIjUEK_6$k&xWhOeV`DB7m@Y1c*Q~mmE9|ya!yXkU&|->N1JE5x&OF^sK#8NV$~G zsu@4*<7hDaA6y~8mZ>;(oA5SpE3Dw8T33#WHExzgz)#OT!kKXlfB*)Gn5P#cPSW1a zC!D4rHyvNsxvyV?Z$pW$;m3b*Z9v5#5suS$X$UAO+Ff1n>Rxgj=NBn8v_-y)(P#hw N002ovPDHLkV1lNO+8Y1> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/item/baobab_chest_boat.png b/src/main/resources/assets/wild_wind/textures/item/baobab_chest_boat.png new file mode 100644 index 0000000000000000000000000000000000000000..c01788823718d1875b6ea5ab5d8740c4a4d6bb47 GIT binary patch literal 545 zcmV++0^a?JP)8G zSQ!unKg7*0tR}9%d{h!0bFO)BN5N_@%)E0y=iGbWB)|t23^bU0K1l0uxke?RNa5B( zDbirZ4$f@v>y)n(R$`5jmwa7?UCzbrO7#1y1utyGG=~9kNFHs!2MOg)HwxJ_{^XzG z_f%`Vvg^Q5b1l;M53q{7wkRrnkK9TJz9^!)E6fHzjxOMKRAD+C)OTZ_AM7yiuFlcZ z=E3~hwRHS-b1M_<9Xh~=)35>S0?jVnh``Q~Xz^sF7NMUw@uD|WLnvf6P?pWA3oZ)K zS(@xb;qgL?sCCviQ|JhKF&z9XIVE5{=N;-wARpOPlaT-7>`6#)6QsM$!rvzak jst_i+TXbFr{|CGP(0tzrVn-Eb00000NkvXXu0mjf*^c@? literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/item/baobab_door.png b/src/main/resources/assets/wild_wind/textures/item/baobab_door.png new file mode 100644 index 0000000000000000000000000000000000000000..de90c316df7557d92fdd084b84c72c1d07086fa3 GIT binary patch literal 419 zcmV;U0bKrxP)y+T?3X5BzNb|+%t2|4DjDpFdH~K+>Oa>g)wW&t$U1L2vkqS@g%qpnx50C-Cc*nuf1zj@CN7&FcG zl8C9i3G&>TCIAq9On|u^G`CjJzMCKjzhrDYsXi(E*#Xh}{<9^5~L(z+&4I2|9U=yGY?0^lBK)qJ8p z$WyQYHmd{86Sdhkh2xKap1bs`151OK*O??}m99TR*H1C2zR=69@(;Y|E6o4^ N002ovPDHLkV1i_hw4eY0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/item/baobab_hanging_sign.png b/src/main/resources/assets/wild_wind/textures/item/baobab_hanging_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..61110195bb4dc1d993e5b8ba07e7c4304c087965 GIT binary patch literal 399 zcmV;A0dW3_P)&zKJm^sCX6Vj?ZMvS!aHxjW6Qz$tLM0p8cMqWY? zzO>jM^I#Cx9mwo*E1}6LUCwD_>7u#=8bR8po21=_KWJNGgyslCzd#Q)&Pvrg*0+52 t>JIK|pM9^cH=<6)2v4uw5vG5VzW@O`s`ss=XeR&w002ovPDHLkV1f_>vylJ* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/item/baobab_sign.png b/src/main/resources/assets/wild_wind/textures/item/baobab_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..e1dc969d6d1ddfd0f34d866c76d401a9ef937178 GIT binary patch literal 325 zcmV-L0lNN)P)~y$P7vC_ve)Stn!}Ne?xB(zdFF*fa*n92`SRO=Qx%~yM79FfJd+1z|#P-CS*1M XV@r#C5zAR|00000NkvXXu0mjfn8l5d literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/item/palm_boat.png b/src/main/resources/assets/wild_wind/textures/item/palm_boat.png new file mode 100644 index 0000000000000000000000000000000000000000..4527fa0a80375e3b2c19ec58bba082b8227bcec3 GIT binary patch literal 474 zcmV<00VV#4P)wjU6!>|+-}t1^O!A|FwtAPA+8 zi2O)v(W`Uhithz&9C$N#KF*oB?~X`|Vzc5mr@{te+OsZ~xx$~kwccS3z@Lo`h?dZ0 zbtFi#=9S?96p(Pgm*4KmRfELiYUlWRrN&w)65voS z**UW6qAZ9M$;C~YWaGXbKq#g?07)q1mUOzrB=!L@2uKzp!&3dIk>odI;79Tq2YWom z*4i8kp}^C}}Jb z0+=Me6y>Yn8hgn*)}a9o(*d7>Ng(;cyWn+91W14c7NUT4udYGT?6-XW0q1+Vhz~4` QlmGw#07*qoM6N<$g3cM)8vp0@?kEP)0stD@NcBSH`V4*Jk1Ks!w#H~L-ghH#hP*7a? z0n(OARZxtrw4jMpo0q)C)YPYEl6!d(TsiRWJ#%NynVI`8aECQM4cPqd21WPNFHiQf`kHh3DQ;^ z$Cp>AF7;_Vvsr}aZa03L2{=VEC2o|a7GqM43q@3Qg<0UUW#N(6gO_zR`fiMo=8$ck zo!~`7DaPl|rQ**&G3ns_LJIuY4GS=@vA#wZA~4tz?R(UvMd;5i+vx8L5(=3Gl$}^f z1!2&6H_(N2DxyWyI8z_Kpu0VUXTA!FX_f=X9h^q~;Z1L@NHlHYNzlOb(kBt|UjU<> z?O0jg!KroQWKCaUB5ve}FwU{^J*F1f_!<_mhH}5+LksZ4DMJ5sXApyJ-3V2diAbon z3dz40BBK6;yo1MnuRZpvgB&qW$(8IJjrMVE8^b+KLN*gAcs(u@6&K1l(!t@mnKwDR zD#>b5%XyaUm06}Y2xy?>!k!TD%2fs2; oSx&MGMU=0I%I8iIr+;sJ4PA%e6r%LwyZ`_I07*qoM6N<$f*HyHiU0rr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/item/palm_door.png b/src/main/resources/assets/wild_wind/textures/item/palm_door.png new file mode 100644 index 0000000000000000000000000000000000000000..c0a7d7fc378517c0466ade6b519acd12bd26ec54 GIT binary patch literal 437 zcmV;m0ZRUfP)b( zv%84l-1WxXVK;8_=6<|)&fI(6(}EzNxM`XeFE!1zzX+P1j%=u(BqB9h7|#WBvtwL( z_hn}Z(%6N1eyov_M}FH9Oek5~|toO`mmb+Vmj$`7R(h#X6iv?OrOj(OkeXm9v0pfW|G za^-(%fVn|{F5-szaLy8CF#4%P)?Vm`-V0|qFtEQ|g{7IU1(MDgy{8oeIB_C3?LchVJ0Q=m?NQH%`pSGO(LJGV(o zpNJG;^TLJt{0tTI7R6oIKXPEHp$##t5hI|p{piC<(;+RM-c!gv#Q2VNyaq<_TRqPI zdSXZR^#dGUy2B$N#8+?(evL=sJUY)+RPliL0~~?dN0Hnn$85%TbP)zxO@WQoW#KHx zi+WAuvCDe7DDJ}G^z0sjC>CH;kUN6h)+jMDFG>F@8J~Xx6n&`^`y+9b00000NkvXX Hu0mjfwWG3g literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/wild_wind/textures/item/palm_sign.png b/src/main/resources/assets/wild_wind/textures/item/palm_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..69e665940d2cc5685fdd7726f5cb60c7e56638c3 GIT binary patch literal 337 zcmV-X0j~auP)*fN4%H4hA0He_%GU+^u^r8Rnh7%E$ti0TLj|i&q{p zNQeo*guwKtFFzTU?Y_;REh!3?d-3W6iW-P@K&2oXuRedxu=nC^utpFKQVatiIS?O2 zg8+<1@xtquzhLTd(jXUsz|}iX7&hK~i0TE9B+Q90+hJZp76*w5^YMTUf`M~^>dc>C!K*jdC77+yejGBF0c`1&2J4DJPNnj)Pn{|g9l zGd#Ngiec;7OIX#y(*ZUEK$`h^*ckZuxv@!u#o)1kO~r?IU%|qkK0;`0YVf+iSXYcP j7uy`md@cY0j&GDAP-!6-00000NkvXXu0mjfbg_%K literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/azalea_door_bottom.png b/src/main/resources/textures/block/azalea_door_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..d53d2cfa0d56d62c52b55dc2f3d81b44ac33272e GIT binary patch literal 503 zcmV1R`o@Y@gGC_@xH^#Eq`uz-rht}hA=n1SW&`5|x zfGBiDT5_Bbn93H&GwxsvPQe0m_1Jlb2!`N=qbr)-J?!9d5G`KEimDRy@RX$dPmKej z*S8d1oM*g#enyuYn~ZH;7T&o#6)NEL7u_`eY#t4ES=Liui7;ykd}h( zUK;XySa7gq*)opVOpHWpRB1o`VtQ0G)FH0N&pI0F7 zGGZeMPP$Ms7YDizRsUn(^+x*=jg^4Ww%m;*#_bE1LOca&2c$Vje8$lU2fY;mpXFcm tDe+jGCJYhAmCTj^snV$PZx4)L{SRNF)+smjZ3+MY002ovPDHLkV1m2J-I@RZ literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/azalea_door_top.png b/src/main/resources/textures/block/azalea_door_top.png new file mode 100644 index 0000000000000000000000000000000000000000..b522e9e394291a362bbac8311475d315ef8163ba GIT binary patch literal 517 zcmV+g0{Z=lP)ll>#G%{4=ldwC>1)mxQKLctK#4!h~VNR2!j8>L8%}v;-DaklY>b2A|i^= zL9w79wA3eRTd-DbQR@9-b9>srA<37VT^I4$he1X=^Z?tZYhcWm#;nQo)>vYpcp=jm9*0Z@Z zwR>Bs$!?In-k{yf1k;$09BaUa`+QXxa)9FwY(2HUBKG{#Ma{Jt{suXqPl zNZFa%i}D_#bK@n90vOoa`wwTRjP=^D4YZL3>d=$Hei96e1*Qs*(B*Mjn9PsPpbnAw zg^eWhD~N+dK`_5uKGf&3Q)t>_e@N^JR7dbeK6Xy4Kb_m4UX*T5% z)Sn3v%nuAqgtj_=)iVYbmbsb~k%gfMXyWMvQ;XnI+HCR%AMe@(s?SOT00000NkvXX Hu0mjfGIR7r literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/azalea_log.png b/src/main/resources/textures/block/azalea_log.png new file mode 100644 index 0000000000000000000000000000000000000000..522f5af3587db1952e6664844e36da5f1125e64e GIT binary patch literal 428 zcmV;d0aN~oP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0YOPbK~y+TeUr;d zLs1Mx(}T8J>l4uq1aamc`2WA*P#jnheAQ~JP`iTb67Ik~IXB5pvXgKJH`iC|%jrqH zE>`imT*dBa7>DCw+PuKn^mq~v&-3J5obAQ^<43g7#@L^1ClQzg&QG`U#Ya*f_?rPq zbR*G1wKz~A-HA1v@AK~r0)mUL!JidL6eKVT;LQUx?C4;UMVd1bR2C$@9c}jX(pa4-4Y>j0iM$PTrB8kc-<^th#OZ*Qib4;5=MEn9Y WiP~huIG>^b00002k$n zlfmQbXMB8(mx1ag3UUNQ<}%IznxZQ0_k+*uDN{(mzD0q^8OjFf5M?%RwAf=aNW*n% zVI(R>q$88#SygGV2iuHjKtXH7pl(azL^`aOdRaLhf{n4swnbkJ=WiY9s#}^ZXVkA? z^B-WM6!MV$W>ouAzx5mt!EK{xE*z=&GJB_Mwqk%{CthbBi0a~D5i`+{c+S z={;wrTX(lN-%`hVRbZ2FC$gRQr`J@@P7e*k0=&)9=a+Yh1C?m7Z6w?g`Fd?T7JjT) zR)!_B!sivlyynJbXdlAIT!gkEkHWnC@^>6Yy92{?JkMkp1@cjqM!=F5rC~gGbHIt| z^~I6bgan^Uoxm7f{qV=$iv;!IsZM`tb#WNV{+=@yK%0xZ_6q^mp45f5*PhS=8jBpg z(#K?GL@dzWMCOn1h~YR*POr{SnCtZziT~z+erTG^?E`J??I$7$&UCRfo|9IX1V~d9 zHYPdU#;h0i9z!+~*LUQgpE;dm3wfAKt){IN06k&P+Zefed3>-j2OvQogY(eEaPQ4Q zp88h{MVtrt5t{=Pg6w)5+93J=$ZyZ%VABH>uc}Yc`|+Efdw>XP$9Whvvq7Bt ak^cc_u?BLT-6Np@0000Ip@TT>B25RK8)P!xfU>d+#!v^zJtv`17+5FsiQ2#Qid zYLOO|1TVj%pIr*-zZS*fb z)Wka3T5P3W7M82r{dWRb;YeZtWCVd| zXJRCN1d-#m5rOmMus%|^-W14rzr~#n^WV? z;pOcw%$cF8Y^g3iaAs+Z<_AP2WG9)JI&hEMCALn!nD6RwGXl`k!TgLvLu_`^sda`6 z9WI5RR$vYcWwVW)<1-5f0no7}ZV7r#0DvT3mmBb3;ucVm{nMK*K>t?@jMD^|XmHr4 zI+lr^*@}sm7w2>?tfI$!mgW}BfteV$aBCQ%#l7-BU_v-j2MjW8kWsl-05Gw-Ew$D< zF=5C!xok#*z;R&139j#|9WS{1GjRsyinw0r*fYzAj084rs@6XxozFt<8 literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/baobab_door_bottom.png b/src/main/resources/textures/block/baobab_door_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..442064f35c341798fa4ff52788b8a7659c918522 GIT binary patch literal 500 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 bpwEp2JM}zv@L4|q3k_mzZbv9H^^5%vk*}uW literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/baobab_log_side.png b/src/main/resources/textures/block/baobab_log_side.png new file mode 100644 index 0000000000000000000000000000000000000000..c05be2673346847b288241e6cd183636b0abce64 GIT binary patch literal 406 zcmV;H0crk;P)h)UPK*hR1)^rc_pC-?z=aiItW1+jgxQ>^r<&B@N)9oE1!(@f^xn`HLt z?e*o{G?P?Y&WEHJ`_u0+{kX@bo_l?F+o#*pd=`K5{x2z+K=uU)i+$^t0K)KqaAuz$ z+n!Cyaq<2plJx`l!($tNr4VnR!BETWnA+475P4k;qEebs+tdM&Bo7VAEUW{J?LRVW zT^5K~Q~JSv+!JDI9;L8$U*AIsBw&&&-#4?A^S;`owO^DO8zh1bV$MUi)oF61h*&)l zTP&YB?-JZ=62t(m*@*EDVjAvI845V)C41ulK@FydBbCH74OAI5)vqiP{0A05B|TU< zbOQha$}!cXNpvYglE8_R11O6Jh{Zz^8v!wD_9{UHL&p?{-)sXwZJt56Ds(g%e;6b*{n^uFDU7XxzfZg*yOZZdg& zdG43h!p6_OJDB!(?{*XW`Mr3_!~M*vy1$mErk&?Mms~V66`M`+UVsG9AvaAOh)w_j z;Vf-8rz@L^S*sexU^QDfc+=j|@9)$=m_UQ=R_4(fyBk1kSfhbPHPe$~HqE8Acl3Sd zgoE^R{xc@~^TV`WO*3LhYg$QW&ao!}B=Z=hY0b8qV;LbzG<%UPGs6?J&yTZxeGk%d zQ=(C>f>?F^AQ_NiuoP7_`{hQ`G-}kq>{4kK z26GdrO3XA)nVfFg@I%s-0YJHb5hT!=3B>UeMMOB1tXGjtlvefJws!Jz4-)8dS&T^L zQT9c^d9cU1D}ar-20B?FZ6Os9z`9+&p&|ccD``8V|$G_?f-EN0|NrT;cq9S?JWk00000NkvXXu0mjfl4#EO literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/baobab_log_top.png b/src/main/resources/textures/block/baobab_log_top.png new file mode 100644 index 0000000000000000000000000000000000000000..465b2150b38272def949d8e142c770d7f2764d6d GIT binary patch literal 463 zcmV;=0WkiFP)i5QT3`z?#Iif?9N;Aa+;LUEjh-@Bw_&f(ym$B3*Q$s0B6sQz+E?O>)w^a-f}i z=jY7KncT+R?aij$-g8L1vunEeUe#v|;hnSDikaz%|8<_Z^J5P(H=8?2H!i!Mmo{(e zVy=94_Sf;-%tifyi>Q9uEISy#&fH?LCftO3DEN{jGGGc$ywf@$NXf(Nu1n%pm}lq3 z^2aUb4fpi?X|Vt>a%6M+_CP0@pe&zSl8seC#i?_#AMNsD-#}EsI-t6e?R<40f2}{> ze+>W-34}&s6{C{Xt^!FqJZibo#It8N{gCza3yjnpJL@}f(8%Yv5Neu1q z1Sp#r^gStFjDwIY+7AUV{Mbp909?3=1AQEFN)IbCNv4~!(3Zq{jpMwWM;{S^nc23p z({d8;7?FyjkoBZ_s4{x^vX!d3xaIi5QT3gU`ZlWs6w}*E0wzI#uw_NcBhzKirYdhDA*JQA?6!$CSx6F@7$Sl&iver zmXEh>>a8d;xv6P>%#Sfoc8>DK0CY7w^L$>msjByXVxH`s*UhJiWRa|(z}%xzRd@=L z_nt*wJWNuNk0a0g=J1sc`%!vXzZ+2Ey z{(P#upKsf56F@`;*E=96vf338(#7RCt)6%P7JDL4JQ)L$e!R%BQ4DhdNHQfM#yBk_ z%1hkcbW7>X1md!2KN@1>i9?hj%zcO`6V64yOvuBBH7pUR38-aS#Hd)+%s9+W%SC=_ zixdv5eTkZfDyydtds0;gB;yqzYZQFzK#M|1A_9r5s>HQ3+W`qJ3Lzy$)CqR-o8dJ&-dG^UP%)7B~E|kztv^uX#C@|6oqe)eZOuib)PPN3^N1DWKFj4li;GGOsx>~NL3j096~1(CiUI=a_N_q9>+Tg*2ixo~uJOybU-gCrKN z=>V+DbwHYt1rlX0yoKZF#}kPfvq;?g_=mpjS_*hrEcHcp9DL8pAa7+M#@*eV>FxIZ z?Q^AibJx&EzIB=MDal$f-2}V&cQ!tJJyr_&5oySgv)fHb0EheGOfKN4`6lr30xYZ}y77#`Qb^0000EX>4Tx04R}tkv&MmKpe$iTcuU14t5Z6$WX<>f~bh2R-p(LLaorMgUO{|(4-+r zad8w}3l4rPRvlcNb#-tR1i=pwR~IKm7b)?7NufoI2gm(*ckglc4)E8@Of@^k0ade% zR3a{9va3Sy6=C!ugf5Iq%+%*ZF$vG{bq^n3?_xa5``n+SN6DEC@Cn4TOgAjz4dUrd zOXs{#9AQOCAwDM_Gw6cEk6f2se&bwl*v~T~MmjZ593d78Z7jDjD;g^C6me8hHOlvA zTvj-5aaPM!*1RWwVK}F)EOVXa5E59#5=01)QAG)5ScuW8kzyi6`*9EdpyLecQmrbxV`?fXf|V;7OMZ$&msy{rNoben#Jv1^RD+?lrf!<~~jzfHZZLya5gl zfsq1buY0^Z)ZW{_XPW)}06`&glX3$N;s5{u24YJ`L;!#QApqZJM(BS4000SaNLh0L z01|Wn01|Wo-ewh92ofG{QU{;_00EUrL_t(I%e9iRP8&fGhQCEf zHa>f?jW5SF5%YoCp) zrGQO-G_y0a^UXi2h5un+4nt%8L1W9z*3$7}x>yZ704jdbY;M*8csLAA`1$4B zZg#|M&w@Q1pKhCK;1R0?01LVwjJQ1S34mB7PTd=TO~xwWp+BPC?1+4~#?4JcyV(&3 zjV+V!)~E&^JG&vxv#$;!(!1~MhHi52I-=qiS&4jpF5Gc>-V?{C+h(m+S&$Y$t@MX$VKZ)WE5CPzFPxenvBVL1)eqr*cEN#+!d^y zeA_dAP)F+_QkDSFdPwX0kIel{qH(luK7RV(V*NOApm~tRG(gG{`f-9>UUJ?lm?q`~B+=(_~CvLCz}x;0N`81Eee=mzSJ^S*X^-_bKSB$W61-yDFmm`k-^avb9J> vuF)#Wc?HU{#NYQQuougKe*Fvc8m&D8t`EZ|W}l0#00000NkvXXu0mjf2+5eb literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/baobab_trapdoor.png b/src/main/resources/textures/block/baobab_trapdoor.png new file mode 100644 index 0000000000000000000000000000000000000000..2820e670b4eafd43edc3ef8c7f021081908afddf GIT binary patch literal 505 zcmVt zxHGZ6E~R{poZZP}_M`hWFC->Ix5uY8zmyilX=F|lGqZyxX-0bgF5W4{-b&!&HTb=lPty1j-F3>^U(H5XZ;SqI6!JimcH*EK}((X+AVFcDsBOlHM3Mxg#eANCe4Os zM7Jq$veAObN}Fp!ZXyhuf^OsdqX&T~5eZxfZz5}y&6i2w2q%;a-itFOf^b`u2aqRZ zz|qaX*Bw}C2*Ri>xbFc72&{yG4-UbgZ_MG0Jp?EFb`KOmkwKzToA)}*bQ-{=X`tau z_CPQziEyrow%Lj!L^(c;sxflINRN7Lbpj1N3KE-P<+>Yb79gexpXmQ#Wi;G1ZhJ1{UG~ z3x@w;r_OQJ8TUAs%(J|e#e81IZ?B`U0HZgd*`njxgN@xNA4LeUl literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/brittle_ice_1.png b/src/main/resources/textures/block/brittle_ice_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4fbe3cf1f412899128baf8c0e28c88ed0ae51cbc GIT binary patch literal 419 zcmV;U0bKrxP)>{nyx?n%-GsC-01#{S) z&6_95WM;$V)z7s#+o&(uMJL$Zvsr&QjmpPhTt)0{=GFS?ePr{mnHzX*^?w*0Be9ZZ z(KCApMpR`qL0%V(o+}_ZQw0PWe#Q98(&HAC(FYUY{e#k4^=0b{RMK2Q2y(K<-yeqN zG+5DCNyGFyv%;z&N>sw$cQ8VLUy8DIyjzQaKy9ZQBA{R*ch*DmsGSAi^TV2jU|ryo z?U<)}!~|4V2PmvR%SrLt8^=B0JbcCD1@`xY*yIP<-SD^`d?a=m4Ku=(qDU#*yOjaOnLwS N002ovPDHLkV1nR9#EJj_ literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/brittle_ice_2.png b/src/main/resources/textures/block/brittle_ice_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f3ebc922a9b740a9051b5d8f739133b470f662f9 GIT binary patch literal 531 zcmV+u0_^>XP)TlkB4+BoFyCf5>0(HG*$0ctcUVtVEiy%FepP-5LAz zP_rY!g1K~6om17Py3Nk+%N}a>X+FZwb%Wjw@Hi?$Y-Tx*8b`6c-9GV4YW z+)+Od6Vi?=4M;*!Xvh6&XqjLVQrK_pM(_8@P(G)|&BX{LEErCr0(H)<)cUP7xfOhE z*>FC3R~e{{T!YamT|7U1bjyX_cnsM1J6j3c2l9(s)@Qr36OCDd2X-PO$V->EQi$$l8u{{ zl!6_cR9Fs6`*x6GJg-U4Tmk`Ms4TTeHZ`c1(2aE$dkyJk@8?Xw zlX+zqE=;o0uEzjdWToSAVF`TXKpy<=YYKv&?KJRZ$Pk{G4?HamyiGRmaqHG{a|RVNYWOgaq`Np(K&ZN>PopWY1uSXxYtyc^O1 zRd*i^eO_Nt_T!IK=m{oaGXn11i2AQTPfc?rl2NCbh7+_Fk;+n4`rQAX8UmB+5!@)E zG^_3&%XmUeji?(BnpSY_4ohKf#!L7#EG2Geb)fCPaua=i(be54^{``|;kn=iYIp)9FF8*@R_T7=>xJ z&}wzWn{d_fxJ>K|H95r8>BtvIe?=xGf13Dpl;SN zJsrXL_-rhg0S;?y|8Ut zn2@EEkW8Kx1GS(~1Zhu&LU^#ah+OWg*tn4up#)^SMgwc74!m`JV*@AW=5Qhr$HLHe zEq%uklb7;53Qe_8sY@n5D;0@3tn1FJWJNr@cNNl?5`epnyzTefvT>p*o|) zeE#eyqR~SPm06)qYUtzwGKj~I61=7w76;vYQ2wwUR3y4g@fg@4800000NkvXXu0mjf+utk( literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/palm_crown.png b/src/main/resources/textures/block/palm_crown.png new file mode 100644 index 0000000000000000000000000000000000000000..5bb6e642c570d671558f92dcb98fca1741d3dd6e GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b^-|NGn&#aU;#%lrn_y<5 zro5a5D3$B!;uunKi}he*<1qoAhKu?s3@;c?@jA?A{F3s2=D+U~s@F?>RV;#H9u_m qHht%M3E#Ye`(}?BSN3iC%B~&6_wv$R&ksP089ZJ6T-G@yGywo<-Ah3L literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/palm_door_bottom.png b/src/main/resources/textures/block/palm_door_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..a17c735678bf20f744c7aace6a6b2e04eea32958 GIT binary patch literal 507 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0gy>VK~y+Tos&CD z!%!5*Poh#AwRO-|6bsfzK~NOj3$Ct;lY^@r9bJSh4lW9vo%#_3m#*p{R5Tzu6wy}O zDt)9iF}5}Kf18xlv=RJ;!?`)HoO{m=CyJu3UY?O>&_xf)ERFew>HhhRmNvHNDg8n~ zF660pm!Qz(D9II#W`jP;=1P>w6^ZvGFIbQjud9zGFE1`oU}D^`c7`{!4J0RSZb_0P z3Wvjn)ehe)aK^F;wgN&kLCT-UX&@=FcXVa?ROORtz?a`uwioQJq*a+w5Zn|$5^3k~ zm{ztUlsb(uJ5Usr#Ucms{LqM-9UQ9TD<*i4?d{UlNtCTo6hQlZUY3J+zNYBR(Fp{b ziQVXWhyd+EoNz2K7xXi6!ZrnyR7P%-Zt&OjfU#_X6Mikot@cfU4L;B|M%=XDW5kuk zDO&|LfMV7$_N>nf`+6e}qxvYT^sRHGebqZkp;%!>rlFLK}>z28N xex{wk7R)YeQ-Jd?vBDi}uIl)W|3gWu(hoNJ=%A?S5{3W(002ovPDHLkV1hnI-J1Xa literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/palm_door_top.png b/src/main/resources/textures/block/palm_door_top.png new file mode 100644 index 0000000000000000000000000000000000000000..f8dfa5aa667788e1f7ecba7b4e1d6c1635138972 GIT binary patch literal 433 zcmV;i0Z#sjP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0Y*tgK~y+TW1N`i z^`C`{kpUn0^X)&B1pzSipWl3EV4Rxm{r~K#2MiKo0$@R6!HZWPz%&zx0BLs4uVvu0 z@Bj<)@vvjXAOKSbvk+_m2pl_kn&HvYXK;ns07wp|4h9%gGcx~+KE4Fzz%+mQ@{{4_ z(c(0=U$`0}%wU*$%@XaQ(_luq%)OiUA;itN|I|5=Sur z6xtv^;=||woD!ct_y9Kj*1eYu#%2moDeM50tiONz0X7U2jc^0V0bm0A|gfg6u b2^bgvwAZIv2D=)V00000NkvXXu0mjfpm3_Y literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/palm_leaves.png b/src/main/resources/textures/block/palm_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..b073073e78355d8c6b00c2e4514e986938865145 GIT binary patch literal 5887 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/palm_log.png b/src/main/resources/textures/block/palm_log.png new file mode 100644 index 0000000000000000000000000000000000000000..e81d41efe0aee096c84ec1cb54f25efb8623b4aa GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bjdZf?$@i~F@X8Ev@ix|L z=R7(UD3$8z;uunKOSHFdw2;Bm)z4*}Q$iB}@^L^d literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/palm_log_top.png b/src/main/resources/textures/block/palm_log_top.png new file mode 100644 index 0000000000000000000000000000000000000000..beb83655e64c03c80c1d2d6be361300d275068e3 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!T!2rAYi5W`Prm=GH1~;#UKI&m z9pO$@-qtzxCXr5-Nv7JhzQy%Gl{KC&jv*DdO#2zRTori^ugbk%`JcP~_;=O?3X+Zv zQ5l>W9GmydxM!yC^m)#bpy?^hk8aMME_kR-=GVbZ3}SP8@{dU!w%eBO%pi9-be(19 zm+Fq^NB&Aq{}h|xt7^IOSGdWs=8uO`GWn`EWrS(TPgc#m{Jxxb;qJopm5LA9vtn4L U_&(BM2fBm7)78&qol`;+0DQ4f#Q*>R literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/palm_planks.png b/src/main/resources/textures/block/palm_planks.png new file mode 100644 index 0000000000000000000000000000000000000000..d40841d9338e6d34db07b31a01c5e5fe5e63dd15 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ^;eglo98hx(W@iesmj|r z$KE8#RNJHP%qO6NVow*xkcwNpKHC`&J8EX9qkXo8e7iYt7rM&`iiMU z;gyu)zS%oed~}Mo3O@gSWc`E2#AVtW^$lWgXD#yhJUc_>gZ1wHdk_2hge+8=D9HO} z=DWzof5GS24={)CGB~K3ELeJE)!OUAPXqflGt_5X7n>k-Kr#YoJ%gvKpUXO@geCx~ CwN5br literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/palm_sapling.png b/src/main/resources/textures/block/palm_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..43b185c6f628bd589e2174a9f7ccd7302b7a7784 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(a1=5Y{+%qTG^yK?jBzQ%X zm}Gd{xCW~SSn8j7%>~lKSQ6wH%;50sMjDXg=jq}YQgJK!03VB}f=KWLfsQmGAy%%2 z$cGCZ6WX#?PFTe-A&n;}BqfB!sD;InMUusFmc)%&5;GcjSlOnrtf)N0CLlGtLwd@^ dYm8Hv8TR~TuQ1>!=>?k1;OXk;vd$@?2>|CcHQxXL literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/palm_trapdoor.png b/src/main/resources/textures/block/palm_trapdoor.png new file mode 100644 index 0000000000000000000000000000000000000000..64840929221995e2aaedcbbac8d1eea4d113f875 GIT binary patch literal 474 zcmV<00VV#4P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0dGk}K~y+Tjg!4j z0znYRhco6p#6wItP|@O|65~f=L1jU#t$YO^LmLa9!`_Fmv9K|QL@yc=q)=2mqr!z8 z5DLtH+2OuG{Uw{7%*W2m&Tj0mu+h&Nv*brls8aH9T3so5)a?evj`nx^{s1jLC8a2B zwvF_Lt7Q<3VwnNR7oY8v!zH@yn3A8NwzUvgPpR4`#^+R2Qj(x>AR_P1|` zTAl9L1s|sT{6R{7DNSf0sZI_r5Avu5*atC%^&BbT8)wHgGZR>VZGIHF2Z+ZtvG+Fj zs6=VeE9=52Jl|%wC(82&KfSz?o|>b_M2=jyEo|Y6MFrvc0tD}DZ_)DNg49Go@<}&&^RKX~?4c_6HUoq+H>Vl@Lme66m!0(ILz)QqP88{pqpHjI} zrTg=Gz;hq~RMAD6SYj^}+X5GzH+}$|DinY zNnCtJOFm6gY7mgz&L^8eBnJq#9Cb8sr{hohpa9yo^$02GnTSTi%eZJ7gwZBKNHuEk zN>};ZEeF~FNHv(Sl4{gI>VRC$$F;j{P{;-vLG3Al8n!kvKMsXXI$s_v(aa-2$S= z<(J?$g&XOYFR>PYY_bM!v`&BcvIh8Zo=vMCcK{*#+lW}a8a2q?fp+ACVHl)w>(l{} zyO*AtJ0KAdvZGF6D2>{iKM^_DU5?+cSfH45b^-Z2`~e9x94{AWVYvVR002ovPDHLk FV1hSGofQB8 literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/salt_ore.png b/src/main/resources/textures/block/salt_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..bfcd884d0e9d955e6df974b2e7c8a9476cdc1e1b GIT binary patch literal 585 zcmV-P0=E5$P)A*he7p|6RY)lJxwMPLF)GgYyd>T7g@83c(VIc5yr()1q_ahVR^+ie5i-P%&okr9~bqtR?Gj~uR4D*K5Z{JjxkBOW&^Yz}IIZlp1Ix4w^aH&+< zhbaTPzesWfBj&BXL~pija6h95_6!zD2Wv%f612K|7VF77K&g{-jH1Kt(?uUu+_c$_~y*anQS!Z z{~ub7T<($&iVD4Zt4fKHUiL(f|-W zq_sW7dW4M=1o^C(g2+;U8qxwJATX9MaP~6n=l)R&@F1e9Mk?wVK(dMAD^5h#>-h7c z#UTX>m=;aZBsm4}kGh~h5qz&x(|A+qegMdc-Z*qb0KU}?j3$%C8pw(2LfUIRz_zlq z4|d@L?|r#YMHN7bzJLGzQ;`4VFkMvNrB40#Zj3d!HjQ4kcccc1$&GDPmD$v60MI1* e2}Ger{|H~hV$%PN^+x~z002ovPDHLkV1fW78%joB6W66Tt?RrfEvL1>J9wlQzYHWqx)h=gjQn;_db2 z*P>jGQ`A6q`_TL6_qt2CNYb`=KFPdbl8^gBjJn#JV%XnxW7Al(+18dQb6I@ZGCKZ| z!Yt2HtD4~2bILZ87;8scvsmqY{eU|j2g z?p$ho20R5nMw(={h|h&+7G16@A>s&-TA#ro1jFI)@}aKHeUdd~YzeuNKc-LNvF`s6 Q?EnA(07*qoM6N<$f}Y5}p#T5? literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/stripped_palm_log.png b/src/main/resources/textures/block/stripped_palm_log.png new file mode 100644 index 0000000000000000000000000000000000000000..8b0a0247ef162d44df3c073e4fb3f5de20e984cc GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!P=HT}Ye%?KmA7?{y-AX(_S9_e ziHTmBvlMiJvdNwTogr^u73I#9>>=Cm#M$X$4GOd*lfkL>ipHWtxoN3 zR&h^Xax_fp;KUh+1oJ)J_lRD$+_Wk#ic?lhecqZc{gY*^_N|&1p|0NX`0ulu?}|^` iF#HL5W;k_kK;6$c#-mH;98d#V$KdJe=d#Wzp$PztvO$#q literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/block/stripped_palm_log_top.png b/src/main/resources/textures/block/stripped_palm_log_top.png new file mode 100644 index 0000000000000000000000000000000000000000..5a14215ef7c7584b504deae9202f0a93cb7acbac GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!P=HT}Ye%@##6+)IY3@m;+Ew1x zIrb)^>pWHgWm7y|978H@*-mKR%BsNAx`XR?|DV;*6U}XBg#HqH$9}Bwufn@~Mpvya zy|eru72Ta-qjphd=}{-89Sn}bg)K_LFKb*e3|Mux1a3?+Q;DO>gTe~DWM4fMqEXB literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/entity/boat/azalea.png b/src/main/resources/textures/entity/boat/azalea.png new file mode 100644 index 0000000000000000000000000000000000000000..c43d768dd177097db5f11de997141e7925c35c24 GIT binary patch literal 3440 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/entity/signs/azalea.png b/src/main/resources/textures/entity/signs/azalea.png new file mode 100644 index 0000000000000000000000000000000000000000..7cc55a966d9c9fc8a4e901bc87dbedee039d6b72 GIT binary patch literal 850 zcmV-Y1FigtP)vO-ft^c;ujb(xR z{Ryyd$kYLHzsEeK=IaP&^3msRX)C|aNPrfL0)YpV-!&jpBI z@T?K`82F@j0Ca5Gq_MxHkF~SV%sYT^fH8}%x^U2$y8_`jpUl|2X#Gq9prddAKbu!7 zsteJ#f%%zl03$nF1Gs6?`m`f$>nD8!uoiF;Vjp}Xn13fodB{p0I(h12zbq7A88H~pT@--B=F1=1Te`k=S)Y6_oTv-u0=2Vi?)DS4 zV`_i!T|IdG!s$%#;P{zSzN!aHI)ZQ<^szlum~)*xI3A7;4jHG;ATTH{2f=TB!JFQ^ z|LJH@nd*#SAUN(~>m4tf)CUY~LLgix4FNg{C;<0pO=fV$-PS{zv)BRuAQV7mhP$pC z&pf30xA8>1`4H+6^jZ9PCAu60&vp(ckBndt?0MICk5?cbL7=nEYV7=W%ls$UHK(ON zIs+u$S@}^LmQT)Jk5bWr}h_=!-6Pyhe`07*qoM6N<$f{%iuCIA2c literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/entity/signs/baobab.png b/src/main/resources/textures/entity/signs/baobab.png new file mode 100644 index 0000000000000000000000000000000000000000..0a8c2d439a33e3d18dbaa76768d910eacf9c01cc GIT binary patch literal 877 zcmV-z1CsoSP)!wy68w=qwMw;M;dGQ}OzqHb$>$Hq*w^`qO^ae|>-Ln%E+B-CB2bv>~YT z`mHEPwBf%@7Bt+xdHHWO+#US6t=lbo<=K=Tsd~+VqmC(Tid#F>IefnC+grkvMhhf) z67Wd0VAlT8PNugsHfl-jNcn0xIJE$|H!Q4azOkYkd=R`01&uWvb7x7!3+2{Fy99q z65?3ZOIqrl-vd}UYyULhVXI%i>zujQ$pxH@bq+o0o#5KT*45!NPk*eJM&ttmA472D z<~MiV%UGHT&zr5#`J;!vkQIn-bLYH4`MdoVHXg5!%jGMoeD$)-(ETw|-EL2z|M`oT zxy}TA&^%Db<_TAoATSsRLf%DJZ&VFNfF)oXki0{;_;l@N#Recudl&pl(aU`lgajq+ z1ITes$a56*{?}H>0ZQS-0Ukmk%rkgk(*WEJQ6l~K0#aNg(Y)^3A@J28Ajkv+V<9*I zK#>7{a2tRJnEKEcK{SCP6OaWR=k6yT{ikZfJmpknxfF%nG~_F61Ht`HsLZh-&F*{H9(X00000NkvXXu0mjf DLb|cw literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/entity/signs/hanging/azalea.png b/src/main/resources/textures/entity/signs/hanging/azalea.png new file mode 100644 index 0000000000000000000000000000000000000000..bf5768637aa17b76efd0b6e3051e2ab1dde32dfc GIT binary patch literal 1023 zcmVK_{BP;J*p;&Y)r8Nis{&c%Le5l`z ztbMABe>k5txzRmShQIUlZ6c)7j&_sb)y=@b*rUgWs#6#XG1tGp%i7ENl5t;7GB^wR zHj^`65AVyF@Gk#saRAXyceR@uh5Uj=4`U0f>zh=|{m5Ii8AMJ-`grE({|S$r@U(Z6 zwmM)VdJErYs}Yn!7!xL6j(J6&^bb=M-j|D-53jM^{Wi|LQac>wigHty5t@TzWT99& z5-5b+a(-r$Zr9U6|9FrctIqIa$zjWs(bcI<_;ZB`*V&s2@Rg%=QdXJeb7M(&afgXjvPls(URO2eBdaP+sG(i&c}!MmmH4PQ4FuWo&Cgx%h$@! z9zRN)JaxYO@%{6E_BN42F${oM(;ChGgW>$)2wztWVk|uF%cw0GIBPL3E}8$1%K-6O z24FPK^5x__f2F*n(IdOlknc4}Ik2<#~&LzkVA9bFEL#Ec<@i#KD zJ3|qw7wIS^74>>J$!L$Lb>beY-qd$5o-P+k>u#x7as%148yY-ll^*r}v4I{dgHd*3 za@P5Bv_+ZrN(rn_q{ew8h$MgS<#=^(&Behh8gJ~3@!cJjGMGmV#zW$~1NeLMHCL4b zBNDz)%4?{~eYxsj6EqSJZd|fT5Q8BK6OqQk2p2IC!$RCu95i7nq)=L=Pfb z7(#Z)8H{tT8^yCuoMaiGXe#|t$lmbY?M+4~n#vL>-Y8z{#KDuVKTO-c`aEGI#`6yk z5e9Nc-~>3NRBjZnJ>ue)0Www**7;XPU@S+({~V&QKADZ;<1(IolU#Bl3=bPGa$bD5()b{Db@elnOdh0>TyIA%Uz2 z#Znx{_K^_6ao=pdyY76N%ye&OT5C7eEa%acJ_{B{ZmJZ#iHE18bq{nrKt!94Zxez0#BfOvT{pgf&j1MvFXU09O-cwg2t%t_EOn*_wHQW?1TXpmfX;@ zQ_`$81s=?M6}=svH*ge2gozT&n@vL}Qc~l)kv{X*1wdb^`j+^ZkvcIS3EuX<_!#& z6~}q2tE&Mb3UoO0{*za6NGjF;eYo%@iyQ<1j(l#leyRr>+onu-g}9hO1QV`~hCd>u z>pPkv_8xd}CTO9Q)`YEsrhwl$2n`mWS>O7jnvu@$%!c#0*y`p5Je-x4m0)vo)2UXg zL9JFB+S>3O<`PI6lmOYO#vt-a;SRZ01 z$*BCXDCuCwDGVE@vgq)W@9kt_I!y;&u$LkB> zj1V_P&U}huAKtcs1@hf{69w2Cmft=%4O}At!UN#Fa%Dzyn*R%6orMv`unQ#mhPhJw zZXbpp=cfrSm8TF;f|VY|K;AR-QTPbV{ZaXOURtBu+qTAStZ7{v3Ax%QTG~OEbte^KFbj$Va)&l0000(1Y}145L)sugM2=?f$R;Z{5 z?V+?@43t(|Z9++tG)b+7tn+)@x1Da97+9LEkO#Xn^XC0#=J!5kLww|rC-=w9T((4O z{yqwYyU73jGex2ywmLO<(zebQe^WGkoIb7w*lr}YM$kckpUoK5n}}2AW~w26a(0XD zM*FuJ|KjzO&)%d39mBcDnWQ4C9)IZ~WjE3^I2321uv_`I$>xQ8iAjOz!0D@OhdDT? zJ9>=qvv0HXb3H@D7aHS<47OXTRv7O*&tZ>i95A<#ArOpRxlE;EmU7h+M-&IK399}^ z{trj2p!%>IQRI;Ua0Ku~QT15a07pR%!c%6)o|6n>MT=fF4#2)hc|;!(9KB|xy&Mk2 z5oJ6eo2yuMh@c4Yz5Y1krEKcqdlP+D2JB{+tkJ60H}P=X1V!!HbXc3SUyLX#;`?ABl5C>UczU21q1Rakx^!-cz0B1yJhgCLW zdswZ3+kR$l(s%CC4Kp?UzQ)^D{QtfE*}IR;oHE0G0KuBvalBHC4n>_|v-{S8H?Ib9 zJU7SgnL6sWA_SdNuiHppY|vsY=%p2#|E?7R($*sY(r}h;C(hG#_3%elFHvnoLTo_T zNkrzPbvn3dZgFsY2JvfdM$^l|1qYkdV(r}lyJl=;J>JL9iU3tr0w!A3ItD(5wuLVHnvH(Lti8k z?%=MjgF^J^%iPm9AMCxM_e%Et5(N1~JjQ1c@)*DgR3>%=obh!jZQB7OqN>5xiw>?aTC!6VTeQ;eWwm%nHL91b~tUD#ZSDN_B0dxI4C5wl;KE&h?5M)NPTe> z#_3F+Gr>Z;$ICjcZn*?N4t0uXLi8wO%q5`OwPh>arH+Ha0H)bFZt%Q_M=yiPs`>`0 zNLbZ6WOt0N5QCjujAFOCUa*|y0*^hs6wUxdzFbbL42av&hfX3dmmm%bM@a^h%iDZ* zw|Gw-fVA$3M+xby6UCuGOfLt_BO~xw8PmaK;Rf#|dF;&@0Ah${p=f=_K@cJik%)_4 zvH%!-Hr?QPBM)B&q6Y%V01(upj&tG0hfWuaaSy;@Zt?oMUiA4hDCsOjL0TS^fRur> zoEhr0k{NFCUJ#c(jrqkDPGc*r)lWH1`V$c-R(I8Qfk{bR1{{m6a@CW!06sc)I6bK1nr2r|Q zpdjJ!v~g@662{*+-!iwpSi6YWI+Kz1c4l^FZf0+0cJ0J$!tHC9dO%z4?=pawihE`F ze6Hzv(t5X+9wqQ67AzGWKU*U?2gW=KcNa#8cfrGNj$DqkNo+xLwhBFL1k z%$HI$2%X}fp|kd`1yt4=>nsgn$%FPN!x92L4t;SV;9=pYZfZWQZD0+6Mu}cQ8o?3A zy0!mC3dUp9;Puk>L%22%F`q$tuC&TMtmbvwh?W%dBRc+&dxBV?9)00L*DW8kD= z1nV5+>$(R{n6y6q2%VF~lhvMo_G%i2Sd+l@8u>m?)8p2U?E$V~U?X&Zv4)_VM{vIe zuUA3S_5 zZkEagQ$2CW%$9c>bF3gdY)XFvauCMfyJ%~*iql30tiJhd@Z|y6lxYWBudfXSiog#Z zE|_w0&$P#HBm*Sv`=KJ`0muaO0rmo6PU*uURhv*iJQ z>YE?}M+sm6XX?lOt>88^cZigL4puim-V1UURfNNq0W(-OKF$%gaw%#D_5P;>5XAy6 zLjA$Mkjuydolcbivti}!|8WFjk1VdgO#f6i^iKlv12;35V)APc_0Dsj*I&}PjB3Z} dogE0?f!~SJ^{jtb9*+P3002ovPDHLkV1m2Nm&5=7 literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/gui/hanging_signs/azalea.png b/src/main/resources/textures/gui/hanging_signs/azalea.png new file mode 100644 index 0000000000000000000000000000000000000000..38f2ebba2748877d28225836a6b3eb3eb0793d42 GIT binary patch literal 434 zcmV;j0ZsmiP)%VSnhjso9{_tbg!#(v0W|L`<9JHJTM#2>*jFE3ubexUH* zb(xnopb81AAj?Y|pluZ_^Kum3G*4VR4h2*|fc4nvTHX>X^@?7E zGwuG&#-Ly|i`=ewGPT+`a*J``+x+fXT?VoY&w(r^<^ui+u(P@0D<5ybAt(h!t8GOd zb32gVI^zce-O*fPIspU$eVT?G6KR@ko-=PCJ&-7V?SF9QU|imaCageGh|>vlgY;`6 z$VfyAkpAs(?$~bw##}s}iZuyEEk0=jji;M55%vMC*h{Qt-as1_>!CD>WK_fX cLyJ%2A97s9$38AGBLDyZ07*qoM6N<$f+#-1W&i*H literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/gui/hanging_signs/baobab.png b/src/main/resources/textures/gui/hanging_signs/baobab.png new file mode 100644 index 0000000000000000000000000000000000000000..f2d87f1ab21a3abff7dafa40bda1a5d0c711a515 GIT binary patch literal 455 zcmV;&0XY7NP)oOwTRe6e(1KmIO+vO=z%f+&9x% zLj=h{ySuY*-n^OFI8S%yMa%c-@wG$gaz^)Ob4s%n!3V=WTRJpbZ1_Cb_8E8EoAS9C zgnMSQVdv*GrX()R*)cyM5uz3OZI_ACXhy(Mk8BcVI_+N+msi(_{@1EFSJBF8#A{<+dkq?*Y7q$M6z@*H9=5icOHBF-;7LF~12D z(^RDc?VC6Ay>GtEyyu)9?Uie*pk!d-%wjePV)%LXF6Wn5jw-kv#u^~;+d;+$ zk>#WKRc?k6T;lS_$oyatcd8zWvo0)=*QInn5NKTbiNmJHLAxWpNF;6^+>!#UvLyDPv{BIpq Vd|q=CZZA6=xlRoL3IeH_8-vheN$;8PvuLKCL;a_38o=JOeBnhv6v#X zi;7Ye2}j;VqT)-p%lSeiVCXP@wMUEgwhAx_?asyHl$nb0SH7t!l2~Mn+qb^_yFxw_ zz_33YZds~`29c25wO^TRIT-_lMG@cxl0tUgk9dFV1D;h#(Ak^aV-ndBe#W)ggu7qN zE1*87zMk5SK$t>Tb%s$P=2xG-6DLI)o_Esz_~Bidh7QLcyW93F0O$(tn`4LzfOBI6IXtDxyP5 zmRbkNVA0a56p87NguG}%VuG(Z_xXLi6r8;9KF@vw`g<= z6lv;7?KTp#_709+|JNyBC!9pTVUs&OZmD~hYDN6!TJT!>RC5>*hvb>(WsuO)_5k%# z5!u=e9{K$muYWf1qSb|bxeBL<-J+qivXPe#JSd{NE6fI|iiLK=i@AYreK+nmqdk_H zJ4a$Lh_@gAO2_j;K_=MRyaFFi!v?JD?+)um1a6K*JN@O=BJ`8Hbxe;B5DJ+Ml;z45 z1>vT%{BjbtN=A#Qbyj!wFcE)@u|S99G|K_x4vv0YU}?NrPSW;&2?Z@exEH`a~oW z2;fhyEF$Vn$agT()ov{$>cfC)h zrC1$`oGqHNGw*^Vk}0B0{|gjBGHt!?kIDor+WvMXb&|6g7AFZc@b`=5SR}mP+R~D1CVA=+)q!4 zWjNAU#?Th*1?Gdq@y0@ZXc$}pNTCEDKbQ}rVYVXEC@ug=p!<;!A0C<@&7fES(S*Q~ cONcZ9065uy(gf~sO8@`>07*qoM6N<$g4G6}K>z>% literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/item/azalea_hanging_sign.png b/src/main/resources/textures/item/azalea_hanging_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..ae7ffb90794cc7bc2e9a4a9ad9540b7d897fcd99 GIT binary patch literal 405 zcmV;G0c!q*i5AD2V^gT3wkyjVaxx2(%4rQpVOjSKla;v~W3$`*6w z!kfk?XBB6PP|#FZiasEn5JCt@DbbE%EdpZ96{aDBfI0L#cz9Ajd?xt5-_LAuI*OZM z_8WMfr_Cn*h8rqChHAB{@5MG7Jc?uS`Qg4kU8;`Oi_)y|aWq^MzT>!ZrM>zRNkL?- z@rsR7Q5&LAvhlM1h(*^;x!xypJOWj1b-N%jEsA$4Vj*!RueH+R+(CI&u$aKk+Tc%Q zG3C3P>o~n>5(IZ(<};^Iv@wZI-g+^A#411|P}|fhEsCaXdyhDKgrQfsZ=|!4aNH`+ z)XNQjWgN%k@X5(;5q5pn*YOJ69K2nS&66K00000NkvXXu0mjf0eQL# literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/item/azalea_sign.png b/src/main/resources/textures/item/azalea_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..092e6449b679f0986223b9bbd38a6defe4a6a4ab GIT binary patch literal 345 zcmV-f0jB^ZqC$l}OrZ0~Y-)Hx z^x`{or!%wL*|sA8eKHJib9K1{4&Od36-^B#IV^e>`=ukRLyO`sxo!uUEL~^}o`zEQ z%cQin9{N%)c!_4D8;-wu_UOXY@yy8W^UzYLF!MmeJu1%KYiO$`I6L(%!ArANA(S*G zd2y2XI|I=K+?`KFB}Nl5D+g%;tibpX85Ir0Y5rF$@M)-Ahbw4;``-HHrOmrw9Wa{3 zyZARe`Xg;93DInvFZVr9-Y1a+j{~Pyzk+K3nvV~1lF#Q{vgLFImt$_$KTRAjT=LHY r>eZ4=qJ_-O9}~QcK9go6+Y+n*TG0z2Pu<_I`V)wk7DH4l znY6c&WwPO(gVV|g=}3U->3M_7l@?<%DT8-io8-NEZ&LfSOT#1{0l+B21X#ZL;8>RY za-94mssI7@19ja!VL0R}fU;aR>L_#vfmrppL_ZV2 zvCIjUEK_6$k&xWhOeV`DB7m@Y1c*Q~mmE9|ya!yXkU&|->N1JE5x&OF^sK#8NV$~G zsu@4*<7hDaA6y~8mZ>;(oA5SpE3Dw8T33#WHExzgz)#OT!kKXlfB*)Gn5P#cPSW1a zC!D4rHyvNsxvyV?Z$pW$;m3b*Z9v5#5suS$X$UAO+Ff1n>Rxgj=NBn8v_-y)(P#hw N002ovPDHLkV1lNO+8Y1> literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/item/baobab_chest_boat.png b/src/main/resources/textures/item/baobab_chest_boat.png new file mode 100644 index 0000000000000000000000000000000000000000..c01788823718d1875b6ea5ab5d8740c4a4d6bb47 GIT binary patch literal 545 zcmV++0^a?JP)8G zSQ!unKg7*0tR}9%d{h!0bFO)BN5N_@%)E0y=iGbWB)|t23^bU0K1l0uxke?RNa5B( zDbirZ4$f@v>y)n(R$`5jmwa7?UCzbrO7#1y1utyGG=~9kNFHs!2MOg)HwxJ_{^XzG z_f%`Vvg^Q5b1l;M53q{7wkRrnkK9TJz9^!)E6fHzjxOMKRAD+C)OTZ_AM7yiuFlcZ z=E3~hwRHS-b1M_<9Xh~=)35>S0?jVnh``Q~Xz^sF7NMUw@uD|WLnvf6P?pWA3oZ)K zS(@xb;qgL?sCCviQ|JhKF&z9XIVE5{=N;-wARpOPlaT-7>`6#)6QsM$!rvzak jst_i+TXbFr{|CGP(0tzrVn-Eb00000NkvXXu0mjf*^c@? literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/item/baobab_door.png b/src/main/resources/textures/item/baobab_door.png new file mode 100644 index 0000000000000000000000000000000000000000..de90c316df7557d92fdd084b84c72c1d07086fa3 GIT binary patch literal 419 zcmV;U0bKrxP)y+T?3X5BzNb|+%t2|4DjDpFdH~K+>Oa>g)wW&t$U1L2vkqS@g%qpnx50C-Cc*nuf1zj@CN7&FcG zl8C9i3G&>TCIAq9On|u^G`CjJzMCKjzhrDYsXi(E*#Xh}{<9^5~L(z+&4I2|9U=yGY?0^lBK)qJ8p z$WyQYHmd{86Sdhkh2xKap1bs`151OK*O??}m99TR*H1C2zR=69@(;Y|E6o4^ N002ovPDHLkV1i_hw4eY0 literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/item/baobab_hanging_sign.png b/src/main/resources/textures/item/baobab_hanging_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..61110195bb4dc1d993e5b8ba07e7c4304c087965 GIT binary patch literal 399 zcmV;A0dW3_P)&zKJm^sCX6Vj?ZMvS!aHxjW6Qz$tLM0p8cMqWY? zzO>jM^I#Cx9mwo*E1}6LUCwD_>7u#=8bR8po21=_KWJNGgyslCzd#Q)&Pvrg*0+52 t>JIK|pM9^cH=<6)2v4uw5vG5VzW@O`s`ss=XeR&w002ovPDHLkV1f_>vylJ* literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/item/baobab_sign.png b/src/main/resources/textures/item/baobab_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..e1dc969d6d1ddfd0f34d866c76d401a9ef937178 GIT binary patch literal 325 zcmV-L0lNN)P)~y$P7vC_ve)Stn!}Ne?xB(zdFF*fa*n92`SRO=Qx%~yM79FfJd+1z|#P-CS*1M XV@r#C5zAR|00000NkvXXu0mjfn8l5d literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/item/palm_boat.png b/src/main/resources/textures/item/palm_boat.png new file mode 100644 index 0000000000000000000000000000000000000000..4527fa0a80375e3b2c19ec58bba082b8227bcec3 GIT binary patch literal 474 zcmV<00VV#4P)wjU6!>|+-}t1^O!A|FwtAPA+8 zi2O)v(W`Uhithz&9C$N#KF*oB?~X`|Vzc5mr@{te+OsZ~xx$~kwccS3z@Lo`h?dZ0 zbtFi#=9S?96p(Pgm*4KmRfELiYUlWRrN&w)65voS z**UW6qAZ9M$;C~YWaGXbKq#g?07)q1mUOzrB=!L@2uKzp!&3dIk>odI;79Tq2YWom z*4i8kp}^C}}Jb z0+=Me6y>Yn8hgn*)}a9o(*d7>Ng(;cyWn+91W14c7NUT4udYGT?6-XW0q1+Vhz~4` QlmGw#07*qoM6N<$g3cM)8vp0@?kEP)0stD@NcBSH`V4*Jk1Ks!w#H~L-ghH#hP*7a? z0n(OARZxtrw4jMpo0q)C)YPYEl6!d(TsiRWJ#%NynVI`8aECQM4cPqd21WPNFHiQf`kHh3DQ;^ z$Cp>AF7;_Vvsr}aZa03L2{=VEC2o|a7GqM43q@3Qg<0UUW#N(6gO_zR`fiMo=8$ck zo!~`7DaPl|rQ**&G3ns_LJIuY4GS=@vA#wZA~4tz?R(UvMd;5i+vx8L5(=3Gl$}^f z1!2&6H_(N2DxyWyI8z_Kpu0VUXTA!FX_f=X9h^q~;Z1L@NHlHYNzlOb(kBt|UjU<> z?O0jg!KroQWKCaUB5ve}FwU{^J*F1f_!<_mhH}5+LksZ4DMJ5sXApyJ-3V2diAbon z3dz40BBK6;yo1MnuRZpvgB&qW$(8IJjrMVE8^b+KLN*gAcs(u@6&K1l(!t@mnKwDR zD#>b5%XyaUm06}Y2xy?>!k!TD%2fs2; oSx&MGMU=0I%I8iIr+;sJ4PA%e6r%LwyZ`_I07*qoM6N<$f*HyHiU0rr literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/item/palm_door.png b/src/main/resources/textures/item/palm_door.png new file mode 100644 index 0000000000000000000000000000000000000000..c0a7d7fc378517c0466ade6b519acd12bd26ec54 GIT binary patch literal 437 zcmV;m0ZRUfP)b( zv%84l-1WxXVK;8_=6<|)&fI(6(}EzNxM`XeFE!1zzX+P1j%=u(BqB9h7|#WBvtwL( z_hn}Z(%6N1eyov_M}FH9Oek5~|toO`mmb+Vmj$`7R(h#X6iv?OrOj(OkeXm9v0pfW|G za^-(%fVn|{F5-szaLy8CF#4%P)?Vm`-V0|qFtEQ|g{7IU1(MDgy{8oeIB_C3?LchVJ0Q=m?NQH%`pSGO(LJGV(o zpNJG;^TLJt{0tTI7R6oIKXPEHp$##t5hI|p{piC<(;+RM-c!gv#Q2VNyaq<_TRqPI zdSXZR^#dGUy2B$N#8+?(evL=sJUY)+RPliL0~~?dN0Hnn$85%TbP)zxO@WQoW#KHx zi+WAuvCDe7DDJ}G^z0sjC>CH;kUN6h)+jMDFG>F@8J~Xx6n&`^`y+9b00000NkvXX Hu0mjfwWG3g literal 0 HcmV?d00001 diff --git a/src/main/resources/textures/item/palm_sign.png b/src/main/resources/textures/item/palm_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..69e665940d2cc5685fdd7726f5cb60c7e56638c3 GIT binary patch literal 337 zcmV-X0j~auP)*fN4%H4hA0He_%GU+^u^r8Rnh7%E$ti0TLj|i&q{p zNQeo*guwKtFFzTU?Y_;REh!3?d-3W6iW-P@K&2oXuRedxu=nC^utpFKQVatiIS?O2 zg8+<1@xtquzhLTd(jXUsz|}iX7&hK~i0TE9B+Q90+hJZp76*w5^YMTUf`M~^>dc>C!K*jdC77+yejGBF0c`1&2J4DJPNnj)Pn{|g9l zGd#Ngiec;7OIX#y(*ZUEK$`h^*ckZuxv@!u#o)1kO~r?IU%|qkK0;`0YVf+iSXYcP j7uy`md@cY0j&GDAP-!6-00000NkvXXu0mjfbg_%K literal 0 HcmV?d00001 From 9898c9a8a0266ed47349aa34b1f29f6887e44cd8 Mon Sep 17 00:00:00 2001 From: baka4n Date: Sat, 22 Feb 2025 11:17:49 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B9=E5=9D=97=E7=8A=B6=E6=80=81=E7=9A=84?= =?UTF-8?q?=E7=94=9F=E6=88=90=E9=A2=84=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/polaris2023/utils/Codes.java | 27 +++++++++++++++---- .../wild_wind/common/dyed/ModDyeColors.java | 9 +++++++ .../wild_wind/common/entity/Piranha.java | 1 - .../common/init/items/ModBaseItems.java | 4 ++- .../datagen/loot/ModBlockLootSubProvider.java | 5 ++-- 5 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 src/main/java/org/polaris2023/wild_wind/common/dyed/ModDyeColors.java diff --git a/processor/src/main/java/org/polaris2023/utils/Codes.java b/processor/src/main/java/org/polaris2023/utils/Codes.java index 8b10302e..e75c21c3 100644 --- a/processor/src/main/java/org/polaris2023/utils/Codes.java +++ b/processor/src/main/java/org/polaris2023/utils/Codes.java @@ -49,7 +49,8 @@ public final class %%classname%% implements DataProvider, IModel<%%classname%%> private Path assetsDir; private final ConcurrentHashMap MODELS = new ConcurrentHashMap<>();// object is Bean or map, by gson - + private final ConcurrentHashMap BLOCKSTATES = + new ConcurrentHashMap<>(); private %%classname%% basicItem(Supplier item) { ResourceLocation key = BuiltInRegistries.ITEM.getKey(item.get()).withPrefix("item/"); MODELS.put(key, Map.of("parent", "minecraft:item/generated", "textures", Map.of( @@ -104,11 +105,19 @@ public final class %%classname%% implements DataProvider, IModel<%%classname%%> } private %%classname%% cubeAll(Supplier block) { - ResourceLocation key = BuiltInRegistries.BLOCK.getKey(block.get()).withPrefix("block/"); - MODELS.put(key, Map.of( + . ResourceLocation key = BuiltInRegistries.BLOCK.getKey(block.get()); + ResourceLocation blockKey = key.withPrefix("block/"); + MODELS.put(blockKry, Map.of( "parent", "minecraft:block/cube_all", "textures", Map.of( - "all", key.toString() + "all", blockKey.toString() + ) + )); + BLOCKSTATES.put(key, Map.of( + "variants", Map.of( + "", Map.of( + "model", blockKey.toString() + ) ) )); return this; @@ -212,7 +221,7 @@ public void init() { @Override public CompletableFuture run(CachedOutput output) { init(); - CompletableFuture[] futures = new CompletableFuture[MODELS.size()]; + CompletableFuture[] futures = new CompletableFuture[MODELS.size() + BLOCKSTATES.size()]; int i = 0; for (Map.Entry entry : MODELS.entrySet()) { ResourceLocation key = entry.getKey(); @@ -222,6 +231,14 @@ public CompletableFuture run(CachedOutput output) { futures[i] = DataProvider.saveStable(output, jsonTree, itemModel); i++; } + for(Map.Entry entry : BLOCKSTATES.entrySet()) { + ResourceLocation key = entry.getKey(); + Object object = entry.getValue(); + Path states = assetsDir.resolve(key.getNamespace()).resolve("blockstates").resolve(key.getPath() + ".json"); + JsonElement jsonTree = GSON.toJsonTree(object); + futures[i] = DataProvider.saveStable(output, jsonTree, states); + i++; + } return CompletableFuture.allOf(futures); } diff --git a/src/main/java/org/polaris2023/wild_wind/common/dyed/ModDyeColors.java b/src/main/java/org/polaris2023/wild_wind/common/dyed/ModDyeColors.java new file mode 100644 index 00000000..5375df2f --- /dev/null +++ b/src/main/java/org/polaris2023/wild_wind/common/dyed/ModDyeColors.java @@ -0,0 +1,9 @@ +package org.polaris2023.wild_wind.common.dyed; + +/** + * @author : baka4n + * {@code @Date : 2025/02/21 18:18:36} + */ +public class ModDyeColors { + +} diff --git a/src/main/java/org/polaris2023/wild_wind/common/entity/Piranha.java b/src/main/java/org/polaris2023/wild_wind/common/entity/Piranha.java index 0e08d8a6..55206b46 100644 --- a/src/main/java/org/polaris2023/wild_wind/common/entity/Piranha.java +++ b/src/main/java/org/polaris2023/wild_wind/common/entity/Piranha.java @@ -15,7 +15,6 @@ import org.polaris2023.wild_wind.common.entity.goal.piranha.PiranhaAttackGoal; import org.polaris2023.wild_wind.common.init.items.entity.ModMobBuckets; -import java.util.LinkedList; import java.util.List; public class Piranha extends AbstractSchoolingFish { diff --git a/src/main/java/org/polaris2023/wild_wind/common/init/items/ModBaseItems.java b/src/main/java/org/polaris2023/wild_wind/common/init/items/ModBaseItems.java index e4cd6cbe..48aa2e60 100644 --- a/src/main/java/org/polaris2023/wild_wind/common/init/items/ModBaseItems.java +++ b/src/main/java/org/polaris2023/wild_wind/common/init/items/ModBaseItems.java @@ -21,7 +21,7 @@ * {@code @Date : 2025/02/12 20:19:42} */ @BasicItem -public enum ModBaseItems implements Supplier, ItemLike { +public enum ModBaseItems implements Supplier, ItemLike { @I18n(en_us = "Glow Powder", zh_cn = "萤光粉末", zh_tw = "螢光粉末") GLOW_POWDER, @I18n(en_us = "Apple Cake", zh_cn = "苹果派", zh_tw = "蘋果派") @@ -36,6 +36,8 @@ public enum ModBaseItems implements Supplier, ItemLike { SPIDER_EGG(STACK_TO_1), @I18n(en_us = "Spider Mucosa", zh_cn = "蛛丝壁膜", zh_tw = "蛛絲壁膜") SPIDER_MUCOSA, + @I18n(en_us = "salt", zh_cn = "盐", zh_tw = "鹽") + SALT(STACK_TO_SNOW) ; public final DeferredItem entry; ModBaseItems() { diff --git a/src/main/java/org/polaris2023/wild_wind/datagen/loot/ModBlockLootSubProvider.java b/src/main/java/org/polaris2023/wild_wind/datagen/loot/ModBlockLootSubProvider.java index eef79c4d..adb826a4 100644 --- a/src/main/java/org/polaris2023/wild_wind/datagen/loot/ModBlockLootSubProvider.java +++ b/src/main/java/org/polaris2023/wild_wind/datagen/loot/ModBlockLootSubProvider.java @@ -9,6 +9,7 @@ import org.polaris2023.wild_wind.common.init.ModBlocks; import org.polaris2023.wild_wind.common.init.ModInitializer; import org.polaris2023.wild_wind.common.init.ModItems; +import org.polaris2023.wild_wind.common.init.items.ModBaseItems; import org.polaris2023.wild_wind.datagen.ModBlockFamilies; import java.util.Set; @@ -39,8 +40,8 @@ public void generate() { this.dropSelf(ModBlocks.CONCRETE.get()); this.dropSelf(ModBlocks.GLAZED_TERRACOTTA.get()); this.dropSelf(ModBlocks.SALT_BLOCK.get()); - this.dropOther(ModBlocks.SALT_ORE.get(), ModItems.SALT.get()); - this.dropOther(ModBlocks.DEEPSLATE_SALT_ORE.get(), ModItems.SALT.get()); + this.dropOther(ModBlocks.SALT_ORE.get(), ModBaseItems.SALT.get()); + this.dropOther(ModBlocks.DEEPSLATE_SALT_ORE.get(), ModBaseItems.SALT.get()); this.dropSelf(ModBlocks.AZALEA_LOG.get()); this.dropSelf(ModBlocks.STRIPPED_AZALEA_LOG.get()); this.dropSelf(ModBlocks.AZALEA_WOOD.get()); From 7939feea7bb7f456b926bc0d7a43d2d3a5f17ca1 Mon Sep 17 00:00:00 2001 From: baka4n Date: Sat, 22 Feb 2025 17:38:34 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E8=A1=A8=E5=9B=A0=E4=B8=BA=E9=94=99=E8=AF=AF=E5=8E=9F=E5=9B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/polaris2023/utils/Codes.java | 84 +++++++++++++++---- .../client/WildWindClientEventHandler.java | 18 +--- .../common/block/entity/WoolBlockEntity.java | 31 ------- .../common/block/item/WoolBlockItem.java | 41 --------- .../wild_wind/common/init/ModBlocks.java | 19 ++++- .../common/init/items/foods/ModBaseFoods.java | 3 +- .../wild_wind/datagen/ModRecipeProvider.java | 6 +- .../datagen/loot/ModBlockLootSubProvider.java | 2 + 8 files changed, 92 insertions(+), 112 deletions(-) delete mode 100644 src/main/java/org/polaris2023/wild_wind/common/block/entity/WoolBlockEntity.java delete mode 100644 src/main/java/org/polaris2023/wild_wind/common/block/item/WoolBlockItem.java diff --git a/processor/src/main/java/org/polaris2023/utils/Codes.java b/processor/src/main/java/org/polaris2023/utils/Codes.java index e75c21c3..dfc0853f 100644 --- a/processor/src/main/java/org/polaris2023/utils/Codes.java +++ b/processor/src/main/java/org/polaris2023/utils/Codes.java @@ -105,9 +105,9 @@ public final class %%classname%% implements DataProvider, IModel<%%classname%%> } private %%classname%% cubeAll(Supplier block) { - . ResourceLocation key = BuiltInRegistries.BLOCK.getKey(block.get()); + ResourceLocation key = BuiltInRegistries.BLOCK.getKey(block.get()); ResourceLocation blockKey = key.withPrefix("block/"); - MODELS.put(blockKry, Map.of( + MODELS.put(blockKey, Map.of( "parent", "minecraft:block/cube_all", "textures", Map.of( "all", blockKey.toString() @@ -124,28 +124,82 @@ public final class %%classname%% implements DataProvider, IModel<%%classname%%> } private %%classname%% stairsBlock(Supplier block, String bottom, String side, String top) { - ResourceLocation key = BuiltInRegistries.BLOCK.getKey(block.get()).withPrefix("block/"); - MODELS.put(key, Map.of( + ResourceLocation key = BuiltInRegistries.BLOCK.getKey(block.get()); + ResourceLocation blockKey = key.withPrefix("block/"); + ResourceLocation inner = blockKey.withSuffix("_inner"); + ResourceLocation outer = blockKey.withSuffix("_outer"); + MODELS.put(blockKey, Map.of( "parent", "minecraft:block/stairs", "textures", Map.of( - "bottom", bottom.isEmpty() ? key.toString() : bottom, - "side", side.isEmpty() ? key.toString() : side, - "top", top.isEmpty() ? key.toString() : top + "bottom", bottom.isEmpty() ? blockKey.toString() : bottom, + "side", side.isEmpty() ? blockKey.toString() : side, + "top", top.isEmpty() ? blockKey.toString() : top ))); - MODELS.put(key.withSuffix("_inner"), Map.of( + MODELS.put(inner, Map.of( "parent", "minecraft:block/inner_stairs", "textures", Map.of( - "bottom", bottom.isEmpty() ? key.toString() : bottom, - "side", side.isEmpty() ? key.toString() : side, - "top", top.isEmpty() ? key.toString() : top + "bottom", bottom.isEmpty() ? blockKey.toString() : bottom, + "side", side.isEmpty() ? blockKey.toString() : side, + "top", top.isEmpty() ? blockKey.toString() : top ))); - MODELS.put(key.withSuffix("_outer"), Map.of( + MODELS.put(outer, Map.of( "parent", "minecraft:block/outer_stairs", "textures", Map.of( - "bottom", bottom.isEmpty() ? key.toString() : bottom, - "side", side.isEmpty() ? key.toString() : side, - "top", top.isEmpty() ? key.toString() : top + "bottom", bottom.isEmpty() ? blockKey.toString() : bottom, + "side", side.isEmpty() ? blockKey.toString() : side, + "top", top.isEmpty() ? blockKey.toString() : top ))); + BLOCKSTATES.put(key, Map.of( + "variants", Map.of( + "facing=east,half=bottom,shape=inner_left", Map.of( + "model", inner.toString(), + "uvlock", true, + "y", 270 + ), + "facing=east,half=bottom,shape=inner_right", Map.of( + "model", inner.toString() + ), + "facing=east,half=bottom,shape=outer_left", Map.of( + "model", outer.toString(), + "uvlock", true, + "y", 270 + ), + "facing=east,half=bottom,shape=outer_right", Map.of( + "model", outer.toString() + ), + "facing=east,half=bottom,shape=straight", Map.of( + "model", blockKey.toString() + ), + "facing=east,half= top,shape=inner_left", Map.of( + "model", inner.toString(), + "uvlock", true, + "x", 180 + ), + "facing=east,half=top,shape=inner_right", Map.of( + "model", inner.toString(), + "uvlock", true, + "x", 180, + "y", 90 + ), + "facing=east,half=top,shape=outer_left", Map.of( + "model", outer.toString(), + "uvlock", true, + "z", 180 + ), + "facing=east,half=top,shape=outer_right", Map.of( + "model", outer.toString(), + "uvlock", true, + "x", 180, + "y", 90 + + ), + "facing=east,half= top,shape=straight", Map.of( + "model", blockKey.toString(), + "uvlock", true, + "x", 180 + ) + ) + )); return this; } diff --git a/src/main/java/org/polaris2023/wild_wind/client/WildWindClientEventHandler.java b/src/main/java/org/polaris2023/wild_wind/client/WildWindClientEventHandler.java index 9f2a3eac..cd30bac7 100644 --- a/src/main/java/org/polaris2023/wild_wind/client/WildWindClientEventHandler.java +++ b/src/main/java/org/polaris2023/wild_wind/client/WildWindClientEventHandler.java @@ -1,26 +1,17 @@ package org.polaris2023.wild_wind.client; -import net.minecraft.client.color.block.BlockColor; -import net.minecraft.core.BlockPos; import net.minecraft.util.FastColor; import net.minecraft.world.item.Items; -import net.minecraft.world.item.SpawnEggItem; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.EventPriority; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.client.event.EntityRenderersEvent; import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent; -import org.jetbrains.annotations.Nullable; import org.polaris2023.wild_wind.client.entity.abstracts.ModMobRenderer; import org.polaris2023.wild_wind.client.entity.firefly.FireflyModel; import org.polaris2023.wild_wind.client.entity.piranha.PiranhaModel; import org.polaris2023.wild_wind.client.entity.trout.TroutModel; -import org.polaris2023.wild_wind.common.block.WoolBlock; -import org.polaris2023.wild_wind.common.block.entity.WoolBlockEntity; import org.polaris2023.wild_wind.common.init.ModBlocks; import org.polaris2023.wild_wind.common.init.ModComponents; import org.polaris2023.wild_wind.common.init.ModEntities; @@ -38,14 +29,7 @@ public static void registerSlimeColor(RegisterColorHandlersEvent.Item event) { @SubscribeEvent public static void registerBlockColor(RegisterColorHandlersEvent.Block event) { - event.register((state, level, pos, tinIndex) -> { - if (level == null || pos == null) { - return FastColor.ARGB32.opaque(0); - } - WoolBlockEntity woolTile = (WoolBlockEntity) level.getBlockEntity(pos); - if (woolTile == null) return FastColor.ARGB32.opaque(0); - return FastColor.ARGB32.opaque(woolTile.rgb); - }, ModBlocks.WOOL.get()); + } @SubscribeEvent diff --git a/src/main/java/org/polaris2023/wild_wind/common/block/entity/WoolBlockEntity.java b/src/main/java/org/polaris2023/wild_wind/common/block/entity/WoolBlockEntity.java deleted file mode 100644 index 19b2b7fd..00000000 --- a/src/main/java/org/polaris2023/wild_wind/common/block/entity/WoolBlockEntity.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.polaris2023.wild_wind.common.block.entity; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import org.polaris2023.wild_wind.common.init.ModBlocks; - -/** - * @author : baka4n - * {@code @Date : 2025/02/16 21:28:52} - */ -public class WoolBlockEntity extends BlockEntity { - public int rgb = 0; - public WoolBlockEntity(BlockPos pos, BlockState blockState) { - super(ModBlocks.WOOL_TILE.get(), pos, blockState); - } - - @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.saveAdditional(tag, registries); - tag.putInt("rgb", rgb); - } - - @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - rgb = tag.getInt("rgb"); - } -} diff --git a/src/main/java/org/polaris2023/wild_wind/common/block/item/WoolBlockItem.java b/src/main/java/org/polaris2023/wild_wind/common/block/item/WoolBlockItem.java deleted file mode 100644 index bb22b5ea..00000000 --- a/src/main/java/org/polaris2023/wild_wind/common/block/item/WoolBlockItem.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.polaris2023.wild_wind.common.block.item; - -import net.minecraft.core.BlockPos; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import org.polaris2023.wild_wind.common.block.entity.WoolBlockEntity; -import org.polaris2023.wild_wind.common.init.ModComponents; - -/** - * @author : baka4n - * {@code @Date : 2025/02/16 21:46:09} - */ -public class WoolBlockItem extends BlockItem { - public WoolBlockItem(Block block, Properties properties) { - super(block, properties.component(ModComponents.COLOR, 0)); - } - - @Override - public InteractionResult place(BlockPlaceContext context) { - ItemStack itemInHand = context.getItemInHand(); - int rgb = itemInHand.getOrDefault(ModComponents.COLOR, 0); - InteractionResult place = super.place(context); - BlockPos clickedPos = context.getClickedPos(); - Level level = context.getLevel(); - - BlockEntity blockEntity = level.getBlockEntity(clickedPos); - if (blockEntity instanceof WoolBlockEntity) { - ((WoolBlockEntity) blockEntity).rgb = rgb; - blockEntity.setChanged(); - } - return place; - - - } -} diff --git a/src/main/java/org/polaris2023/wild_wind/common/init/ModBlocks.java b/src/main/java/org/polaris2023/wild_wind/common/init/ModBlocks.java index 1ea0651d..6d89c316 100644 --- a/src/main/java/org/polaris2023/wild_wind/common/init/ModBlocks.java +++ b/src/main/java/org/polaris2023/wild_wind/common/init/ModBlocks.java @@ -20,11 +20,10 @@ import org.polaris2023.annotation.modelgen.item.BasicBlockItem; import org.polaris2023.annotation.modelgen.item.BasicItem; -import org.polaris2023.wild_wind.common.block.BrittleIceBlock; +import org.polaris2023.wild_wind.common.block.*; -import org.polaris2023.wild_wind.common.block.CookingPotBlock; -import org.polaris2023.wild_wind.common.block.GlowMucusBlock; import org.polaris2023.wild_wind.common.block.entity.CookingPotBlockEntity; +import org.polaris2023.wild_wind.common.block.entity.DuckweedBlockEntity; import java.util.Arrays; @@ -91,6 +90,20 @@ public class ModBlocks { public static final DeferredItem COOKING_POT_ITEM = register("cooking_pot", COOKING_POT); + @I18n(en_us = "Sculk Jaw", zh_cn = "幽匿厄口", zh_tw = "幽匿厄口") + public static final DeferredBlock SCULK_JAW = + register("sculk_jaw", SculkJawBlock::new, BlockBehaviour.Properties.of()); + public static final DeferredItem SCULK_JAW_ITEM = + register("sculk_jaw", SCULK_JAW); + + @I18n(en_us = "Duckweed", zh_cn = "浮萍", zh_tw = "浮萍") + public static final DeferredBlock DUCKWEED = + register("duckweed", DuckweedBlock::new, BlockBehaviour.Properties.of()); + public static final DeferredHolder, BlockEntityType> DUCKWEED_TILE = + entity("duckweed", DSL.remainderType(), DuckweedBlockEntity::new, DUCKWEED); + public static final DeferredItem DUCKWEED_ITEM = + register("duckweed", DUCKWEED); + @I18n(en_us = "Brittle Ice", zh_cn = "脆冰", zh_tw = "脆冰") public static final DeferredBlock BRITTLE_ICE = register("brittle_ice", BrittleIceBlock::new, BlockBehaviour.Properties.ofFullCopy(Blocks.ICE) diff --git a/src/main/java/org/polaris2023/wild_wind/common/init/items/foods/ModBaseFoods.java b/src/main/java/org/polaris2023/wild_wind/common/init/items/foods/ModBaseFoods.java index 53321015..72c955d0 100644 --- a/src/main/java/org/polaris2023/wild_wind/common/init/items/foods/ModBaseFoods.java +++ b/src/main/java/org/polaris2023/wild_wind/common/init/items/foods/ModBaseFoods.java @@ -86,8 +86,7 @@ public enum ModBaseFoods implements Supplier, ItemLike { COOKED_FROG_LEG(p -> p .component(ModComponents.MEAT_VALUE, 0.5F) .component(ModComponents.MONSTER_VALUE, 1F)), - @I18n(en_us = "salt", zh_cn = "盐", zh_tw = "鹽") - SALT(STACK_TO_SNOW) + ; public final DeferredItem entry; diff --git a/src/main/java/org/polaris2023/wild_wind/datagen/ModRecipeProvider.java b/src/main/java/org/polaris2023/wild_wind/datagen/ModRecipeProvider.java index 2059ba5d..941dbc59 100644 --- a/src/main/java/org/polaris2023/wild_wind/datagen/ModRecipeProvider.java +++ b/src/main/java/org/polaris2023/wild_wind/datagen/ModRecipeProvider.java @@ -258,10 +258,10 @@ protected void addShapelessRecipe() { .requires(ItemTags.WOOL); })); add(shapeless(RecipeCategory.MISC, ModBlocks.SALT_BLOCK_ITEM, 1, salt_block -> { - unlockedBy(salt_block, ModBaseFoods.SALT); - salt_block.requires(ModBaseFoods.SALT, 9); + unlockedBy(salt_block, ModBaseItems.SALT); + salt_block.requires(ModBaseItems.SALT, 9); })); - add(shapeless(RecipeCategory.MISC, ModBaseFoods.SALT, 9, salt -> { + add(shapeless(RecipeCategory.MISC, ModBaseItems.SALT, 9, salt -> { unlockedBy(salt, ModBlocks.SALT_BLOCK_ITEM); salt.requires(ModBlocks.SALT_BLOCK_ITEM); })); diff --git a/src/main/java/org/polaris2023/wild_wind/datagen/loot/ModBlockLootSubProvider.java b/src/main/java/org/polaris2023/wild_wind/datagen/loot/ModBlockLootSubProvider.java index adb826a4..7c197a76 100644 --- a/src/main/java/org/polaris2023/wild_wind/datagen/loot/ModBlockLootSubProvider.java +++ b/src/main/java/org/polaris2023/wild_wind/datagen/loot/ModBlockLootSubProvider.java @@ -49,6 +49,8 @@ public void generate() { this.dropSelf(ModBlocks.AZALEA_PLANKS.get()); this.dropSelf(ModBlocks.AZALEA_SIGN.get()); this.dropSelf(ModBlocks.AZALEA_HANGING_SIGN.get()); + this.dropSelf(ModBlocks.SCULK_JAW.get()); + this.dropSelf(ModBlocks.DUCKWEED.get()); ModBlockFamilies.AZALEA_PLANKS.generateBlockLoot(this::dropSelf); } }