Search in sources :

Example 1 with MalformedRecipeItemException

use of com.codetaylor.mc.athenaeum.parser.recipe.item.MalformedRecipeItemException in project artisan-worktables by codetaylor.

the class ModuleTools method onRegister.

@Override
public void onRegister(Registry registry) {
    super.onRegister(registry);
    List<String> allowedToolTypeList = new ArrayList<>(Arrays.asList(ModuleToolsConfig.ENABLED_TOOL_TYPES));
    if (allowedToolTypeList.isEmpty()) {
        // User has disabled all tool types.
        return;
    }
    if (this.materialList.isEmpty()) {
        // User has disabled all tool materials.
        return;
    }
    for (EnumWorktableToolType type : EnumWorktableToolType.values()) {
        String typeName = type.getName();
        if (!allowedToolTypeList.contains(typeName)) {
            // User has disabled this tool type.
            continue;
        }
        for (CustomMaterial material : this.materialList) {
            String materialName = material.getDataCustomMaterial().getName();
            ItemWorktableToolBase item = new ItemWorktableTool(type, material);
            this.registerTool(registry, typeName, materialName, item);
        }
        ArtisanCustomToolMaterialRegistrationEvent event = new ArtisanCustomToolMaterialRegistrationEvent();
        MinecraftForge.EVENT_BUS.post(event);
        List<CustomToolMaterialRegistrationEntry> materialList = event.getMaterialList();
        CustomMaterialConverter customMaterialConverter = new CustomMaterialConverter(RecipeItemParser.INSTANCE);
        for (CustomToolMaterialRegistrationEntry entry : materialList) {
            try {
                ICustomToolMaterial material = entry.getMaterial();
                ICustomToolProvider provider = entry.getProvider();
                CustomMaterial customMaterial = customMaterialConverter.convert(material);
                ItemWorktableToolBase item = provider.get(type, customMaterial);
                String materialName = customMaterial.getDataCustomMaterial().getName();
                this.registerTool(registry, typeName, materialName, item);
            } catch (MalformedRecipeItemException e) {
                ModuleTools.LOGGER.error("", e);
            }
        }
    }
    registry.registerItemRegistrationStrategy(forgeRegistry -> {
        if (ModuleToolsConfig.ENABLE_TOOL_TYPE_ORE_DICT_GROUPS) {
            for (ItemWorktableToolBase item : this.registeredToolList) {
                ItemStack itemStack = new ItemStack(item, 1, OreDictionary.WILDCARD_VALUE);
                OreDictionary.registerOre(ModuleToolsConfig.TOOL_BY_TYPE_ORE_DICT_PREFIX + item.getType().getOreDictSuffix(), itemStack);
            }
        }
        if (ModuleToolsConfig.ENABLE_TOOL_MATERIAL_ORE_DICT_GROUPS) {
            for (ItemWorktableToolBase item : this.registeredToolList) {
                ItemStack itemStack = new ItemStack(item, 1, OreDictionary.WILDCARD_VALUE);
                OreDictionary.registerOre(item.getMaterial().getDataCustomMaterial().getOreDictKey(), itemStack);
            }
        }
    });
}
Also used : ItemWorktableToolBase(com.codetaylor.mc.artisanworktables.api.tool.ItemWorktableToolBase) ArrayList(java.util.ArrayList) ArtisanCustomToolMaterialRegistrationEvent(com.codetaylor.mc.artisanworktables.api.event.ArtisanCustomToolMaterialRegistrationEvent) CustomToolMaterialRegistrationEntry(com.codetaylor.mc.artisanworktables.api.tool.CustomToolMaterialRegistrationEntry) ICustomToolProvider(com.codetaylor.mc.artisanworktables.api.tool.ICustomToolProvider) MalformedRecipeItemException(com.codetaylor.mc.athenaeum.parser.recipe.item.MalformedRecipeItemException) ItemWorktableTool(com.codetaylor.mc.artisanworktables.modules.tools.item.ItemWorktableTool) ICustomToolMaterial(com.codetaylor.mc.artisanworktables.api.tool.ICustomToolMaterial) ItemStack(net.minecraft.item.ItemStack) EnumWorktableToolType(com.codetaylor.mc.artisanworktables.api.tool.reference.EnumWorktableToolType) CustomMaterial(com.codetaylor.mc.artisanworktables.api.internal.tool.CustomMaterial)

Example 2 with MalformedRecipeItemException

use of com.codetaylor.mc.athenaeum.parser.recipe.item.MalformedRecipeItemException in project artisan-worktables by codetaylor.

the class CustomMaterialConverter method convert.

public CustomMaterial convert(DataCustomMaterial data) throws MalformedRecipeItemException {
    // Convert tool material
    Item.ToolMaterial toolMaterial = EnumHelper.addToolMaterial("artisanworktables:" + data.getName().toUpperCase(), data.getHarvestLevel(), data.getMaxUses(), data.getEfficiency(), data.getDamage(), data.getEnchantability());
    // Convert color
    Integer colorInt = Integer.decode("0x" + data.getColor());
    int color = new Color(colorInt).getRGB();
    // Convert ingredient
    ParseResult parseResult = this.recipeItemParser.parse(data.getIngredientString());
    if (parseResult == ParseResult.NULL) {
        throw new MalformedRecipeItemException("Unable to parse ingredient [" + data.getIngredientString() + "] for material [" + data.getName() + "]");
    }
    Object ingredient;
    if ("ore".equals(parseResult.getDomain())) {
        ingredient = parseResult.getPath();
    } else {
        Item item = ForgeRegistries.ITEMS.getValue(new ResourceLocation(parseResult.getDomain(), parseResult.getPath()));
        if (item == null) {
            throw new MalformedRecipeItemException("Unable to find registered item: " + parseResult.toString());
        }
        if (parseResult.getMeta() == OreDictionary.WILDCARD_VALUE) {
            throw new MalformedRecipeItemException("Wildcard value not accepted for tool material ingredients: " + parseResult.toString());
        }
        ingredient = new ItemStack(item, 1, parseResult.getMeta());
    }
    return new CustomMaterial(data, toolMaterial, color, ingredient);
}
Also used : Item(net.minecraft.item.Item) ParseResult(com.codetaylor.mc.athenaeum.parser.recipe.item.ParseResult) ResourceLocation(net.minecraft.util.ResourceLocation) MalformedRecipeItemException(com.codetaylor.mc.athenaeum.parser.recipe.item.MalformedRecipeItemException) ItemStack(net.minecraft.item.ItemStack)

Example 3 with MalformedRecipeItemException

use of com.codetaylor.mc.athenaeum.parser.recipe.item.MalformedRecipeItemException in project artisan-worktables by codetaylor.

the class ModuleToolsRecipes method register.

/**
 * Iterates through all given items in the tool list and registers a recipe for each.
 *
 * @param registry the recipe registry
 * @param modId    the mod id
 * @param toolList the tool list
 */
public static void register(IForgeRegistry<IRecipe> registry, String modId, List<ItemWorktableToolBase> toolList) {
    RecipeItemParser recipeItemParser = new RecipeItemParser();
    for (ItemWorktableToolBase item : toolList) {
        try {
            // Convert ingredient
            String ingredientString = item.getMaterial().getIngredientString();
            ParseResult parseResult = recipeItemParser.parse(ingredientString);
            if (parseResult == ParseResult.NULL) {
                throw new MalformedRecipeItemException("Unable to parse ingredient [" + item.getMaterial().getIngredientString() + "] for material [" + item.getMaterial() + "]");
            }
            Object ingredient;
            if ("ore".equals(parseResult.getDomain())) {
                ingredient = parseResult.getPath();
            } else {
                Item parsedItem = ForgeRegistries.ITEMS.getValue(new ResourceLocation(parseResult.getDomain(), parseResult.getPath()));
                if (parsedItem == null) {
                    throw new MalformedRecipeItemException("Unable to find registered item: " + parseResult.toString());
                }
                if (parseResult.getMeta() == OreDictionary.WILDCARD_VALUE) {
                    throw new MalformedRecipeItemException("Wildcard value not accepted for tool material ingredients: " + parseResult.toString());
                }
                ingredient = new ItemStack(parsedItem, 1, parseResult.getMeta());
            }
            Object[] recipeDefinition = ModuleToolsRecipes.getRecipeDefinition(item.getType(), ingredient);
            if (recipeDefinition == null) {
                throw new RuntimeException("Missing recipe definition for tool type: " + item.getType().getName());
            }
            ShapedOreRecipe recipe = new ShapedOreRecipe(null, item, recipeDefinition);
            recipe.setRegistryName(new ResourceLocation(modId, "recipe." + item.getName() + "." + item.getMaterial().getDataCustomMaterial().getName()));
            registry.register(recipe);
        } catch (Exception e) {
            throw new RuntimeException("Error registering recipe", e);
        }
    }
}
Also used : ItemWorktableToolBase(com.codetaylor.mc.artisanworktables.api.tool.ItemWorktableToolBase) RecipeItemParser(com.codetaylor.mc.athenaeum.parser.recipe.item.RecipeItemParser) ParseResult(com.codetaylor.mc.athenaeum.parser.recipe.item.ParseResult) ShapedOreRecipe(net.minecraftforge.oredict.ShapedOreRecipe) MalformedRecipeItemException(com.codetaylor.mc.athenaeum.parser.recipe.item.MalformedRecipeItemException) Item(net.minecraft.item.Item) ResourceLocation(net.minecraft.util.ResourceLocation) MalformedRecipeItemException(com.codetaylor.mc.athenaeum.parser.recipe.item.MalformedRecipeItemException) ItemStack(net.minecraft.item.ItemStack)

Example 4 with MalformedRecipeItemException

use of com.codetaylor.mc.athenaeum.parser.recipe.item.MalformedRecipeItemException in project artisan-worktables by codetaylor.

the class CustomMaterialListConverter method convert.

public List<CustomMaterial> convert(DataCustomMaterialList data, Logger logger) {
    List<CustomMaterial> result = new ArrayList<>();
    List<DataCustomMaterial> list = data.getList();
    for (ICustomToolMaterial dataCustomMaterial : list) {
        try {
            this.customMaterialValidator.validate(dataCustomMaterial);
        } catch (CustomMaterialValidationException e) {
            logger.error("", e);
            continue;
        }
        try {
            result.add(this.customMaterialConverter.convert(dataCustomMaterial));
        } catch (MalformedRecipeItemException e) {
            logger.error("", e);
        }
    }
    return result;
}
Also used : ArrayList(java.util.ArrayList) MalformedRecipeItemException(com.codetaylor.mc.athenaeum.parser.recipe.item.MalformedRecipeItemException) ICustomToolMaterial(com.codetaylor.mc.artisanworktables.api.tool.ICustomToolMaterial) CustomMaterial(com.codetaylor.mc.artisanworktables.api.internal.tool.CustomMaterial)

Aggregations

MalformedRecipeItemException (com.codetaylor.mc.athenaeum.parser.recipe.item.MalformedRecipeItemException)4 ItemStack (net.minecraft.item.ItemStack)3 CustomMaterial (com.codetaylor.mc.artisanworktables.api.internal.tool.CustomMaterial)2 ICustomToolMaterial (com.codetaylor.mc.artisanworktables.api.tool.ICustomToolMaterial)2 ItemWorktableToolBase (com.codetaylor.mc.artisanworktables.api.tool.ItemWorktableToolBase)2 ParseResult (com.codetaylor.mc.athenaeum.parser.recipe.item.ParseResult)2 ArrayList (java.util.ArrayList)2 Item (net.minecraft.item.Item)2 ResourceLocation (net.minecraft.util.ResourceLocation)2 ArtisanCustomToolMaterialRegistrationEvent (com.codetaylor.mc.artisanworktables.api.event.ArtisanCustomToolMaterialRegistrationEvent)1 CustomToolMaterialRegistrationEntry (com.codetaylor.mc.artisanworktables.api.tool.CustomToolMaterialRegistrationEntry)1 ICustomToolProvider (com.codetaylor.mc.artisanworktables.api.tool.ICustomToolProvider)1 EnumWorktableToolType (com.codetaylor.mc.artisanworktables.api.tool.reference.EnumWorktableToolType)1 ItemWorktableTool (com.codetaylor.mc.artisanworktables.modules.tools.item.ItemWorktableTool)1 RecipeItemParser (com.codetaylor.mc.athenaeum.parser.recipe.item.RecipeItemParser)1 ShapedOreRecipe (net.minecraftforge.oredict.ShapedOreRecipe)1