33import crafttweaker .api .minecraft .CraftTweakerMC ;
44import crafttweaker .api .item .IItemStack ;
55import mezz .jei .api .ingredients .IIngredients ;
6+ import mezz .jei .api .ingredients .VanillaTypes ;
67import mezz .jei .api .recipe .IRecipeWrapper ;
78import net .minecraft .client .Minecraft ;
89import net .minecraft .client .gui .FontRenderer ;
10+ import net .minecraft .client .gui .Gui ;
911import net .minecraft .client .resources .I18n ;
1012import net .minecraft .item .ItemStack ;
13+ import net .minecraft .util .ResourceLocation ;
1114import work .crash .fallingalchemy .item .ConsumedItem ;
1215import work .crash .fallingalchemy .modsupport .FallingAlchemyTweaker ;
13- import work .crash .fallingalchemy .condition .ICondition ;
1416
1517import javax .annotation .Nonnull ;
1618import 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" :
0 commit comments