diff options
| author | shedaniel <daniel@shedaniel.me> | 2020-09-28 12:27:13 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2020-09-28 12:27:13 +0800 |
| commit | 01e125963b51864459a612766be6d58c7d1fe364 (patch) | |
| tree | 45ded88f36dbeed75c5e105e793ef72375fb6987 /RoughlyEnoughItems-runtime | |
| parent | 8794aa858d2afe8e5244933e398b13d18b4f34ed (diff) | |
| download | RoughlyEnoughItems-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.java | 44 | ||||
| -rw-r--r-- | RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java | 30 |
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; } |
