Skip to content

Commit 0846173

Browse files
authored
Support Bookmarking multiblock info (#3978)
1 parent 828acac commit 0846173

File tree

2 files changed

+64
-1
lines changed

2 files changed

+64
-1
lines changed

gradle/forge.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ registrate = "MC1.20-1.3.11"
44
configuration = "2.2.0"
55
mixinExtras = "0.5.0-rc.3"
66

7-
jei = "15.20.0.105"
7+
jei = "15.20.0.115"
88
rei = "12.1.785"
99
emi = "1.1.13+1.20.1"
1010
ae2 = "15.0.18"

src/main/java/com/gregtechceu/gtceu/integration/jei/multipage/MultiblockInfoCategory.java

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,35 @@
55
import com.gregtechceu.gtceu.api.registry.GTRegistries;
66
import com.gregtechceu.gtceu.common.data.machines.GTMultiMachines;
77

8+
import com.lowdragmc.lowdraglib.gui.widget.Widget;
89
import com.lowdragmc.lowdraglib.jei.ModularUIRecipeCategory;
910

11+
import net.minecraft.MethodsReturnNonnullByDefault;
12+
import net.minecraft.client.gui.navigation.ScreenPosition;
1013
import net.minecraft.network.chat.Component;
14+
import net.minecraft.resources.ResourceLocation;
1115

1216
import mezz.jei.api.gui.drawable.IDrawable;
17+
import mezz.jei.api.gui.ingredient.IRecipeSlotDrawable;
18+
import mezz.jei.api.gui.inputs.RecipeSlotUnderMouse;
19+
import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder;
20+
import mezz.jei.api.gui.widgets.ISlottedRecipeWidget;
1321
import mezz.jei.api.helpers.IGuiHelper;
1422
import mezz.jei.api.helpers.IJeiHelpers;
23+
import mezz.jei.api.recipe.IFocusGroup;
1524
import mezz.jei.api.recipe.RecipeType;
1625
import mezz.jei.api.registration.IRecipeRegistration;
1726
import org.jetbrains.annotations.NotNull;
27+
import org.jetbrains.annotations.Nullable;
1828

29+
import java.util.ArrayList;
30+
import java.util.List;
31+
import java.util.Optional;
32+
33+
import javax.annotation.ParametersAreNonnullByDefault;
34+
35+
@MethodsReturnNonnullByDefault
36+
@ParametersAreNonnullByDefault
1937
public class MultiblockInfoCategory extends ModularUIRecipeCategory<MultiblockInfoWrapper> {
2038

2139
public final static RecipeType<MultiblockInfoWrapper> RECIPE_TYPE = new RecipeType<>(GTCEu.id("multiblock_info"),
@@ -38,6 +56,51 @@ public static void registerRecipes(IRecipeRegistration registry) {
3856
.toList());
3957
}
4058

59+
@Override
60+
public void createRecipeExtras(@NotNull IRecipeExtrasBuilder builder, @NotNull MultiblockInfoWrapper recipe,
61+
@NotNull IFocusGroup focuses) {
62+
super.createRecipeExtras(builder, recipe, focuses);
63+
List<IRecipeSlotDrawable> slots = new ArrayList<>(builder.getRecipeSlots().getSlots());
64+
class ProxyRecipeWidget implements ISlottedRecipeWidget {
65+
66+
private final ScreenPosition position = new ScreenPosition(0, 0);
67+
68+
@Override
69+
public Optional<RecipeSlotUnderMouse> getSlotUnderMouse(double mouseX, double mouseY) {
70+
var panel = recipe.getWidget();
71+
var pos = panel.getSelfPosition();
72+
var size = panel.getSize();
73+
boolean inParent = Widget.isMouseOver(pos.x, pos.y, size.width, size.height, mouseX, mouseY);
74+
if (!inParent) return Optional.empty();
75+
List<Widget> widgets = recipe.modularUI.getFlatWidgetCollection();
76+
return slots.stream()
77+
.filter(slot -> {
78+
Optional<String> slotName = slot.getSlotName();
79+
if (slotName.isEmpty()) return false;
80+
String name = slotName.get();
81+
int index = Integer.parseInt(name.substring(5));
82+
Widget widget = widgets.get(index);
83+
slot.setPosition(widget.getPositionX(), widget.getPositionY());
84+
return slot.isMouseOver(mouseX, mouseY);
85+
})
86+
.findFirst()
87+
.map(slot -> new RecipeSlotUnderMouse(slot, 0, 0));
88+
}
89+
90+
@Override
91+
public ScreenPosition getPosition() {
92+
return position;
93+
}
94+
}
95+
96+
builder.addSlottedWidget(new ProxyRecipeWidget(), slots);
97+
}
98+
99+
@Override
100+
public @Nullable ResourceLocation getRegistryName(@NotNull MultiblockInfoWrapper recipe) {
101+
return recipe.definition.getId();
102+
}
103+
41104
@Override
42105
@NotNull
43106
public RecipeType<MultiblockInfoWrapper> getRecipeType() {

0 commit comments

Comments
 (0)