From 4e2b2737aa0e49ebdd8a7de1665c0219e53d493a Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 7 Jun 2023 18:50:51 +0200 Subject: [PATCH] [Feature] SmithingTemplates for Armor/Tool/Anvil and Elytra upgrades --- .../java/org/betterx/betterend/BetterEnd.java | 1 + .../complexmaterials/MetalMaterial.java | 42 +++++-- .../betterend/recipe/SmithingRecipes.java | 54 ++++++--- .../betterx/betterend/registry/EndBlocks.java | 6 +- .../betterend/registry/EndTemplates.java | 108 ++++++++++++++++++ .../assets/betterend/lang/en_us.json | 47 +++++++- .../aeternium_upgrade_smithing_template.json | 6 + .../handle_attachment_smithing_template.json | 6 + ...r_handle_attachment_smithing_template.json | 6 + .../netherite_upgrade_smithing_template.json | 6 + .../item/plate_upgrade_smithing_template.json | 6 + .../terminite_upgrade_smithing_template.json | 6 + .../thallasium_upgrade_smithing_template.json | 6 + .../item/tool_assembly_smithing_template.json | 6 + .../aeternium_upgrade_smithing_template.png | Bin 0 -> 399 bytes .../textures/item/empty_slot_anvil.png | Bin 0 -> 146 bytes .../textures/item/empty_slot_axe_head.png | Bin 0 -> 140 bytes .../textures/item/empty_slot_elytra.png | Bin 0 -> 153 bytes .../textures/item/empty_slot_hammer.png | Bin 0 -> 249 bytes .../textures/item/empty_slot_hammer_head.png | Bin 0 -> 248 bytes .../textures/item/empty_slot_handle.png | Bin 0 -> 195 bytes .../textures/item/empty_slot_hoe_head.png | Bin 0 -> 155 bytes .../textures/item/empty_slot_pickaxe_head.png | Bin 0 -> 287 bytes .../textures/item/empty_slot_plate.png | Bin 0 -> 144 bytes .../textures/item/empty_slot_shovel_head.png | Bin 0 -> 167 bytes .../textures/item/empty_slot_stick.png | Bin 0 -> 172 bytes .../textures/item/empty_slot_sword_blade.png | Bin 0 -> 240 bytes .../textures/item/empty_slot_sword_handle.png | Bin 0 -> 294 bytes .../handle_attachment_smithing_template.png | Bin 0 -> 478 bytes ...er_handle_attachment_smithing_template.png | Bin 0 -> 513 bytes .../netherite_upgrade_smithing_template.png | Bin 0 -> 455 bytes .../item/plate_upgrade_smithing_template.png | Bin 0 -> 516 bytes .../terminite_upgrade_smithing_template.png | Bin 0 -> 410 bytes .../thallasium_upgrade_smithing_template.png | Bin 0 -> 394 bytes .../item/tool_assembly_smithing_template.png | Bin 0 -> 490 bytes 35 files changed, 272 insertions(+), 34 deletions(-) create mode 100644 src/main/java/org/betterx/betterend/registry/EndTemplates.java create mode 100755 src/main/resources/assets/betterend/models/item/aeternium_upgrade_smithing_template.json create mode 100755 src/main/resources/assets/betterend/models/item/handle_attachment_smithing_template.json create mode 100755 src/main/resources/assets/betterend/models/item/leather_handle_attachment_smithing_template.json create mode 100755 src/main/resources/assets/betterend/models/item/netherite_upgrade_smithing_template.json create mode 100755 src/main/resources/assets/betterend/models/item/plate_upgrade_smithing_template.json create mode 100755 src/main/resources/assets/betterend/models/item/terminite_upgrade_smithing_template.json create mode 100755 src/main/resources/assets/betterend/models/item/thallasium_upgrade_smithing_template.json create mode 100755 src/main/resources/assets/betterend/models/item/tool_assembly_smithing_template.json create mode 100644 src/main/resources/assets/betterend/textures/item/aeternium_upgrade_smithing_template.png create mode 100644 src/main/resources/assets/betterend/textures/item/empty_slot_anvil.png create mode 100644 src/main/resources/assets/betterend/textures/item/empty_slot_axe_head.png create mode 100644 src/main/resources/assets/betterend/textures/item/empty_slot_elytra.png create mode 100644 src/main/resources/assets/betterend/textures/item/empty_slot_hammer.png create mode 100644 src/main/resources/assets/betterend/textures/item/empty_slot_hammer_head.png create mode 100644 src/main/resources/assets/betterend/textures/item/empty_slot_handle.png create mode 100644 src/main/resources/assets/betterend/textures/item/empty_slot_hoe_head.png create mode 100644 src/main/resources/assets/betterend/textures/item/empty_slot_pickaxe_head.png create mode 100644 src/main/resources/assets/betterend/textures/item/empty_slot_plate.png create mode 100644 src/main/resources/assets/betterend/textures/item/empty_slot_shovel_head.png create mode 100755 src/main/resources/assets/betterend/textures/item/empty_slot_stick.png create mode 100644 src/main/resources/assets/betterend/textures/item/empty_slot_sword_blade.png create mode 100644 src/main/resources/assets/betterend/textures/item/empty_slot_sword_handle.png create mode 100644 src/main/resources/assets/betterend/textures/item/handle_attachment_smithing_template.png create mode 100644 src/main/resources/assets/betterend/textures/item/leather_handle_attachment_smithing_template.png create mode 100644 src/main/resources/assets/betterend/textures/item/netherite_upgrade_smithing_template.png create mode 100644 src/main/resources/assets/betterend/textures/item/plate_upgrade_smithing_template.png create mode 100644 src/main/resources/assets/betterend/textures/item/terminite_upgrade_smithing_template.png create mode 100644 src/main/resources/assets/betterend/textures/item/thallasium_upgrade_smithing_template.png create mode 100644 src/main/resources/assets/betterend/textures/item/tool_assembly_smithing_template.png diff --git a/src/main/java/org/betterx/betterend/BetterEnd.java b/src/main/java/org/betterx/betterend/BetterEnd.java index 8ddc8ca0..5d5aad6c 100644 --- a/src/main/java/org/betterx/betterend/BetterEnd.java +++ b/src/main/java/org/betterx/betterend/BetterEnd.java @@ -46,6 +46,7 @@ public class BetterEnd implements ModInitializer { EndTags.register(); EndBlocks.ensureStaticallyLoaded(); EndItems.ensureStaticallyLoaded(); + EndTemplates.ensureStaticallyLoaded(); EndEnchantments.register(); EndPotions.register(); InfusionRecipe.register(); diff --git a/src/main/java/org/betterx/betterend/complexmaterials/MetalMaterial.java b/src/main/java/org/betterx/betterend/complexmaterials/MetalMaterial.java index 3f278f92..45f1458c 100644 --- a/src/main/java/org/betterx/betterend/complexmaterials/MetalMaterial.java +++ b/src/main/java/org/betterx/betterend/complexmaterials/MetalMaterial.java @@ -17,6 +17,7 @@ import org.betterx.betterend.item.tool.EndHammerItem; import org.betterx.betterend.item.tool.EndPickaxe; import org.betterx.betterend.registry.EndBlocks; import org.betterx.betterend.registry.EndItems; +import org.betterx.betterend.registry.EndTemplates; import org.betterx.worlds.together.tag.v3.TagManager; import net.minecraft.tags.BlockTags; @@ -76,13 +77,15 @@ public class MetalMaterial { public final Item boots; public final TagKey alloyingOre; + public final SmithingTemplateItem swordHandleTemplate; public static MetalMaterial makeNormal( String name, MapColor color, Tier material, ArmorMaterial armor, - int anvilAndToolLevel + int anvilAndToolLevel, + SmithingTemplateItem swordHandleTemplate ) { return new MetalMaterial( name, @@ -91,7 +94,8 @@ public class MetalMaterial { EndItems.makeEndItemSettings(), material, armor, - anvilAndToolLevel + anvilAndToolLevel, + swordHandleTemplate ); } @@ -102,7 +106,8 @@ public class MetalMaterial { float resistance, Tier material, ArmorMaterial armor, - int anvilAndToolLevel + int anvilAndToolLevel, + SmithingTemplateItem swordHandleTemplate ) { return new MetalMaterial( name, @@ -114,7 +119,8 @@ public class MetalMaterial { EndItems.makeEndItemSettings(), material, armor, - anvilAndToolLevel + anvilAndToolLevel, + swordHandleTemplate ); } @@ -123,7 +129,8 @@ public class MetalMaterial { MapColor color, Tier material, ArmorMaterial armor, - int anvilAndToolLevel + int anvilAndToolLevel, + SmithingTemplateItem swordHandleTemplate ) { return new MetalMaterial( name, @@ -132,7 +139,8 @@ public class MetalMaterial { EndItems.makeEndItemSettings(), material, armor, - anvilAndToolLevel + anvilAndToolLevel, + swordHandleTemplate ); } @@ -143,7 +151,8 @@ public class MetalMaterial { float resistance, Tier material, ArmorMaterial armor, - int anvilAndToolLevel + int anvilAndToolLevel, + SmithingTemplateItem swordHandleTemplate ) { return new MetalMaterial( name, @@ -155,7 +164,8 @@ public class MetalMaterial { EndItems.makeEndItemSettings(), material, armor, - anvilAndToolLevel + anvilAndToolLevel, + swordHandleTemplate ); } @@ -166,7 +176,8 @@ public class MetalMaterial { Properties itemSettings, Tier material, ArmorMaterial armor, - int anvilAndToolLevel + int anvilAndToolLevel, + SmithingTemplateItem swordHandleTemplate ) { BlockBehaviour.Properties lanternProperties = FabricBlockSettings.copyOf(settings) .hardness(1) @@ -174,7 +185,7 @@ public class MetalMaterial { .lightLevel((bs) -> 15) .sound(SoundType.LANTERN); final int level = material.getLevel(); - + this.swordHandleTemplate = swordHandleTemplate; rawOre = hasOre ? EndItems.registerEndItem(name + "_raw", new ModelProviderItem(itemSettings)) : null; ore = hasOre ? EndBlocks.registerBlock(name + "_ore", new BaseOreBlock(() -> rawOre, 1, 3, 1)) : null; alloyingOre = hasOre ? TagManager.ITEMS.makeTag(BetterEnd.MOD_ID, name + "_alloying") : null; @@ -416,30 +427,37 @@ public class MetalMaterial { // Tools from parts BCLRecipeBuilder.smithing(BetterEnd.makeID(name + "_hammer"), hammer) + .setTemplate(EndTemplates.HANDLE_ATTACHMENT) .setPrimaryInputAndUnlock(block) .setAddition(Items.STICK) .build(); BCLRecipeBuilder.smithing(BetterEnd.makeID(name + "_axe"), axe) + .setTemplate(EndTemplates.HANDLE_ATTACHMENT) .setPrimaryInputAndUnlock(axeHead) .setAddition(Items.STICK) .build(); BCLRecipeBuilder.smithing(BetterEnd.makeID(name + "_pickaxe"), pickaxe) + .setTemplate(EndTemplates.HANDLE_ATTACHMENT) .setPrimaryInputAndUnlock(pickaxeHead) .setAddition(Items.STICK) .build(); BCLRecipeBuilder.smithing(BetterEnd.makeID(name + "_hoe"), hoe) + .setTemplate(EndTemplates.HANDLE_ATTACHMENT) .setPrimaryInputAndUnlock(hoeHead) .setAddition(Items.STICK) .build(); BCLRecipeBuilder.smithing(BetterEnd.makeID(name + "_sword_handle"), swordHandle) - .setPrimaryInputAndUnlock(ingot) - .setAddition(Items.STICK) + .setTemplate(this.swordHandleTemplate) + .setPrimaryInputAndUnlock(Items.STICK) + .setAddition(ingot) .build(); BCLRecipeBuilder.smithing(BetterEnd.makeID(name + "_sword"), sword) + .setTemplate(EndTemplates.TOOL_ASSEMBLY) .setPrimaryInputAndUnlock(swordBlade) .setAddition(swordHandle) .build(); BCLRecipeBuilder.smithing(BetterEnd.makeID(name + "_shovel"), shovel) + .setTemplate(EndTemplates.HANDLE_ATTACHMENT) .setPrimaryInputAndUnlock(shovelHead) .setAddition(Items.STICK) .build(); diff --git a/src/main/java/org/betterx/betterend/recipe/SmithingRecipes.java b/src/main/java/org/betterx/betterend/recipe/SmithingRecipes.java index 84c0f98e..42ca5f8a 100644 --- a/src/main/java/org/betterx/betterend/recipe/SmithingRecipes.java +++ b/src/main/java/org/betterx/betterend/recipe/SmithingRecipes.java @@ -4,76 +4,96 @@ import org.betterx.bclib.recipes.BCLRecipeBuilder; import org.betterx.betterend.BetterEnd; import org.betterx.betterend.registry.EndBlocks; import org.betterx.betterend.registry.EndItems; +import org.betterx.betterend.registry.EndTemplates; import net.minecraft.world.item.Items; public class SmithingRecipes { public static void register() { - BCLRecipeBuilder.smithing(BetterEnd.makeID("aeternium_sword_handle"), EndItems.AETERNIUM_SWORD_HANDLE) - .setPrimaryInputAndUnlock(EndBlocks.TERMINITE.ingot) - .setAddition(EndItems.LEATHER_WRAPPED_STICK) - .build(); - - BCLRecipeBuilder.smithing(BetterEnd.makeID("aeternium_sword"), EndItems.AETERNIUM_SWORD) - .setPrimaryInputAndUnlock(EndItems.AETERNIUM_SWORD_BLADE) - .setAddition(EndItems.AETERNIUM_SWORD_HANDLE) - .build(); BCLRecipeBuilder.smithing(BetterEnd.makeID("aeternium_pickaxe"), EndItems.AETERNIUM_PICKAXE) + .setTemplate(EndTemplates.LEATHER_HANDLE_ATTACHMENT) .setPrimaryInputAndUnlock(EndItems.AETERNIUM_PICKAXE_HEAD) .setAddition(EndItems.LEATHER_WRAPPED_STICK) .build(); BCLRecipeBuilder.smithing(BetterEnd.makeID("aeternium_axe"), EndItems.AETERNIUM_AXE) + .setTemplate(EndTemplates.LEATHER_HANDLE_ATTACHMENT) .setPrimaryInputAndUnlock(EndItems.AETERNIUM_AXE_HEAD) .setAddition(EndItems.LEATHER_WRAPPED_STICK) .build(); BCLRecipeBuilder.smithing(BetterEnd.makeID("aeternium_shovel"), EndItems.AETERNIUM_SHOVEL) + .setTemplate(EndTemplates.LEATHER_HANDLE_ATTACHMENT) .setPrimaryInputAndUnlock(EndItems.AETERNIUM_SHOVEL_HEAD) .setAddition(EndItems.LEATHER_WRAPPED_STICK) .build(); BCLRecipeBuilder.smithing(BetterEnd.makeID("aeternium_hoe"), EndItems.AETERNIUM_HOE) + .setTemplate(EndTemplates.LEATHER_HANDLE_ATTACHMENT) .setPrimaryInputAndUnlock(EndItems.AETERNIUM_HOE_HEAD) .setAddition(EndItems.LEATHER_WRAPPED_STICK) .build(); BCLRecipeBuilder.smithing(BetterEnd.makeID("aeternium_hammer"), EndItems.AETERNIUM_HAMMER) + .setTemplate(EndTemplates.LEATHER_HANDLE_ATTACHMENT) .setPrimaryInputAndUnlock(EndItems.AETERNIUM_HAMMER_HEAD) .setAddition(EndItems.LEATHER_WRAPPED_STICK) .build(); - BCLRecipeBuilder.smithing(BetterEnd.makeID("netherite_hammer"), EndItems.NETHERITE_HAMMER) - .setPrimaryInputAndUnlock(EndItems.DIAMOND_HAMMER) - .setAddition(Items.NETHERITE_INGOT) + BCLRecipeBuilder.smithing(BetterEnd.makeID("aeternium_sword"), EndItems.AETERNIUM_SWORD) + .setTemplate(EndTemplates.TOOL_ASSEMBLY) + .setPrimaryInputAndUnlock(EndItems.AETERNIUM_SWORD_BLADE) + .setAddition(EndItems.AETERNIUM_SWORD_HANDLE) .build(); BCLRecipeBuilder.smithing(BetterEnd.makeID("aeternium_helmet"), EndItems.AETERNIUM_HELMET) + .setTemplate(EndTemplates.PLATE_UPGRADE) .setPrimaryInputAndUnlock(EndBlocks.TERMINITE.helmet) .setAddition(EndItems.AETERNIUM_FORGED_PLATE) .build(); BCLRecipeBuilder.smithing(BetterEnd.makeID("aeternium_chestplate"), EndItems.AETERNIUM_CHESTPLATE) + .setTemplate(EndTemplates.PLATE_UPGRADE) .setPrimaryInputAndUnlock(EndBlocks.TERMINITE.chestplate) .setAddition(EndItems.AETERNIUM_FORGED_PLATE) .build(); BCLRecipeBuilder.smithing(BetterEnd.makeID("aeternium_leggings"), EndItems.AETERNIUM_LEGGINGS) + .setTemplate(EndTemplates.PLATE_UPGRADE) .setPrimaryInputAndUnlock(EndBlocks.TERMINITE.leggings) .setAddition(EndItems.AETERNIUM_FORGED_PLATE) .build(); BCLRecipeBuilder.smithing(BetterEnd.makeID("aeternium_boots"), EndItems.AETERNIUM_BOOTS) + .setTemplate(EndTemplates.PLATE_UPGRADE) .setPrimaryInputAndUnlock(EndBlocks.TERMINITE.boots) .setAddition(EndItems.AETERNIUM_FORGED_PLATE) .build(); - BCLRecipeBuilder.smithing(BetterEnd.makeID("thallasium_anvil_updrade"), EndBlocks.TERMINITE.anvilBlock.asItem()) - .setPrimaryInputAndUnlock(EndBlocks.THALLASIUM.anvilBlock.asItem()) - .setAddition(EndBlocks.TERMINITE.block) + BCLRecipeBuilder.smithing(BetterEnd.makeID("aeternium_sword_handle"), EndItems.AETERNIUM_SWORD_HANDLE) + .setTemplate(EndTemplates.TERMINITE_UPGRADE) + .setPrimaryInputAndUnlock(EndItems.LEATHER_WRAPPED_STICK) + .setAddition(EndBlocks.TERMINITE.ingot) .build(); - BCLRecipeBuilder.smithing(BetterEnd.makeID("terminite_anvil_updrade"), EndBlocks.AETERNIUM_ANVIL.asItem()) - .setPrimaryInputAndUnlock(EndBlocks.TERMINITE.anvilBlock.asItem()) + + BCLRecipeBuilder.smithing(BetterEnd.makeID("thallasium_anvil_updrade"), EndBlocks.TERMINITE.anvilBlock) + .setTemplate(EndTemplates.TERMINITE_UPGRADE) + .setPrimaryInputAndUnlock(EndBlocks.THALLASIUM.anvilBlock) + .setAddition(EndBlocks.TERMINITE.ingot) + .build(); + + BCLRecipeBuilder.smithing(BetterEnd.makeID("terminite_anvil_updrade"), EndBlocks.AETERNIUM_ANVIL) + .setTemplate(EndTemplates.AETERNIUM_UPGRADE) + .setPrimaryInputAndUnlock(EndBlocks.TERMINITE.anvilBlock) .setAddition(EndItems.AETERNIUM_INGOT) .build(); + BCLRecipeBuilder.smithing(BetterEnd.makeID("armored_elytra"), EndItems.ARMORED_ELYTRA) + .setTemplate(EndTemplates.AETERNIUM_UPGRADE) .setPrimaryInputAndUnlock(Items.ELYTRA) .setAddition(EndItems.AETERNIUM_INGOT) .build(); + + + BCLRecipeBuilder.smithing(BetterEnd.makeID("netherite_hammer"), EndItems.NETHERITE_HAMMER) + .setTemplate(EndTemplates.NETHERITE_UPGRADE) + .setPrimaryInputAndUnlock(EndItems.DIAMOND_HAMMER) + .setAddition(Items.NETHERITE_INGOT) + .build(); } } diff --git a/src/main/java/org/betterx/betterend/registry/EndBlocks.java b/src/main/java/org/betterx/betterend/registry/EndBlocks.java index 6333dd08..f03d92f4 100644 --- a/src/main/java/org/betterx/betterend/registry/EndBlocks.java +++ b/src/main/java/org/betterx/betterend/registry/EndBlocks.java @@ -611,7 +611,8 @@ public class EndBlocks { MapColor.COLOR_BLUE, EndToolMaterial.THALLASIUM, EndArmorMaterial.THALLASIUM, - EndToolMaterial.THALLASIUM.getLevel() + EndToolMaterial.THALLASIUM.getLevel(), + EndTemplates.THALLASIUM_UPGRADE ); public static final MetalMaterial TERMINITE = MetalMaterial.makeOreless( @@ -621,7 +622,8 @@ public class EndBlocks { 9F, EndToolMaterial.TERMINITE, EndArmorMaterial.TERMINITE, - EndToolMaterial.TERMINITE.getLevel() + EndToolMaterial.TERMINITE.getLevel(), + EndTemplates.TERMINITE_UPGRADE ); public static final Block AETERNIUM_BLOCK = registerBlock("aeternium_block", new AeterniumBlock()); public static final Block CHARCOAL_BLOCK = registerBlock("charcoal_block", new CharcoalBlock()); diff --git a/src/main/java/org/betterx/betterend/registry/EndTemplates.java b/src/main/java/org/betterx/betterend/registry/EndTemplates.java new file mode 100644 index 00000000..7624622d --- /dev/null +++ b/src/main/java/org/betterx/betterend/registry/EndTemplates.java @@ -0,0 +1,108 @@ +package org.betterx.betterend.registry; + +import org.betterx.bclib.recipes.SmithingTemplates; +import org.betterx.betterend.BetterEnd; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.SmithingTemplateItem; + +import java.util.List; + +public class EndTemplates { + static final ResourceLocation EMPTY_SLOT_STICK = BetterEnd.makeID("item/empty_slot_stick"); + static final ResourceLocation EMPTY_SLOT_HANDLE = BetterEnd.makeID("item/empty_slot_handle"); + static final ResourceLocation EMPTY_SLOT_SWORD_HANDLE = BetterEnd.makeID("item/empty_slot_sword_handle"); + static final ResourceLocation EMPTY_SLOT_SWORD_BLADE = BetterEnd.makeID("item/empty_slot_sword_blade"); + static final ResourceLocation EMPTY_SLOT_PLATE = BetterEnd.makeID("item/empty_slot_plate"); + static final ResourceLocation EMPTY_SLOT_HAMMER = BetterEnd.makeID("item/empty_slot_hammer"); + + static final ResourceLocation EMPTY_SLOT_HAMMER_HEAD = BetterEnd.makeID("item/empty_slot_hammer_head"); + static final ResourceLocation EMPTY_SLOT_PICKAXE_HEAD = BetterEnd.makeID("item/empty_slot_pickaxe_head"); + static final ResourceLocation EMPTY_SLOT_AXE_HEAD = BetterEnd.makeID("item/empty_slot_axe_head"); + static final ResourceLocation EMPTY_SLOT_HOE_HEAD = BetterEnd.makeID("item/empty_slot_hoe_head"); + static final ResourceLocation EMPTY_SLOT_SHOVEL_HEAD = BetterEnd.makeID("item/empty_slot_shovel_head"); + static final ResourceLocation EMPTY_SLOT_ANVIL = BetterEnd.makeID("item/empty_slot_anvil"); + static final ResourceLocation EMPTY_SLOT_ELYTRA = BetterEnd.makeID("item/empty_slot_elytra"); + + + public static final SmithingTemplateItem HANDLE_ATTACHMENT = EndItems + .getItemRegistry() + .registerSmithingTemplateItem( + BetterEnd.makeID("handle_attachment"), + List.of( + EMPTY_SLOT_HAMMER_HEAD, + EMPTY_SLOT_PICKAXE_HEAD, + EMPTY_SLOT_AXE_HEAD, + EMPTY_SLOT_HOE_HEAD, + EMPTY_SLOT_SHOVEL_HEAD + ), + List.of(EMPTY_SLOT_STICK) + ); + public static final SmithingTemplateItem LEATHER_HANDLE_ATTACHMENT = EndItems + .getItemRegistry() + .registerSmithingTemplateItem( + BetterEnd.makeID("leather_handle_attachment"), + List.of( + EMPTY_SLOT_HAMMER_HEAD, + EMPTY_SLOT_PICKAXE_HEAD, + EMPTY_SLOT_AXE_HEAD, + EMPTY_SLOT_HOE_HEAD, + EMPTY_SLOT_SHOVEL_HEAD + ), + List.of(EMPTY_SLOT_HANDLE) + ); + + public static final SmithingTemplateItem TOOL_ASSEMBLY = EndItems + .getItemRegistry() + .registerSmithingTemplateItem( + BetterEnd.makeID("tool_assembly"), + List.of( + EMPTY_SLOT_SWORD_BLADE + ), + List.of(EMPTY_SLOT_SWORD_HANDLE) + ); + + public static final SmithingTemplateItem PLATE_UPGRADE = EndItems + .getItemRegistry() + .registerSmithingTemplateItem( + BetterEnd.makeID("plate_upgrade"), + SmithingTemplates.ARMOR, + List.of(EMPTY_SLOT_PLATE) + ); + + public static final SmithingTemplateItem THALLASIUM_UPGRADE = EndItems + .getItemRegistry() + .registerSmithingTemplateItem( + BetterEnd.makeID("thallasium_upgrade"), + List.of(EMPTY_SLOT_STICK), + List.of(SmithingTemplates.EMPTY_SLOT_INGOT) + ); + + public static final SmithingTemplateItem TERMINITE_UPGRADE = EndItems + .getItemRegistry() + .registerSmithingTemplateItem( + BetterEnd.makeID("terminite_upgrade"), + List.of(EMPTY_SLOT_ANVIL, EMPTY_SLOT_STICK), + List.of(SmithingTemplates.EMPTY_SLOT_INGOT) + ); + + public static final SmithingTemplateItem AETERNIUM_UPGRADE = EndItems + .getItemRegistry() + .registerSmithingTemplateItem( + BetterEnd.makeID("aeternium_upgrade"), + List.of(EMPTY_SLOT_ANVIL, EMPTY_SLOT_ELYTRA), + List.of(SmithingTemplates.EMPTY_SLOT_INGOT) + ); + + + public static final SmithingTemplateItem NETHERITE_UPGRADE = EndItems + .getItemRegistry() + .registerSmithingTemplateItem( + BetterEnd.makeID("netherite_upgrade"), + List.of(EMPTY_SLOT_HAMMER), + List.of(SmithingTemplates.EMPTY_SLOT_INGOT) + ); + + public static void ensureStaticallyLoaded() { + } +} diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index c9aca382..a78f2d6b 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -784,6 +784,38 @@ "item.betterend.shadow_berry_raw": "Shadow Berry", "item.betterend.silk_fiber": "Silk Fiber", "item.betterend.silk_moth_matrix": "Silk Moth Matrix", + "item.betterend.smithing_template.aeternium_upgrade.additions_slot_description": "Add Aeternium Ingot", + "item.betterend.smithing_template.aeternium_upgrade.applies_to": "Elytra or Terminite Anvils", + "item.betterend.smithing_template.aeternium_upgrade.base_slot_description": "Add Elytra or Terminite Anvil", + "item.betterend.smithing_template.aeternium_upgrade.ingredients": "Aeternium Ingots", + "item.betterend.smithing_template.handle_attachment.additions_slot_description": "Add a Stick", + "item.betterend.smithing_template.handle_attachment.applies_to": "Thallasium or Terminite Tool Heads", + "item.betterend.smithing_template.handle_attachment.base_slot_description": "Add Thallasium or Terminite Tool Heads", + "item.betterend.smithing_template.handle_attachment.ingredients": "Sticks", + "item.betterend.smithing_template.leather_handle_attachment.additions_slot_description": "Add a Leather Wrapped Stick", + "item.betterend.smithing_template.leather_handle_attachment.applies_to": "Aeternium Tool Heads", + "item.betterend.smithing_template.leather_handle_attachment.base_slot_description": "Add a Aeternium Tool Head", + "item.betterend.smithing_template.leather_handle_attachment.ingredients": "Leather Wrapped Sticks", + "item.betterend.smithing_template.netherite_upgrade.additions_slot_description": "Add a Netehrite Ingot", + "item.betterend.smithing_template.netherite_upgrade.applies_to": "Diamond Hammer", + "item.betterend.smithing_template.netherite_upgrade.base_slot_description": "Add a Diamond Hammer", + "item.betterend.smithing_template.netherite_upgrade.ingredients": "Netherite Ingots", + "item.betterend.smithing_template.plate_upgrade.additions_slot_description": "Add a forged Aeternium Plate", + "item.betterend.smithing_template.plate_upgrade.applies_to": "Terminite Armor", + "item.betterend.smithing_template.plate_upgrade.base_slot_description": "Add a Terminite Piece", + "item.betterend.smithing_template.plate_upgrade.ingredients": "Forged Aeternium Plates", + "item.betterend.smithing_template.terminite_upgrade.additions_slot_description": "Add a Terminite Ingot", + "item.betterend.smithing_template.terminite_upgrade.applies_to": "Stick or Thalasium Anvil", + "item.betterend.smithing_template.terminite_upgrade.base_slot_description": "Add a Stick or a Thalasium Anvil ", + "item.betterend.smithing_template.terminite_upgrade.ingredients": "Terminite Ingots", + "item.betterend.smithing_template.thallasium_upgrade.additions_slot_description": "Add a Thallasium Ingot", + "item.betterend.smithing_template.thallasium_upgrade.applies_to": "Stick", + "item.betterend.smithing_template.thallasium_upgrade.base_slot_description": "Add a Stick", + "item.betterend.smithing_template.thallasium_upgrade.ingredients": "Thallasium Ingots", + "item.betterend.smithing_template.tool_assembly.additions_slot_description": "Add a Sword Handle", + "item.betterend.smithing_template.tool_assembly.applies_to": "Sword Blades", + "item.betterend.smithing_template.tool_assembly.base_slot_description": "Add a Sword Blade", + "item.betterend.smithing_template.tool_assembly.ingredients": "Sword Handles", "item.betterend.spawn_egg_cubozoa": "Cubozoa Spawn Egg", "item.betterend.spawn_egg_dragonfly": "Dragonfly Spawn Egg", "item.betterend.spawn_egg_end_fish": "End Fish Spawn Egg", @@ -839,8 +871,9 @@ "item.minecraft.splash_potion.effect.long_end_veil": "Splash Potion Of End Veil", "item.minecraft.tipped_arrow.effect.end_veil": "Arrow Of End Veil", "item.minecraft.tipped_arrow.effect.long_end_veil": "Arrow Of End Veil", - "itemGroup.betterend.end_blocks": "Better End: Blocks", - "itemGroup.betterend.end_items": "Better End: Items", + "itemGroup.betterend.blocks": "BetterEnd: Blocks", + "itemGroup.betterend.items": "BetterEnd: Items", + "itemGroup.betterend.plants": "BetterEnd: Plants", "message.betterend.anvil_damage": "§cDamage", "message.betterend.fail_spawn": "§c§lYou need to hold 6 Amber Gems to set your spawn point", "message.betterend.set_spawn": "§b§lYour spawn point is set here", @@ -860,5 +893,13 @@ "tag.betterend.umbrella_tree_logs": "Umbrella Logs", "tooltip.armor.crystalite_boots": "Effect: Swiftness I", "tooltip.armor.crystalite_chest": "Effect: Dig Speed I", - "tooltip.armor.crystalite_set": "Set bonus: Regeneration I" + "tooltip.armor.crystalite_set": "Set bonus: Regeneration I", + "upgrade.betterend.aeternium_upgrade": "Aeternium Upgrade", + "upgrade.betterend.handle_attachment": "Combine with Handle", + "upgrade.betterend.leather_handle_attachment": "Combine with Leather Handle", + "upgrade.betterend.netherite_upgrade": "Netehrite Hammer Upgrade", + "upgrade.betterend.plate_upgrade": "Aeternium Plating", + "upgrade.betterend.terminite_upgrade": "Terminite Upgrade", + "upgrade.betterend.thallasium_upgrade": "Thallasium Sword Handle", + "upgrade.betterend.tool_assembly": "Assemble Sword" } \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/item/aeternium_upgrade_smithing_template.json b/src/main/resources/assets/betterend/models/item/aeternium_upgrade_smithing_template.json new file mode 100755 index 00000000..89b4eb5f --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/aeternium_upgrade_smithing_template.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "betterend:item/aeternium_upgrade_smithing_template" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/item/handle_attachment_smithing_template.json b/src/main/resources/assets/betterend/models/item/handle_attachment_smithing_template.json new file mode 100755 index 00000000..3939f26b --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/handle_attachment_smithing_template.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "betterend:item/handle_attachment_smithing_template" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/item/leather_handle_attachment_smithing_template.json b/src/main/resources/assets/betterend/models/item/leather_handle_attachment_smithing_template.json new file mode 100755 index 00000000..d9c08a9f --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/leather_handle_attachment_smithing_template.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "betterend:item/leather_handle_attachment_smithing_template" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/item/netherite_upgrade_smithing_template.json b/src/main/resources/assets/betterend/models/item/netherite_upgrade_smithing_template.json new file mode 100755 index 00000000..be86d2ec --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/netherite_upgrade_smithing_template.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "betterend:item/netherite_upgrade_smithing_template" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/item/plate_upgrade_smithing_template.json b/src/main/resources/assets/betterend/models/item/plate_upgrade_smithing_template.json new file mode 100755 index 00000000..2328d34e --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/plate_upgrade_smithing_template.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "betterend:item/plate_upgrade_smithing_template" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/item/terminite_upgrade_smithing_template.json b/src/main/resources/assets/betterend/models/item/terminite_upgrade_smithing_template.json new file mode 100755 index 00000000..13db2644 --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/terminite_upgrade_smithing_template.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "betterend:item/terminite_upgrade_smithing_template" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/item/thallasium_upgrade_smithing_template.json b/src/main/resources/assets/betterend/models/item/thallasium_upgrade_smithing_template.json new file mode 100755 index 00000000..d3ddb59c --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/thallasium_upgrade_smithing_template.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "betterend:item/thallasium_upgrade_smithing_template" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/item/tool_assembly_smithing_template.json b/src/main/resources/assets/betterend/models/item/tool_assembly_smithing_template.json new file mode 100755 index 00000000..2f715d23 --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/tool_assembly_smithing_template.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "betterend:item/tool_assembly_smithing_template" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/textures/item/aeternium_upgrade_smithing_template.png b/src/main/resources/assets/betterend/textures/item/aeternium_upgrade_smithing_template.png new file mode 100644 index 0000000000000000000000000000000000000000..69b0796419b6cf8c6aec96cbb2759b42f7512b0d GIT binary patch literal 399 zcmV;A0dW3_P)Px$Nl8ROR5*>Tlf6qqQ5eR5sW%~L3AyBzqD2t5psgvw$uT8b+@qnzsXw40B53d* za1p5`B8Wno+}xB)A!G$!O>7DR@#8kgJ)C>b)uo>8yytzM^SmDi{)h!{z%&cCd`>2h zl$@CYrdhD{xItiOh*VZ!=XyiLcMrB_H?dsI+o?>J(IDs| z&Vz3gL*cP-A-^6N8uXfOcS;X>O$$9f-G#-^FGbut1w~+*Fco>fJrnV6Q{70IGe&@D tG(se{ED1xW(|3(=?njZu9LVHZats>|IGeYmtY0AQvW3y0 k^@Pb$L&xe~XK@CG&3g=w37tKD9B3kgr>mdKI;Vst0Qdqe*8l(j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/item/empty_slot_elytra.png b/src/main/resources/assets/betterend/textures/item/empty_slot_elytra.png new file mode 100644 index 0000000000000000000000000000000000000000..57aa2d69fc16c8d294b47633747913fa1c238567 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|f<0XvLo9le z6C^SYbm$34N&S+a-*$C%_~I9h#R*c0To-tq#N7=!X0JVw^yA6Q50=v<46+!69QZS9 zHa47DK975X?=kWB6~S2<887N@J=K3-v#97g(0B$lPf7nZvm$6^JldYX3c?9X05>GF;*Dta+J(!80IGF|>m@Lm4?>~h{e z%B!;E1Oo*F8T^jlT%*~cprADCytwqz0xeJ1w5$Rv>wfDS>lh<$&Z=_axSM9L+5h}d z^uG-^lyW2U7YMxDzE0K9I8MK?`K#f_b+P^~S9ohbT7TpVo^Uwt#pBPCF~U!_E>>v0 xw|oct*0b~9IxwDR@wM>&s#eE6yD9!Nlg#^-`@8x)-T|&*VilJ&xZkHRI~+ z?`L`Vf9zL^+}aV~!oe_EqvoO&<5EEemllCa(4Zy79h+{&Un|=Zw4-1aPoIiFSeL-;`ro&w3o8a0{|wmf_D?&z6!KlVOg t_Re}|_g&}soU=XmzD!Q|b$H$i@pJK3x(@d4&Olc%c)I$ztaD0e0sxMfPBs7l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/item/empty_slot_hoe_head.png b/src/main/resources/assets/betterend/textures/item/empty_slot_hoe_head.png new file mode 100644 index 0000000000000000000000000000000000000000..89104ff351c90cd9794a37f6f97cc9305aaec89c GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|LOop^Lo9le z6C_xBZm>8zJO4j?V|DoYW2@NI9j^8C`fpJ@A$9R5%fX|suXmL33h!d*XRv2xW_FS7 z-XNfSGVXz>NWz0hkDG6wICao(m-qz6zovZ-3=DlIRg|s>9Bu|$z~JfX=d#Wzp$Pyg CR5hCb literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/item/empty_slot_pickaxe_head.png b/src/main/resources/assets/betterend/textures/item/empty_slot_pickaxe_head.png new file mode 100644 index 0000000000000000000000000000000000000000..0950a4642daa2748df69a87efd42a2a0a5dec233 GIT binary patch literal 287 zcmV+)0pR|LP)Px#*-1n}R5*>rlD!JTKoErI0!H(LrC1mdwGj&opXHv;N^OL^gQQi^MieWfRyG#e z35K=0^K!XBQixOCF3h*P!vX&mQwz>HsrBZ#XQ$nv7)dvao~dsX5lMq?;+zu^fhfz8 zCj{Ld=Cdho&j;f8jBOMV0EA)41Z25hvHRs}1~h^eEXLr}99UHw{qYERC#b&?QX%4P zRI?qRGaRH=w>>wNPvJ~}Z!RjN5I`73a22=279wdqaRJoDvFVC2Si}C}0rVjuKf8S0uxViuU002ovPDHLkV1oCba)1B; literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/item/empty_slot_plate.png b/src/main/resources/assets/betterend/textures/item/empty_slot_plate.png new file mode 100644 index 0000000000000000000000000000000000000000..2e301e31cf800c4ebb27969e23571fbf46ee2d7c GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|ygXeTLo9le z6C|!En3#O2&&YUDzsYoRZUB(+|4v^T53h@4i?^}f^@(dFmn$w|6N_Wk_{4P5EIGKr oTkvFH=RC2FYd&kb+c+5*q@UZaT)J}eMxdz-p00i_>zopr0C!q0+5i9m literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/item/empty_slot_shovel_head.png b/src/main/resources/assets/betterend/textures/item/empty_slot_shovel_head.png new file mode 100644 index 0000000000000000000000000000000000000000..5e604002f448e68f9bcfb3324195aeac58e19da7 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|5L7q}callPt9RcYoVu9G=yzfOJnXWLBMUGaQ8sq?OK<Px#s!2paR5*>*kTD9vKoCX$XdteMjS#R=Td}guLH>R06f4Dq93tltmRx2mB(i~B z<5uFYW?Vwbq{ZrVNmPO%pzEssX?2ArPO`c(%FM>?sHX;H5GDx9-hTk?+ q4<4Hul1z~rgVY$zvh2GB|EVWq=0oJ*jIQed00000oneEP)Px#;7LS5R5*>zlEG>MQ4B>-ie+Ye&si0!MG%y33KsmBEczM!uJ;v!Ter@pYZdo` z8z(Nx$V{ESaaDRD1VZl3O$hv3sH#opZ;hInH6lu`^6TQgm0SrtbU7LH2hnMr0$)YZ z)p83nYpkKFmU!2&-}nA^f!Shy6{w)9_L!#k-M~s%7aRF0Vi+#Zad}P_b5KpJ=lVLT zYAz;FCr>^MbyHxAm! s0H@;-=RIc;_PZ^TCP-NldFDUF1qw`t9-{Z4EC2ui07*qoM6N<$f-vcMEdT%j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/item/handle_attachment_smithing_template.png b/src/main/resources/assets/betterend/textures/item/handle_attachment_smithing_template.png new file mode 100644 index 0000000000000000000000000000000000000000..a33fcbec50ea1492d373e7f29cc6597b7b910631 GIT binary patch literal 478 zcmV<40U`d0P)Px$m`OxIR5*=|lf6qLK^Vq=ks;BAL{T9w_;HHFM!_O~ix#4th@FLnV5fLmSXh|C zs}2tfEi7ymK?`mC0$~dYDz36FBoZfn5Lw(Sju~CEEB92xyz@T4=bd3DFfg*1x&M<_0>r~U|?A}U%Dkk zBB}Rg#%Jj;Bmg3j4AesJps~G8uct0dFOr*QZ2go>^W&X2C>%XYGJ`U`-E z8ykR@A6WqIuaBz8O4@0Cb6Q2+n{07*qoM6N<$g5U+!b^rhX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/item/leather_handle_attachment_smithing_template.png b/src/main/resources/assets/betterend/textures/item/leather_handle_attachment_smithing_template.png new file mode 100644 index 0000000000000000000000000000000000000000..e760249747eabe4df683308ecca5ab03b727ce66 GIT binary patch literal 513 zcmV+c0{;DpP)Px$yGcYrR5*=&leQ5?rVM>GTylxC6EQHO+!5b70NoGM7wPK}e|);}Pn&_SwQ z929(jf)Lu$!4Ad8Q0pKV2OpTyb4#Ecl0l)1kC>r`7SZWAXu)xCIHZFkIVUo z`gJwI=Or!kxiSgR(-Ps)hqrWgG*gg8u8EYiO4i3_(6 zAWqK#XsA@TqcP^ftpH4JedO#=v6VU?)jQ0p`ePQw={X!p^!M%BGwA-Y%i!!Au8+^S zL=f4_l5~}2K38+^4VCILpX2%Jv{_cmU#g;cwmtQ#2r{4J-S2O7b~ICZ8a2!NN)c}g zn(X(>5ZKWenV%=@$ReSIuT?{fS*NZ#xVIqIHjxRiXHxtHP|CRSqWOIW(-%Yi<=2&X zfgOz*0>D?@H~Px$fk{L`R5*>TlRHZTK@^3*Xh03|nTHW~(I##YgpejpB*flAL@dO@!pgs+mG~|# z6%-3au(1gN8)L9glPtUO5m!Vp#MEl$GFHM)ZRLL3=rXJTiY^3x-RuJQ8vW~*;_AVreR zKrkT0k=}L=^Unb6PR~)&OVr12Izj!;?^~M`UMfPYFRc+zrhdNyz|q0JZC^I30Aw>6 z!r>7VNfyc2Qcxt>oSdEF)BK=XsR?_!TE+QrI0!&4cS%zN0H5#kd$0-*mhPc}3Lft$ z`KxnVeS?9w!^AJuI-OnL3w|aX0IC>T$8QF0c-&P2!y$&&_5|-4?*u@S`)u`1W2~=N x))(;))`WM3S{e)U%eEMQ{3uqlI;`SPx$zDYzuR5*=&l0it@U>Js z0XqBp(*iIJovz2zp`bb6AGSFn$=ux5cnBl~k!^ECl8Hz%;g)tzE|;z1@6XnQ4NfkX zt+v))0FmyLY3Lm7Q~-FDo)7r~0Q?}Pp#yMLYXY#heN5PC*0h{u(|ZQ)zqPgYa&ue5 zG<3o(?f)m6!8eGf`T#iEsh|{8{#_rs%m*b6fQwVz4bZfl6_sN|B$;>LHi@VD=7a2(mGMvc+u)dV#proM`RPQLj{SEAN`#2w_ z-!hdRLoJsX&g5BN$`W_fx6@rKT-BOPEc{|5F-WyuM=h7x-QTBjuJdC26OBI=-v$B@ zm1F3QI?tZ;2=nTe0>Jw>L*i)8bg{zT_A&j*Zb~b2q^7qqtBlTfLDUF z_Wh#;(4XukD#rwPx$R7pfZR5*>Tld($zVHn1Lsh3MFA(9tGi;HUxfup!IG%4xQKhPA}*c3Fmx`&HM zQGY-fR0ItMfq099g>;JO6oGPf*C2O&=hxj*&vwuEKF{~O@B1D65exH#rj;%6JCQh$ zYCH`zt!zc(Dgi@vxc+NH5{agP`9o1`Dmu+ZhtY$0eFIpUSf*8l(j07*qoM6N<$ Eg3AH3*Z=?k literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/item/thallasium_upgrade_smithing_template.png b/src/main/resources/assets/betterend/textures/item/thallasium_upgrade_smithing_template.png new file mode 100644 index 0000000000000000000000000000000000000000..1381fa74a942ef771467eac49a3e90ad61a73712 GIT binary patch literal 394 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D%zT|8YJLo9le z6BY;fBL^l z9)4>4T~bBFN8(7xQi+x)DUuRE5T>W~v;S(t>GXGpP5&j=9@|juZj^ zWaSb60~Gx5T-`Wk^EMUs!_2Q;+V-CAH`=h_e`>|&FUDO}Jq%5j{L3PvCp0Hs7w%AN zUHlnr?xDw31?`N?%*@T%9vaRof0ef_kFP&$y4p{1gG zr|yTC;zDLa7F#g`o(7Eu38T}!+Px$q)9|UR5*>Tk-tkDVHn3hcmDPgqcJt4sf80H#U;VTC8AO2Wa}t&=+^(hOLEbXaqz4TTzq5G&>UNQyp!WC*&8{O8L53R|gQf~5XnsEhEb3;FVyWC6 z@GzE~4@@y=sw`Gl(4#t;^9;AuD@+XT3x#GK0BXlfKwnz2SY6@mmnBAY58rU_5S-l~^ZoNS`{!Hy*jsP?Oxp@ScQ<9?{VKIog~Rm> z;qg$*oW0A!cp10aCa4XRX!x&DXYNSs_}a|h_CCSuA?);R_ag#WDT9gWm&jm=<&8Hi z47{MHrqYO7;QfPrnR^_NyD0$wAa!q&T(e^uq*m#?mpkA*P$(225cWF2AViL}k6)Fp gfNrp+oaSfIU&R%!P(h>NzyJUM07*qoM6N<$f*ge6AOHXW literal 0 HcmV?d00001