aboutsummaryrefslogtreecommitdiff
path: root/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java')
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java30
1 files changed, 22 insertions, 8 deletions
diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java
index 5dd8ade09..03a4b1b18 100644
--- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java
+++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java
@@ -36,6 +36,7 @@ import me.shedaniel.rei.utils.CollectionUtils;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.Util;
+import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.resources.ResourceLocation;
@@ -52,6 +53,7 @@ import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
+import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -594,8 +596,17 @@ public class RecipeHelperImpl implements RecipeHelper {
}
@Override
- public void registerScreenClickArea(Rectangle rectangle, Class<? extends AbstractContainerScreen<?>> screenClass, ResourceLocation... categories) {
- this.screenClickAreas.add(new ScreenClickAreaImpl(screenClass, rectangle, categories));
+ public <T extends AbstractContainerScreen<?>> void registerContainerClickArea(ScreenClickAreaProvider<T> rectangleSupplier, Class<T> screenClass, ResourceLocation... categories) {
+ registerClickArea(screen -> {
+ Rectangle rectangle = rectangleSupplier.provide(screen).clone();
+ rectangle.translate(screen.leftPos, screen.topPos);
+ return rectangle;
+ }, screenClass, categories);
+ }
+
+ @Override
+ public <T extends Screen> void registerClickArea(ScreenClickAreaProvider<T> rectangleSupplier, Class<T> screenClass, ResourceLocation... categories) {
+ this.screenClickAreas.add(new ScreenClickAreaImpl(screenClass, () -> rectangleSupplier.provide((T) Minecraft.getInstance().screen), categories));
}
@Override
@@ -626,24 +637,27 @@ public class RecipeHelperImpl implements RecipeHelper {
}
private static class ScreenClickAreaImpl implements ScreenClickArea {
- private Class<? extends AbstractContainerScreen<?>> screenClass;
- private Rectangle rectangle;
+ private Class<? extends Screen> screenClass;
+ private Supplier<Rectangle> rectangleSupplier;
private ResourceLocation[] categories;
- private ScreenClickAreaImpl(Class<? extends AbstractContainerScreen<?>> screenClass, Rectangle rectangle, ResourceLocation[] categories) {
+ private ScreenClickAreaImpl(Class<? extends Screen> screenClass, Supplier<Rectangle> rectangleSupplier, ResourceLocation[] categories) {
this.screenClass = screenClass;
- this.rectangle = rectangle;
+ this.rectangleSupplier = rectangleSupplier;
this.categories = categories;
}
- public Class<? extends AbstractContainerScreen<?>> getScreenClass() {
+ @Override
+ public Class<? extends Screen> getScreenClass() {
return screenClass;
}
+ @Override
public Rectangle getRectangle() {
- return rectangle;
+ return rectangleSupplier.get();
}
+ @Override
public ResourceLocation[] getCategories() {
return categories;
}