diff --git a/libs/Techy-1.9.4-1.2.0.jar b/libs/Techy-1.9.4-1.2.0.jar new file mode 100644 index 0000000..e524b52 Binary files /dev/null and b/libs/Techy-1.9.4-1.2.0.jar differ diff --git a/src/main/java/wanion/unidict/Config.java b/src/main/java/wanion/unidict/Config.java index 1e20681..aa673b7 100644 --- a/src/main/java/wanion/unidict/Config.java +++ b/src/main/java/wanion/unidict/Config.java @@ -63,6 +63,7 @@ private Config() {} public static boolean foundryIntegration; public static boolean ic2Integration; public static boolean techRebornIntegration; + public static boolean techyIntegration; static void init() { @@ -90,6 +91,7 @@ static void init() foundryIntegration = config.getBoolean("foundry", integrations, true, "Foundry Integration.") && foundry; ic2Integration = config.getBoolean("industrialCraft2", integrations, true, "Industrial Craft 2 Integration.") && ic2; techRebornIntegration = config.getBoolean("techReborn", integrations, true, "TechReborn Integration.") && isModLoaded("techreborn"); + techyIntegration = config.getBoolean("techy", integrations, true, "Techy Integration.") && isModLoaded("Techy"); } catch (Exception e) { UniDict.getLogger().info("Something went wrong on " + config.getConfigFile() + "loading. " + e); } @@ -109,7 +111,7 @@ public static TObjectLongMap getOwnerOfEveryKindMap(final long kind) private static TObjectLongMap getOwnerOfEveryThingMap() { - final String[] ownerOfEveryThing = config.getStringList("ownerOfEveryThing", resources, new String[]{"substratum", "minecraft", "IC2", "techreborn"}, "all the entries will be sorted according to the modID list below\nmust be the exact modID.\n"); + final String[] ownerOfEveryThing = config.getStringList("ownerOfEveryThing", resources, new String[]{"substratum", "minecraft", "ic2", "techreborn"}, "all the entries will be sorted according to the modID list below\nmust be the exact modID.\n"); final TObjectLongMap ownerOfEveryThingMap = new TObjectLongHashMap<>(10, 1, Long.MAX_VALUE); for (int i = 0; i < ownerOfEveryThing.length; i++) ownerOfEveryThingMap.put(ownerOfEveryThing[i], i); diff --git a/src/main/java/wanion/unidict/helper/RecipeHelper.java b/src/main/java/wanion/unidict/helper/RecipeHelper.java index b7d7ee1..344e71b 100644 --- a/src/main/java/wanion/unidict/helper/RecipeHelper.java +++ b/src/main/java/wanion/unidict/helper/RecipeHelper.java @@ -29,25 +29,24 @@ public class RecipeHelper { public static final List recipes = CraftingManager.getInstance().getRecipeList(); - private static final char[] DEFAULT_RECIPE_CHARS = {' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'}; - private static final char[][] SHAPE = new char[][]{{' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '}}; + private static final Character[] DEFAULT_RECIPE_CHARS = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'}; + private static final char[][] SHAPE = {{' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '}}; private RecipeHelper() {} @Nonnull public static Object[] rawShapeToShape(@Nonnull final Object[] objects) { - int f = 1; + int f = 0; final char[][] almostTheShape = Arrays.copyOf(SHAPE, 3); final TObjectCharMap thingToCharMap = new TObjectCharHashMap<>(); - final Map keyStackMap = new THashMap<>(); - for (int x = 0; x < 3; x++) { - for (int y = 0; y < 3; y++) { - int value = x * 3 + y; - if (objects[value] == null) { - almostTheShape[x][y] = DEFAULT_RECIPE_CHARS[0]; + final Map keyStackMap = new THashMap<>(); + boolean done = false; + for (int x = 0; x < 3 && !done; x++) { + for (int y = 0; y < 3 && !done; y++) { + final int value = x * 3 + y; + if ((done = !(value < objects.length)) || objects[value] == null) continue; - } final Object key = objects[value] instanceof ItemStack ? MetaItem.get((ItemStack) objects[value]) : objects[value]; if (key instanceof Integer) keyStackMap.put((Integer) key, (ItemStack) objects[value]); diff --git a/src/main/java/wanion/unidict/integration/CraftingIntegration.java b/src/main/java/wanion/unidict/integration/CraftingIntegration.java index 2198f0a..b935396 100644 --- a/src/main/java/wanion/unidict/integration/CraftingIntegration.java +++ b/src/main/java/wanion/unidict/integration/CraftingIntegration.java @@ -51,11 +51,13 @@ final class CraftingIntegration extends AbstractIntegrationThread @Override public String call() { - experimentalRecipeResearcher(); + try { + doTheResearch(); + } catch (Exception e) { UniDict.getLogger().error(threadName + e); } return threadName + "Why so many recipes? I had to deal with a lot of recipes."; } - private void experimentalRecipeResearcher() + private void doTheResearch() { final Map>> smartRecipeMap = new THashMap<>(); IRecipe bufferRecipe; diff --git a/src/main/java/wanion/unidict/integration/IC2Integration.java b/src/main/java/wanion/unidict/integration/IC2Integration.java index 34cfc37..79b6b6d 100644 --- a/src/main/java/wanion/unidict/integration/IC2Integration.java +++ b/src/main/java/wanion/unidict/integration/IC2Integration.java @@ -8,38 +8,48 @@ * file, You can obtain one at http://mozilla.org/MPL/1.1/. */ -import ic2.api.recipe.IMachineRecipeManager; +import ic2.api.recipe.IRecipeInput; +import ic2.api.recipe.RecipeOutput; import ic2.api.recipe.Recipes; +import ic2.core.recipe.BasicMachineRecipeManager; import wanion.unidict.UniDict; import wanion.unidict.common.FixedSizeList; +import wanion.unidict.common.Util; import java.util.List; +import java.util.Map; final class IC2Integration extends AbstractIntegrationThread { - private final List> ic2MachinesRecipeList = new FixedSizeList<>(5); + private final List> ic2MachinesRecipeList = new FixedSizeList<>(5); @SuppressWarnings("unchecked") IC2Integration() { super("Industrial Craft 2"); try { - ic2MachinesRecipeList.add(Recipes.centrifuge.getRecipes()); - ic2MachinesRecipeList.add(Recipes.compressor.getRecipes()); - ic2MachinesRecipeList.add(Recipes.blastfurnace.getRecipes()); - ic2MachinesRecipeList.add(Recipes.macerator.getRecipes()); - ic2MachinesRecipeList.add(Recipes.metalformerRolling.getRecipes()); + ic2MachinesRecipeList.add(Util.getField(BasicMachineRecipeManager.class, "recipes", Recipes.centrifuge, Map.class)); + ic2MachinesRecipeList.add(Util.getField(BasicMachineRecipeManager.class, "recipes", Recipes.compressor, Map.class)); + ic2MachinesRecipeList.add(Util.getField(BasicMachineRecipeManager.class, "recipes", Recipes.blastfurnace, Map.class)); + ic2MachinesRecipeList.add(Util.getField(BasicMachineRecipeManager.class, "recipes", Recipes.macerator, Map.class)); + ic2MachinesRecipeList.add(Util.getField(BasicMachineRecipeManager.class, "recipes", Recipes.metalformerRolling, Map.class)); } catch (Exception e) { UniDict.getLogger().error(threadName + e); } } @Override public String call() { - ic2MachinesRecipeList.forEach(recipeIterable -> { + ic2MachinesRecipeList.forEach(map -> { try { - recipeIterable.forEach(recipe -> resourceHandler.getMainItemStackList(recipe.output.items)); + fixMachinesOutputs(map); } catch (Exception e) { UniDict.getLogger().error(threadName + e); } }); return threadName + "The world appears to be entirely industrialized."; } + + private void fixMachinesOutputs(Map recipes) + { + for (Map.Entry recipe : recipes.entrySet()) + recipe.setValue(new RecipeOutput(recipe.getValue().metadata, resourceHandler.getMainItemStackList(recipe.getValue().items))); + } } \ No newline at end of file diff --git a/src/main/java/wanion/unidict/integration/IntegrationModule.java b/src/main/java/wanion/unidict/integration/IntegrationModule.java index 031321a..fa31842 100644 --- a/src/main/java/wanion/unidict/integration/IntegrationModule.java +++ b/src/main/java/wanion/unidict/integration/IntegrationModule.java @@ -38,5 +38,7 @@ protected void init() manager.add(IC2Integration.class); if (techRebornIntegration) manager.add(TechRebornIntegration.class); + if (techyIntegration) + manager.add(TechyIntegration.class); } } \ No newline at end of file diff --git a/src/main/java/wanion/unidict/integration/TechyIntegration.java b/src/main/java/wanion/unidict/integration/TechyIntegration.java new file mode 100644 index 0000000..6496ab8 --- /dev/null +++ b/src/main/java/wanion/unidict/integration/TechyIntegration.java @@ -0,0 +1,48 @@ +package wanion.unidict.integration; + +/* + * Created by WanionCane(https://github.com/WanionCane). + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 1.1. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/1.1/. + */ + +import net.minecraft.item.ItemStack; +import org.apache.commons.lang3.tuple.ImmutableTriple; +import tbsc.techy.recipe.CrusherRecipes; +import wanion.unidict.UniDict; + +import java.util.Map; + +final class TechyIntegration extends AbstractIntegrationThread +{ + TechyIntegration() + { + super("Techy"); + } + + @Override + public String call() + { + try { + fixCrusherRecipes(); + } catch (Exception e) { UniDict.getLogger().error(threadName + e); } + return threadName + "What? something was wrong with Techy Crusher? =O"; + } + + private void fixCrusherRecipes() + { + final Map, Float> experienceMap = CrusherRecipes.instance().getExperienceMap(); + final Map, Integer> energyMap = CrusherRecipes.instance().getEnergyMap(); + CrusherRecipes.instance().getRecipeMap().entrySet().forEach(recipe -> { + final ImmutableTriple tripleOutput = recipe.getValue(); + final Float experiencePerRecipe = experienceMap.remove(tripleOutput); + final Integer energyRequired = energyMap.remove(tripleOutput); + final ImmutableTriple newOutput = ImmutableTriple.of(resourceHandler.getMainItemStack(tripleOutput.getLeft()), resourceHandler.getMainItemStack(tripleOutput.getMiddle()), tripleOutput.right); + experienceMap.put(newOutput, experiencePerRecipe); + energyMap.put(newOutput, energyRequired); + recipe.setValue(newOutput); + }); + } +} \ No newline at end of file