Fixed recipe map glitched recipe search
This commit is contained in:
parent
655c5daf2f
commit
d7fb3faa18
1 changed files with 21 additions and 27 deletions
|
@ -1,11 +1,14 @@
|
||||||
package gregtechmod.api.recipe;
|
package gregtechmod.api.recipe;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.function.IntConsumer;
|
import java.util.function.IntConsumer;
|
||||||
|
|
||||||
import gregtechmod.api.util.GT_RecipeException;
|
import gregtechmod.api.util.GT_RecipeException;
|
||||||
|
@ -63,44 +66,35 @@ public class RecipeMap<F extends RecipeFactory<F>> {
|
||||||
public Recipe findRecipe(List<ItemStack> input, List<FluidStack> fluidInputs) {
|
public Recipe findRecipe(List<ItemStack> input, List<FluidStack> fluidInputs) {
|
||||||
if (input.size() < minInputs)
|
if (input.size() < minInputs)
|
||||||
throw new IllegalArgumentException("Inputs of machine can not be smaller than minimum RecipeMap inputs amount");
|
throw new IllegalArgumentException("Inputs of machine can not be smaller than minimum RecipeMap inputs amount");
|
||||||
// FIXME fix this shit, recipe should not be searched only for first item
|
Set<Recipe> recipesTotal = new HashSet<>();
|
||||||
ItemStack first = null;
|
for (FluidStack fluid : fluidInputs) {
|
||||||
for (ItemStack stack : input) {
|
if (GT_Utility.isFluidStackValid(fluid)) {
|
||||||
if (GT_Utility.isStackValid(stack)) {
|
List<Recipe> recipesFluid = MAPPINGS.get(GT_Utility.fluidStackToInt(fluid));
|
||||||
first = stack;
|
if (recipesFluid != null)
|
||||||
break;
|
recipesTotal.addAll(recipesFluid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluidStack fFluid = null;
|
for (ItemStack item : input) {
|
||||||
for (FluidStack fluid : fluidInputs) {
|
if (GT_Utility.isStackValid(item)) {
|
||||||
if (GT_Utility.isFluidStackValid(fluid)) {
|
List<Recipe> recipesItems = MAPPINGS.get(GT_Utility.stackToInt(item));
|
||||||
fFluid = fluid;
|
List<Recipe> recipesItemsWild = MAPPINGS.get(GT_Utility.stackToWildcard(item));
|
||||||
break;
|
if (recipesItems != null)
|
||||||
|
recipesTotal.addAll(recipesItems);
|
||||||
|
if (recipesItemsWild != null)
|
||||||
|
recipesTotal.addAll(recipesItemsWild);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Recipe result = null;
|
Recipe result = null;
|
||||||
if (GT_Utility.isFluidStackValid(fFluid)) {
|
if (!recipesTotal.isEmpty()) {
|
||||||
List<Recipe> recipesFluid = MAPPINGS.get(GT_Utility.fluidStackToInt(fFluid));
|
result = findRecipe(recipesTotal, input, fluidInputs);
|
||||||
if (recipesFluid != null)
|
|
||||||
result = findRecipe(recipesFluid, input, fluidInputs);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result == null && GT_Utility.isStackValid(first)) {
|
|
||||||
List<Recipe> recipes = MAPPINGS.get(GT_Utility.stackToInt(first));
|
|
||||||
List<Recipe> recipesWild = MAPPINGS.get(GT_Utility.stackToWildcard(first));
|
|
||||||
|
|
||||||
if (recipes != null)
|
|
||||||
result = findRecipe(recipes, input, fluidInputs);
|
|
||||||
if (result == null && recipesWild != null)
|
|
||||||
result = findRecipe(recipesWild, input, fluidInputs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result != null && result.enabled ? result : null;
|
return result != null && result.enabled ? result : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Recipe findRecipe(List<Recipe> recipes, List<ItemStack> input, List<FluidStack> fluidInputs) {
|
private Recipe findRecipe(Collection<Recipe> recipes, List<ItemStack> input, List<FluidStack> fluidInputs) {
|
||||||
if (recipes != null) {
|
if (recipes != null) {
|
||||||
for (Recipe recipe : recipes) {
|
for (Recipe recipe : recipes) {
|
||||||
if (recipe.matches(false, input, fluidInputs)) {
|
if (recipe.matches(false, input, fluidInputs)) {
|
||||||
|
|
Loading…
Reference in a new issue