diff --git a/src/main/java/com/github/kill05/ArchitectTools.java b/src/main/java/com/github/kill05/ArchitectTools.java index c5cee0e..636191e 100644 --- a/src/main/java/com/github/kill05/ArchitectTools.java +++ b/src/main/java/com/github/kill05/ArchitectTools.java @@ -95,20 +95,25 @@ public static Item item(String name, String texture) { // Tool Parts - public static @NotNull ItemStack createPartStack(@NotNull ArchitectMaterial material, ArchitectPart type) { - return material.createPart(type); + public static @NotNull ItemStack createPartStack(@NotNull ArchitectMaterial material, ArchitectPart part) throws ArchitectItemException { + if(!material.isValidPart(part)) + throw new ArchitectItemException(String.format("Part '%s' can't be made out of material '%s'", part.getPartId(), material.id())); + + ItemStack item = new ItemStack(part); + setPartMaterial(item, material); + return item; } - public static @NotNull ItemStack createPartStack(@NotNull String material, @NotNull ArchitectPart part) throws InvalidMaterialException { - ArchitectMaterial architectMaterial = getMaterial(material); - if (architectMaterial == null) throw new InvalidMaterialException("Invalid material: " + material); - return architectMaterial.createPart(part); + public static @NotNull ItemStack createPartStack(@NotNull String materialName, @NotNull ArchitectPart part) throws InvalidMaterialException, ArchitectItemException { + ArchitectMaterial material = getMaterial(materialName); + if (material == null) throw new InvalidMaterialException("Invalid material: " + materialName); + return createPartStack(material, part); } - public static @NotNull ItemStack createPartStack(@NotNull ItemStack material, @NotNull ArchitectPart part) throws InvalidMaterialException { - ArchitectMaterial architectMaterial = getMaterial(material); - if (architectMaterial == null) throw new InvalidMaterialException("Invalid material: " + material); - return architectMaterial.createPart(part); + public static @NotNull ItemStack createPartStack(@NotNull ItemStack materialItem, @NotNull ArchitectPart part) throws InvalidMaterialException, ArchitectItemException { + ArchitectMaterial material = getMaterial(materialItem); + if (material == null) throw new InvalidMaterialException("Invalid material: " + materialItem); + return createPartStack(material, part); } public static @Nullable ArchitectMaterial getPartMaterial(@NotNull ItemStack item) { @@ -269,7 +274,7 @@ public void afterClientStart() { } Iterator it = walk.iterator(); - while(it.hasNext()) { + while (it.hasNext()) { Path file = it.next(); String name = file.getFileName().toString(); if (name.endsWith(".png")) { diff --git a/src/main/java/com/github/kill05/blocks/architectstation/part/PartModeOutputSlot.java b/src/main/java/com/github/kill05/blocks/architectstation/part/PartModeOutputSlot.java index 307d920..170b948 100644 --- a/src/main/java/com/github/kill05/blocks/architectstation/part/PartModeOutputSlot.java +++ b/src/main/java/com/github/kill05/blocks/architectstation/part/PartModeOutputSlot.java @@ -2,9 +2,9 @@ import com.github.kill05.ArchitectTools; import com.github.kill05.blocks.architectstation.ArchitectTableTileEntity; +import com.github.kill05.exceptions.ArchitectItemException; +import com.github.kill05.exceptions.InvalidMaterialException; import com.github.kill05.inventory.OutputInventory; -import com.github.kill05.items.part.ArchitectPart; -import com.github.kill05.materials.ArchitectMaterial; import com.github.kill05.utils.ItemUtils; import net.minecraft.core.item.ItemStack; import net.minecraft.core.player.inventory.IInventory; @@ -52,15 +52,15 @@ private OutputSlotInventory(ArchitectTableTileEntity tile) { @Override public @Nullable ItemStack getOutput() { - ArchitectPart part = tile.getSelectedPart(); - ItemStack materialItem = tile.getPartInventory().getStackInSlot(1); - ArchitectMaterial material = materialItem != null ? ArchitectTools.getMaterial(materialItem) : null; + if(tile.getSelectedPart() == null) return null; + if(!ItemUtils.compare(tile.getPartInventory().getStackInSlot(0), ArchitectTools.BLANK_PATTERN)) return null; - boolean hasOutput = - ItemUtils.compare(tile.getPartInventory().getStackInSlot(0), ArchitectTools.BLANK_PATTERN) && - part != null && material != null; - - return hasOutput ? material.createPart(part) : null; + try { + ItemStack materialItem = tile.getPartInventory().getStackInSlot(1); + return ArchitectTools.createPartStack(materialItem, tile.getSelectedPart()); + } catch (InvalidMaterialException | ArchitectItemException e) { + return null; + } } } } diff --git a/src/main/java/com/github/kill05/materials/ArchitectMaterial.java b/src/main/java/com/github/kill05/materials/ArchitectMaterial.java index dc7ff14..6296b0c 100644 --- a/src/main/java/com/github/kill05/materials/ArchitectMaterial.java +++ b/src/main/java/com/github/kill05/materials/ArchitectMaterial.java @@ -4,8 +4,8 @@ import com.github.kill05.MiningLevel; import com.github.kill05.items.part.ArchitectPart; import com.github.kill05.items.part.PartType; -import com.github.kill05.items.part.statistics.PartStatistics; import com.github.kill05.items.part.statistics.PartStatistic; +import com.github.kill05.items.part.statistics.PartStatistics; import net.minecraft.core.block.Block; import net.minecraft.core.data.registry.Registries; import net.minecraft.core.data.registry.Registry; @@ -16,8 +16,8 @@ import org.jetbrains.annotations.NotNull; import java.awt.*; -import java.util.*; import java.util.List; +import java.util.*; public class ArchitectMaterial { @@ -102,13 +102,6 @@ public ArchitectMaterial(String id, String color) { } - public @NotNull ItemStack createPart(ArchitectPart part) { - ItemStack item = new ItemStack(part); - ArchitectTools.setPartMaterial(item, this); - return item; - } - - public ArchitectMaterial addItems(IItemConvertible... items) { for (IItemConvertible item : items) { this.items.add(item.asItem().getDefaultStack()); @@ -176,6 +169,14 @@ public PartStatistics getExtraStatistics() { return getStatistics(PartType.EXTRA); } + public boolean isValidPart(ArchitectPart part) { + for (PartType type : part.getValidTypes()) { + if(getStatistics(type) != null) return true; + } + + return false; + } + public String getTranslatedName() { return I18n.getInstance().translateNameKey("material." + ArchitectTools.MOD_ID + "." + id());