Skip to content

Commit

Permalink
Add clarification tooltips to blocks in the multiblock preview (#1584)
Browse files Browse the repository at this point in the history
  • Loading branch information
ALongStringOfNumbers authored Jul 13, 2021
1 parent 6c4e215 commit 68dec27
Show file tree
Hide file tree
Showing 11 changed files with 176 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import mezz.jei.api.IGuiHelper;
import mezz.jei.api.IModRegistry;
import mezz.jei.api.gui.IDrawable;
import mezz.jei.api.gui.IGuiItemStackGroup;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.ingredients.IIngredients;
import mezz.jei.api.recipe.IRecipeCategory;
Expand Down Expand Up @@ -81,5 +82,8 @@ public IDrawable getIcon() {
@Override
public void setRecipe(IRecipeLayout recipeLayout, MultiblockInfoRecipeWrapper recipeWrapper, IIngredients ingredients) {
recipeWrapper.setRecipeLayout((RecipeLayout) recipeLayout, this.guiHelper);

IGuiItemStackGroup itemStackGroup = recipeLayout.getItemStacks();
itemStackGroup.addTooltipCallback(recipeWrapper::addBlockTooltips);
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,30 @@
package gregtech.integration.jei.multiblock;

import gregtech.api.GTValues;
import gregtech.api.metatileentity.multiblock.MultiblockControllerBase;
import gregtech.api.util.ItemStackHashStrategy;
import gregtech.common.metatileentities.MetaTileEntities;
import it.unimi.dsi.fastutil.Hash;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap;
import net.minecraft.client.resources.I18n;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.text.TextFormatting;

import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public abstract class MultiblockInfoPage {

private final Hash.Strategy<ItemStack> strategy = ItemStackHashStrategy.comparingAllButCount();

private Map<ItemStack, List<ITextComponent>> blockTooltips = new Object2ObjectOpenCustomHashMap<>(strategy);

private static final ITextComponent defaultText = new TextComponentTranslation("gregtech.multiblock.preview.any_hatch").setStyle(new Style().setColor(TextFormatting.GREEN));

public abstract MultiblockControllerBase getController();

public abstract List<MultiblockShapeInfo> getMatchingShapes();
Expand All @@ -26,4 +42,53 @@ public List<String> informationText() {
.map(I18n::format)
.collect(Collectors.toList());
}

/**
* Gets the Map containing all tooltips for Blocks that have had tooltips applied.
* Will generate the map if it does not exist
* @return - The Map containing Tooltips and Formatting for specific Blocks
*/
public Map<ItemStack, List<ITextComponent>> getBlockTooltipMap() {
// Generate on first use
if (this.blockTooltips.size() == 0) {
generateBlockTooltips();
}
return this.blockTooltips;
}

/**
* Contains the default tooltips that will be applied to all default Blocks
*/
protected void generateBlockTooltips() {

for(int i = 0; i < GTValues.V.length; i++) {
addBlockTooltip(MetaTileEntities.ITEM_EXPORT_BUS[i].getStackForm(), defaultText);
addBlockTooltip(MetaTileEntities.ITEM_IMPORT_BUS[i].getStackForm(), defaultText);
addBlockTooltip(MetaTileEntities.FLUID_EXPORT_HATCH[i].getStackForm(), defaultText);
addBlockTooltip(MetaTileEntities.FLUID_IMPORT_HATCH[i].getStackForm(), defaultText);
}
}

/**
* A Helper method for adding tooltips to Blocks in the multiblock preview screen.
* Can be called if {@link MultiblockInfoPage#generateBlockTooltips()} is not overridden
* Will add tooltips to MultiblockAbilities with existing tooltips
* @param itemStack - The ItemStack form of the Block to add a Tooltip too
* @param tooltip - An ITextComponent object consisting of the tooltip and format to add to the block
*/
protected void addBlockTooltip(ItemStack itemStack, ITextComponent tooltip) {

List<ITextComponent> tooltipList = this.blockTooltips.getOrDefault(itemStack, null);

if(tooltipList == null) {
List<ITextComponent> tooltipToAdd = new ArrayList<>();
tooltipToAdd.add(tooltip);
this.blockTooltips.put(itemStack, tooltipToAdd);
}
else {
tooltipList.add(tooltip);
this.blockTooltips.put(itemStack, tooltipList);

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World;
import net.minecraftforge.fml.client.config.GuiUtils;
Expand Down Expand Up @@ -345,11 +346,29 @@ public List<String> getTooltipStrings(int mouseX, int mouseY) {
tooltip.set(k, TextFormatting.GRAY + tooltip.get(k));
}
}
Map<ItemStack, List<ITextComponent>> blockTooltipMap = infoPage.getBlockTooltipMap();
if(blockTooltipMap.containsKey(tooltipBlockStack)) {
List<ITextComponent> tooltips = blockTooltipMap.get(tooltipBlockStack);
for(int i = 0; i < tooltips.size(); i++) {
//Start at i+1 due to ItemStack name
tooltip.add(i + 1, tooltips.get(i).getFormattedText());
}
}
return tooltip;
}
return Collections.emptyList();
}

public void addBlockTooltips(int slotIndex, boolean input, ItemStack itemStack, List<String> tooltip) {
Map<ItemStack, List<ITextComponent>> blockTooltipMap = infoPage.getBlockTooltipMap();
if(blockTooltipMap.containsKey(itemStack)) {
List<ITextComponent> tooltips = blockTooltipMap.get(itemStack);
for(int i = 0; i < tooltips.size(); i++) {
tooltip.add(i + 1, tooltips.get(i).getFormattedText());
}
}
}

private static class PartInfo {
final ItemStackKey itemStackKey;
boolean isController = false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
import net.minecraft.client.resources.I18n;
import net.minecraft.init.Blocks;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.text.TextFormatting;

import java.util.List;

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

@Override
protected void generateBlockTooltips() {
super.generateBlockTooltips();
ITextComponent tooltip = new TextComponentTranslation("gregtech.multiblock.preview.limit", 20).setStyle(new Style().setColor(TextFormatting.AQUA));
addBlockTooltip(MetaBlocks.METAL_CASING.getItemVariant(BlockMetalCasing.MetalCasingType.STAINLESS_CLEAN), tooltip);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
import net.minecraft.client.resources.I18n;
import net.minecraft.init.Blocks;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.text.TextFormatting;

import java.util.List;

Expand Down Expand Up @@ -47,4 +51,16 @@ public String[] getDescription() {
public float getDefaultZoom() {
return 0.7f;
}

@Override
protected void generateBlockTooltips() {
super.generateBlockTooltips();
ITextComponent tooltip = new TextComponentTranslation("gregtech.multiblock.preview.limit_per_layer", 1).setStyle(new Style().setColor(TextFormatting.DARK_RED));
ITextComponent inputTooltip = new TextComponentTranslation("gregtech.multiblock.preview.only_location", I18n.format("gregtech.multiblock.preview.location.b_c")).setStyle(new Style().setColor(TextFormatting.DARK_RED));

for(int i = 0; i < GTValues.V.length; i++) {
addBlockTooltip(MetaTileEntities.FLUID_EXPORT_HATCH[i].getStackForm(), tooltip);
addBlockTooltip(MetaTileEntities.FLUID_IMPORT_HATCH[i].getStackForm(), inputTooltip);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
import net.minecraft.client.resources.I18n;
import net.minecraft.init.Blocks;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.text.TextFormatting;

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

@Override
protected void generateBlockTooltips() {
super.generateBlockTooltips();
ITextComponent tooltip = new TextComponentTranslation("gregtech.multiblock.preview.limit", 10).setStyle(new Style().setColor(TextFormatting.AQUA));
addBlockTooltip(MetaBlocks.METAL_CASING.getItemVariant(MetalCasingType.INVAR_HEATPROOF), tooltip);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
import net.minecraft.client.resources.I18n;
import net.minecraft.init.Blocks;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.text.TextFormatting;

import java.util.List;

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

@Override
protected void generateBlockTooltips() {
super.generateBlockTooltips();
ITextComponent tooltip = new TextComponentTranslation("gregtech.multiblock.preview.limit", 14).setStyle(new Style().setColor(TextFormatting.AQUA));
addBlockTooltip(MetaBlocks.METAL_CASING.getItemVariant(MetalCasingType.STEEL_SOLID), tooltip);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
import net.minecraft.client.resources.I18n;
import net.minecraft.init.Blocks;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.text.TextFormatting;

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

@Override
protected void generateBlockTooltips() {
super.generateBlockTooltips();
ITextComponent tooltip = new TextComponentTranslation("gregtech.multiblock.preview.limit", 9).setStyle(new Style().setColor(TextFormatting.AQUA));
addBlockTooltip(MetaBlocks.METAL_CASING.getItemVariant(MetalCasingType.INVAR_HEATPROOF), tooltip);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,12 @@
import gregtech.integration.jei.multiblock.MultiblockShapeInfo;
import net.minecraft.client.resources.I18n;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.text.TextFormatting;

import java.util.List;

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

@Override
protected void generateBlockTooltips() {
super.generateBlockTooltips();
ItemStack coils = MetaBlocks.WIRE_COIL.getItemVariant(BlockWireCoil.CoilType.CUPRONICKEL);
ITextComponent tooltip = new TextComponentTranslation("gregtech.multiblock.preview.only", coils.getDisplayName()).setStyle(new Style().setColor(TextFormatting.RED));
addBlockTooltip(coils, tooltip);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
import net.minecraft.client.resources.I18n;
import net.minecraft.init.Blocks;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.text.TextFormatting;

import java.util.List;

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

@Override
protected void generateBlockTooltips() {
super.generateBlockTooltips();
ITextComponent tooltip = new TextComponentTranslation("gregtech.multiblock.preview.limit", 14).setStyle(new Style().setColor(TextFormatting.AQUA));
addBlockTooltip(MetaBlocks.METAL_CASING.getItemVariant(MetalCasingType.ALUMINIUM_FROSTPROOF), tooltip);
}


}
6 changes: 6 additions & 0 deletions src/main/resources/assets/gregtech/lang/en_us.lang
Original file line number Diff line number Diff line change
Expand Up @@ -2971,6 +2971,12 @@ gregtech.multiblock.preview.zoom=Shift+RMB to zoom
gregtech.multiblock.preview.pan=LMB+Drag to pan
gregtech.multiblock.preview.move=RMB+Drag to move
gregtech.multiblock.preview.reset=Scroll Mousewheel to reset
gregtech.multiblock.preview.any_hatch=Any tier hatch can be used to form the structure
gregtech.multiblock.preview.limit=Minimum Limit: %d
gregtech.multiblock.preview.limit_per_layer=Only %d per layer
gregtech.multiblock.preview.only=Only %s allowed
gregtech.multiblock.preview.only_location=Only allowed at %s
gregtech.multiblock.preview.location.b_c=Bottom Center

gregtech.multiblock.blast_furnace.max_temperature=Max Temperature: %sK
gregtech.multiblock.multi_furnace.heating_coil_level=Heating Coil Level: %s
Expand Down

0 comments on commit 68dec27

Please sign in to comment.