From 7a22bc6cd08840c1a4a1ee5ddcbf32beb982171f Mon Sep 17 00:00:00 2001 From: sealedinterface Date: Thu, 19 May 2016 19:02:29 -0700 Subject: [PATCH] I'M BACK BABY! JSON loading for smelter complete. --- .../config/BBConfigFolderLoader.java | 6 +- .../config/json/JsonKilnRecipeHandler.java | 2 +- .../config/json/JsonSmelterRecipe.java | 86 ++++++++++++++++ .../config/json/JsonSmelterRecipeHandler.java | 26 +++++ .../config/json/SmelterConfig.java | 98 +++++++++++++++++++ .../event/BBEventHandler.java | 7 +- .../register/recipe/SmelterRecipe.java | 2 + 7 files changed, 222 insertions(+), 5 deletions(-) create mode 100644 src/main/java/net/einsteinsci/betterbeginnings/config/json/JsonSmelterRecipe.java create mode 100644 src/main/java/net/einsteinsci/betterbeginnings/config/json/JsonSmelterRecipeHandler.java create mode 100644 src/main/java/net/einsteinsci/betterbeginnings/config/json/SmelterConfig.java diff --git a/src/main/java/net/einsteinsci/betterbeginnings/config/BBConfigFolderLoader.java b/src/main/java/net/einsteinsci/betterbeginnings/config/BBConfigFolderLoader.java index 483c219..c7a8088 100644 --- a/src/main/java/net/einsteinsci/betterbeginnings/config/BBConfigFolderLoader.java +++ b/src/main/java/net/einsteinsci/betterbeginnings/config/BBConfigFolderLoader.java @@ -3,6 +3,7 @@ package net.einsteinsci.betterbeginnings.config; import net.einsteinsci.betterbeginnings.config.json.BBJsonLoader; import net.einsteinsci.betterbeginnings.config.json.IJsonConfig; import net.einsteinsci.betterbeginnings.config.json.KilnConfig; +import net.einsteinsci.betterbeginnings.config.json.SmelterConfig; import net.einsteinsci.betterbeginnings.util.LogUtil; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.fml.common.event.FMLInitializationEvent; @@ -24,9 +25,7 @@ public class BBConfigFolderLoader configFolder = new File(e.getModConfigurationDirectory(), FOLDERNAME); File file = new File(e.getModConfigurationDirectory(), FOLDERNAME + "/" + CONFIG_FILENAME); - Configuration res = new Configuration(file); - - return res; + return new Configuration(file); } public static void loadRecipes(FMLInitializationEvent e) @@ -34,6 +33,7 @@ public class BBConfigFolderLoader BBJsonLoader.initialize(); loadJsonConfig(e, KilnConfig.INSTANCE); + loadJsonConfig(e, SmelterConfig.INSTANCE); } public static void loadJsonConfig(FMLInitializationEvent e, IJsonConfig config) diff --git a/src/main/java/net/einsteinsci/betterbeginnings/config/json/JsonKilnRecipeHandler.java b/src/main/java/net/einsteinsci/betterbeginnings/config/json/JsonKilnRecipeHandler.java index a3a06ea..5d051ad 100644 --- a/src/main/java/net/einsteinsci/betterbeginnings/config/json/JsonKilnRecipeHandler.java +++ b/src/main/java/net/einsteinsci/betterbeginnings/config/json/JsonKilnRecipeHandler.java @@ -16,7 +16,7 @@ public class JsonKilnRecipeHandler recipes = new ArrayList<>(); // TESTING ONLY - //recipes.add(new JsonKilnRecipe(new ItemStack(Blocks.bedrock), new ItemStack(Items.blaze_rod), 0.5f)); + recipes.add(new JsonKilnRecipe(new ItemStack(Blocks.bedrock), new ItemStack(Items.blaze_rod), 0.5f)); } public List getRecipes() diff --git a/src/main/java/net/einsteinsci/betterbeginnings/config/json/JsonSmelterRecipe.java b/src/main/java/net/einsteinsci/betterbeginnings/config/json/JsonSmelterRecipe.java new file mode 100644 index 0000000..f3dbb62 --- /dev/null +++ b/src/main/java/net/einsteinsci/betterbeginnings/config/json/JsonSmelterRecipe.java @@ -0,0 +1,86 @@ +package net.einsteinsci.betterbeginnings.config.json; + +import net.einsteinsci.betterbeginnings.register.recipe.KilnRecipeHandler; +import net.einsteinsci.betterbeginnings.register.recipe.SmelterRecipeHandler; +import net.einsteinsci.betterbeginnings.util.LogUtil; +import net.minecraft.item.ItemStack; +import org.apache.logging.log4j.Level; + +import java.util.List; + +public class JsonSmelterRecipe +{ + private JsonLoadedItem input; + private JsonLoadedItemStack output; + private float experience; + private int boosterCount; + private int bonusPerBoostLevel; + + public JsonSmelterRecipe(JsonLoadedItem input, JsonLoadedItemStack output, float xp, int boosters, int bonus) + { + this.input = input; + this.output = output; + experience = xp; + boosterCount = boosters; + bonusPerBoostLevel = bonus; + } + public JsonSmelterRecipe(ItemStack input, ItemStack output, float xp, int boosters, int bonus) + { + this(new JsonLoadedItem(input), new JsonLoadedItemStack(output), xp, boosters, bonus); + } + + public JsonLoadedItem getInput() + { + return input; + } + + public JsonLoadedItemStack getOutput() + { + return output; + } + + public int getBoosterCount() + { + return boosterCount; + } + + public int getBonusPerBoostLevel() + { + return bonusPerBoostLevel; + } + + public float getExperience() + { + return experience; + } + + public void register() + { + List possibleOutputs = output.getItemStacks(); + if (possibleOutputs.isEmpty()) + { + LogUtil.log(Level.ERROR, "No matching item found for output '" + output.getItemName() + "'"); + return; + } + + if (input.isOreDictionary()) + { + SmelterRecipeHandler.addRecipe(input.getItemName(), possibleOutputs.get(0), + experience, boosterCount, bonusPerBoostLevel); + LogUtil.logDebug("Successfully loaded smelter recipe (OreDictionary) for " + possibleOutputs.get(0).toString()); + } + else + { + List possibleInputs = input.getItemStacks(); + if (possibleInputs.isEmpty()) + { + LogUtil.log(Level.ERROR, "No matching item found for input '" + input.getItemName() + "'"); + return; + } + + SmelterRecipeHandler.addRecipe(possibleInputs.get(0), possibleOutputs.get(0), + experience, boosterCount, bonusPerBoostLevel); + LogUtil.logDebug("Successfully loaded smelter recipe for " + possibleOutputs.get(0).toString()); + } + } +} diff --git a/src/main/java/net/einsteinsci/betterbeginnings/config/json/JsonSmelterRecipeHandler.java b/src/main/java/net/einsteinsci/betterbeginnings/config/json/JsonSmelterRecipeHandler.java new file mode 100644 index 0000000..71f9dba --- /dev/null +++ b/src/main/java/net/einsteinsci/betterbeginnings/config/json/JsonSmelterRecipeHandler.java @@ -0,0 +1,26 @@ +package net.einsteinsci.betterbeginnings.config.json; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import java.util.ArrayList; +import java.util.List; + +public class JsonSmelterRecipeHandler +{ + private List recipes; + + public JsonSmelterRecipeHandler() + { + recipes = new ArrayList<>(); + + // TESTING ONLY + recipes.add(new JsonSmelterRecipe(new ItemStack(Blocks.bedrock), new ItemStack(Items.golden_hoe), 0.5f, 1, 0)); + } + + public List getRecipes() + { + return recipes; + } +} diff --git a/src/main/java/net/einsteinsci/betterbeginnings/config/json/SmelterConfig.java b/src/main/java/net/einsteinsci/betterbeginnings/config/json/SmelterConfig.java new file mode 100644 index 0000000..41e1b36 --- /dev/null +++ b/src/main/java/net/einsteinsci/betterbeginnings/config/json/SmelterConfig.java @@ -0,0 +1,98 @@ +package net.einsteinsci.betterbeginnings.config.json; + +import net.einsteinsci.betterbeginnings.util.LogUtil; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import org.apache.logging.log4j.Level; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.StandardOpenOption; + +public class SmelterConfig implements IJsonConfig +{ + public static final SmelterConfig INSTANCE = new SmelterConfig(); + + private JsonSmelterRecipeHandler mainRecipes = new JsonSmelterRecipeHandler(); + + @Override + public String getSubFolder() + { + return "smelter"; + } + + @Override + public String getMainJson(File subfolder) + { + File mainf = new File(subfolder, "main.json"); + if (!mainf.exists()) + { + return "{}"; + } + + try + { + return new String(Files.readAllBytes(mainf.toPath())); + } + catch (IOException e) + { + LogUtil.log(Level.ERROR, "IOException occurred opening config/betterbeginnings/smelter/main.json!"); + LogUtil.log(""); + LogUtil.log(Level.ERROR, e.toString()); + + return "{}"; + } + } + + @Override + public String getAutoJson(File subfolder) + { + return "{}"; + } + + @Override + public String getCustomJson(File subfolder) + { + return "{}"; + } + + @Override + public boolean isOnlyMain() + { + return true; + } + + @Override + public void loadJsonConfig(FMLInitializationEvent e, String mainJson, String autoJson, String customJson) + { + mainRecipes = BBJsonLoader.deserializeObject(mainJson, JsonSmelterRecipeHandler.class); + + for (JsonSmelterRecipe j : mainRecipes.getRecipes()) + { + j.register(); + } + } + + @Override + public void savePostLoad(File subfolder) + { + String json = BBJsonLoader.serializeObject(mainRecipes); + + try + { + File mainf = new File(subfolder, "main.json"); + Files.write(mainf.toPath(), json.getBytes(), StandardOpenOption.CREATE); + } + catch (IOException e) + { + LogUtil.log(Level.ERROR, "IOException occurred saving config/betterbeginnings/smelter/main.json!"); + LogUtil.log(""); + LogUtil.log(Level.ERROR, e.toString()); + } + } + + public JsonSmelterRecipeHandler getMainRecipes() + { + return mainRecipes; + } +} diff --git a/src/main/java/net/einsteinsci/betterbeginnings/event/BBEventHandler.java b/src/main/java/net/einsteinsci/betterbeginnings/event/BBEventHandler.java index f910f9d..b78f486 100644 --- a/src/main/java/net/einsteinsci/betterbeginnings/event/BBEventHandler.java +++ b/src/main/java/net/einsteinsci/betterbeginnings/event/BBEventHandler.java @@ -104,7 +104,12 @@ public class BBEventHandler if (item == RegisterItems.rotisserie) { - e.toolTip.add(ChatUtil.WHITE + "Cooks food at the cost of speed"); + e.toolTip.add(ChatUtil.WHITE + "Cooks food like a pan at the cost of speed"); + } + + if (item == RegisterItems.roastingStick) + { + e.toolTip.add(ChatUtil.WHITE + "Right-click to impale a marshmallow."); } if (item == Items.sugar) diff --git a/src/main/java/net/einsteinsci/betterbeginnings/register/recipe/SmelterRecipe.java b/src/main/java/net/einsteinsci/betterbeginnings/register/recipe/SmelterRecipe.java index 8d6ab7f..d42d945 100644 --- a/src/main/java/net/einsteinsci/betterbeginnings/register/recipe/SmelterRecipe.java +++ b/src/main/java/net/einsteinsci/betterbeginnings/register/recipe/SmelterRecipe.java @@ -7,7 +7,9 @@ public class SmelterRecipe private ItemStack outputStack; private ItemStack inputStack; private float experienceGiven; + // Booster items consumed per smelting operation private int boostersNeeded; + // Bonus items given per level of boost upon smelting private int bonusPerBoost; public SmelterRecipe(ItemStack output, ItemStack input, float experience, int boosters, int bonus)