Skip to content

Commit

Permalink
reverted the prior changes, since there isn't any effect, and they co…
Browse files Browse the repository at this point in the history
…uld mess with another things.
  • Loading branch information
WanionCane committed Aug 21, 2016
1 parent 955398b commit 722fb8a
Show file tree
Hide file tree
Showing 7 changed files with 107 additions and 72 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ buildscript {

apply plugin: 'forge'

version = "1.7.10-2.9b"
version = "1.7.10-2.9c"
group= "wanion.unidict" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "UniDict"

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.7.10-2.9b";
public static final String MOD_VERSION = "1.7.10-2.9c";
public static final char SLASH = separatorChar;
public static final String MC_VERSION = "[1.7.10]";

Expand Down
155 changes: 95 additions & 60 deletions src/main/java/wanion/unidict/integration/CraftingIntegration.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,84 +10,119 @@

import com.google.common.collect.Lists;
import gnu.trove.map.TIntObjectMap;
import gnu.trove.map.TLongObjectMap;
import gnu.trove.map.hash.THashMap;
import gnu.trove.map.hash.TIntObjectHashMap;
import gnu.trove.map.hash.TLongObjectHashMap;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import wanion.unidict.Config;
import wanion.unidict.UniDict;
import wanion.unidict.UniOreDictionary;
import wanion.unidict.common.Util;
import wanion.unidict.helper.RecipeHelper;
import wanion.unidict.recipe.ForgeRecipeResearcher;
import wanion.unidict.recipe.IC2RecipeResearcher;
import wanion.unidict.recipe.IRecipeResearcher;
import wanion.unidict.recipe.VanillaRecipeResearcher;
import wanion.unidict.resource.UniResourceContainer;

import javax.annotation.Nonnull;
import java.util.*;

final class CraftingIntegration extends AbstractIntegrationThread
{
private final UniOreDictionary uniOreDictionary = UniDict.getDependencies().get(UniOreDictionary.class);
private final List<IRecipe> recipes = RecipeHelper.recipes;
private final Map<Class<? extends IRecipe>, IRecipeResearcher<? extends IRecipe, ? extends IRecipe>> shapedResearcherMap = new IdentityHashMap<>();
private final Map<Class<? extends IRecipe>, IRecipeResearcher<? extends IRecipe, ? extends IRecipe>> shapelessResearcherMap = new IdentityHashMap<>();
private final UniOreDictionary uniOreDictionary = UniDict.getDependencies().get(UniOreDictionary.class);
private final List<IRecipe> recipes = RecipeHelper.recipes;
private final Map<Class<? extends IRecipe>, IRecipeResearcher<? extends IRecipe, ? extends IRecipe>> shapedResearcherMap = new IdentityHashMap<>();
private final Map<Class<? extends IRecipe>, IRecipeResearcher<? extends IRecipe, ? extends IRecipe>> shapelessResearcherMap = new IdentityHashMap<>();

CraftingIntegration()
{
super("Crafting");
final List<IRecipeResearcher<? extends IRecipe, ? extends IRecipe>> researcherList = new ArrayList<>();
researcherList.add(new VanillaRecipeResearcher());
researcherList.add(new ForgeRecipeResearcher());
if (Config.ic2)
researcherList.add(new IC2RecipeResearcher());
researcherList.forEach(researcher -> {
researcher.getShapedRecipeClasses().forEach(shapedRecipeClass -> shapedResearcherMap.put(shapedRecipeClass, researcher));
researcher.getShapelessRecipeClasses().forEach(shapelessRecipeClass -> shapelessResearcherMap.put(shapelessRecipeClass, researcher));
});
}
CraftingIntegration()
{
super("Crafting");
final List<IRecipeResearcher<? extends IRecipe, ? extends IRecipe>> researcherList = new ArrayList<>();
researcherList.add(new VanillaRecipeResearcher());
researcherList.add(new ForgeRecipeResearcher());
if (Config.ic2)
researcherList.add(new IC2RecipeResearcher());
researcherList.forEach(researcher -> {
researcher.getShapedRecipeClasses().forEach(shapedRecipeClass -> shapedResearcherMap.put(shapedRecipeClass, researcher));
researcher.getShapelessRecipeClasses().forEach(shapelessRecipeClass -> shapelessResearcherMap.put(shapelessRecipeClass, researcher));
});
}

@Override
public String call()
{
try {
doTheResearch();
} catch (Exception e) { UniDict.getLogger().error(threadName + e); e.printStackTrace(); }
return threadName + "Why so many recipes? I had to deal with a lot of recipes.";
}
@Override
public String call()
{
try {
doTheResearch();
} catch (Exception e) {
UniDict.getLogger().error(threadName + e);
e.printStackTrace();
}
return threadName + "Why so many recipes? I had to deal with a lot of recipes.";
}

private void doTheResearch()
{
final Map<UniResourceContainer, TIntObjectMap<List<IRecipe>>> smartRecipeMap = new THashMap<>();
IRecipe bufferRecipe;
UniResourceContainer bufferContainer;
for (final Iterator<IRecipe> recipeIterator = recipes.iterator(); recipeIterator.hasNext(); ) {
boolean isShapeless = false;
if ((bufferRecipe = recipeIterator.next()) == null || (bufferContainer = resourceHandler.getContainer(bufferRecipe.getRecipeOutput())) == null || !(shapedResearcherMap.containsKey(bufferRecipe.getClass()) || (isShapeless = shapelessResearcherMap.containsKey(bufferRecipe.getClass()))))
continue;
final int recipeKey = !isShapeless ? shapedResearcherMap.get(bufferRecipe.getClass()).getShapedRecipeKey(bufferRecipe, resourceHandler) : shapelessResearcherMap.get(bufferRecipe.getClass()).getShapelessRecipeKey(bufferRecipe, resourceHandler);
if (recipeKey != 0 && bufferRecipe.getRecipeSize() > 0) {
final TIntObjectMap<List<IRecipe>> evenSmarterRecipeMap;
if (!smartRecipeMap.containsKey(bufferContainer))
smartRecipeMap.put(bufferContainer, evenSmarterRecipeMap = new TIntObjectHashMap<>());
else evenSmarterRecipeMap = smartRecipeMap.get(bufferContainer);
if (!evenSmarterRecipeMap.containsKey(recipeKey))
evenSmarterRecipeMap.put(recipeKey, Lists.newArrayList(bufferRecipe));
else evenSmarterRecipeMap.get(recipeKey).add(bufferRecipe);
}
recipeIterator.remove();
}
smartRecipeMap.forEach((container, evenSmartRecipeMap) -> evenSmartRecipeMap.forEachValue(recipeList -> {
final IRecipe recipe = recipeList.get(0);
final boolean isShapeless = shapelessResearcherMap.containsKey(recipe.getClass());
final IRecipeResearcher<? extends IRecipe, ? extends IRecipe> recipeResearcher = !isShapeless ? shapedResearcherMap.get(recipe.getClass()) : shapelessResearcherMap.get(recipe.getClass());
if (recipe.getRecipeSize() == 9)
recipes.add(isShapeless ? recipeResearcher.getNewShapedFromShapelessRecipe(recipe, resourceHandler, uniOreDictionary) : recipeResearcher.getNewShapedRecipe(recipe, resourceHandler, uniOreDictionary));
else if (recipe.getRecipeSize() == 1)
recipes.add(isShapeless ? recipeResearcher.getNewShapelessRecipe(recipe, resourceHandler, uniOreDictionary) : recipeResearcher.getNewShapelessFromShapedRecipe(recipe, resourceHandler, uniOreDictionary));
else
recipes.add(isShapeless ? recipeResearcher.getNewShapelessRecipe(recipe, resourceHandler, uniOreDictionary) : recipeResearcher.getNewShapedRecipe(recipe, resourceHandler, uniOreDictionary));
return true;
})
);
}
private void doTheResearch()
{
final Map<UniResourceContainer, TIntObjectMap<List<IRecipe>>> smartRecipeMap = new THashMap<>();
IRecipe bufferRecipe;
UniResourceContainer bufferContainer;
for (final Iterator<IRecipe> recipeIterator = recipes.iterator(); recipeIterator.hasNext(); ) {
boolean isShapeless = false;
if ((bufferRecipe = recipeIterator.next()) == null || (bufferContainer = resourceHandler.getContainer(bufferRecipe.getRecipeOutput())) == null || !(shapedResearcherMap.containsKey(bufferRecipe.getClass()) || (isShapeless = shapelessResearcherMap.containsKey(bufferRecipe.getClass()))))
continue;
final int recipeKey = !isShapeless ? shapedResearcherMap.get(bufferRecipe.getClass()).getShapedRecipeKey(bufferRecipe, resourceHandler) : shapelessResearcherMap.get(bufferRecipe.getClass()).getShapelessRecipeKey(bufferRecipe, resourceHandler);
if (recipeKey != 0 && bufferRecipe.getRecipeSize() > 0) {
final TIntObjectMap<List<IRecipe>> evenSmarterRecipeMap;
if (!smartRecipeMap.containsKey(bufferContainer))
smartRecipeMap.put(bufferContainer, evenSmarterRecipeMap = new TIntObjectHashMap<>());
else evenSmarterRecipeMap = smartRecipeMap.get(bufferContainer);
if (!evenSmarterRecipeMap.containsKey(recipeKey))
evenSmarterRecipeMap.put(recipeKey, Lists.newArrayList(bufferRecipe));
else evenSmarterRecipeMap.get(recipeKey).add(bufferRecipe);
}
recipeIterator.remove();
}
final TLongObjectMap<RecipeComparator> kindSpecificRecipeComparatorMap = Config.enableSpecificKindSort ? new TLongObjectHashMap<>() : null;
final RecipeComparator normalRecipeComparator = !Config.enableSpecificKindSort ? new RecipeComparator(Util.itemStackComparatorByModName) : null;
smartRecipeMap.forEach((container, evenSmartRecipeMap) -> evenSmartRecipeMap.forEachValue(recipeList -> {
final RecipeComparator recipeComparator;
if (kindSpecificRecipeComparatorMap != null) {
if (kindSpecificRecipeComparatorMap.containsKey(container.kind))
recipeComparator = kindSpecificRecipeComparatorMap.get(container.kind);
else
kindSpecificRecipeComparatorMap.put(container.kind, (recipeComparator = new RecipeComparator(container.getComparator())));
} else
recipeComparator = normalRecipeComparator;
recipeList.sort(recipeComparator);
final IRecipe recipe = recipeList.get(0);
final boolean isShapeless = shapelessResearcherMap.containsKey(recipe.getClass());
final IRecipeResearcher<? extends IRecipe, ? extends IRecipe> recipeResearcher = !isShapeless ? shapedResearcherMap.get(recipe.getClass()) : shapelessResearcherMap.get(recipe.getClass());
if (recipe.getRecipeSize() == 9)
recipes.add(isShapeless ? recipeResearcher.getNewShapedFromShapelessRecipe(recipe, resourceHandler, uniOreDictionary) : recipeResearcher.getNewShapedRecipe(recipe, resourceHandler, uniOreDictionary));
else if (recipe.getRecipeSize() == 1)
recipes.add(isShapeless ? recipeResearcher.getNewShapelessRecipe(recipe, resourceHandler, uniOreDictionary) : recipeResearcher.getNewShapelessFromShapedRecipe(recipe, resourceHandler, uniOreDictionary));
else
recipes.add(isShapeless ? recipeResearcher.getNewShapelessRecipe(recipe, resourceHandler, uniOreDictionary) : recipeResearcher.getNewShapedRecipe(recipe, resourceHandler, uniOreDictionary));
return true;
})
);
}

private class RecipeComparator implements Comparator<IRecipe>
{
private final Comparator<ItemStack> itemStackComparator;

private RecipeComparator(@Nonnull final Comparator<ItemStack> itemStackComparator)
{
this.itemStackComparator = itemStackComparator;
}

@Override
public int compare(IRecipe o1, IRecipe o2)
{
return itemStackComparator.compare(o1.getRecipeOutput(), o2.getRecipeOutput());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,18 @@
import java.util.Collections;
import java.util.List;

public class ForgeRecipeResearcher implements IRecipeResearcher<ShapedOreRecipe, ShapelessOreRecipe>
public final class ForgeRecipeResearcher implements IRecipeResearcher<ShapedOreRecipe, ShapelessOreRecipe>
{
@Override
public int getShapedRecipeKey(@Nonnull final IRecipe recipe, @Nonnull final ResourceHandler resourceHandler)
{
return MetaItem.getCumulative(((ShapedOreRecipe) recipe).getInput(), resourceHandler) + MetaItem.get(resourceHandler.getMainItemStack(recipe.getRecipeOutput()));
return MetaItem.getCumulative(((ShapedOreRecipe) recipe).getInput(), resourceHandler);
}

@Override
public int getShapelessRecipeKey(@Nonnull final IRecipe recipe, @Nonnull final ResourceHandler resourceHandler)
{
return MetaItem.getCumulative(((ShapelessOreRecipe) recipe).getInput().toArray(), resourceHandler) + MetaItem.get(resourceHandler.getMainItemStack(recipe.getRecipeOutput()));
return MetaItem.getCumulative(((ShapelessOreRecipe) recipe).getInput().toArray(), resourceHandler);
}

@SuppressWarnings("unchecked")
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/wanion/unidict/recipe/IC2RecipeResearcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import java.util.Collections;
import java.util.List;

public class IC2RecipeResearcher implements IRecipeResearcher<AdvRecipe, AdvShapelessRecipe>
public final class IC2RecipeResearcher implements IRecipeResearcher<AdvRecipe, AdvShapelessRecipe>
{
@Override
public int getShapedRecipeKey(@Nonnull IRecipe recipe, @Nonnull final ResourceHandler resourceHandler)
Expand All @@ -43,7 +43,7 @@ else if (input instanceof List) {
} else if (input instanceof IRecipeInput)
recipeId += MetaItem.get(((IRecipeInput) input).getInputs().get(0));
}
return recipeId + MetaItem.get(resourceHandler.getMainItemStack(recipe.getRecipeOutput()));
return recipeId;
}

@Override
Expand All @@ -63,7 +63,7 @@ else if (obj instanceof IRecipeInput)
recipeId += MetaItem.get(((IRecipeInput) obj).getInputs().get(0));
}
}
return recipeId + MetaItem.get(resourceHandler.getMainItemStack(recipe.getRecipeOutput()));
return recipeId;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,18 @@
import java.util.Collections;
import java.util.List;

public class VanillaRecipeResearcher implements IRecipeResearcher<ShapedRecipes, ShapelessRecipes>
public final class VanillaRecipeResearcher implements IRecipeResearcher<ShapedRecipes, ShapelessRecipes>
{
@Override
public int getShapedRecipeKey(@Nonnull final IRecipe recipe, @Nonnull final ResourceHandler resourceHandler)
{
return MetaItem.getCumulative(((ShapedRecipes) recipe).recipeItems, resourceHandler) + MetaItem.get(resourceHandler.getMainItemStack(recipe.getRecipeOutput()));
return MetaItem.getCumulative(((ShapedRecipes) recipe).recipeItems, resourceHandler);
}

@Override
public int getShapelessRecipeKey(@Nonnull final IRecipe recipe, @Nonnull final ResourceHandler resourceHandler)
{
return MetaItem.getCumulative(((ShapelessRecipes) recipe).recipeItems.toArray(), resourceHandler) + MetaItem.get(resourceHandler.getMainItemStack(recipe.getRecipeOutput()));
return MetaItem.getCumulative(((ShapelessRecipes) recipe).recipeItems.toArray(), resourceHandler);
}

@Override
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": "2.9b",
"version": "2.9c",
"mcversion": "${mcversion}",
"url": "http://minecraft.curseforge.com/projects/unidict",
"updateUrl": "",
Expand Down

0 comments on commit 722fb8a

Please sign in to comment.