Skip to content

Commit 92e2ee0

Browse files
committed
feat: JEI grid layout
1 parent 67ee35f commit 92e2ee0

7 files changed

Lines changed: 71 additions & 35 deletions

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ show_testing_output = false
1515

1616
# Mod Information
1717
# HIGHLY RECOMMEND complying with SemVer for mod_version: https://semver.org/
18-
mod_version = 1.2.0
18+
mod_version = 1.3.0
1919
root_package =work.crash
2020
mod_id = fallingalchemy
2121
mod_name = FallingAlchemy

src/main/java/work/crash/fallingalchemy/modsupport/jei/ConversionRecipeCategory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull ConversionRe
7979

8080
List<List<ItemStack>> outputs = ingredients.getOutputs(ItemStack.class);
8181
int outputStartX = 100;
82-
int outputStartY = 20;
82+
int outputStartY = 15;
8383
int outputsPerRow = 2;
8484

8585
for (int i = 0; i < outputs.size(); i++) {

src/main/java/work/crash/fallingalchemy/modsupport/jei/ConversionRecipeWrapper.java

Lines changed: 69 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@
33
import crafttweaker.api.minecraft.CraftTweakerMC;
44
import crafttweaker.api.item.IItemStack;
55
import mezz.jei.api.ingredients.IIngredients;
6+
import mezz.jei.api.ingredients.VanillaTypes;
67
import mezz.jei.api.recipe.IRecipeWrapper;
78
import net.minecraft.client.Minecraft;
89
import net.minecraft.client.gui.FontRenderer;
10+
import net.minecraft.client.gui.Gui;
911
import net.minecraft.client.resources.I18n;
1012
import net.minecraft.item.ItemStack;
13+
import net.minecraft.util.ResourceLocation;
1114
import work.crash.fallingalchemy.item.ConsumedItem;
1215
import work.crash.fallingalchemy.modsupport.FallingAlchemyTweaker;
13-
import work.crash.fallingalchemy.condition.ICondition;
1416

1517
import javax.annotation.Nonnull;
1618
import java.util.ArrayList;
@@ -20,6 +22,22 @@ public class ConversionRecipeWrapper implements IRecipeWrapper {
2022

2123
private final FallingAlchemyTweaker.ConversionRule rule;
2224

25+
private static final int ICON_SIZE = 16;
26+
private static final int LEFT_COLUMN_X = 20;
27+
private static final int RIGHT_COLUMN_X = 100;
28+
private static final int TOP_ROW_Y = 50;
29+
private static final int BOTTOM_ROW_Y = 66;
30+
31+
private static final ResourceLocation ICON_SUCCESS =
32+
new ResourceLocation("fallingalchemy", "textures/gui/icon_success.png");
33+
private static final ResourceLocation ICON_RADIUS =
34+
new ResourceLocation("fallingalchemy", "textures/gui/icon_radius.png");
35+
private static final ResourceLocation ICON_KEEP =
36+
new ResourceLocation("fallingalchemy", "textures/gui/icon_keep.png");
37+
private static final ResourceLocation ICON_DISPLACEMENT =
38+
new ResourceLocation("fallingalchemy", "textures/gui/icon_displacement.png");
39+
40+
2341
public ConversionRecipeWrapper(FallingAlchemyTweaker.ConversionRule rule) {
2442
this.rule = rule;
2543
}
@@ -36,8 +54,8 @@ public void getIngredients(@Nonnull IIngredients ingredients) {
3654
inputs.add(matchingStacks);
3755
}
3856

39-
ingredients.setInputLists(ItemStack.class, inputs);
40-
ingredients.setOutputs(ItemStack.class, rule.outputs);
57+
ingredients.setInputLists(VanillaTypes.ITEM, inputs);
58+
ingredients.setOutputs(VanillaTypes.ITEM, rule.outputs);
4159
}
4260

4361
private List<ItemStack> getMatchingStacks(ConsumedItem consumedItem) {
@@ -56,32 +74,21 @@ private List<ItemStack> getMatchingStacks(ConsumedItem consumedItem) {
5674
@Override
5775
public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) {
5876
FontRenderer fontRenderer = minecraft.fontRenderer;
59-
int yOffset = 55;
6077

61-
String successText = I18n.format("jei.fallingalchemy.success_chance") + " " + String.format("%.1f%%", rule.successChance * 100);
62-
fontRenderer.drawString(successText, 5, yOffset, 0xFF404040);
63-
yOffset += 10;
78+
minecraft.getTextureManager().bindTexture(ICON_SUCCESS);
79+
drawIcon(LEFT_COLUMN_X, TOP_ROW_Y);
80+
81+
minecraft.getTextureManager().bindTexture(ICON_RADIUS);
82+
drawIcon(RIGHT_COLUMN_X, TOP_ROW_Y);
6483

6584
if (rule.keepBlockChance > 0) {
66-
String keepText = I18n.format("jei.fallingalchemy.keep_chance", String.format("%.1f%%", rule.keepBlockChance * 100));
67-
fontRenderer.drawString(keepText, 5, yOffset, 0xFF404040);
68-
yOffset += 10;
85+
minecraft.getTextureManager().bindTexture(ICON_KEEP);
86+
drawIcon(LEFT_COLUMN_X, BOTTOM_ROW_Y);
6987
}
7088

71-
String radiusText = I18n.format("jei.fallingalchemy.radius") + " " + String.format("%.1f", rule.radius);
72-
fontRenderer.drawString(radiusText, 5, yOffset, 0xFF404040);
73-
yOffset += 10;
74-
7589
if (rule.displacement > 0) {
76-
String displacementText = I18n.format("jei.fallingalchemy.displacement") + " " + String.format("%.1f", rule.displacement);
77-
fontRenderer.drawString(displacementText, 5, yOffset, 0xFF404040);
78-
yOffset += 10;
79-
80-
if (rule.additionalProducts) {
81-
String bonusText = I18n.format("jei.fallingalchemy.bonus_products");
82-
fontRenderer.drawString(bonusText, 5, yOffset, 0xFF00AA00);
83-
yOffset += 10;
84-
}
90+
minecraft.getTextureManager().bindTexture(ICON_DISPLACEMENT);
91+
drawIcon(RIGHT_COLUMN_X, BOTTOM_ROW_Y);
8592
}
8693

8794
int totalConditions = rule.conditions.size();
@@ -100,18 +107,50 @@ public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHe
100107
}
101108
}
102109

110+
private void drawIcon(int x, int y) {
111+
Gui.drawModalRectWithCustomSizedTexture(x, y, 0, 0, ICON_SIZE, ICON_SIZE, ICON_SIZE, ICON_SIZE);
112+
}
113+
114+
103115
@Override
104116
public List<String> getTooltipStrings(int mouseX, int mouseY) {
105117
List<String> tooltip = new ArrayList<>();
106118

119+
if (isInArea(mouseX, mouseY, LEFT_COLUMN_X, TOP_ROW_Y)) {
120+
tooltip.add(I18n.format("jei.fallingalchemy.success_chance"));
121+
tooltip.add("§7" + String.format("%.1f%%", rule.successChance * 100));
122+
return tooltip;
123+
}
124+
125+
if (isInArea(mouseX, mouseY, RIGHT_COLUMN_X, TOP_ROW_Y)) {
126+
tooltip.add(I18n.format("jei.fallingalchemy.radius"));
127+
tooltip.add("§7" + String.format("%.1f", rule.radius));
128+
return tooltip;
129+
}
130+
131+
if (rule.keepBlockChance > 0 && isInArea(mouseX, mouseY, LEFT_COLUMN_X, BOTTOM_ROW_Y)) {
132+
tooltip.add(I18n.format("jei.fallingalchemy.keep_chance", ""));
133+
tooltip.add("§7" + String.format("%.1f%%", rule.keepBlockChance * 100));
134+
return tooltip;
135+
}
136+
137+
if (rule.displacement > 0 && isInArea(mouseX, mouseY, RIGHT_COLUMN_X, BOTTOM_ROW_Y)) {
138+
tooltip.add(I18n.format("jei.fallingalchemy.displacement"));
139+
tooltip.add("§7" + String.format("%.1f", rule.displacement));
140+
if (rule.additionalProducts) {
141+
tooltip.add("");
142+
tooltip.add("§a" + I18n.format("jei.fallingalchemy.bonus_products"));
143+
tooltip.add("§7" + I18n.format("jei.fallingalchemy.bonus_products.tooltip"));
144+
}
145+
return tooltip;
146+
}
147+
107148
if (mouseX >= 5 && mouseX <= 140 && mouseY >= 5 && mouseY <= 15) {
108149
List<String> allConditions = new ArrayList<>();
109150

110151
for (int i = 0; i < rule.conditionInfos.size(); i++) {
111152
String condDesc = formatConditionDescription(rule.conditionInfos.get(i));
112-
if (condDesc != null) {
113-
allConditions.add("§7• " + condDesc);
114-
}
153+
allConditions.add("§7• " + condDesc);
115154
}
116155

117156
for (ConsumedItem item : rule.consumedItems) {
@@ -132,16 +171,13 @@ public List<String> getTooltipStrings(int mouseX, int mouseY) {
132171
}
133172
}
134173

135-
if (mouseX >= 50 && mouseX <= 140 && mouseY >= 40 && mouseY <= 60 && rule.displacement > 0) {
136-
tooltip.add(I18n.format("jei.fallingalchemy.displacement.tooltip"));
137-
if (rule.additionalProducts) {
138-
tooltip.add(I18n.format("jei.fallingalchemy.bonus_products.tooltip"));
139-
}
140-
}
141-
142174
return tooltip.isEmpty() ? null : tooltip;
143175
}
144176

177+
private boolean isInArea(int mouseX, int mouseY, int x, int y) {
178+
return mouseX >= x && mouseX < x +ICON_SIZE && mouseY >= y && mouseY < y + ICON_SIZE;
179+
}
180+
145181
private String formatConditionDescription(FallingAlchemyTweaker.ConditionInfo info) {
146182
switch (info.type) {
147183
case "biome":
222 Bytes
Loading
198 Bytes
Loading
328 Bytes
Loading
188 Bytes
Loading

0 commit comments

Comments
 (0)