From 5a3fa7ef75cca97cfed83fb16fa87b09effcc9df Mon Sep 17 00:00:00 2001 From: bdew Date: Tue, 29 Jul 2014 16:19:05 +0300 Subject: [PATCH] Added a statement to check if an API is present in configs --- src/net/bdew/lib/recipes/DataClasses.scala | 10 ++++++++++ src/net/bdew/lib/recipes/RecipeLoader.scala | 10 ++++++++++ src/net/bdew/lib/recipes/RecipeParser.scala | 6 +++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/net/bdew/lib/recipes/DataClasses.scala b/src/net/bdew/lib/recipes/DataClasses.scala index b647c3d..a64893c 100644 --- a/src/net/bdew/lib/recipes/DataClasses.scala +++ b/src/net/bdew/lib/recipes/DataClasses.scala @@ -125,6 +125,16 @@ case class StClassMacro(id: String, cls: String) extends DelayedStatement */ case class StIfHaveMod(mod: String, thn: List[Statement], els: List[Statement]) extends Statement +/** + * Conditional block - checks if api is loaded + * Syntax: ifAPI {string} { {statements} } [else { {statements} }] + * Parser: [[net.bdew.lib.recipes.RecipeParser.ifApi]] + * @param mod API modid + * @param thn Statements to run if present + * @param els Statements to run otherwise + */ +case class StIfHaveAPI(mod: String, thn: List[Statement], els: List[Statement]) extends Statement + /** * Conditional block - checks if mod is loaded * Can contain only delayed statements diff --git a/src/net/bdew/lib/recipes/RecipeLoader.scala b/src/net/bdew/lib/recipes/RecipeLoader.scala index e82e3ef..6e91b96 100644 --- a/src/net/bdew/lib/recipes/RecipeLoader.scala +++ b/src/net/bdew/lib/recipes/RecipeLoader.scala @@ -11,6 +11,7 @@ package net.bdew.lib.recipes import java.io.Reader +import cpw.mods.fml.common.ModAPIManager import cpw.mods.fml.common.registry.GameRegistry import net.bdew.lib.{BdLib, Misc} import net.minecraft.block.Block @@ -220,6 +221,15 @@ class RecipeLoader { processStatementsSafe(els) } + case StIfHaveAPI(mod, thn, els) => + if (ModAPIManager.INSTANCE.hasAPI(mod)) { + BdLib.logInfo("ifAPI: %s found", mod) + processStatementsSafe(thn) + } else { + BdLib.logInfo("ifAPI: %s not found", mod) + processStatementsSafe(els) + } + case StClearRecipes(res) => BdLib.logInfo("Clearing recipes that produce %s", res) delayedStatements = delayedStatements.filter({ diff --git a/src/net/bdew/lib/recipes/RecipeParser.scala b/src/net/bdew/lib/recipes/RecipeParser.scala index c58c38a..fd90b02 100644 --- a/src/net/bdew/lib/recipes/RecipeParser.scala +++ b/src/net/bdew/lib/recipes/RecipeParser.scala @@ -82,6 +82,10 @@ class RecipeParser extends JavaTokenParsers { case mod ~ thn ~ els => new StIfHaveMod(mod, thn, els.getOrElse(List.empty[Statement])) } + def ifAPI = ("ifAPI" ~> str) ~ ("{" ~> statements <~ "}") ~ ("else" ~> "{" ~> statements <~ "}").? ^^ { + case mod ~ thn ~ els => new StIfHaveAPI(mod, thn, els.getOrElse(List.empty[Statement])) + } + def ifOreDict = ("ifOreDict" ~> str) ~ ("{" ~> delayedStatements <~ "}") ~ ("else" ~> "{" ~> delayedStatements <~ "}").? ^^ { case id ~ thn ~ els => new StIfHaveOD(id, thn, els.getOrElse(List.empty[DelayedStatement])) } @@ -119,7 +123,7 @@ class RecipeParser extends JavaTokenParsers { | recipeSmelting ) - def statement: Parser[Statement] = delayedStatement | ifMod | clearRecipes + def statement: Parser[Statement] = delayedStatement | ifMod | ifAPI | clearRecipes def statements = statement.* def delayedStatements = delayedStatement.*