diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/gregtech/api/util/GT_Recipe.java | 33 | ||||
-rw-r--r-- | src/main/java/gregtech/nei/GT_NEI_AssLineHandler.java | 17 | ||||
-rw-r--r-- | src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java | 18 |
3 files changed, 54 insertions, 14 deletions
diff --git a/src/main/java/gregtech/api/util/GT_Recipe.java b/src/main/java/gregtech/api/util/GT_Recipe.java index 5a077b4171..a50c925e61 100644 --- a/src/main/java/gregtech/api/util/GT_Recipe.java +++ b/src/main/java/gregtech/api/util/GT_Recipe.java @@ -88,11 +88,11 @@ public class GT_Recipe implements Comparable<GT_Recipe> { /** * Stores which mod added this recipe */ - public ModContainer owner = null; + public List<ModContainer> owners = new ArrayList<>(); /** * Stores stack traces where this recipe was added */ - public List<StackTraceElement> stackTraces = null; + public List<List<StackTraceElement>> stackTraces = new ArrayList<>(); private GT_Recipe(GT_Recipe aRecipe) { mInputs = GT_Utility.copyStackArray((Object[]) aRecipe.mInputs); @@ -109,6 +109,7 @@ public class GT_Recipe implements Comparable<GT_Recipe> { mFakeRecipe = aRecipe.mFakeRecipe; mEnabled = aRecipe.mEnabled; mHidden = aRecipe.mHidden; + owners = new ArrayList<>(aRecipe.owners); reloadOwner(); } @@ -570,19 +571,39 @@ public class GT_Recipe implements Comparable<GT_Recipe> { } public void reloadOwner() { - this.owner = Loader.instance().activeModContainer(); + setOwner(Loader.instance().activeModContainer()); final List<String> excludedClasses = Arrays.asList( "java.lang.Thread", "gregtech.api.util.GT_Recipe", "gregtech.common.GT_RecipeAdder"); if (GT_Mod.gregtechproxy.mNEIRecipeOwnerStackTrace) { - this.stackTraces = new ArrayList<>(); + List<StackTraceElement> toAdd = new ArrayList<>(); for (StackTraceElement stackTrace : Thread.currentThread().getStackTrace()) { - if (!excludedClasses.stream().anyMatch(c -> stackTrace.getClassName().contains(c))) { - this.stackTraces.add(stackTrace); + if (excludedClasses.stream().noneMatch(c -> stackTrace.getClassName().contains(c))) { + toAdd.add(stackTrace); } } + stackTraces.add(toAdd); + } + } + + public void setOwner(ModContainer newOwner) { + ModContainer oldOwner = owners.size() > 0 ? this.owners.get(owners.size() - 1) : null; + if (newOwner != null && newOwner != oldOwner) { + owners.add(newOwner); + } + } + + /** + * Use in case {@link Loader#activeModContainer()} isn't helpful + */ + public void setOwner(String modId) { + for (ModContainer mod : Loader.instance().getModList()) { + if (mod.getModId().equals(modId)) { + setOwner(mod); + return; + } } } diff --git a/src/main/java/gregtech/nei/GT_NEI_AssLineHandler.java b/src/main/java/gregtech/nei/GT_NEI_AssLineHandler.java index d98aa99ae7..4b05051528 100644 --- a/src/main/java/gregtech/nei/GT_NEI_AssLineHandler.java +++ b/src/main/java/gregtech/nei/GT_NEI_AssLineHandler.java @@ -278,14 +278,23 @@ public class GT_NEI_AssLineHandler extends RecipeMapHandler { specialDrew = true; } int y = 123 + (specialDrew ? 10 : 0); - if (GT_Mod.gregtechproxy.mNEIRecipeOwner && recipe.owner != null) { - drawText(10, y, EnumChatFormatting.ITALIC + GT_Utility.trans("225", "Recipe by: ") + recipe.owner.getName(), 0xFF000000); - y += 10; + if (GT_Mod.gregtechproxy.mNEIRecipeOwner) { + if (recipe.owners.size() > 1) { + drawText(10, y, EnumChatFormatting.ITALIC + GT_Utility.trans("226", "Original Recipe by: ") + recipe.owners.get(0).getName(), 0xFF000000); + y += 10; + for (int i = 1; i < recipe.owners.size(); i++) { + drawText(10, y, EnumChatFormatting.ITALIC + GT_Utility.trans("227", "Modified by: ") + recipe.owners.get(i).getName(), 0xFF000000); + y += 10; + } + } else if (recipe.owners.size() > 0) { + drawText(10, y, EnumChatFormatting.ITALIC + GT_Utility.trans("225", "Recipe by: ") + recipe.owners.get(0).getName(), 0xFF000000); + y += 10; + } } if (GT_Mod.gregtechproxy.mNEIRecipeOwnerStackTrace && recipe.stackTraces != null) { drawText(10, y, "stackTrace:", 0xFF000000); y += 10; - for (StackTraceElement stackTrace : recipe.stackTraces) { + for (StackTraceElement stackTrace : recipe.stackTraces.get(0)) { drawText(10, y, stackTrace.toString(), 0xFF000000); y += 10; } diff --git a/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java b/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java index 554c724889..1d281ce158 100644 --- a/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java +++ b/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java @@ -403,14 +403,24 @@ public class GT_NEI_DefaultHandler extends RecipeMapHandler { if (drawOptionalLine(lineCounter, getSpecialInfo(recipe.mSpecialValue))) { lineCounter++; } - if (GT_Mod.gregtechproxy.mNEIRecipeOwner && recipe.owner != null) { - drawLine(lineCounter, EnumChatFormatting.ITALIC + GT_Utility.trans("225", "Recipe by: ") + recipe.owner.getName()); - lineCounter++; + if (GT_Mod.gregtechproxy.mNEIRecipeOwner) { + if (recipe.owners.size() > 1) { + drawLine(lineCounter, EnumChatFormatting.ITALIC + GT_Utility.trans("226", "Original Recipe by: ") + recipe.owners.get(0).getName()); + lineCounter++; + for (int i = 1; i < recipe.owners.size(); i++) { + drawLine(lineCounter, EnumChatFormatting.ITALIC + GT_Utility.trans("227", "Modified by: ") + recipe.owners.get(i).getName()); + lineCounter++; + } + } else if (recipe.owners.size() > 0) { + drawLine(lineCounter, EnumChatFormatting.ITALIC + GT_Utility.trans("225", "Recipe by: ") + recipe.owners.get(0).getName()); + lineCounter++; + } } if (GT_Mod.gregtechproxy.mNEIRecipeOwnerStackTrace && recipe.stackTraces != null) { drawLine(lineCounter, "stackTrace:"); lineCounter++; - for (StackTraceElement stackTrace : recipe.stackTraces) { + // todo: good way to show all stacktraces + for (StackTraceElement stackTrace : recipe.stackTraces.get(0)) { drawLine(lineCounter, stackTrace.toString()); lineCounter++; } |