From e5bc16320c278219b4e184054bf889ae9e4de614 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 30 May 2023 18:24:33 +0200 Subject: [PATCH] [Feature] Added Smithing Template for Netherite Fire Bowls --- .../bclib/recipes/SmithingTemplates.java | 84 +++++++++++++++++++ .../betterx/bclib/registry/ItemRegistry.java | 17 ++++ 2 files changed, 101 insertions(+) create mode 100644 src/main/java/org/betterx/bclib/recipes/SmithingTemplates.java diff --git a/src/main/java/org/betterx/bclib/recipes/SmithingTemplates.java b/src/main/java/org/betterx/bclib/recipes/SmithingTemplates.java new file mode 100644 index 00000000..359a4ef1 --- /dev/null +++ b/src/main/java/org/betterx/bclib/recipes/SmithingTemplates.java @@ -0,0 +1,84 @@ +package org.betterx.bclib.recipes; + +import net.minecraft.ChatFormatting; +import net.minecraft.Util; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.SmithingTemplateItem; + +import java.util.List; + +public class SmithingTemplates { + public static final ChatFormatting TITLE_FORMAT = ChatFormatting.GRAY; + public static final ChatFormatting DESCRIPTION_FORMAT = ChatFormatting.BLUE; + + public static final ResourceLocation EMPTY_SLOT_INGOT = new ResourceLocation("item/empty_slot_ingot"); + + public static Builder create(ResourceLocation id) { + return new Builder(id); + } + + public static class Builder { + private final ResourceLocation ID; + List baseSlotEmptyIcons; + List additionalSlotEmptyIcons; + + protected Builder(ResourceLocation id) { + ID = id; + } + + public Builder setBaseSlotEmptyIcons(List baseSlotEmptyIcons) { + this.baseSlotEmptyIcons = baseSlotEmptyIcons; + return this; + } + + public Builder setAdditionalSlotEmptyIcons(List additionalSlotEmptyIcons) { + this.additionalSlotEmptyIcons = additionalSlotEmptyIcons; + return this; + } + + public SmithingTemplateItem build() { + if (baseSlotEmptyIcons == null || baseSlotEmptyIcons.isEmpty()) { + throw new IllegalStateException("Base slot empty icons must contain at least one icon"); + } + if (additionalSlotEmptyIcons == null || additionalSlotEmptyIcons.isEmpty()) { + throw new IllegalStateException("Additional slot empty icons must contain at least one icon"); + } + + + return new SmithingTemplateItem( + Component.translatable(Util.makeDescriptionId( + "item", + new ResourceLocation(ID.getNamespace(), "smithing_template." + ID.getPath() + ".applies_to") + )).withStyle(DESCRIPTION_FORMAT), + Component.translatable(Util.makeDescriptionId( + "item", + new ResourceLocation( + ID.getNamespace(), + "smithing_template." + ID.getPath() + ".ingredients" + ) + )).withStyle(DESCRIPTION_FORMAT), + Component.translatable(Util.makeDescriptionId( + "upgrade", + ID + )).withStyle(TITLE_FORMAT), + Component.translatable(Util.makeDescriptionId( + "item", + new ResourceLocation( + ID.getNamespace(), + "smithing_template." + ID.getPath() + ".base_slot_description" + ) + )), + Component.translatable(Util.makeDescriptionId( + "item", + new ResourceLocation( + ID.getNamespace(), + "smithing_template." + ID.getPath() + ".additions_slot_description" + ) + )), + baseSlotEmptyIcons, + additionalSlotEmptyIcons + ); + } + } +} diff --git a/src/main/java/org/betterx/bclib/registry/ItemRegistry.java b/src/main/java/org/betterx/bclib/registry/ItemRegistry.java index fa8861a9..992feffe 100644 --- a/src/main/java/org/betterx/bclib/registry/ItemRegistry.java +++ b/src/main/java/org/betterx/bclib/registry/ItemRegistry.java @@ -10,6 +10,7 @@ import org.betterx.bclib.items.tool.BaseHoeItem; import org.betterx.bclib.items.tool.BasePickaxeItem; import org.betterx.bclib.items.tool.BaseShearsItem; import org.betterx.bclib.models.RecordItemModelProvider; +import org.betterx.bclib.recipes.SmithingTemplates; import org.betterx.worlds.together.tag.v3.CommonItemTags; import org.betterx.worlds.together.tag.v3.TagManager; import org.betterx.worlds.together.tag.v3.ToolTags; @@ -30,6 +31,8 @@ import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.*; import net.minecraft.world.level.block.DispenserBlock; +import java.util.List; + public class ItemRegistry extends BaseRegistry { public ItemRegistry(PathConfig config) { super(config); @@ -47,6 +50,20 @@ public class ItemRegistry extends BaseRegistry { return item; } + public SmithingTemplateItem registerSmithingTemplateItem( + ResourceLocation id, + List baseSlotEmptyIcons, + List additionalSlotEmptyIcons + ) { + final SmithingTemplateItem item = SmithingTemplates + .create(id) + .setBaseSlotEmptyIcons(baseSlotEmptyIcons) + .setAdditionalSlotEmptyIcons(additionalSlotEmptyIcons) + .build(); + register(new ResourceLocation(id.getNamespace(), id.getPath() + "_smithing_template"), item); + return item; + } + public Item register(ResourceLocation itemId) { return register(itemId, new ModelProviderItem(makeItemSettings())); }