Some more work on DynEMC
This commit is contained in:
parent
87f1108632
commit
9ac6722860
5 changed files with 66 additions and 50 deletions
|
@ -169,6 +169,7 @@ public class EquivalentExchange3 {
|
||||||
AddonHandler.init();
|
AddonHandler.init();
|
||||||
|
|
||||||
// Initialize the DynEMC system
|
// Initialize the DynEMC system
|
||||||
|
@SuppressWarnings("unused")
|
||||||
DynEMC dynEMC = DynEMC.getInstance();
|
DynEMC dynEMC = DynEMC.getInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,11 @@ public class LogHelper {
|
||||||
log(Level.SEVERE, message);
|
log(Level.SEVERE, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void debug(String message) {
|
||||||
|
|
||||||
|
log(Level.WARNING, "[DEBUG] " + message);
|
||||||
|
}
|
||||||
|
|
||||||
public static void warning(String message) {
|
public static void warning(String message) {
|
||||||
|
|
||||||
log(Level.WARNING, message);
|
log(Level.WARNING, message);
|
||||||
|
|
|
@ -34,7 +34,7 @@ public class RecipeHelper {
|
||||||
*
|
*
|
||||||
* @return A list of CustomWrappedStacks that contains all wild card meta ItemStacks in the vanilla Crafting Manager
|
* @return A list of CustomWrappedStacks that contains all wild card meta ItemStacks in the vanilla Crafting Manager
|
||||||
*/
|
*/
|
||||||
public static ArrayList<CustomWrappedStack> discoverWildCards() {
|
public static ArrayList<CustomWrappedStack> populateWildCards() {
|
||||||
|
|
||||||
ArrayList<CustomWrappedStack> wildCards = new ArrayList<CustomWrappedStack>();
|
ArrayList<CustomWrappedStack> wildCards = new ArrayList<CustomWrappedStack>();
|
||||||
|
|
||||||
|
@ -87,7 +87,6 @@ public class RecipeHelper {
|
||||||
public static ArrayList<CustomWrappedStack> getRecipeInputs(IRecipe recipe) {
|
public static ArrayList<CustomWrappedStack> getRecipeInputs(IRecipe recipe) {
|
||||||
|
|
||||||
ArrayList<CustomWrappedStack> recipeInputs = new ArrayList<CustomWrappedStack>();
|
ArrayList<CustomWrappedStack> recipeInputs = new ArrayList<CustomWrappedStack>();
|
||||||
ItemStack itemStack = null;
|
|
||||||
OreStack oreStack = null;
|
OreStack oreStack = null;
|
||||||
|
|
||||||
if (recipe instanceof ShapedRecipes) {
|
if (recipe instanceof ShapedRecipes) {
|
||||||
|
@ -96,11 +95,7 @@ public class RecipeHelper {
|
||||||
|
|
||||||
for (int i = 0; i < shapedRecipe.recipeItems.length; i++) {
|
for (int i = 0; i < shapedRecipe.recipeItems.length; i++) {
|
||||||
if (shapedRecipe.recipeItems[i] instanceof ItemStack) {
|
if (shapedRecipe.recipeItems[i] instanceof ItemStack) {
|
||||||
|
recipeInputs.add(new CustomWrappedStack(shapedRecipe.recipeItems[i]));
|
||||||
itemStack = shapedRecipe.recipeItems[i];
|
|
||||||
itemStack.stackSize = 1;
|
|
||||||
|
|
||||||
recipeInputs.add(new CustomWrappedStack(itemStack));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -110,11 +105,7 @@ public class RecipeHelper {
|
||||||
|
|
||||||
for (Object object : shapelessRecipe.recipeItems) {
|
for (Object object : shapelessRecipe.recipeItems) {
|
||||||
if (object instanceof ItemStack) {
|
if (object instanceof ItemStack) {
|
||||||
|
recipeInputs.add(new CustomWrappedStack(object));
|
||||||
itemStack = (ItemStack) object;
|
|
||||||
itemStack.stackSize = 1;
|
|
||||||
|
|
||||||
recipeInputs.add(new CustomWrappedStack(itemStack));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -132,7 +123,6 @@ public class RecipeHelper {
|
||||||
if (!shapedOreRecipeList.isEmpty()) {
|
if (!shapedOreRecipeList.isEmpty()) {
|
||||||
|
|
||||||
oreStack = new OreStack((ItemStack) shapedOreRecipeList.get(0));
|
oreStack = new OreStack((ItemStack) shapedOreRecipeList.get(0));
|
||||||
oreStack.stackSize = 1;
|
|
||||||
|
|
||||||
recipeInputs.add(new CustomWrappedStack(oreStack));
|
recipeInputs.add(new CustomWrappedStack(oreStack));
|
||||||
}
|
}
|
||||||
|
@ -141,11 +131,7 @@ public class RecipeHelper {
|
||||||
* Else it is possibly an ItemStack
|
* Else it is possibly an ItemStack
|
||||||
*/
|
*/
|
||||||
else if (shapedOreRecipe.getInput()[i] instanceof ItemStack) {
|
else if (shapedOreRecipe.getInput()[i] instanceof ItemStack) {
|
||||||
|
recipeInputs.add(new CustomWrappedStack(shapedOreRecipe.getInput()[i]));
|
||||||
itemStack = (ItemStack) shapedOreRecipe.getInput()[i];
|
|
||||||
itemStack.stackSize = 1;
|
|
||||||
|
|
||||||
recipeInputs.add(new CustomWrappedStack(itemStack));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -160,16 +146,12 @@ public class RecipeHelper {
|
||||||
if (!shapelessOreRecipeList.isEmpty()) {
|
if (!shapelessOreRecipeList.isEmpty()) {
|
||||||
|
|
||||||
oreStack = new OreStack((ItemStack) shapelessOreRecipeList.get(0));
|
oreStack = new OreStack((ItemStack) shapelessOreRecipeList.get(0));
|
||||||
oreStack.stackSize = 1;
|
|
||||||
|
|
||||||
recipeInputs.add(new CustomWrappedStack(oreStack));
|
recipeInputs.add(new CustomWrappedStack(oreStack));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (object instanceof ItemStack) {
|
else if (object instanceof ItemStack) {
|
||||||
itemStack = (ItemStack) object;
|
recipeInputs.add(new CustomWrappedStack(object));
|
||||||
itemStack.stackSize = 1;
|
|
||||||
|
|
||||||
recipeInputs.add(new CustomWrappedStack(itemStack));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -187,6 +169,10 @@ public class RecipeHelper {
|
||||||
if (customWrappedStack.getWrappedStack() instanceof ItemStack) {
|
if (customWrappedStack.getWrappedStack() instanceof ItemStack) {
|
||||||
return getReverseRecipes((ItemStack) customWrappedStack.getWrappedStack());
|
return getReverseRecipes((ItemStack) customWrappedStack.getWrappedStack());
|
||||||
}
|
}
|
||||||
|
else if (customWrappedStack.getWrappedStack() instanceof OreStack) {
|
||||||
|
// TODO Return recipes for OreStacks
|
||||||
|
LogHelper.debug("ReverseRecipe for OreStack: " + customWrappedStack.toString());
|
||||||
|
}
|
||||||
|
|
||||||
return new ArrayList<IRecipe>();
|
return new ArrayList<IRecipe>();
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ import com.pahimar.ee3.core.util.RecipeHelper;
|
||||||
import com.pahimar.ee3.emc.graph.WeightedDirectedGraph;
|
import com.pahimar.ee3.emc.graph.WeightedDirectedGraph;
|
||||||
import com.pahimar.ee3.emc.graph.WeightedEdge;
|
import com.pahimar.ee3.emc.graph.WeightedEdge;
|
||||||
import com.pahimar.ee3.item.CustomWrappedStack;
|
import com.pahimar.ee3.item.CustomWrappedStack;
|
||||||
import com.pahimar.ee3.item.crafting.RecipeManager;
|
import com.pahimar.ee3.item.crafting.RecipeRegistry;
|
||||||
|
|
||||||
public class DynEMC {
|
public class DynEMC {
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ public class DynEMC {
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
|
|
||||||
RecipeManager recipeManager = RecipeManager.getInstance();
|
RecipeRegistry recipeManager = RecipeRegistry.getInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void populateItemList() {
|
private void populateItemList() {
|
||||||
|
@ -250,29 +250,29 @@ public class DynEMC {
|
||||||
|
|
||||||
public void printDebugDump() {
|
public void printDebugDump() {
|
||||||
|
|
||||||
LogHelper.info("***** START NODES *****");
|
LogHelper.debug("***** START NODES *****");
|
||||||
Iterator<CustomWrappedStack> nodeIter = graph.iterator();
|
Iterator<CustomWrappedStack> nodeIter = graph.iterator();
|
||||||
while (nodeIter.hasNext()) {
|
while (nodeIter.hasNext()) {
|
||||||
CustomWrappedStack node = nodeIter.next();
|
CustomWrappedStack node = nodeIter.next();
|
||||||
LogHelper.info("Node: " + node);
|
LogHelper.debug("Node: " + node);
|
||||||
}
|
}
|
||||||
LogHelper.info("***** END NODES *****");
|
LogHelper.debug("***** END NODES *****");
|
||||||
|
|
||||||
LogHelper.info("***** START EDGES FROM *****");
|
LogHelper.debug("***** START EDGES FROM *****");
|
||||||
nodeIter = graph.iterator();
|
nodeIter = graph.iterator();
|
||||||
while (nodeIter.hasNext()) {
|
while (nodeIter.hasNext()) {
|
||||||
CustomWrappedStack node = nodeIter.next();
|
CustomWrappedStack node = nodeIter.next();
|
||||||
Set<WeightedEdge<CustomWrappedStack>> edgesFrom = graph.edgesFrom(node);
|
Set<WeightedEdge<CustomWrappedStack>> edgesFrom = graph.edgesFrom(node);
|
||||||
for (WeightedEdge<CustomWrappedStack> edge : edgesFrom) {
|
for (WeightedEdge<CustomWrappedStack> edge : edgesFrom) {
|
||||||
LogHelper.info("Crafting Output: " + node);
|
LogHelper.debug("Crafting Output: " + node);
|
||||||
LogHelper.info("Crafting Input: " + edge.getTarget());
|
LogHelper.debug("Crafting Input: " + edge.getTarget());
|
||||||
LogHelper.info("Weight: " + edge.getWeight());
|
LogHelper.debug("Weight: " + edge.getWeight());
|
||||||
LogHelper.info("");
|
LogHelper.debug("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LogHelper.info("***** END EDGES FROM *****");
|
LogHelper.debug("***** END EDGES FROM *****");
|
||||||
|
|
||||||
LogHelper.info("***** START EDGES TO *****");
|
LogHelper.debug("***** START EDGES TO *****");
|
||||||
nodeIter = graph.iterator();
|
nodeIter = graph.iterator();
|
||||||
while (nodeIter.hasNext()) {
|
while (nodeIter.hasNext()) {
|
||||||
CustomWrappedStack node = nodeIter.next();
|
CustomWrappedStack node = nodeIter.next();
|
||||||
|
@ -280,13 +280,13 @@ public class DynEMC {
|
||||||
Iterator<WeightedEdge<CustomWrappedStack>> edgeIter = edgesTo.iterator();
|
Iterator<WeightedEdge<CustomWrappedStack>> edgeIter = edgesTo.iterator();
|
||||||
while (edgeIter.hasNext()) {
|
while (edgeIter.hasNext()) {
|
||||||
WeightedEdge<CustomWrappedStack> edge = edgeIter.next();
|
WeightedEdge<CustomWrappedStack> edge = edgeIter.next();
|
||||||
LogHelper.info("From: " + node);
|
LogHelper.debug("From: " + node);
|
||||||
LogHelper.info("To: " + edge.getTarget());
|
LogHelper.debug("To: " + edge.getTarget());
|
||||||
LogHelper.info("Weight: " + edge.getWeight());
|
LogHelper.debug("Weight: " + edge.getWeight());
|
||||||
LogHelper.info("");
|
LogHelper.debug("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LogHelper.info("***** END EDGES TO *****");
|
LogHelper.debug("***** END EDGES TO *****");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -4,34 +4,39 @@ import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.crafting.IRecipe;
|
||||||
|
|
||||||
import com.google.common.collect.HashMultimap;
|
import com.google.common.collect.HashMultimap;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
|
import com.pahimar.ee3.core.util.LogHelper;
|
||||||
|
import com.pahimar.ee3.core.util.OreStack;
|
||||||
import com.pahimar.ee3.core.util.RecipeHelper;
|
import com.pahimar.ee3.core.util.RecipeHelper;
|
||||||
import com.pahimar.ee3.item.CustomWrappedStack;
|
import com.pahimar.ee3.item.CustomWrappedStack;
|
||||||
|
|
||||||
public class RecipeManager {
|
public class RecipeRegistry {
|
||||||
|
|
||||||
private static RecipeManager recipeManager = null;
|
private static RecipeRegistry recipeRegistry = null;
|
||||||
|
|
||||||
private Multimap<CustomWrappedStack, List<CustomWrappedStack>> recipeMap;
|
private Multimap<CustomWrappedStack, List<CustomWrappedStack>> recipeMap;
|
||||||
|
|
||||||
private List<CustomWrappedStack> wildCardStacks;
|
@SuppressWarnings("unused")
|
||||||
|
private List<CustomWrappedStack> wildCardList;
|
||||||
|
|
||||||
private RecipeManager() {
|
private RecipeRegistry() {
|
||||||
|
|
||||||
recipeMap = HashMultimap.create();
|
recipeMap = HashMultimap.create();
|
||||||
wildCardStacks = RecipeHelper.discoverWildCards();
|
wildCardList = RecipeHelper.populateWildCards();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static RecipeManager getInstance() {
|
public static RecipeRegistry getInstance() {
|
||||||
|
|
||||||
if (recipeManager == null) {
|
if (recipeRegistry == null) {
|
||||||
recipeManager = new RecipeManager();
|
recipeRegistry = new RecipeRegistry();
|
||||||
}
|
}
|
||||||
|
|
||||||
return recipeManager;
|
return recipeRegistry;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasRecipe(CustomWrappedStack customWrappedStack) {
|
public boolean hasRecipe(CustomWrappedStack customWrappedStack) {
|
||||||
|
@ -68,9 +73,10 @@ public class RecipeManager {
|
||||||
|
|
||||||
public void addRecipe(CustomWrappedStack recipeOutput, List<?> recipeInputs) {
|
public void addRecipe(CustomWrappedStack recipeOutput, List<?> recipeInputs) {
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
ArrayList<CustomWrappedStack> collatedStacks = new ArrayList<CustomWrappedStack>();
|
ArrayList<CustomWrappedStack> collatedStacks = new ArrayList<CustomWrappedStack>();
|
||||||
|
|
||||||
CustomWrappedStack wrappedInput = null;
|
CustomWrappedStack wrappedInputStack = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For every input in the input list, check to see if we have discovered
|
* For every input in the input list, check to see if we have discovered
|
||||||
|
@ -79,6 +85,24 @@ public class RecipeManager {
|
||||||
*/
|
*/
|
||||||
for (Object object : recipeInputs) {
|
for (Object object : recipeInputs) {
|
||||||
|
|
||||||
|
if (object instanceof ItemStack || object instanceof OreStack) {
|
||||||
|
wrappedInputStack = new CustomWrappedStack(object);
|
||||||
|
}
|
||||||
|
else if (object instanceof CustomWrappedStack) {
|
||||||
|
wrappedInputStack = (CustomWrappedStack) object;
|
||||||
|
}
|
||||||
|
|
||||||
|
LogHelper.warning(wrappedInputStack.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO Temporary for testing, remove this later
|
||||||
|
static {
|
||||||
|
CustomWrappedStack recipeOutput = new CustomWrappedStack(new ItemStack(Item.stick));
|
||||||
|
List<IRecipe> recipes = RecipeHelper.getReverseRecipes(recipeOutput);
|
||||||
|
|
||||||
|
for (IRecipe recipe : recipes) {
|
||||||
|
recipeRegistry.addRecipe(recipeOutput, RecipeHelper.getRecipeInputs(recipe));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue