From ecc3a2a5e49ecf76b6811d8f42daa1ceb79ce590 Mon Sep 17 00:00:00 2001 From: miozune Date: Mon, 18 Jul 2022 11:27:19 +0900 Subject: Allow showing multiple recipe owners (#1136) --- src/main/java/gregtech/api/util/GT_Recipe.java | 33 ++++++++++++++++++---- .../java/gregtech/nei/GT_NEI_AssLineHandler.java | 17 ++++++++--- .../java/gregtech/nei/GT_NEI_DefaultHandler.java | 18 +++++++++--- 3 files changed, 54 insertions(+), 14 deletions(-) (limited to 'src/main/java/gregtech') 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 { /** * Stores which mod added this recipe */ - public ModContainer owner = null; + public List owners = new ArrayList<>(); /** * Stores stack traces where this recipe was added */ - public List stackTraces = null; + public List> 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 { 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 { } public void reloadOwner() { - this.owner = Loader.instance().activeModContainer(); + setOwner(Loader.instance().activeModContainer()); final List 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 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++; } -- cgit