diff --git a/build.gradle b/build.gradle index d445c05..d2da0be 100644 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,7 @@ plugins { id "net.minecraftforge.gradle.forge" version "2.0.2" } */ -version = "1.10.2-1.8b" +version = "1.10.2-1.8c" group= "wanion.unidict" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "UniDict" diff --git a/src/main/java/wanion/unidict/common/Reference.java b/src/main/java/wanion/unidict/common/Reference.java index f0c016f..1987f84 100644 --- a/src/main/java/wanion/unidict/common/Reference.java +++ b/src/main/java/wanion/unidict/common/Reference.java @@ -14,7 +14,7 @@ public final class Reference { public static final String MOD_ID = "UniDict"; public static final String MOD_NAME = MOD_ID; - public static final String MOD_VERSION = "1.10.2-1.8b"; + public static final String MOD_VERSION = "1.10.2-1.8c"; public static final char SLASH = separatorChar; public static final String MC_VERSION = "[1.10.2]"; diff --git a/src/main/java/wanion/unidict/integration/IEIntegration.java b/src/main/java/wanion/unidict/integration/IEIntegration.java index 6206d5a..e6fb13e 100644 --- a/src/main/java/wanion/unidict/integration/IEIntegration.java +++ b/src/main/java/wanion/unidict/integration/IEIntegration.java @@ -14,20 +14,14 @@ import gnu.trove.set.TIntSet; import gnu.trove.set.hash.TIntHashSet; import net.minecraft.item.ItemStack; -import wanion.unidict.LoadStage; import wanion.unidict.MetaItem; import wanion.unidict.UniDict; import wanion.unidict.UniOreDictionary; import wanion.unidict.common.FixedSizeList; -import wanion.unidict.module.SpecifiedLoadStage; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; -@SpecifiedLoadStage(stage = LoadStage.LOAD_COMPLETE) final class IEIntegration extends AbstractIntegrationThread { private final UniOreDictionary uniOreDictionary = UniDict.getDependencies().get(UniOreDictionary.class); @@ -45,10 +39,7 @@ public String call() fixBlastFurnaceRecipes(); fixCrusherRecipes(); fixMetalPressRecipes(); - } catch (Exception e) { - UniDict.getLogger().error(threadName + e); - e.printStackTrace(); - } + } catch (Exception e) { UniDict.getLogger().error(threadName + e); } return threadName + "The world's engineer appears to be more immersive."; } @@ -56,13 +47,15 @@ private void fixArcFurnaceRecipes() { final List arcFurnaceRecipes = ArcFurnaceRecipe.recipeList; final List correctRecipes = new ArrayList<>(new Double(arcFurnaceRecipes.size() * 1.3).intValue()); - for (final Iterator arcFurnaceRecipeIterator = arcFurnaceRecipes.iterator(); arcFurnaceRecipeIterator.hasNext(); ) + for (final Iterator arcFurnaceRecipeIterator = arcFurnaceRecipes.iterator(); arcFurnaceRecipeIterator.hasNext(); ) { - final ArcFurnaceRecipe recipe = (ArcFurnaceRecipe) arcFurnaceRecipeIterator.next(); + final ArcFurnaceRecipe recipe = arcFurnaceRecipeIterator.next(); final ItemStack correctOutput = resourceHandler.getMainItemStack(recipe.output); if (correctOutput == recipe.output) continue; - correctRecipes.add(new ArcFurnaceRecipe(correctOutput, recipe.oreInputString, recipe.slag, recipe.getTotalProcessTime(), recipe.getMultipleProcessTicks(), ingredientStackToValidInput(recipe.additives))); + final int time = (int) Math.floor((double) ((float) recipe.getTotalProcessTime() / ArcFurnaceRecipe.timeModifier)); + final int energy = (int) Math.floor((double) ((float) ((recipe.getTotalProcessEnergy() / ArcFurnaceRecipe.energyModifier) / recipe.getTotalProcessTime()))); + correctRecipes.add(new ArcFurnaceRecipe(correctOutput, ingredientStackToValidInput(recipe.input), recipe.slag, time, energy, ingredientStackToValidInput(recipe.additives))); arcFurnaceRecipeIterator.remove(); } arcFurnaceRecipes.addAll(correctRecipes); @@ -90,10 +83,11 @@ private void fixCrusherRecipes() final ItemStack input = UniOreDictionary.getFirstEntry(crusherRecipe.oreInputString); final int recipeId = MetaItem.getCumulative(input, correctOutput); if (!uniques.contains(recipeId)) { + final int energy = (int) Math.floor((double) ((float) crusherRecipe.getTotalProcessEnergy() / CrusherRecipe.energyModifier)); if (crusherRecipe.secondaryOutput == null) - correctRecipes.add(new CrusherRecipe(correctOutput, ingredientStackToValidInput(crusherRecipe.input), crusherRecipe.getTotalProcessEnergy())); + correctRecipes.add(new CrusherRecipe(correctOutput, ingredientStackToValidInput(crusherRecipe.input), energy)); else - correctRecipes.add(new UniCrusherRecipe(correctOutput, ingredientStackToValidInput(crusherRecipe.input), crusherRecipe.getTotalProcessEnergy(), resourceHandler.getMainItemStacks(crusherRecipe.secondaryOutput), crusherRecipe.secondaryChance)); + correctRecipes.add(new UniCrusherRecipe(correctOutput, ingredientStackToValidInput(crusherRecipe.input), energy, resourceHandler.getMainItemStacks(crusherRecipe.secondaryOutput), crusherRecipe.secondaryChance)); uniques.add(recipeId); } crusherRecipesIterator.remove(); @@ -114,7 +108,7 @@ private void fixMetalPressRecipes() continue; final int id = MetaItem.getCumulative(output, metalPressRecipe.mold.stack); if (!uniques.contains(id)) { - correctRecipes.put(metalPressRecipe.mold, new MetalPressRecipe(output, ingredientStackToValidInput(metalPressRecipe.input), metalPressRecipe.mold.stack, metalPressRecipe.getTotalProcessEnergy())); + correctRecipes.put(metalPressRecipe.mold, new MetalPressRecipe(output, ingredientStackToValidInput(metalPressRecipe.input), metalPressRecipe.mold.stack, (int) Math.floor((double) ((float) metalPressRecipe.getTotalProcessEnergy() / MetalPressRecipe.timeModifier)))); uniques.add(id); } metalPressRecipesIterator.remove(); diff --git a/src/main/java/wanion/unidict/integration/MekanismIntegration.java b/src/main/java/wanion/unidict/integration/MekanismIntegration.java index 7394a42..9f6974c 100644 --- a/src/main/java/wanion/unidict/integration/MekanismIntegration.java +++ b/src/main/java/wanion/unidict/integration/MekanismIntegration.java @@ -30,126 +30,148 @@ final class MekanismIntegration extends AbstractIntegrationThread { - MekanismIntegration() - { - super("Mekanism"); - } + MekanismIntegration() + { + super("Mekanism"); + } - @Override - @SuppressWarnings("unchecked") - public String call() - { - try { - fixMekanismRecipes(RecipeHandler.Recipe.CRUSHER.get()); - fixMekanismRecipes(RecipeHandler.Recipe.ENRICHMENT_CHAMBER.get()); - fixInfusionMekanismRecipes(RecipeHandler.Recipe.METALLURGIC_INFUSER.get()); - } catch (Exception e) { UniDict.getLogger().error(threadName + e); } - return threadName + "All the mekanisms were checked."; - } + @Override + @SuppressWarnings("unchecked") + public String call() + { + try { + fixMekanismRecipes(RecipeHandler.Recipe.CRUSHER.get()); + fixMekanismRecipes(RecipeHandler.Recipe.ENRICHMENT_CHAMBER.get()); + fixInfusionMekanismRecipes(RecipeHandler.Recipe.METALLURGIC_INFUSER.get()); + } catch (Exception e) { UniDict.getLogger().error(threadName + e); } + return threadName + "All the mekanisms were checked."; + } - private void fixMekanismRecipes(@Nonnull final Map> recipes) - { - final int initialSize = recipes.size(); - final Map> correctRecipes = new HashMap<>(initialSize, 1); - if (!(Config.keepOneEntry || Config.inputReplacement)) { - final TIntSet uniques = new TIntHashSet(initialSize, 1); - for (final Iterator> mekanismRecipeIterator = recipes.values().iterator(); mekanismRecipeIterator.hasNext(); ) - { - final MachineRecipe mekanismRecipe = mekanismRecipeIterator.next(); - final ItemStack correctOutput = resourceHandler.getMainItemStack(mekanismRecipe.recipeOutput.output); - if (correctOutput == mekanismRecipe.recipeOutput.output) - continue; - final MachineRecipe newRecipe = mekanismRecipe.copy(); - newRecipe.recipeOutput.output = correctOutput; - if (Config.keepOneEntry) - newRecipe.recipeInput.ingredient = resourceHandler.getMainItemStack(newRecipe.recipeInput.ingredient); - final int recipeID = MetaItem.getCumulative(newRecipe.recipeOutput.output, newRecipe.recipeInput.ingredient); - if (!uniques.contains(recipeID)) { - correctRecipes.put(newRecipe.recipeInput, newRecipe); - uniques.add(recipeID); - } - mekanismRecipeIterator.remove(); - } - } else { - final Map containerKindMap = new IdentityHashMap<>(); - for (final Iterator> mekanismRecipeIterator = recipes.values().iterator(); mekanismRecipeIterator.hasNext(); ) - { - final MachineRecipe mekanismRecipe = mekanismRecipeIterator.next(); - final UniResourceContainer inputContainer = resourceHandler.getContainer(mekanismRecipe.recipeInput.ingredient); - final UniResourceContainer outputContainer = resourceHandler.getContainer(mekanismRecipe.recipeOutput.output); - if (outputContainer != null && inputContainer == null) { - mekanismRecipe.recipeOutput.output = outputContainer.getMainEntry(mekanismRecipe.recipeOutput.output.stackSize); - continue; - } else if (outputContainer == null) - continue; - final int kind = inputContainer.kind; - if (!containerKindMap.containsKey(outputContainer)) - containerKindMap.put(outputContainer, new TIntHashSet()); - final TIntSet kindSet = containerKindMap.get(outputContainer); - if (!kindSet.contains(kind)) { - kindSet.add(kind); - final MachineRecipe newRecipe = mekanismRecipe.copy(); - newRecipe.recipeOutput.output = outputContainer.getMainEntry(mekanismRecipe.recipeOutput.output.stackSize); - if (Config.keepOneEntry || Config.inputReplacement) - newRecipe.recipeInput.ingredient = inputContainer.getMainEntry(newRecipe.recipeInput.ingredient.stackSize); - correctRecipes.put(newRecipe.recipeInput, newRecipe); - } - mekanismRecipeIterator.remove(); - } - } - recipes.putAll(correctRecipes); - } + private void fixMekanismRecipes(@Nonnull final Map> recipes) + { + final int initialSize = recipes.size(); + final Map> correctRecipes = new HashMap<>(initialSize, 1); + if (!Config.inputReplacement) { + final Map containerInputKeyMap = new IdentityHashMap<>(); + for (final Iterator> mekanismRecipeIterator = recipes.values().iterator(); mekanismRecipeIterator.hasNext(); ) + { + final MachineRecipe mekanismRecipe = mekanismRecipeIterator.next(); + final UniResourceContainer inputContainer = resourceHandler.getContainer(mekanismRecipe.recipeInput.ingredient); + final UniResourceContainer outputContainer = resourceHandler.getContainer(mekanismRecipe.recipeOutput.output); + if (outputContainer == null) + continue; + else if (inputContainer == null) { + mekanismRecipe.recipeOutput.output = outputContainer.getMainEntry(mekanismRecipe.recipeOutput.output.stackSize); + continue; + } + final MachineRecipe correctRecipe = mekanismRecipe.copy(); + final ItemStack inputStack; + if (Config.keepOneEntry) + inputStack = correctRecipe.recipeInput.ingredient = inputContainer.getMainEntry(correctRecipe.recipeInput.ingredient.stackSize); + else + inputStack = correctRecipe.recipeInput.ingredient = correctRecipe.recipeInput.ingredient.copy(); + final int inputId = MetaItem.get(inputStack); + if (!containerInputKeyMap.containsKey(outputContainer)) + containerInputKeyMap.put(outputContainer, new TIntHashSet()); + final TIntSet inputKeySet = containerInputKeyMap.get(outputContainer); + if (!inputKeySet.contains(inputId)) { + inputKeySet.add(inputId); + correctRecipe.recipeOutput.output = outputContainer.getMainEntry(correctRecipe.recipeOutput.output.stackSize); + correctRecipes.put(correctRecipe.recipeInput, correctRecipe); + } + mekanismRecipeIterator.remove(); + } + } else { + final Map containerKindMap = new IdentityHashMap<>(); + for (final Iterator> mekanismRecipeIterator = recipes.values().iterator(); mekanismRecipeIterator.hasNext(); ) + { + final MachineRecipe mekanismRecipe = mekanismRecipeIterator.next(); + final UniResourceContainer inputContainer = resourceHandler.getContainer(mekanismRecipe.recipeInput.ingredient); + final UniResourceContainer outputContainer = resourceHandler.getContainer(mekanismRecipe.recipeOutput.output); + if (outputContainer == null) + continue; + if (inputContainer == null) { + mekanismRecipe.recipeOutput.output = outputContainer.getMainEntry(mekanismRecipe.recipeOutput.output.stackSize); + continue; + } + final int kind = inputContainer.kind; + if (!containerKindMap.containsKey(outputContainer)) + containerKindMap.put(outputContainer, new TIntHashSet()); + final TIntSet kindSet = containerKindMap.get(outputContainer); + if (!kindSet.contains(kind)) { + kindSet.add(kind); + final MachineRecipe correctRecipe = mekanismRecipe.copy(); + correctRecipe.recipeInput.ingredient = inputContainer.getMainEntry(correctRecipe.recipeInput.ingredient.stackSize); + correctRecipe.recipeOutput.output = outputContainer.getMainEntry(mekanismRecipe.recipeOutput.output.stackSize); + correctRecipes.put(correctRecipe.recipeInput, correctRecipe); + } + mekanismRecipeIterator.remove(); + } + } + recipes.putAll(correctRecipes); + } - private void fixInfusionMekanismRecipes(@Nonnull final Map> recipes) - { - final int initialSize = recipes.size(); - final Map> correctRecipes = new HashMap<>(initialSize, 1); - if (!Config.inputReplacement) { - final TIntSet uniques = new TIntHashSet(initialSize, 1); - - for (final Iterator> infusionRecipeIterator = recipes.values().iterator(); infusionRecipeIterator.hasNext(); ) - { - final MachineRecipe infusionRecipe = infusionRecipeIterator.next(); - final ItemStack correctOutput = resourceHandler.getMainItemStack(infusionRecipe.recipeOutput.output); - if (correctOutput == infusionRecipe.recipeOutput.output) - continue; - final MachineRecipe newRecipe = infusionRecipe.copy(); - if (Config.keepOneEntry) - newRecipe.recipeInput.inputStack = resourceHandler.getMainItemStack(newRecipe.recipeInput.inputStack); - newRecipe.recipeOutput.output = correctOutput; - final int recipeID = MetaItem.getCumulative(newRecipe.recipeOutput.output, newRecipe.recipeInput.inputStack); - if (!uniques.contains(recipeID)) { - correctRecipes.put(newRecipe.recipeInput, newRecipe); - uniques.add(recipeID); - } - infusionRecipeIterator.remove(); - } - } else { - final Map containerKindMap = new IdentityHashMap<>(); - for (final Iterator> infusionRecipeIterator = recipes.values().iterator(); infusionRecipeIterator.hasNext(); ) - { - final MachineRecipe mekanismRecipe = infusionRecipeIterator.next(); - final UniResourceContainer inputContainer = resourceHandler.getContainer(mekanismRecipe.recipeInput.inputStack); - final UniResourceContainer outputContainer = resourceHandler.getContainer(mekanismRecipe.recipeOutput.output); - if (outputContainer != null && inputContainer == null) { - mekanismRecipe.recipeOutput.output = outputContainer.getMainEntry(mekanismRecipe.recipeOutput.output.stackSize); - continue; - } else if (outputContainer == null) - continue; - final int kind = inputContainer.kind; - if (!containerKindMap.containsKey(outputContainer)) - containerKindMap.put(outputContainer, new TIntHashSet()); - final TIntSet kindSet = containerKindMap.get(outputContainer); - if (!kindSet.contains(kind)) { - kindSet.add(kind); - final MachineRecipe newRecipe = mekanismRecipe.copy(); - newRecipe.recipeInput.inputStack = inputContainer.getMainEntry(newRecipe.recipeInput.inputStack.stackSize); - newRecipe.recipeOutput.output = outputContainer.getMainEntry(mekanismRecipe.recipeOutput.output.stackSize); - correctRecipes.put(newRecipe.recipeInput, newRecipe); - } - infusionRecipeIterator.remove(); - } - } - recipes.putAll(correctRecipes); - } + private void fixInfusionMekanismRecipes(@Nonnull final Map> recipes) + { + final int initialSize = recipes.size(); + final Map> correctRecipes = new HashMap<>(initialSize, 1); + if (!Config.inputReplacement) { + final Map containerInputKeyMap = new IdentityHashMap<>(); + for (final Iterator> infusionRecipeIterator = recipes.values().iterator(); infusionRecipeIterator.hasNext(); ) + { + final MachineRecipe infusionRecipe = infusionRecipeIterator.next(); + final UniResourceContainer inputContainer = resourceHandler.getContainer(infusionRecipe.recipeInput.inputStack); + final UniResourceContainer outputContainer = resourceHandler.getContainer(infusionRecipe.recipeOutput.output); + if (outputContainer == null) + continue; + else if (inputContainer == null) { + infusionRecipe.recipeOutput.output = outputContainer.getMainEntry(infusionRecipe.recipeOutput.output.stackSize); + continue; + } + final MachineRecipe correctRecipe = infusionRecipe.copy(); + final ItemStack inputStack; + if (Config.keepOneEntry) + inputStack = correctRecipe.recipeInput.inputStack = inputContainer.getMainEntry(correctRecipe.recipeInput.inputStack.stackSize); + else + inputStack = correctRecipe.recipeInput.inputStack = correctRecipe.recipeInput.inputStack.copy(); + final int inputId = MetaItem.get(inputStack); + if (!containerInputKeyMap.containsKey(outputContainer)) + containerInputKeyMap.put(outputContainer, new TIntHashSet()); + final TIntSet inputKeySet = containerInputKeyMap.get(outputContainer); + if (!inputKeySet.contains(inputId)) { + inputKeySet.add(inputId); + correctRecipe.recipeOutput.output = outputContainer.getMainEntry(correctRecipe.recipeOutput.output.stackSize); + correctRecipes.put(correctRecipe.recipeInput, correctRecipe); + } + infusionRecipeIterator.remove(); + } + } else { + final Map containerKindMap = new IdentityHashMap<>(); + for (final Iterator> infusionRecipeIterator = recipes.values().iterator(); infusionRecipeIterator.hasNext(); ) + { + final MachineRecipe mekanismRecipe = infusionRecipeIterator.next(); + final UniResourceContainer inputContainer = resourceHandler.getContainer(mekanismRecipe.recipeInput.inputStack); + final UniResourceContainer outputContainer = resourceHandler.getContainer(mekanismRecipe.recipeOutput.output); + if (outputContainer == null) + continue; + if (inputContainer == null) { + mekanismRecipe.recipeOutput.output = outputContainer.getMainEntry(mekanismRecipe.recipeOutput.output.stackSize); + continue; + } + final int kind = inputContainer.kind; + if (!containerKindMap.containsKey(outputContainer)) + containerKindMap.put(outputContainer, new TIntHashSet()); + final TIntSet kindSet = containerKindMap.get(outputContainer); + if (!kindSet.contains(kind)) { + kindSet.add(kind); + final MachineRecipe correctRecipe = mekanismRecipe.copy(); + correctRecipe.recipeInput.inputStack = inputContainer.getMainEntry(correctRecipe.recipeInput.inputStack.stackSize); + correctRecipe.recipeOutput.output = outputContainer.getMainEntry(mekanismRecipe.recipeOutput.output.stackSize); + correctRecipes.put(correctRecipe.recipeInput, correctRecipe); + } + infusionRecipeIterator.remove(); + } + } + recipes.putAll(correctRecipes); + } } \ No newline at end of file diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 44dd5db..3a5842d 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "UniDict", "name": "UniDict", "description": "a mod about unifying all the things.", - "version": "1.8b", + "version": "1.8c", "mcversion": "${mcversion}", "url": "http://minecraft.curseforge.com/projects/unidict", "updateUrl": "",