diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/gregtech/api/util/GT_Recipe.java | 36 | ||||
-rw-r--r-- | src/main/java/gregtech/api/util/GT_RecipeBuilder.java | 24 |
2 files changed, 58 insertions, 2 deletions
diff --git a/src/main/java/gregtech/api/util/GT_Recipe.java b/src/main/java/gregtech/api/util/GT_Recipe.java index a232096c85..6d660c67f6 100644 --- a/src/main/java/gregtech/api/util/GT_Recipe.java +++ b/src/main/java/gregtech/api/util/GT_Recipe.java @@ -5,6 +5,7 @@ import static gregtech.api.enums.Mods.GTPlusPlus; import static gregtech.api.enums.Mods.GregTech; import static gregtech.api.enums.Mods.NEICustomDiagrams; import static gregtech.api.enums.Mods.Railcraft; +import static gregtech.api.util.GT_RecipeBuilder.handleRecipeCollision; import static gregtech.api.util.GT_RecipeConstants.ADDITIVE_AMOUNT; import static gregtech.api.util.GT_RecipeMapUtil.*; import static gregtech.api.util.GT_Utility.formatNumbers; @@ -3738,7 +3739,40 @@ public class GT_Recipe implements Comparable<GT_Recipe> { if (specialHandler != null) r = specialHandler.apply(r); if (r == null) continue; if (checkForCollision - && findRecipe(null, false, true, Long.MAX_VALUE, r.mFluidInputs, r.mInputs) != null) continue; + && findRecipe(null, false, true, Long.MAX_VALUE, r.mFluidInputs, r.mInputs) != null) { + StringBuilder errorInfo = new StringBuilder(); + boolean hasAnEntry = false; + for (FluidStack fStack : r.mFluidInputs) { + if (fStack == null) { + continue; + } + String s = fStack.getLocalizedName(); + if (s == null) { + continue; + } + if (hasAnEntry) { + errorInfo.append("+") + .append(s); + } else { + errorInfo.append(s); + } + hasAnEntry = true; + } + for (ItemStack iStack : r.mInputs) { + if (iStack == null) { + continue; + } + String s = iStack.getDisplayName(); + if (hasAnEntry) { + errorInfo.append("+" + s); + } else { + errorInfo.append(s); + } + hasAnEntry = true; + } + handleRecipeCollision(errorInfo.toString()); + continue; + } ret.add(add(r)); } if (!ret.isEmpty()) { diff --git a/src/main/java/gregtech/api/util/GT_RecipeBuilder.java b/src/main/java/gregtech/api/util/GT_RecipeBuilder.java index bdd09f0a34..0553d08805 100644 --- a/src/main/java/gregtech/api/util/GT_RecipeBuilder.java +++ b/src/main/java/gregtech/api/util/GT_RecipeBuilder.java @@ -1,6 +1,14 @@ package gregtech.api.util; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; import java.util.function.Function; import javax.annotation.Nonnull; @@ -126,6 +134,20 @@ public class GT_RecipeBuilder { } } + public static void handleRecipeCollision(String details) { + if (!PANIC_MODE && !DEBUG_MODE) { + return; + } + GT_Log.err.print("Recipe collision resulting in recipe loss detected with "); + GT_Log.err.println(details); + if (PANIC_MODE) { + throw new IllegalArgumentException("Recipe Collision"); + } else { + // place a breakpoint here to catch all these issues + new IllegalArgumentException().printStackTrace(GT_Log.err); + } + } + /** * Non-OreDicted item inputs. Assumes input is unified. */ |