Skip to content

Commit

Permalink
New: Input Replacement
Browse files Browse the repository at this point in the history
  • Loading branch information
WanionCane committed Sep 3, 2016
1 parent 2372989 commit d85ee74
Show file tree
Hide file tree
Showing 7 changed files with 131 additions and 42 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ plugins {
id "net.minecraftforge.gradle.forge" version "2.0.2"
}
*/
version = "1.10.2-1.7b"
version = "1.10.2-1.8"
group= "wanion.unidict" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "UniDict"

Expand Down
3 changes: 2 additions & 1 deletion src/main/java/wanion/unidict/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ private Config() {}
private static final Configuration config = new Configuration(new File("." + SLASH + "config" + SLASH + Reference.MOD_NAME + ".cfg"), Reference.MOD_VERSION);
// general configs
private static final String general = Configuration.CATEGORY_GENERAL;
public static final boolean keepOneEntry = config.getBoolean("keepOneEntry", general, false, "keep only one entry per ore dict entry?");
public static final boolean keepOneEntry = config.getBoolean("keepOneEntry", general, false, "keep only one entry per ore dict entry?\nNote: enabling this also enables inputReplacement.");
public static final boolean inputReplacement = config.getBoolean("inputReplacement", general, false, "Enabling this will remove all non-standard items as input.\nNote: this will only affect machines that doesn't use OreDictionary.");
public static final Set<String> keepOneEntryModBlackSet = Collections.unmodifiableSet(Sets.newLinkedHashSet(Arrays.asList(config.getStringList("keepOneEntryModBlackList", general, new String[]{}, "mods listed here will be blacklisted in keepOneEntry.\nmust be the exact modID."))));
public static boolean autoHideInJEI;
public static final Set<String> hideInJEIBlackSet = Collections.unmodifiableSet(Sets.newLinkedHashSet(Arrays.asList(config.getStringList("autoHideInJEIBlackList", general, new String[]{"ore"}, "put here things that you don't want to hide in JEI.\nonly works if keepOneEntry is false."))));
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/wanion/unidict/common/Reference.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.7b";
public static final String MOD_VERSION = "1.10.2-1.8";
public static final char SLASH = separatorChar;
public static final String MC_VERSION = "[1.10.2]";

Expand Down
38 changes: 36 additions & 2 deletions src/main/java/wanion/unidict/integration/FurnaceIntegration.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,17 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/

import gnu.trove.set.TIntSet;
import gnu.trove.set.hash.TIntHashSet;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import wanion.unidict.Config;
import wanion.unidict.UniDict;
import wanion.unidict.resource.UniResourceContainer;

import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.Map;

final class FurnaceIntegration extends AbstractIntegrationThread
Expand All @@ -32,7 +39,34 @@ public String call()

private void optimizeFurnaceRecipes()
{
for (final Map.Entry<ItemStack, ItemStack> furnaceRecipe : FurnaceRecipes.instance().getSmeltingList().entrySet())
furnaceRecipe.setValue(resourceHandler.getMainItemStack(furnaceRecipe.getValue()));
if (!(Config.keepOneEntry || Config.inputReplacement))
for (final Map.Entry<ItemStack, ItemStack> furnaceRecipe : FurnaceRecipes.instance().getSmeltingList().entrySet())
furnaceRecipe.setValue(resourceHandler.getMainItemStack(furnaceRecipe.getValue()));
else {
final Map<UniResourceContainer, TIntSet> containerKindMap = new IdentityHashMap<>();
final Map<ItemStack, ItemStack> furnaceRecipes = FurnaceRecipes.instance().getSmeltingList();
final Map<ItemStack, ItemStack> newRecipes = new HashMap<>();
for (final Iterator<Map.Entry<ItemStack, ItemStack>> furnaceRecipeIterator = furnaceRecipes.entrySet().iterator(); furnaceRecipeIterator.hasNext(); )
{
final Map.Entry<ItemStack, ItemStack> furnaceRecipe = furnaceRecipeIterator.next();
final UniResourceContainer inputContainer = resourceHandler.getContainer(furnaceRecipe.getKey());
final UniResourceContainer outputContainer = resourceHandler.getContainer(furnaceRecipe.getValue());
if (outputContainer != null && inputContainer == null) {
furnaceRecipe.setValue(outputContainer.getMainEntry(furnaceRecipe.getValue().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);
newRecipes.put(inputContainer.getMainEntry(furnaceRecipe.getKey().stackSize), outputContainer.getMainEntry(furnaceRecipe.getValue().stackSize));
} else
furnaceRecipeIterator.remove();
}
furnaceRecipes.putAll(newRecipes);
}
}
}
120 changes: 88 additions & 32 deletions src/main/java/wanion/unidict/integration/MekanismIntegration.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,11 @@
import wanion.unidict.Config;
import wanion.unidict.MetaItem;
import wanion.unidict.UniDict;
import wanion.unidict.resource.UniResourceContainer;

import javax.annotation.Nonnull;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.Map;

Expand All @@ -49,23 +51,51 @@ private void fixMekanismRecipes(@Nonnull final Map<ItemStackInput, MachineRecipe
{
final int initialSize = recipes.size();
final Map<ItemStackInput, MachineRecipe<ItemStackInput, ItemStackOutput, ? extends MachineRecipe>> correctRecipes = new HashMap<>(initialSize, 1);
final TIntSet uniques = new TIntHashSet(initialSize, 1);
for (Iterator<MachineRecipe<ItemStackInput, ItemStackOutput, ? extends MachineRecipe>> mekanismRecipeIterator = recipes.values().iterator(); mekanismRecipeIterator.hasNext(); )
{
final MachineRecipe<ItemStackInput, ItemStackOutput, ? extends MachineRecipe> mekanismRecipe = mekanismRecipeIterator.next();
final ItemStack correctOutput = resourceHandler.getMainItemStack(mekanismRecipe.recipeOutput.output);
if (correctOutput == mekanismRecipe.recipeOutput.output)
continue;
final MachineRecipe<ItemStackInput, ItemStackOutput, ? extends 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);
if (!(Config.keepOneEntry || Config.inputReplacement)) {
final TIntSet uniques = new TIntHashSet(initialSize, 1);
for (final Iterator<MachineRecipe<ItemStackInput, ItemStackOutput, ? extends MachineRecipe>> mekanismRecipeIterator = recipes.values().iterator(); mekanismRecipeIterator.hasNext(); )
{
final MachineRecipe<ItemStackInput, ItemStackOutput, ? extends MachineRecipe> mekanismRecipe = mekanismRecipeIterator.next();
final ItemStack correctOutput = resourceHandler.getMainItemStack(mekanismRecipe.recipeOutput.output);
if (correctOutput == mekanismRecipe.recipeOutput.output)
continue;
final MachineRecipe<ItemStackInput, ItemStackOutput, ? extends 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<UniResourceContainer, TIntSet> containerKindMap = new IdentityHashMap<>();
for (final Iterator<MachineRecipe<ItemStackInput, ItemStackOutput, ? extends MachineRecipe>> mekanismRecipeIterator = recipes.values().iterator(); mekanismRecipeIterator.hasNext(); )
{
final MachineRecipe<ItemStackInput, ItemStackOutput, ? extends 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<ItemStackInput, ItemStackOutput, ? extends 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();
}
mekanismRecipeIterator.remove();
}
recipes.putAll(correctRecipes);
}
Expand All @@ -74,23 +104,49 @@ private void fixInfusionMekanismRecipes(@Nonnull final Map<InfusionInput, Machin
{
final int initialSize = recipes.size();
final Map<InfusionInput, MachineRecipe<InfusionInput, ItemStackOutput, MetallurgicInfuserRecipe>> correctRecipes = new HashMap<>(initialSize, 1);
final TIntSet uniques = new TIntHashSet(initialSize, 1);
for (Iterator<MachineRecipe<InfusionInput, ItemStackOutput, MetallurgicInfuserRecipe>> infusionRecipeIterator = recipes.values().iterator(); infusionRecipeIterator.hasNext(); )
{
final MachineRecipe<InfusionInput, ItemStackOutput, MetallurgicInfuserRecipe> infusionRecipe = infusionRecipeIterator.next();
final ItemStack correctOutput = resourceHandler.getMainItemStack(infusionRecipe.recipeOutput.output);
if (correctOutput == infusionRecipe.recipeOutput.output)
continue;
final MachineRecipe<InfusionInput, ItemStackOutput, MetallurgicInfuserRecipe> newRecipe = infusionRecipe.copy();
newRecipe.recipeOutput.output = correctOutput;
if (Config.keepOneEntry)
newRecipe.recipeInput.inputStack = resourceHandler.getMainItemStack(newRecipe.recipeInput.inputStack);
final int recipeID = MetaItem.getCumulative(newRecipe.recipeOutput.output, newRecipe.recipeInput.inputStack);
if (!uniques.contains(recipeID)) {
correctRecipes.put(newRecipe.recipeInput, newRecipe);
uniques.add(recipeID);
if (!(Config.keepOneEntry || Config.inputReplacement)) {
final TIntSet uniques = new TIntHashSet(initialSize, 1);

for (final Iterator<MachineRecipe<InfusionInput, ItemStackOutput, MetallurgicInfuserRecipe>> infusionRecipeIterator = recipes.values().iterator(); infusionRecipeIterator.hasNext(); )
{
final MachineRecipe<InfusionInput, ItemStackOutput, MetallurgicInfuserRecipe> infusionRecipe = infusionRecipeIterator.next();
final ItemStack correctOutput = resourceHandler.getMainItemStack(infusionRecipe.recipeOutput.output);
if (correctOutput == infusionRecipe.recipeOutput.output)
continue;
final MachineRecipe<InfusionInput, ItemStackOutput, MetallurgicInfuserRecipe> newRecipe = infusionRecipe.copy();
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<UniResourceContainer, TIntSet> containerKindMap = new IdentityHashMap<>();
for (final Iterator<MachineRecipe<InfusionInput, ItemStackOutput, MetallurgicInfuserRecipe>> infusionRecipeIterator = recipes.values().iterator(); infusionRecipeIterator.hasNext(); )
{
final MachineRecipe<InfusionInput, ItemStackOutput, MetallurgicInfuserRecipe> 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<InfusionInput, ItemStackOutput, MetallurgicInfuserRecipe> 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();
}
infusionRecipeIterator.remove();
}
recipes.putAll(correctRecipes);
}
Expand Down
6 changes: 2 additions & 4 deletions src/main/java/wanion/unidict/resource/ResourceHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -99,10 +99,8 @@ public List<ItemStack> getMainItemStackList(@Nonnull final Collection<ItemStack>

public void setMainItemStacks(@Nonnull final List<ItemStack> thingList)
{
final List<ItemStack> newThings = new ArrayList<>();
for (Iterator<ItemStack> thingListIterator = thingList.iterator(); thingListIterator.hasNext(); thingListIterator.remove())
newThings.add(getMainItemStack(thingListIterator.next()));
thingList.addAll(newThings);
for (int i = 0; i < thingList.size(); i++)
thingList.set(i, getMainItemStack(thingList.get(i)));
}

public ItemStack[] getMainItemStacks(@Nonnull final ItemStack[] things)
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/mcmod.info
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"modid": "UniDict",
"name": "UniDict",
"description": "a mod about unifying all the things.",
"version": "1.7b",
"version": "1.8",
"mcversion": "${mcversion}",
"url": "http://minecraft.curseforge.com/projects/unidict",
"updateUrl": "",
Expand Down

0 comments on commit d85ee74

Please sign in to comment.