[Features] Equipment Sets

This commit is contained in:
Frank 2022-07-31 14:48:40 +02:00
parent fde244965c
commit e5da06a1e1
2 changed files with 141 additions and 0 deletions

View file

@ -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<I extends Item> {
private final Function<Tier, I> creator;
private I item;
public EquipmentDescription(Function<Tier, I> 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;
}
}

View file

@ -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<String, EquipmentDescription<?>> 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 <I extends Item> void add(String slot, EquipmentDescription<I> 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<String, EquipmentDescription<?>> desc) {
return new ResourceLocation(modID, prefix + "_" + desc.getKey());
}
public <I extends Item> I getSlot(String slot) {
return (I) descriptions.get(slot).getItem();
}
}