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);
}
}
});
}
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);
}
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);
}
}
}
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;
}
Aggregations