Skip to content

Commit 7a2cd5f

Browse files
authored
Merge pull request #16 from GTNewHorizons/research-prerequisites
display the research prerequisites in nei
2 parents 638bd1b + 7d96ba8 commit 7a2cd5f

File tree

9 files changed

+446
-43
lines changed

9 files changed

+446
-43
lines changed

dependencies.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ dependencies {
77
compile 'curse.maven:thaumcraft-nei-plugin-225095:2241913'
88

99
compileOnly 'org.jetbrains:annotations:23.0.0'
10+
compileOnly 'curse.maven:automagy-222153:2285272'
1011

1112
runtime 'com.github.GTNewHorizons:Baubles:1.0.1.14:dev'
1213
}

src/main/java/ru/timeconqueror/tcneiadditions/TCNEIAdditions.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class TCNEIAdditions {
2020
public static final String NAME = "Thaumcraft NEI Additions";
2121
public static final String VERSION = "GRADLETOKEN_VERSION";
2222
public static final String DEPENDENCIES =
23-
"required-after:Thaumcraft;required-after:thaumcraftneiplugin;required-after:spongemixins@[1.2.0,);";
23+
"required-after:Thaumcraft;required-after:thaumcraftneiplugin;required-after:spongemixins@[1.2.0,);after:Automagy";
2424
public static final String GUI_FACTORY = "ru.timeconqueror.tcneiadditions.client.gui.GuiFactory";
2525

2626
public static final Logger LOGGER = LogManager.getLogger(NAME);

src/main/java/ru/timeconqueror/tcneiadditions/nei/TCNACrucibleRecipeHandler.java

+46-7
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,33 @@
33
import codechicken.lib.gui.GuiDraw;
44
import codechicken.nei.NEIServerUtils;
55
import codechicken.nei.PositionedStack;
6+
import codechicken.nei.guihook.GuiContainerManager;
7+
import codechicken.nei.recipe.GuiRecipe;
68
import com.djgiannuzz.thaumcraftneiplugin.items.ItemAspect;
79
import com.djgiannuzz.thaumcraftneiplugin.nei.NEIHelper;
810
import com.djgiannuzz.thaumcraftneiplugin.nei.recipehandler.CrucibleRecipeHandler;
911
import java.awt.*;
10-
import java.util.ArrayList;
11-
import java.util.Collection;
12-
import java.util.Collections;
12+
import java.util.*;
1313
import java.util.List;
1414
import net.minecraft.client.Minecraft;
1515
import net.minecraft.client.resources.I18n;
1616
import net.minecraft.item.ItemStack;
1717
import net.minecraft.util.EnumChatFormatting;
18+
import net.minecraft.util.StatCollector;
1819
import org.lwjgl.opengl.GL11;
20+
import ru.timeconqueror.tcneiadditions.util.GuiRecipeHelper;
1921
import ru.timeconqueror.tcneiadditions.util.TCNAConfig;
2022
import ru.timeconqueror.tcneiadditions.util.TCUtil;
2123
import thaumcraft.api.ThaumcraftApi;
2224
import thaumcraft.api.aspects.AspectList;
2325
import thaumcraft.api.crafting.CrucibleRecipe;
26+
import thaumcraft.api.research.ResearchCategories;
27+
import thaumcraft.api.research.ResearchItem;
2428
import thaumcraft.client.lib.UtilsFX;
2529

2630
public class TCNACrucibleRecipeHandler extends CrucibleRecipeHandler {
2731
private final String userName = Minecraft.getMinecraft().getSession().getUsername();
32+
private int ySize;
2833

2934
@Override
3035
public void loadCraftingRecipes(String outputId, Object... results) {
@@ -109,27 +114,61 @@ public void drawExtras(int recipeIndex) {
109114

110115
if (TCNAConfig.showResearchKey) {
111116
int y = 135;
112-
String textToDraw = I18n.format("tcneiadditions.research.researchKey", recipe.researchKey);
113-
for (Object text : Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(textToDraw, 162)) {
117+
String researchString = recipe.researchItem != null
118+
? EnumChatFormatting.UNDERLINE
119+
+ ResearchCategories.getCategoryName(recipe.researchItem.category) + " : "
120+
+ recipe.researchItem.getName()
121+
: EnumChatFormatting.ITALIC + "null";
122+
List listResearchString =
123+
Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(researchString, 162);
124+
this.ySize = listResearchString.size() * 11;
125+
List<Object> list = new ArrayList<>();
126+
list.add(StatCollector.translateToLocal("tcneiadditions.research.researchName") + ":");
127+
list.addAll(listResearchString);
128+
for (Object text : list) {
114129
GuiDraw.drawStringC((String) text, 82, y, Color.BLACK.getRGB(), false);
115130
y += 11;
116131
}
117132
}
118133
}
119134

135+
@Override
136+
public List<String> handleTooltip(GuiRecipe gui, List<String> list, int recipeIndex) {
137+
if (TCNAConfig.showResearchKey) {
138+
if (GuiContainerManager.shouldShowTooltip(gui) && list.size() == 0) {
139+
CrucibleCachedRecipe recipe = (CrucibleCachedRecipe) arecipes.get(recipeIndex);
140+
Rectangle rectangle = getResearchRect(gui, recipeIndex);
141+
Point mousePos = GuiDraw.getMousePosition();
142+
if (rectangle.contains(mousePos)) {
143+
TCUtil.getResearchPrerequisites(list, recipe.researchItem);
144+
}
145+
}
146+
}
147+
return super.handleTooltip(gui, list, recipeIndex);
148+
}
149+
150+
protected Rectangle getResearchRect(GuiRecipe gui, int recipeIndex) {
151+
Point offset = gui.getRecipePosition(recipeIndex);
152+
return new Rectangle(
153+
GuiRecipeHelper.getGuiLeft(gui) + offset.x + 2,
154+
GuiRecipeHelper.getGuiTop(gui) + offset.y + 146,
155+
GuiRecipeHelper.getXSize(gui) - 9,
156+
this.ySize);
157+
}
158+
120159
private class CrucibleCachedRecipe extends CachedRecipe {
121160
public List<PositionedStack> ingredients;
122161
public PositionedStack result;
123162
private AspectList aspects;
124163
private final boolean shouldShowRecipe;
125-
private final String researchKey;
164+
private final ResearchItem researchItem;
126165

127166
public CrucibleCachedRecipe(CrucibleRecipe recipe, boolean shouldShowRecipe) {
128167
this.setIngredient(recipe.catalyst);
129168
this.setResult(recipe.getRecipeOutput());
130169
this.setAspectList(recipe.aspects);
131170
this.shouldShowRecipe = shouldShowRecipe;
132-
this.researchKey = recipe.key != null ? recipe.key : EnumChatFormatting.ITALIC + "null";
171+
this.researchItem = ResearchCategories.getResearch(recipe.key);
133172
NEIHelper.addAspectsToIngredients(this.aspects, this.ingredients, 2);
134173
}
135174

src/main/java/ru/timeconqueror/tcneiadditions/nei/TCNAInfusionRecipeHandler.java

+44-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import codechicken.lib.gui.GuiDraw;
44
import codechicken.nei.PositionedStack;
5+
import codechicken.nei.guihook.GuiContainerManager;
6+
import codechicken.nei.recipe.GuiRecipe;
57
import com.djgiannuzz.thaumcraftneiplugin.ModItems;
68
import com.djgiannuzz.thaumcraftneiplugin.items.ItemAspect;
79
import com.djgiannuzz.thaumcraftneiplugin.nei.recipehandler.InfusionRecipeHandler;
@@ -18,16 +20,20 @@
1820
import net.minecraft.util.MathHelper;
1921
import net.minecraft.util.StatCollector;
2022
import org.lwjgl.opengl.GL11;
23+
import ru.timeconqueror.tcneiadditions.util.GuiRecipeHelper;
2124
import ru.timeconqueror.tcneiadditions.util.TCNAConfig;
2225
import ru.timeconqueror.tcneiadditions.util.TCUtil;
2326
import thaumcraft.api.ThaumcraftApi;
2427
import thaumcraft.api.aspects.Aspect;
2528
import thaumcraft.api.aspects.AspectList;
2629
import thaumcraft.api.crafting.InfusionRecipe;
30+
import thaumcraft.api.research.ResearchCategories;
31+
import thaumcraft.api.research.ResearchItem;
2732
import thaumcraft.client.lib.UtilsFX;
2833

2934
public class TCNAInfusionRecipeHandler extends InfusionRecipeHandler {
3035
private final String userName = Minecraft.getMinecraft().getSession().getUsername();
36+
private int ySize;
3137

3238
@Override
3339
public void loadCraftingRecipes(String outputId, Object... results) {
@@ -116,8 +122,18 @@ public void drawExtras(int recipeIndex) {
116122

117123
if (TCNAConfig.showResearchKey) {
118124
int y = 170;
119-
String textToDraw = I18n.format("tcneiadditions.research.researchKey", recipe.researchKey);
120-
for (Object text : Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(textToDraw, 162)) {
125+
String researchString = recipe.researchItem != null
126+
? EnumChatFormatting.UNDERLINE
127+
+ ResearchCategories.getCategoryName(recipe.researchItem.category) + " : "
128+
+ recipe.researchItem.getName()
129+
: EnumChatFormatting.ITALIC + "null";
130+
List listResearchString =
131+
Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(researchString, 162);
132+
this.ySize = listResearchString.size() * 11;
133+
List<Object> list = new ArrayList<>();
134+
list.add(StatCollector.translateToLocal("tcneiadditions.research.researchName") + ":");
135+
list.addAll(listResearchString);
136+
for (Object text : list) {
121137
GuiDraw.drawStringC((String) text, 82, y, Color.BLACK.getRGB(), false);
122138
y += 11;
123139
}
@@ -164,13 +180,37 @@ public void drawInstability(int recipeIndex, int x, int y) {
164180
}
165181
}
166182

183+
@Override
184+
public List<String> handleTooltip(GuiRecipe gui, List<String> list, int recipeIndex) {
185+
if (TCNAConfig.showResearchKey) {
186+
if (GuiContainerManager.shouldShowTooltip(gui) && list.size() == 0) {
187+
InfusionCachedRecipe recipe = (InfusionCachedRecipe) arecipes.get(recipeIndex);
188+
Rectangle rectangle = getResearchRect(gui, recipeIndex);
189+
Point mousePos = GuiDraw.getMousePosition();
190+
if (rectangle.contains(mousePos)) {
191+
TCUtil.getResearchPrerequisites(list, recipe.researchItem);
192+
}
193+
}
194+
}
195+
return super.handleTooltip(gui, list, recipeIndex);
196+
}
197+
198+
protected Rectangle getResearchRect(GuiRecipe gui, int recipeIndex) {
199+
Point offset = gui.getRecipePosition(recipeIndex);
200+
return new Rectangle(
201+
GuiRecipeHelper.getGuiLeft(gui) + offset.x + 2,
202+
GuiRecipeHelper.getGuiTop(gui) + offset.y + 181,
203+
GuiRecipeHelper.getXSize(gui) - 9,
204+
this.ySize);
205+
}
206+
167207
private class InfusionCachedRecipe extends CachedRecipe {
168208
private final AspectList aspects;
169209
private PositionedStack result;
170210
private List<PositionedStack> ingredients;
171211
private int instability;
172212
private final boolean shouldShowRecipe;
173-
private final String researchKey;
213+
private final ResearchItem researchItem;
174214

175215
public InfusionCachedRecipe(InfusionRecipe recipe, boolean shouldShowRecipe) {
176216
this.setIngredients(recipe);
@@ -179,7 +219,7 @@ public InfusionCachedRecipe(InfusionRecipe recipe, boolean shouldShowRecipe) {
179219
this.setInstability(recipe.getInstability());
180220
this.shouldShowRecipe = shouldShowRecipe;
181221
this.addAspectsToIngredients(this.aspects);
182-
this.researchKey = recipe.getResearch() != null ? recipe.getResearch() : EnumChatFormatting.ITALIC + "null";
222+
this.researchItem = ResearchCategories.getResearch(recipe.getResearch());
183223
}
184224

185225
protected void setInstability(int inst) {

0 commit comments

Comments
 (0)