From e5da06a1e12905b9636b3b6bee80a24752b89480 Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 31 Jul 2022 14:48:40 +0200 Subject: [PATCH] [Features] Equipment Sets --- .../items/complex/EquipmentDescription.java | 81 +++++++++++++++++++ .../bclib/items/complex/EquipmentSet.java | 60 ++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 src/main/java/org/betterx/bclib/items/complex/EquipmentDescription.java create mode 100644 src/main/java/org/betterx/bclib/items/complex/EquipmentSet.java diff --git a/src/main/java/org/betterx/bclib/items/complex/EquipmentDescription.java b/src/main/java/org/betterx/bclib/items/complex/EquipmentDescription.java new file mode 100644 index 00000000..68c14f4b --- /dev/null +++ b/src/main/java/org/betterx/bclib/items/complex/EquipmentDescription.java @@ -0,0 +1,81 @@ +package org.betterx.bclib.items.complex; + +import org.betterx.bclib.items.BaseArmorItem; +import org.betterx.bclib.recipes.GridRecipe; +import org.betterx.bclib.registry.ItemRegistry; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.*; +import net.minecraft.world.level.ItemLike; + +import java.util.function.Function; + +public class EquipmentDescription { + private final Function creator; + private I item; + + public EquipmentDescription(Function creator) { + this.creator = creator; + } + + public void init(ResourceLocation id, ItemRegistry itemsRegistry, Tier material, ItemLike stick) { + item = creator.apply(material); + itemsRegistry.registerTool(id, item); + + addRecipe(id, item, material, stick); + } + + public void addRecipe(ResourceLocation id, Item tool, Tier material, ItemLike stick) { + if (material == null) return; + var repair = material.getRepairIngredient(); + if (repair == null) return; + var repairItems = repair.getItems(); + if (repairItems == null || repairItems.length == 0) return; + final ItemLike ingot = repairItems[0].getItem(); + + var builder = GridRecipe + .make(id, tool) + .addMaterial('#', ingot); + + if (buildRecipe(tool, stick, builder)) return; + builder + .setGroup(id.getPath()) + .build(); + + } + + protected boolean buildRecipe(Item tool, ItemLike stick, GridRecipe builder) { + if (tool instanceof ShearsItem) { + builder.setShape(" #", "# "); + } else if (tool instanceof BaseArmorItem bai) { + if (bai.getSlot() == EquipmentSlot.FEET) { + builder.setShape("# #", "# #"); + } else if (bai.getSlot() == EquipmentSlot.HEAD) { + builder.setShape("###", "# #"); + } else if (bai.getSlot() == EquipmentSlot.CHEST) { + builder.setShape("# #", "###", "###"); + } else if (bai.getSlot() == EquipmentSlot.LEGS) { + builder.setShape("###", "# #", "# #"); + } else return true; + } else { + builder.addMaterial('I', stick); + if (tool instanceof PickaxeItem) { + builder.setShape("###", " I ", " I "); + } else if (tool instanceof AxeItem) { + builder.setShape("##", "#I", " I"); + } else if (tool instanceof HoeItem) { + builder.setShape("##", " I", " I"); + } else if (tool instanceof ShovelItem) { + builder.setShape("#", "I", "I"); + } else if (tool instanceof SwordItem) { + builder.setShape("#", "#", "I"); + } else return true; + } + return false; + } + + public I getItem() { + return item; + } +} diff --git a/src/main/java/org/betterx/bclib/items/complex/EquipmentSet.java b/src/main/java/org/betterx/bclib/items/complex/EquipmentSet.java new file mode 100644 index 00000000..85f30fbd --- /dev/null +++ b/src/main/java/org/betterx/bclib/items/complex/EquipmentSet.java @@ -0,0 +1,60 @@ +package org.betterx.bclib.items.complex; + +import org.betterx.bclib.registry.ItemRegistry; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Tier; +import net.minecraft.world.level.ItemLike; + +import java.util.HashMap; +import java.util.Map; +import org.jetbrains.annotations.NotNull; + +public abstract class EquipmentSet { + public final Tier material; + public final String prefix; + public final String modID; + public final ItemLike stick; + + public static final String PICKAXE_SLOT = "pickaxe"; + public static final String AXE_SLOT = "axe"; + public static final String SHOVEL_SLOT = "shovel"; + public static final String SWORD_SLOT = "sword"; + public static final String HOE_SLOT = "hoe"; + public static final String SHEARS_SLOT = "shears"; + public static final String HELMET_SLOT = "helmet"; + public static final String CHESTPLATE_SLOT = "chestplate"; + public static final String LEGGINS_SLOT = "leggings"; + public static final String BOOTS_SLOT = "boots"; + + private final Map> descriptions = new HashMap<>(); + + public EquipmentSet(Tier material, String modID, String prefix, ItemLike stick) { + this.material = material; + this.prefix = prefix; + this.modID = modID; + this.stick = stick; + } + + protected void add(String slot, EquipmentDescription desc) { + descriptions.put(slot, desc); + } + + public EquipmentSet init(ItemRegistry itemsRegistry) { + for (var desc : descriptions.entrySet()) { + desc.getValue() + .init(buildID(desc), itemsRegistry, material, stick); + } + return this; + } + + @NotNull + protected ResourceLocation buildID(Map.Entry> desc) { + return new ResourceLocation(modID, prefix + "_" + desc.getKey()); + } + + public I getSlot(String slot) { + return (I) descriptions.get(slot).getItem(); + } +}