Skip to content

Commit 73f533f

Browse files
committed
Refactor icon button code to be more composable
1 parent 88f2bb1 commit 73f533f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+752
-591
lines changed

Common/src/main/java/mezz/jei/common/gui/JeiTooltip.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public void setIngredient(ITypedIngredient<?> typedIngredient) {
7272
this.typedIngredient = typedIngredient;
7373
}
7474

75+
@Override
7576
public void addKeyUsageComponent(String translationKey, IJeiKeyMapping keyMapping) {
7677
MutableComponent translatedKeyMessage = keyMapping.getTranslatedKeyMessage().copy();
7778
addKeyUsageComponent(translationKey, translatedKeyMessage);

Common/src/main/java/mezz/jei/common/gui/RecipeLayoutDrawableErrored.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,7 @@ public Rect2i getRectWithBorder() {
120120
}
121121

122122
@Override
123-
public Rect2i getRecipeTransferButtonArea() {
124-
return new Rect2i(0, 0, 0, 0);
125-
}
126-
127-
@Override
128-
public Rect2i getRecipeBookmarkButtonArea() {
123+
public Rect2i getSideButtonArea(int buttonIndex) {
129124
return new Rect2i(0, 0, 0, 0);
130125
}
131126

Common/src/main/java/mezz/jei/common/transfer/BasicRecipeTransferHandlerServer.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import org.apache.logging.log4j.Logger;
99
import org.jetbrains.annotations.Nullable;
1010

11-
import javax.annotation.Nonnull;
1211
import java.util.ArrayList;
1312
import java.util.Collection;
1413
import java.util.HashMap;
@@ -160,7 +159,6 @@ private static Map<Slot, ItemStackWithSlotHint> calculateRequiredStacks(List<Tra
160159
return recipeSlotToRequired;
161160
}
162161

163-
@Nonnull
164162
private static Map<Slot, ItemStack> takeItemsFromInventory(
165163
Player player,
166164
Map<Slot, ItemStackWithSlotHint> recipeSlotToRequiredItemStack,

CommonApi/src/main/java/mezz/jei/api/gui/IRecipeLayoutDrawable.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,24 @@ default Optional<ItemStack> getItemStackUnderMouse(int mouseX, int mouseY) {
9696
* Get the position of the recipe transfer button area, relative to the recipe layout drawable.
9797
* @since 11.5.0
9898
*/
99-
Rect2i getRecipeTransferButtonArea();
99+
default Rect2i getRecipeTransferButtonArea() {
100+
return getSideButtonArea(0);
101+
}
100102

101103
/**
102104
* Get the position of the recipe bookmark button area, relative to the recipe layout drawable.
103105
* @since 19.1.0
104106
*/
105-
Rect2i getRecipeBookmarkButtonArea();
107+
default Rect2i getRecipeBookmarkButtonArea() {
108+
return getSideButtonArea(1);
109+
}
110+
111+
/**
112+
* Get the position of an extra button area, relative to the recipe layout drawable.
113+
* These buttons are used for recipe transfer, bookmarking recipes, etc.
114+
* @since 27.1.0
115+
*/
116+
Rect2i getSideButtonArea(int buttonIndex);
106117

107118
/**
108119
* Get a view of the recipe slots for this recipe layout.

CommonApi/src/main/java/mezz/jei/api/gui/builder/ITooltipBuilder.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.mojang.datafixers.util.Either;
44
import mezz.jei.api.ingredients.ITypedIngredient;
5+
import mezz.jei.api.runtime.IJeiKeyMapping;
56
import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent;
67
import net.minecraft.network.chat.Component;
78
import net.minecraft.network.chat.FormattedText;
@@ -43,6 +44,17 @@ public interface ITooltipBuilder {
4344
*/
4445
void add(TooltipComponent component);
4546

47+
/**
48+
* Add text describing the given keyMapping.
49+
* The translationKey must take a string formatting key (%s) to accept the translated key mapping string.
50+
*
51+
* For example, a translation key could be defined this way:
52+
* "jei.tooltip.bookmarks.tooltips.usage": "[Press \"%s\" to show details]"
53+
*
54+
* @since 27.1.0
55+
*/
56+
void addKeyUsageComponent(String translationKey, IJeiKeyMapping keyMapping);
57+
4658
/**
4759
* Add an ingredient that is associated with this tooltip.
4860
* Most platforms use this ingredient information in tooltip events in

CommonApi/src/main/java/mezz/jei/api/gui/inputs/IJeiUserInput.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import mezz.jei.api.runtime.IJeiKeyMappings;
66
import net.minecraft.client.KeyMapping;
77
import net.minecraft.client.gui.components.events.GuiEventListener;
8+
import net.minecraft.client.input.InputWithModifiers;
89

910
/**
1011
* Represents a click or key press.
@@ -24,8 +25,16 @@ public interface IJeiUserInput {
2425
*
2526
* @since 19.6.0
2627
*/
28+
@InputWithModifiers.Modifiers
2729
int getModifiers();
2830

31+
/**
32+
* Get the backing {@link InputWithModifiers} that this {@link IJeiUserInput} was created from.
33+
*
34+
* @since 27.1.0
35+
*/
36+
InputWithModifiers getInputWithModifiers();
37+
2938
/**
3039
* True on mouse down, used to check if a click could be handled.
3140
*

CommonApi/src/main/java/mezz/jei/api/recipe/RecipeType.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import mezz.jei.api.recipe.types.IRecipeType;
88
import net.minecraft.core.registries.BuiltInRegistries;
99
import net.minecraft.resources.Identifier;
10-
import net.minecraft.resources.Identifier;
1110
import net.minecraft.world.item.crafting.Recipe;
1211
import net.minecraft.world.item.crafting.RecipeHolder;
1312

CommonApi/src/main/java/mezz/jei/api/recipe/types/IRecipeHolderType.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.google.common.base.Suppliers;
44
import net.minecraft.core.registries.BuiltInRegistries;
55
import net.minecraft.resources.Identifier;
6-
import net.minecraft.resources.Identifier;
76
import net.minecraft.world.item.crafting.Recipe;
87
import net.minecraft.world.item.crafting.RecipeHolder;
98
import net.minecraft.world.item.crafting.RecipeType;

Gui/src/main/java/mezz/jei/gui/PageNavigation.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import mezz.jei.common.gui.textures.Textures;
55
import mezz.jei.common.util.ImmutableRect2i;
66
import mezz.jei.common.util.MathUtil;
7-
import mezz.jei.gui.elements.GuiIconButton;
7+
import mezz.jei.gui.elements.IconButton;
88
import mezz.jei.gui.input.IPaged;
99
import mezz.jei.gui.input.IUserInputHandler;
1010
import mezz.jei.gui.input.handlers.CombinedInputHandler;
@@ -14,17 +14,17 @@
1414

1515
public class PageNavigation {
1616
private final IPaged paged;
17-
private final GuiIconButton nextButton;
18-
private final GuiIconButton backButton;
17+
private final IconButton nextButton;
18+
private final IconButton backButton;
1919
private final boolean hideOnSinglePage;
2020
private String pageNumDisplayString = "1/1";
2121
private ImmutableRect2i area = ImmutableRect2i.EMPTY;
2222

2323
public PageNavigation(IPaged paged, boolean hideOnSinglePage) {
2424
this.paged = paged;
2525
Textures textures = Internal.getTextures();
26-
this.nextButton = new GuiIconButton(textures.getArrowNext(), b -> paged.nextPage());
27-
this.backButton = new GuiIconButton(textures.getArrowPrevious(), b -> paged.previousPage());
26+
this.nextButton = new IconButton(textures.getArrowNext(), b -> b.isSimulate() || paged.nextPage());
27+
this.backButton = new IconButton(textures.getArrowPrevious(), b -> b.isSimulate() || paged.previousPage());
2828
this.hideOnSinglePage = hideOnSinglePage;
2929
}
3030

@@ -68,8 +68,8 @@ public void draw(Minecraft minecraft, GuiGraphics guiGraphics, int mouseX, int m
6868
if (centerArea.width() <= availableWidth) {
6969
guiGraphics.drawString(font, pageNumDisplayString, centerArea.getX(), centerArea.getY(), 0xFFFFFFFF);
7070
}
71-
nextButton.render(guiGraphics, mouseX, mouseY, partialTicks);
72-
backButton.render(guiGraphics, mouseX, mouseY, partialTicks);
71+
nextButton.draw(guiGraphics, mouseX, mouseY, partialTicks);
72+
backButton.draw(guiGraphics, mouseX, mouseY, partialTicks);
7373
}
7474
}
7575

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package mezz.jei.gui.elements;
2+
3+
import mezz.jei.api.gui.drawable.IDrawable;
4+
import mezz.jei.api.gui.inputs.IJeiUserInput;
5+
6+
import java.util.function.Function;
7+
8+
public class BasicButtonDescriptor implements IIconButtonDescriptor {
9+
private final IDrawable icon;
10+
private final Function<IJeiUserInput, Boolean> onPress;
11+
12+
public BasicButtonDescriptor(IDrawable icon, Function<IJeiUserInput, Boolean> onPress) {
13+
this.icon = icon;
14+
this.onPress = onPress;
15+
}
16+
17+
@Override
18+
public IDrawable getIcon() {
19+
return icon;
20+
}
21+
22+
@Override
23+
public boolean onPress(IJeiUserInput input) {
24+
return onPress.apply(input);
25+
}
26+
}

0 commit comments

Comments
 (0)