Skip to content

Commit 68dec27

Browse files
Add clarification tooltips to blocks in the multiblock preview (#1584)
1 parent 6c4e215 commit 68dec27

File tree

11 files changed

+176
-1
lines changed

11 files changed

+176
-1
lines changed

src/main/java/gregtech/integration/jei/multiblock/MultiblockInfoCategory.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import mezz.jei.api.IGuiHelper;
99
import mezz.jei.api.IModRegistry;
1010
import mezz.jei.api.gui.IDrawable;
11+
import mezz.jei.api.gui.IGuiItemStackGroup;
1112
import mezz.jei.api.gui.IRecipeLayout;
1213
import mezz.jei.api.ingredients.IIngredients;
1314
import mezz.jei.api.recipe.IRecipeCategory;
@@ -81,5 +82,8 @@ public IDrawable getIcon() {
8182
@Override
8283
public void setRecipe(IRecipeLayout recipeLayout, MultiblockInfoRecipeWrapper recipeWrapper, IIngredients ingredients) {
8384
recipeWrapper.setRecipeLayout((RecipeLayout) recipeLayout, this.guiHelper);
85+
86+
IGuiItemStackGroup itemStackGroup = recipeLayout.getItemStacks();
87+
itemStackGroup.addTooltipCallback(recipeWrapper::addBlockTooltips);
8488
}
8589
}

src/main/java/gregtech/integration/jei/multiblock/MultiblockInfoPage.java

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,30 @@
11
package gregtech.integration.jei.multiblock;
22

3+
import gregtech.api.GTValues;
34
import gregtech.api.metatileentity.multiblock.MultiblockControllerBase;
5+
import gregtech.api.util.ItemStackHashStrategy;
6+
import gregtech.common.metatileentities.MetaTileEntities;
7+
import it.unimi.dsi.fastutil.Hash;
8+
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap;
49
import net.minecraft.client.resources.I18n;
10+
import net.minecraft.item.ItemStack;
11+
import net.minecraft.util.text.ITextComponent;
12+
import net.minecraft.util.text.Style;
13+
import net.minecraft.util.text.TextComponentTranslation;
14+
import net.minecraft.util.text.TextFormatting;
515

6-
import java.util.List;
16+
import java.util.*;
717
import java.util.stream.Collectors;
818
import java.util.stream.Stream;
919

1020
public abstract class MultiblockInfoPage {
1121

22+
private final Hash.Strategy<ItemStack> strategy = ItemStackHashStrategy.comparingAllButCount();
23+
24+
private Map<ItemStack, List<ITextComponent>> blockTooltips = new Object2ObjectOpenCustomHashMap<>(strategy);
25+
26+
private static final ITextComponent defaultText = new TextComponentTranslation("gregtech.multiblock.preview.any_hatch").setStyle(new Style().setColor(TextFormatting.GREEN));
27+
1228
public abstract MultiblockControllerBase getController();
1329

1430
public abstract List<MultiblockShapeInfo> getMatchingShapes();
@@ -26,4 +42,53 @@ public List<String> informationText() {
2642
.map(I18n::format)
2743
.collect(Collectors.toList());
2844
}
45+
46+
/**
47+
* Gets the Map containing all tooltips for Blocks that have had tooltips applied.
48+
* Will generate the map if it does not exist
49+
* @return - The Map containing Tooltips and Formatting for specific Blocks
50+
*/
51+
public Map<ItemStack, List<ITextComponent>> getBlockTooltipMap() {
52+
// Generate on first use
53+
if (this.blockTooltips.size() == 0) {
54+
generateBlockTooltips();
55+
}
56+
return this.blockTooltips;
57+
}
58+
59+
/**
60+
* Contains the default tooltips that will be applied to all default Blocks
61+
*/
62+
protected void generateBlockTooltips() {
63+
64+
for(int i = 0; i < GTValues.V.length; i++) {
65+
addBlockTooltip(MetaTileEntities.ITEM_EXPORT_BUS[i].getStackForm(), defaultText);
66+
addBlockTooltip(MetaTileEntities.ITEM_IMPORT_BUS[i].getStackForm(), defaultText);
67+
addBlockTooltip(MetaTileEntities.FLUID_EXPORT_HATCH[i].getStackForm(), defaultText);
68+
addBlockTooltip(MetaTileEntities.FLUID_IMPORT_HATCH[i].getStackForm(), defaultText);
69+
}
70+
}
71+
72+
/**
73+
* A Helper method for adding tooltips to Blocks in the multiblock preview screen.
74+
* Can be called if {@link MultiblockInfoPage#generateBlockTooltips()} is not overridden
75+
* Will add tooltips to MultiblockAbilities with existing tooltips
76+
* @param itemStack - The ItemStack form of the Block to add a Tooltip too
77+
* @param tooltip - An ITextComponent object consisting of the tooltip and format to add to the block
78+
*/
79+
protected void addBlockTooltip(ItemStack itemStack, ITextComponent tooltip) {
80+
81+
List<ITextComponent> tooltipList = this.blockTooltips.getOrDefault(itemStack, null);
82+
83+
if(tooltipList == null) {
84+
List<ITextComponent> tooltipToAdd = new ArrayList<>();
85+
tooltipToAdd.add(tooltip);
86+
this.blockTooltips.put(itemStack, tooltipToAdd);
87+
}
88+
else {
89+
tooltipList.add(tooltip);
90+
this.blockTooltips.put(itemStack, tooltipList);
91+
92+
}
93+
}
2994
}

src/main/java/gregtech/integration/jei/multiblock/MultiblockInfoRecipeWrapper.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import net.minecraft.util.NonNullList;
3535
import net.minecraft.util.math.BlockPos;
3636
import net.minecraft.util.math.RayTraceResult;
37+
import net.minecraft.util.text.ITextComponent;
3738
import net.minecraft.util.text.TextFormatting;
3839
import net.minecraft.world.World;
3940
import net.minecraftforge.fml.client.config.GuiUtils;
@@ -345,11 +346,29 @@ public List<String> getTooltipStrings(int mouseX, int mouseY) {
345346
tooltip.set(k, TextFormatting.GRAY + tooltip.get(k));
346347
}
347348
}
349+
Map<ItemStack, List<ITextComponent>> blockTooltipMap = infoPage.getBlockTooltipMap();
350+
if(blockTooltipMap.containsKey(tooltipBlockStack)) {
351+
List<ITextComponent> tooltips = blockTooltipMap.get(tooltipBlockStack);
352+
for(int i = 0; i < tooltips.size(); i++) {
353+
//Start at i+1 due to ItemStack name
354+
tooltip.add(i + 1, tooltips.get(i).getFormattedText());
355+
}
356+
}
348357
return tooltip;
349358
}
350359
return Collections.emptyList();
351360
}
352361

362+
public void addBlockTooltips(int slotIndex, boolean input, ItemStack itemStack, List<String> tooltip) {
363+
Map<ItemStack, List<ITextComponent>> blockTooltipMap = infoPage.getBlockTooltipMap();
364+
if(blockTooltipMap.containsKey(itemStack)) {
365+
List<ITextComponent> tooltips = blockTooltipMap.get(itemStack);
366+
for(int i = 0; i < tooltips.size(); i++) {
367+
tooltip.add(i + 1, tooltips.get(i).getFormattedText());
368+
}
369+
}
370+
}
371+
353372
private static class PartInfo {
354373
final ItemStackKey itemStackKey;
355374
boolean isController = false;

src/main/java/gregtech/integration/jei/multiblock/infos/CrackerUnitInfo.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
import net.minecraft.client.resources.I18n;
1313
import net.minecraft.init.Blocks;
1414
import net.minecraft.util.EnumFacing;
15+
import net.minecraft.util.text.ITextComponent;
16+
import net.minecraft.util.text.Style;
17+
import net.minecraft.util.text.TextComponentTranslation;
18+
import net.minecraft.util.text.TextFormatting;
1519

1620
import java.util.List;
1721

@@ -44,4 +48,10 @@ public String[] getDescription() {
4448
return new String[]{I18n.format("gregtech.multiblock.cracker.description")};
4549
}
4650

51+
@Override
52+
protected void generateBlockTooltips() {
53+
super.generateBlockTooltips();
54+
ITextComponent tooltip = new TextComponentTranslation("gregtech.multiblock.preview.limit", 20).setStyle(new Style().setColor(TextFormatting.AQUA));
55+
addBlockTooltip(MetaBlocks.METAL_CASING.getItemVariant(BlockMetalCasing.MetalCasingType.STAINLESS_CLEAN), tooltip);
56+
}
4757
}

src/main/java/gregtech/integration/jei/multiblock/infos/DistillationTowerInfo.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
import net.minecraft.client.resources.I18n;
1212
import net.minecraft.init.Blocks;
1313
import net.minecraft.util.EnumFacing;
14+
import net.minecraft.util.text.ITextComponent;
15+
import net.minecraft.util.text.Style;
16+
import net.minecraft.util.text.TextComponentTranslation;
17+
import net.minecraft.util.text.TextFormatting;
1418

1519
import java.util.List;
1620

@@ -47,4 +51,16 @@ public String[] getDescription() {
4751
public float getDefaultZoom() {
4852
return 0.7f;
4953
}
54+
55+
@Override
56+
protected void generateBlockTooltips() {
57+
super.generateBlockTooltips();
58+
ITextComponent tooltip = new TextComponentTranslation("gregtech.multiblock.preview.limit_per_layer", 1).setStyle(new Style().setColor(TextFormatting.DARK_RED));
59+
ITextComponent inputTooltip = new TextComponentTranslation("gregtech.multiblock.preview.only_location", I18n.format("gregtech.multiblock.preview.location.b_c")).setStyle(new Style().setColor(TextFormatting.DARK_RED));
60+
61+
for(int i = 0; i < GTValues.V.length; i++) {
62+
addBlockTooltip(MetaTileEntities.FLUID_EXPORT_HATCH[i].getStackForm(), tooltip);
63+
addBlockTooltip(MetaTileEntities.FLUID_IMPORT_HATCH[i].getStackForm(), inputTooltip);
64+
}
65+
}
5066
}

src/main/java/gregtech/integration/jei/multiblock/infos/ElectricBlastFurnaceInfo.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
import net.minecraft.client.resources.I18n;
1212
import net.minecraft.init.Blocks;
1313
import net.minecraft.util.EnumFacing;
14+
import net.minecraft.util.text.ITextComponent;
15+
import net.minecraft.util.text.Style;
16+
import net.minecraft.util.text.TextComponentTranslation;
17+
import net.minecraft.util.text.TextFormatting;
1418

1519
import java.util.ArrayList;
1620
import java.util.List;
@@ -53,4 +57,10 @@ public String[] getDescription() {
5357
return new String[]{I18n.format("gregtech.multiblock.electric_blast_furnace.description")};
5458
}
5559

60+
@Override
61+
protected void generateBlockTooltips() {
62+
super.generateBlockTooltips();
63+
ITextComponent tooltip = new TextComponentTranslation("gregtech.multiblock.preview.limit", 10).setStyle(new Style().setColor(TextFormatting.AQUA));
64+
addBlockTooltip(MetaBlocks.METAL_CASING.getItemVariant(MetalCasingType.INVAR_HEATPROOF), tooltip);
65+
}
5666
}

src/main/java/gregtech/integration/jei/multiblock/infos/ImplosionCompressorInfo.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
import net.minecraft.client.resources.I18n;
1212
import net.minecraft.init.Blocks;
1313
import net.minecraft.util.EnumFacing;
14+
import net.minecraft.util.text.ITextComponent;
15+
import net.minecraft.util.text.Style;
16+
import net.minecraft.util.text.TextComponentTranslation;
17+
import net.minecraft.util.text.TextFormatting;
1418

1519
import java.util.List;
1620

@@ -42,4 +46,10 @@ public String[] getDescription() {
4246
return new String[]{I18n.format("gregtech.multiblock.implosion_compressor.description")};
4347
}
4448

49+
@Override
50+
protected void generateBlockTooltips() {
51+
super.generateBlockTooltips();
52+
ITextComponent tooltip = new TextComponentTranslation("gregtech.multiblock.preview.limit", 14).setStyle(new Style().setColor(TextFormatting.AQUA));
53+
addBlockTooltip(MetaBlocks.METAL_CASING.getItemVariant(MetalCasingType.STEEL_SOLID), tooltip);
54+
}
4555
}

src/main/java/gregtech/integration/jei/multiblock/infos/MultiSmelterInfo.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
import net.minecraft.client.resources.I18n;
1212
import net.minecraft.init.Blocks;
1313
import net.minecraft.util.EnumFacing;
14+
import net.minecraft.util.text.ITextComponent;
15+
import net.minecraft.util.text.Style;
16+
import net.minecraft.util.text.TextComponentTranslation;
17+
import net.minecraft.util.text.TextFormatting;
1418

1519
import java.util.ArrayList;
1620
import java.util.List;
@@ -47,4 +51,10 @@ public String[] getDescription() {
4751
return new String[]{I18n.format("gregtech.multiblock.multi_smelter.description")};
4852
}
4953

54+
@Override
55+
protected void generateBlockTooltips() {
56+
super.generateBlockTooltips();
57+
ITextComponent tooltip = new TextComponentTranslation("gregtech.multiblock.preview.limit", 9).setStyle(new Style().setColor(TextFormatting.AQUA));
58+
addBlockTooltip(MetaBlocks.METAL_CASING.getItemVariant(MetalCasingType.INVAR_HEATPROOF), tooltip);
59+
}
5060
}

src/main/java/gregtech/integration/jei/multiblock/infos/PyrolyzeOvenInfo.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@
1111
import gregtech.integration.jei.multiblock.MultiblockShapeInfo;
1212
import net.minecraft.client.resources.I18n;
1313
import net.minecraft.init.Blocks;
14+
import net.minecraft.item.ItemStack;
1415
import net.minecraft.util.EnumFacing;
16+
import net.minecraft.util.text.ITextComponent;
17+
import net.minecraft.util.text.Style;
18+
import net.minecraft.util.text.TextComponentTranslation;
19+
import net.minecraft.util.text.TextFormatting;
1520

1621
import java.util.List;
1722

@@ -47,4 +52,12 @@ public String[] getDescription() {
4752
return new String[]{I18n.format("gregtech.multiblock.pyrolyze_oven.description")};
4853
}
4954

55+
@Override
56+
protected void generateBlockTooltips() {
57+
super.generateBlockTooltips();
58+
ItemStack coils = MetaBlocks.WIRE_COIL.getItemVariant(BlockWireCoil.CoilType.CUPRONICKEL);
59+
ITextComponent tooltip = new TextComponentTranslation("gregtech.multiblock.preview.only", coils.getDisplayName()).setStyle(new Style().setColor(TextFormatting.RED));
60+
addBlockTooltip(coils, tooltip);
61+
}
62+
5063
}

src/main/java/gregtech/integration/jei/multiblock/infos/VacuumFreezerInfo.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
import net.minecraft.client.resources.I18n;
1212
import net.minecraft.init.Blocks;
1313
import net.minecraft.util.EnumFacing;
14+
import net.minecraft.util.text.ITextComponent;
15+
import net.minecraft.util.text.Style;
16+
import net.minecraft.util.text.TextComponentTranslation;
17+
import net.minecraft.util.text.TextFormatting;
1418

1519
import java.util.List;
1620

@@ -44,4 +48,12 @@ public String[] getDescription() {
4448
return new String[]{I18n.format("gregtech.multiblock.vacuum_freezer.description")};
4549
}
4650

51+
@Override
52+
protected void generateBlockTooltips() {
53+
super.generateBlockTooltips();
54+
ITextComponent tooltip = new TextComponentTranslation("gregtech.multiblock.preview.limit", 14).setStyle(new Style().setColor(TextFormatting.AQUA));
55+
addBlockTooltip(MetaBlocks.METAL_CASING.getItemVariant(MetalCasingType.ALUMINIUM_FROSTPROOF), tooltip);
56+
}
57+
58+
4759
}

0 commit comments

Comments
 (0)