aboutsummaryrefslogtreecommitdiff
path: root/RoughlyEnoughItems-runtime
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2020-09-28 12:27:13 +0800
committershedaniel <daniel@shedaniel.me>2020-09-28 12:27:13 +0800
commit01e125963b51864459a612766be6d58c7d1fe364 (patch)
tree45ded88f36dbeed75c5e105e793ef72375fb6987 /RoughlyEnoughItems-runtime
parent8794aa858d2afe8e5244933e398b13d18b4f34ed (diff)
downloadRoughlyEnoughItems-01e125963b51864459a612766be6d58c7d1fe364.tar.gz
RoughlyEnoughItems-01e125963b51864459a612766be6d58c7d1fe364.tar.bz2
RoughlyEnoughItems-01e125963b51864459a612766be6d58c7d1fe364.zip
Make screen click area a provider, and fix work stations border displayed as light.
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'RoughlyEnoughItems-runtime')
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java44
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java30
2 files changed, 48 insertions, 26 deletions
diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
index a437bdfe1..366fc5691 100644
--- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
+++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
@@ -74,10 +74,7 @@ import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Random;
-import java.util.Set;
+import java.util.*;
@ApiStatus.Internal
public class ContainerScreenOverlay extends WidgetWithBounds implements REIOverlay {
@@ -530,15 +527,20 @@ public class ContainerScreenOverlay extends WidgetWithBounds implements REIOverl
}
RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
this.renderWidgets(matrices, mouseX, mouseY, delta);
- if (Minecraft.getInstance().screen instanceof AbstractContainerScreen && ConfigObject.getInstance().areClickableRecipeArrowsEnabled()) {
- AbstractContainerScreen<?> containerScreen = (AbstractContainerScreen<?>) Minecraft.getInstance().screen;
+ if (ConfigObject.getInstance().areClickableRecipeArrowsEnabled()) {
+ List<ResourceLocation> categories = null;
+ Screen screen = Minecraft.getInstance().screen;
for (RecipeHelper.ScreenClickArea area : RecipeHelper.getInstance().getScreenClickAreas())
- if (area.getScreenClass().equals(Minecraft.getInstance().screen.getClass()))
- if (area.getRectangle().contains(mouseX - containerScreen.leftPos, mouseY - containerScreen.topPos)) {
- String collect = CollectionUtils.mapAndJoinToString(area.getCategories(), identifier -> RecipeHelper.getInstance().getCategory(identifier).getCategoryName(), ", ");
- TOOLTIPS.add(Tooltip.create(new TranslatableComponent("text.rei.view_recipes_for", collect)));
- break;
+ if (area.getScreenClass().equals(screen.getClass()))
+ if (area.getRectangle().contains(mouseX, mouseY)) {
+ if (categories == null) {
+ categories = new ArrayList<>(Arrays.asList(area.getCategories()));
+ } else categories.addAll(Arrays.asList(area.getCategories()));
}
+ if (categories != null && !categories.isEmpty()) {
+ String collect = CollectionUtils.mapAndJoinToString(categories, identifier -> RecipeHelper.getInstance().getCategory(identifier).getCategoryName(), ", ");
+ Tooltip.create(new TranslatableComponent("text.rei.view_recipes_for", collect)).queue();
+ }
}
}
@@ -767,15 +769,21 @@ public class ContainerScreenOverlay extends WidgetWithBounds implements REIOverl
removeGameModeMenu();
}
}
- if (Minecraft.getInstance().screen instanceof AbstractContainerScreen && ConfigObject.getInstance().areClickableRecipeArrowsEnabled()) {
- AbstractContainerScreen<?> containerScreen = (AbstractContainerScreen<?>) Minecraft.getInstance().screen;
+ if (ConfigObject.getInstance().areClickableRecipeArrowsEnabled()) {
+ List<ResourceLocation> categories = null;
+ Screen screen = Minecraft.getInstance().screen;
for (RecipeHelper.ScreenClickArea area : RecipeHelper.getInstance().getScreenClickAreas())
- if (area.getScreenClass().equals(containerScreen.getClass()))
- if (area.getRectangle().contains(mouseX - containerScreen.leftPos, mouseY - containerScreen.topPos)) {
- ClientHelper.getInstance().executeViewAllRecipesFromCategories(Arrays.asList(area.getCategories()));
- Minecraft.getInstance().getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F));
- return true;
+ if (area.getScreenClass().equals(screen.getClass()))
+ if (area.getRectangle().contains(mouseX, mouseY)) {
+ if (categories == null) {
+ categories = new ArrayList<>(Arrays.asList(area.getCategories()));
+ } else categories.addAll(Arrays.asList(area.getCategories()));
}
+ if (categories != null && !categories.isEmpty()) {
+ ClientHelper.getInstance().openView(ClientHelper.ViewSearchBuilder.builder().addCategories(categories).fillPreferredOpenedCategory());
+ Minecraft.getInstance().getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F));
+ return true;
+ }
}
for (GuiEventListener element : widgets)
if (element != wrappedSubsetsMenu && element != wrappedWeatherMenu && element != wrappedGameModeMenu && element.mouseClicked(mouseX, mouseY, button)) {
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;
}