diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-08-26 16:48:42 +0900 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-08-26 21:17:48 +0900 |
| commit | a6900532610247cae49f1c782442d07d8f7b1d2d (patch) | |
| tree | 5b01e2e8a84f5fc5254b9613b15ec1ef84961133 /runtime/src/main/java/me | |
| parent | d3bfd79800aacfde6617d5430ead5fdda0a506fe (diff) | |
| download | RoughlyEnoughItems-a6900532610247cae49f1c782442d07d8f7b1d2d.tar.gz RoughlyEnoughItems-a6900532610247cae49f1c782442d07d8f7b1d2d.tar.bz2 RoughlyEnoughItems-a6900532610247cae49f1c782442d07d8f7b1d2d.zip | |
It compiles now
Diffstat (limited to 'runtime/src/main/java/me')
32 files changed, 926 insertions, 1924 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java index 2c8abbdb7..435bdc722 100644 --- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java +++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java @@ -51,6 +51,7 @@ import me.shedaniel.rei.api.common.util.EntryStacks; import me.shedaniel.rei.api.common.util.ImmutableTextComponent; import me.shedaniel.rei.impl.client.ClientInternals; import me.shedaniel.rei.impl.client.REIRuntimeImpl; +import me.shedaniel.rei.impl.client.gui.InternalCursorState; import me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl; import me.shedaniel.rei.impl.client.gui.widget.CatchingExceptionUtils; import me.shedaniel.rei.impl.client.gui.widget.TooltipImpl; @@ -94,8 +95,6 @@ import java.util.stream.Stream; @Environment(EnvType.CLIENT) public class RoughlyEnoughItemsCoreClient { - public static boolean isLeftMousePressed = false; - public static void attachClientInternals() { CatchingExceptionUtils.attach(); ClientInternals.attachInstance((Function<CompoundTag, DataResult<FavoriteEntry>>) (object) -> { @@ -260,7 +259,8 @@ public class RoughlyEnoughItemsCoreClient { } }); ClientScreenInputEvent.MOUSE_CLICKED_PRE.register((minecraftClient, screen, mouseX, mouseY, button) -> { - isLeftMousePressed = true; + if (button == 0) InternalCursorState.isLeftMousePressed = true; + if (button == 1) InternalCursorState.isRightMousePressed = true; if (shouldReturn(screen) || screen instanceof DisplayScreen) return EventResult.pass(); resetFocused(screen); @@ -274,7 +274,8 @@ public class RoughlyEnoughItemsCoreClient { return EventResult.pass(); }); ClientScreenInputEvent.MOUSE_RELEASED_PRE.register((minecraftClient, screen, mouseX, mouseY, button) -> { - isLeftMousePressed = false; + if (button == 0) InternalCursorState.isLeftMousePressed = false; + if (button == 1) InternalCursorState.isRightMousePressed = false; if (shouldReturn(screen) || screen instanceof DisplayScreen) return EventResult.pass(); resetFocused(screen); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/REIRuntimeImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/REIRuntimeImpl.java index 5cff0c22d..88f2d8bdd 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/REIRuntimeImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/REIRuntimeImpl.java @@ -48,6 +48,7 @@ import me.shedaniel.rei.impl.client.gui.TooltipQueue; import me.shedaniel.rei.impl.client.gui.hints.HintProvider; import me.shedaniel.rei.impl.client.gui.widget.CachedEntryListRender; import me.shedaniel.rei.impl.client.gui.widget.search.OverlaySearchField; +import me.shedaniel.rei.impl.client.provider.OverlayTicker; import me.shedaniel.rei.impl.common.Internals; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -274,7 +275,9 @@ public class REIRuntimeImpl implements REIRuntime { ClientTickEvent.CLIENT_POST.register(minecraft -> { if (isOverlayVisible() && REIRuntime.getInstance().getOverlay().isPresent()) { REIRuntime.getInstance().getSearchTextField().tick(); - ScreenOverlayImpl.getInstance().tick(); + for (OverlayTicker ticker : ClientInternals.getOverlayTickers()) { + ticker.tick(); + } } }); } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java index 3f8fb9be9..1943ad379 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java @@ -23,37 +23,17 @@ package me.shedaniel.rei.impl.client.gui; -import com.google.common.collect.Lists; import com.mojang.blaze3d.platform.Window; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; -import me.shedaniel.math.impl.PointHelper; import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.api.client.config.ConfigObject; -import me.shedaniel.rei.api.client.favorites.FavoriteEntry; -import me.shedaniel.rei.api.client.gui.config.DisplayPanelLocation; import me.shedaniel.rei.api.client.gui.config.SearchFieldLocation; -import me.shedaniel.rei.api.client.gui.drag.DraggingContext; -import me.shedaniel.rei.api.client.gui.drag.component.DraggableComponentProvider; -import me.shedaniel.rei.api.client.gui.drag.component.DraggableComponentVisitor; import me.shedaniel.rei.api.client.gui.widgets.TextField; -import me.shedaniel.rei.api.client.gui.widgets.Tooltip; -import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.client.overlay.OverlayListWidget; -import me.shedaniel.rei.api.client.overlay.ScreenOverlay; -import me.shedaniel.rei.api.client.registry.screen.ClickArea; -import me.shedaniel.rei.api.client.registry.screen.OverlayDecider; import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry; -import me.shedaniel.rei.api.client.view.ViewSearchBuilder; -import me.shedaniel.rei.api.common.entry.EntryStack; -import me.shedaniel.rei.api.common.plugins.PluginManager; -import me.shedaniel.rei.impl.client.gui.craftable.CraftableFilter; -import me.shedaniel.rei.impl.client.gui.dragging.CurrentDraggingStack; -import me.shedaniel.rei.impl.client.gui.menu.MenuAccess; -import me.shedaniel.rei.impl.client.gui.menu.MenuAccessImpl; -import me.shedaniel.rei.impl.client.gui.widget.*; +import me.shedaniel.rei.impl.client.gui.overlay.AbstractScreenOverlay; +import me.shedaniel.rei.impl.client.gui.widget.ConfigButtonWidget; +import me.shedaniel.rei.impl.client.gui.widget.CraftableFilterButtonWidget; import me.shedaniel.rei.impl.client.gui.widget.entrylist.EntryListWidget; import me.shedaniel.rei.impl.client.gui.widget.entrylist.PaginatedEntryListWidget; import me.shedaniel.rei.impl.client.gui.widget.entrylist.ScrolledEntryListWidget; @@ -61,137 +41,54 @@ import me.shedaniel.rei.impl.client.gui.widget.favorites.FavoritesListWidget; import me.shedaniel.rei.impl.client.gui.widget.search.OverlaySearchField; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.events.GuiEventListener; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.network.chat.Component; -import net.minecraft.world.InteractionResult; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; -import java.util.List; import java.util.Objects; import java.util.Optional; -import static me.shedaniel.rei.impl.client.gui.widget.entrylist.EntryListWidget.entrySize; - @ApiStatus.Internal -public abstract class ScreenOverlayImpl extends ScreenOverlay { - private static EntryListWidget entryListWidget = null; - private static FavoritesListWidget favoritesListWidget = null; - private static OverlaySearchField searchField = null; - private final List<Widget> widgets = Lists.newLinkedList(); - public boolean shouldReload = false; - public boolean shouldReloadSearch = false; - private Rectangle bounds; - private Widget configButton; - private CurrentDraggingStack draggingStack = new CurrentDraggingStack(); - @Nullable - public DefaultDisplayChoosePageWidget choosePageWidget; - private MenuAccessImpl menuAccess = new MenuAccessImpl(); +public abstract class ScreenOverlayImpl extends AbstractScreenOverlay { + private EntryListWidget entryListWidget = null; + private FavoritesListWidget favoritesListWidget = null; + private OverlaySearchField searchField = null; public static EntryListWidget getEntryListWidget() { - boolean widgetScrolled = ConfigObject.getInstance().isEntryListWidgetScrolled(); - - if (entryListWidget != null) { - if (widgetScrolled && entryListWidget instanceof ScrolledEntryListWidget) { - return entryListWidget; - } else if (!widgetScrolled && entryListWidget instanceof PaginatedEntryListWidget) { - return entryListWidget; - } - } - - entryListWidget = widgetScrolled ? new ScrolledEntryListWidget() : new PaginatedEntryListWidget(); - - ScreenOverlayImpl overlay = ScreenOverlayImpl.getInstance(); - Rectangle overlayBounds = overlay.bounds; - entryListWidget.updateArea(Objects.requireNonNullElse(overlayBounds, new Rectangle()), overlay.getSearchField().getText()); - entryListWidget.updateEntriesPosition(); - - return entryListWidget; + return getInstance().getEntryList(); } @Nullable public static FavoritesListWidget getFavoritesListWidget() { - return favoritesListWidget; + return getInstance().getFavoritesListNullable(); } public static ScreenOverlayImpl getInstance() { return (ScreenOverlayImpl) REIRuntime.getInstance().getOverlay().get(); } - public void tick() { - if (searchField != null) { - if (Minecraft.getInstance().player != null && !PluginManager.areAnyReloading() && Minecraft.getInstance().player.tickCount % 5 == 0) { - CraftableFilter.INSTANCE.tick(); - } - } - } - @Override - public void queueReloadOverlay() { - shouldReload = true; - } - - @Override - public void queueReloadSearch() { - shouldReloadSearch = true; - } - - @Override - public boolean isOverlayReloadQueued() { - return shouldReload; - } - - @Override - public boolean isSearchReloadQueued() { - return shouldReloadSearch || shouldReload; - } - - @Override - public DraggingContext<?> getDraggingContext() { - return draggingStack; - } - - protected boolean hasSpace() { - return !this.bounds.isEmpty(); - } - public void init() { - this.draggingStack.set(DraggableComponentProvider.from(ScreenRegistry.getInstance()::getDraggableComponentProviders), - DraggableComponentVisitor.from(ScreenRegistry.getInstance()::getDraggableComponentVisitors)); + super.init(); - this.shouldReload = false; - this.shouldReloadSearch = false; - this.children().clear(); - this.bounds = calculateOverlayBounds(); - - if (choosePageWidget != null) { - this.widgets.add(choosePageWidget); - } + TextField searchField = getSearchField(); + searchField.asWidget().getBounds().setBounds(getSearchFieldArea()); + this.children().add(searchField.asWidget()); if (ConfigObject.getInstance().isFavoritesEnabled()) { - if (favoritesListWidget == null) { - favoritesListWidget = new FavoritesListWidget(); - } - favoritesListWidget.favoritePanel.resetRows(); - this.widgets.add(favoritesListWidget); + getFavoritesListWidget().favoritePanel.resetRows(); + this.children().add(getFavoritesListWidget()); } - TextField searchField = getSearchField(); - searchField.asWidget().getBounds().setBounds(getSearchFieldArea()); - this.widgets.add(searchField.asWidget()); - EntryListWidget entryListWidget = getEntryListWidget(); - entryListWidget.updateArea(this.bounds, searchField.getText()); - this.widgets.add(entryListWidget); + entryListWidget.updateArea(this.getBounds(), searchField.getText()); + this.children().add(entryListWidget); searchField.setResponder(s -> entryListWidget.updateSearch(s, false)); entryListWidget.init(this); - this.widgets.add(configButton = ConfigButtonWidget.create(this)); + this.children().add(ConfigButtonWidget.create(this)); if (ConfigObject.getInstance().isCraftableFilterEnabled()) { - this.widgets.add(CraftableFilterButtonWidget.create(this)); + this.children().add(CraftableFilterButtonWidget.create(this)); } - - this.widgets.add(draggingStack); } private Rectangle getSearchFieldArea() { @@ -207,12 +104,12 @@ public abstract class ScreenOverlayImpl extends ScreenOverlay { } private Rectangle getTopSideSearchFieldArea(int widthRemoved) { - return new Rectangle(bounds.x + 2, 4, bounds.width - 6 - widthRemoved, 18); + return new Rectangle(getBounds().x + 2, 4, getBounds().width - 6 - widthRemoved, 18); } private Rectangle getBottomSideSearchFieldArea(int widthRemoved) { Window window = Minecraft.getInstance().getWindow(); - return new Rectangle(bounds.x + 2, window.getGuiScaledHeight() - 22, bounds.width - 6 - widthRemoved, 18); + return new Rectangle(getBounds().x + 2, window.getGuiScaledHeight() - 22, getBounds().width - 6 - widthRemoved, 18); } private Rectangle getCenterSearchFieldArea(int widthRemoved) { @@ -222,179 +119,15 @@ public abstract class ScreenOverlayImpl extends ScreenOverlay { } @Override - public Rectangle getBounds() { - return bounds; - } - - @Override - public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { - if (shouldReload || !calculateOverlayBounds().equals(bounds)) { - init(); - getEntryListWidget().updateSearch(REIRuntime.getInstance().getSearchTextField().getText(), true); - } else { - for (OverlayDecider decider : ScreenRegistry.getInstance().getDeciders(minecraft.screen)) { - if (decider != null && decider.shouldRecalculateArea(ConfigObject.getInstance().getDisplayPanelLocation(), bounds)) { - init(); - break; - } - } - } - if (shouldReloadSearch) { - shouldReloadSearch = false; - getEntryListWidget().updateSearch(getSearchField().getText(), true); - } - if (OverlaySearchField.isHighlighting) { - EntryHighlighter.render(matrices); - } - if (!hasSpace()) return; - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - this.renderWidgets(matrices, mouseX, mouseY, delta); - if (ConfigObject.getInstance().areClickableRecipeArrowsEnabled()) { - Screen screen = Minecraft.getInstance().screen; - ClickArea.ClickAreaContext<Screen> context = createClickAreaContext(mouseX, mouseY, screen); - List<Component> clickAreaTooltips = ScreenRegistry.getInstance().getClickAreaTooltips((Class<Screen>) screen.getClass(), context); - if (clickAreaTooltips != null && !clickAreaTooltips.isEmpty()) { - Tooltip.create(clickAreaTooltips).queue(); - } - } - } - - private ClickArea.ClickAreaContext<Screen> createClickAreaContext(double mouseX, double mouseY, Screen screen) { - return new ClickArea.ClickAreaContext<>() { - @Override - public Screen getScreen() { - return screen; - } - - @Override - public Point getMousePosition() { - return new Point(mouseX, mouseY); - } - }; - } - - private static Rectangle calculateOverlayBounds() { - Rectangle bounds = ScreenRegistry.getInstance().getOverlayBounds(ConfigObject.getInstance().getDisplayPanelLocation(), Minecraft.getInstance().screen); - - int widthReduction = (int) Math.round(bounds.width * (1 - ConfigObject.getInstance().getHorizontalEntriesBoundariesPercentage())); - if (ConfigObject.getInstance().getDisplayPanelLocation() == DisplayPanelLocation.RIGHT) - bounds.x += widthReduction; - bounds.width -= widthReduction; - int maxWidth = (int) Math.ceil(entrySize() * ConfigObject.getInstance().getHorizontalEntriesBoundariesColumns() + entrySize() * 0.75); - if (bounds.width > maxWidth) { - if (ConfigObject.getInstance().getDisplayPanelLocation() == DisplayPanelLocation.RIGHT) - bounds.x += bounds.width - maxWidth; - bounds.width = maxWidth; - } - - return bounds; - } - - public void lateRender(PoseStack matrices, int mouseX, int mouseY, float delta) { - if (REIRuntime.getInstance().isOverlayVisible() && hasSpace()) { - getSearchField().laterRender(matrices, mouseX, mouseY, delta); - for (Widget widget : widgets) { - if (widget instanceof LateRenderable && widget != menuAccess.widget()) - widget.render(matrices, mouseX, mouseY, delta); - } - matrices.pushPose(); - matrices.translate(0, 0, 500); - menuAccess.lateRender(matrices, mouseX, mouseY, delta); - matrices.popPose(); - if (choosePageWidget != null) { - setBlitOffset(500); - Window window = Minecraft.getInstance().getWindow(); - this.fillGradient(matrices, 0, 0, window.getGuiScaledWidth(), window.getGuiScaledHeight(), -1072689136, -804253680); - setBlitOffset(0); - choosePageWidget.render(matrices, mouseX, mouseY, delta); - } - } - if (choosePageWidget == null) { - Tooltip tooltip = TooltipQueue.get(); - - if (tooltip != null) { - renderTooltip(matrices, tooltip); - } - } - - REIRuntime.getInstance().clearTooltips(); - if (REIRuntime.getInstance().isOverlayVisible()) { - menuAccess.afterRender(); - } - } - - @Override - public void renderTooltip(PoseStack matrices, Tooltip tooltip) { - renderTooltipInner(minecraft.screen, matrices, tooltip, tooltip.getX(), tooltip.getY()); - } - - protected abstract void renderTooltipInner(Screen screen, PoseStack matrices, Tooltip tooltip, int mouseX, int mouseY); - - public void renderWidgets(PoseStack matrices, int mouseX, int mouseY, float delta) { - if (!REIRuntime.getInstance().isOverlayVisible()) - return; - for (Widget widget : widgets) { - if (!(widget instanceof LateRenderable)) - widget.render(matrices, mouseX, mouseY, delta); - } - } - - @Override - public boolean mouseScrolled(double mouseX, double mouseY, double amount) { - if (!REIRuntime.getInstance().isOverlayVisible()) - return false; - if (menuAccess.mouseScrolled(mouseX, mouseY, amount)) - return true; - if (isInside(mouseX, mouseY) && getEntryListWidget().mouseScrolled(mouseX, mouseY, amount)) { - return true; - } - if (isNotInExclusionZones(PointHelper.getMouseX(), PointHelper.getMouseY())) { - if (favoritesListWidget != null && favoritesListWidget.mouseScrolled(mouseX, mouseY, amount)) - return true; - } - for (Widget widget : widgets) - if (widget != getEntryListWidget() && (favoritesListWidget == null || widget != favoritesListWidget) - && widget != menuAccess.widget() - && widget.mouseScrolled(mouseX, mouseY, amount)) - return true; - return false; + protected void updateSearch() { + getEntryListWidget().updateSearch(getSearchField().getText(), true); } @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + if (super.keyPressed(keyCode, scanCode, modifiers)) return true; if (!hasSpace()) return false; - if (REIRuntime.getInstance().isOverlayVisible()) { - if (keyCode == 256 && choosePageWidget != null) { - choosePageWidget = null; - return true; - } - if (choosePageWidget != null) - return choosePageWidget.keyPressed(keyCode, scanCode, modifiers); - if (getSearchField().keyPressed(keyCode, scanCode, modifiers)) - return true; - for (GuiEventListener listener : widgets) - if (listener != getSearchField() && listener.keyPressed(keyCode, scanCode, modifiers)) - return true; - } - if (ConfigObject.getInstance().getHideKeybind().matchesKey(keyCode, scanCode)) { - REIRuntime.getInstance().toggleOverlayVisible(); - return true; - } - EntryStack<?> stack = ScreenRegistry.getInstance().getFocusedStack(Minecraft.getInstance().screen, PointHelper.ofMouse()); - if (stack != null && !stack.isEmpty()) { - stack = stack.copy(); - if (ConfigObject.getInstance().getRecipeKeybind().matchesKey(keyCode, scanCode)) { - return ViewSearchBuilder.builder().addRecipesFor(stack).open(); - } else if (ConfigObject.getInstance().getUsageKeybind().matchesKey(keyCode, scanCode)) { - return ViewSearchBuilder.builder().addUsagesFor(stack).open(); - } else if (ConfigObject.getInstance().getFavoriteKeyCode().matchesKey(keyCode, scanCode)) { - FavoriteEntry favoriteEntry = FavoriteEntry.fromEntryStack(stack); - ConfigObject.getInstance().getFavoriteEntries().add(favoriteEntry); - return true; - } - } - if (!REIRuntime.getInstance().isOverlayVisible()) - return false; + if (!REIRuntime.getInstance().isOverlayVisible()) return false; if (ConfigObject.getInstance().getFocusSearchFieldKeybind().matchesKey(keyCode, scanCode)) { getSearchField().setFocused(true); setFocused(getSearchField()); @@ -406,107 +139,10 @@ public abstract class ScreenOverlayImpl extends ScreenOverlay { } @Override - public boolean keyReleased(int keyCode, int scanCode, int modifiers) { - if (!hasSpace()) return false; - if (REIRuntime.getInstance().isOverlayVisible()) { - if (choosePageWidget == null) { - if (getSearchField().keyReleased(keyCode, scanCode, modifiers)) - return true; - for (GuiEventListener listener : widgets) - if (listener != getSearchField() && listener == getFocused() && listener.keyPressed(keyCode, scanCode, modifiers)) - return true; - } - } - return false; - } - - @Override - public boolean charTyped(char character, int modifiers) { - if (!REIRuntime.getInstance().isOverlayVisible()) - return false; - if (!hasSpace()) return false; - if (choosePageWidget != null) { - return choosePageWidget.charTyped(character, modifiers); - } - if (getSearchField().charTyped(character, modifiers)) - return true; - for (GuiEventListener listener : widgets) - if (listener != getSearchField() && listener.charTyped(character, modifiers)) - return true; - return false; - } - - @Override - public List<Widget> children() { - return widgets; - } - - @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { + if (super.mouseClicked(mouseX, mouseY, button)) return true; boolean visible = REIRuntime.getInstance().isOverlayVisible(); - if (choosePageWidget != null) { - if (choosePageWidget.containsMouse(mouseX, mouseY)) { - return choosePageWidget.mouseClicked(mouseX, mouseY, button); - } else { - choosePageWidget = null; - init(); - return false; - } - } - if (!hasSpace()) return false; - if (visible && configButton.mouseClicked(mouseX, mouseY, button)) { - this.setFocused(configButton); - if (button == 0) - this.setDragging(true); - return true; - } - if (ConfigObject.getInstance().getHideKeybind().matchesMouse(button)) { - REIRuntime.getInstance().toggleOverlayVisible(); - return REIRuntime.getInstance().isOverlayVisible(); |
