diff options
Diffstat (limited to 'runtime/src/main/java')
10 files changed, 180 insertions, 239 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index 15bee847e..a0a2f4ff0 100644 --- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -108,7 +108,6 @@ import static me.shedaniel.rei.impl.Internals.attachInstance; @Environment(EnvType.CLIENT) public class RoughlyEnoughItemsCore { @ApiStatus.Internal public static final Logger LOGGER = LogManager.getFormatterLogger("REI"); - private static final List<REIPlugin> PLUGINS = new ArrayList<>(); private static final ExecutorService SYNC_RECIPES = Executors.newSingleThreadScheduledExecutor(r -> new Thread(r, "REI-SyncRecipes")); @ApiStatus.Experimental public static boolean isLeftModePressed = false; @@ -328,23 +327,6 @@ public class RoughlyEnoughItemsCore { }, "clickAreaHandlerResult"); } - /** - * Registers a REI plugin - * - * @param plugin the plugin instance - * @return the plugin itself - */ - @ApiStatus.Internal - public static <T extends REIPlugin> T registerPlugin(T plugin) { - PLUGINS.add(plugin); - RoughlyEnoughItemsCore.LOGGER.info("Registered plugin %s", plugin.getPluginName()); - return plugin; - } - - public static List<REIPlugin> getPlugins() { - return Collections.unmodifiableList(PLUGINS); - } - public static boolean hasPermissionToUsePackets() { try { Minecraft.getInstance().getConnection().getSuggestionsProvider().hasPermission(0); @@ -438,7 +420,7 @@ public class RoughlyEnoughItemsCore { private void loadTestPlugins() { if (isDebugModeEnabled()) { - registerPlugin(new REITestPlugin()); + PluginManager.getInstance().registerPlugin(new REITestPlugin()); } } diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/AbstractRecipeViewingScreen.java b/runtime/src/main/java/me/shedaniel/rei/gui/AbstractRecipeViewingScreen.java index 02deb5231..0384a5b49 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/AbstractRecipeViewingScreen.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/AbstractRecipeViewingScreen.java @@ -34,6 +34,8 @@ import me.shedaniel.rei.api.util.CollectionUtils; import me.shedaniel.rei.gui.widget.EntryWidget; import me.shedaniel.rei.impl.ClientHelperImpl; import net.minecraft.client.gui.chat.NarratorChatListener; +import net.minecraft.client.gui.components.events.ContainerEventHandler; +import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.Nullable; @@ -118,10 +120,10 @@ public abstract class AbstractRecipeViewingScreen extends Screen implements Reci transformNotice(Slot.OUTPUT, setupDisplay, noticeStack); } - private static void transformNotice(int marker, List<Widget> setupDisplay, EntryStack<?> noticeStack) { + private static void transformNotice(int marker, List<? extends GuiEventListener> setupDisplay, EntryStack<?> noticeStack) { if (noticeStack.isEmpty()) return; - for (Widget widget : setupDisplay) { + for (GuiEventListener widget : setupDisplay) { if (widget instanceof EntryWidget) { EntryWidget entry = (EntryWidget) widget; if (entry.getNoticeMark() == marker && entry.getEntries().size() > 1) { @@ -131,6 +133,8 @@ public abstract class AbstractRecipeViewingScreen extends Screen implements Reci entry.entry(stack); } } + } else if (widget instanceof ContainerEventHandler) { + transformNotice(marker, ((ContainerEventHandler) widget).children(), noticeStack); } } } diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java index 2daf4db4f..c48cf5da2 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java @@ -23,6 +23,7 @@ package me.shedaniel.rei.gui; +import com.google.common.collect.AbstractIterator; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -68,6 +69,7 @@ import me.shedaniel.rei.impl.REIHelperImpl; import me.shedaniel.rei.impl.Weather; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.chat.NarratorChatListener; +import net.minecraft.client.gui.components.events.ContainerEventHandler; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; @@ -170,7 +172,7 @@ public class ContainerScreenOverlay extends REIOverlay { } public void openMenu(UUID uuid, Menu menu, Predicate<Point> inPoint) { - this.overlayMenu = new OverlayMenu(uuid, menu, InternalWidgets.wrapTranslate(menu, 0, 0, 400), inPoint); + this.overlayMenu = new OverlayMenu(uuid, menu, Widgets.withTranslate(menu, 0, 0, 400), inPoint); } @ApiStatus.Internal @@ -200,13 +202,44 @@ public class ContainerScreenOverlay extends REIOverlay { return draggingStack; } + private static <T> Iterable<T> buildWidgetsTree(Iterable<? extends GuiEventListener> listeners, Class<T> type) { + return () -> new AbstractIterator<T>() { + Stack<Iterator<? extends GuiEventListener>> stack; + + { + stack = new Stack<>(); + stack.push(listeners.iterator()); + } + + @Override + protected T computeNext() { + while (!stack.empty()) { + Iterator<? extends GuiEventListener> peek = stack.peek(); + GuiEventListener listener = peek.next(); + if (!peek.hasNext()) + stack.pop(); + if (type.isInstance(listener)) { + return (T) listener; + } + if (listener instanceof ContainerEventHandler) { + List<? extends GuiEventListener> children = ((ContainerEventHandler) listener).children(); + if (!children.isEmpty()) { + stack.push(children.iterator()); + } + } + } + return endOfData(); + } + }; + } + public void init(boolean useless) { init(); } public void init() { - Iterable<DraggableStackProvider> stackProviders = (Iterable) Iterables.filter(widgets, widget -> widget instanceof DraggableStackProvider); - Iterable<DraggableStackVisitor> stackVisitors = (Iterable) Iterables.filter(widgets, widget -> widget instanceof DraggableStackVisitor); + Iterable<DraggableStackProvider> stackProviders = buildWidgetsTree(Iterables.concat(widgets, Minecraft.getInstance().screen.children()), DraggableStackProvider.class); + Iterable<DraggableStackVisitor> stackVisitors = buildWidgetsTree(Iterables.concat(widgets, Minecraft.getInstance().screen.children()), DraggableStackVisitor.class); draggingStack.set(DraggableStackProvider.from(() -> stackProviders), DraggableStackVisitor.from(() -> stackVisitors)); this.shouldReload = false; @@ -252,7 +285,7 @@ public class ContainerScreenOverlay extends REIOverlay { final Rectangle configButtonArea = getConfigButtonArea(); Widget tmp; - widgets.add(tmp = InternalWidgets.wrapLateRenderable(InternalWidgets.mergeWidgets( + widgets.add(tmp = InternalWidgets.wrapLateRenderable(InternalWidgets.concatWidgets( Widgets.createButton(configButtonArea, NarratorChatListener.NO_TITLE) .onClick(button -> { if (Screen.hasShiftDown() || Screen.hasControlDown()) { @@ -346,7 +379,7 @@ public class ContainerScreenOverlay extends REIOverlay { } Rectangle subsetsButtonBounds = getSubsetsButtonBounds(); if (ConfigObject.getInstance().isSubsetsEnabled()) { - widgets.add(InternalWidgets.wrapLateRenderable(InternalWidgets.wrapTranslate(Widgets.createButton(subsetsButtonBounds, ClientHelperImpl.getInstance().isAprilFools.get() ? new TranslatableComponent("text.rei.tiny_potato") : new TranslatableComponent("text.rei.subsets")) + widgets.add(InternalWidgets.wrapLateRenderable(Widgets.withTranslate(Widgets.createButton(subsetsButtonBounds, ClientHelperImpl.getInstance().isAprilFools.get() ? new TranslatableComponent("text.rei.tiny_potato") : new TranslatableComponent("text.rei.subsets")) .onClick(button -> { proceedOpenMenuOrElse(Menu.SUBSETS, () -> { openMenu(Menu.SUBSETS, Menu.createSubsetsMenuFromRegistry(new Point(subsetsButtonBounds.x, subsetsButtonBounds.getMaxY())), point -> true); @@ -368,7 +401,7 @@ public class ContainerScreenOverlay extends REIOverlay { Rectangle area = getCraftableToggleArea(); ItemRenderer itemRenderer = Minecraft.getInstance().getItemRenderer(); ItemStack icon = new ItemStack(Blocks.CRAFTING_TABLE); - this.widgets.add(tmp = InternalWidgets.wrapLateRenderable(InternalWidgets.mergeWidgets( + this.widgets.add(tmp = InternalWidgets.wrapLateRenderable(InternalWidgets.concatWidgets( Widgets.createButton(area, NarratorChatListener.NO_TITLE) .focusable(false) .onClick(button -> { @@ -390,54 +423,6 @@ public class ContainerScreenOverlay extends REIOverlay { } widgets.add(draggingStack); - - if (Minecraft.getInstance().screen instanceof RecipeViewingScreen) { - widgets.add(new RecipeViewingScreenDraggable()); - } - } - - private static class RecipeViewingScreenDraggable extends Widget implements DraggableStackProvider { - @Nullable - @Override - public DraggableStack getHoveredStack(DraggingContext context, double mouseX, double mouseY) { - for (Widget widget : ((RecipeViewingScreen) Minecraft.getInstance().screen).getWidgets()) { - if (widget instanceof EntryWidget) { - if (widget.containsMouse(mouseX, mouseY)) { - return new DraggableStack() { - EntryStack<?> stack = ((EntryWidget) widget).getCurrentEntry().copy().rewrap(); - - @Override - public EntryStack<?> getStack() { - return stack; - } - - @Override - public void drag() { - - } - - @Override - public void release(boolean accepted) { - if (!accepted) { - context.renderBackToPosition(this, () -> new Point(((EntryWidget) widget).getBounds().x - 8, ((EntryWidget) widget).getBounds().y - 8)); - } - } - }; - } - } - } - return null; - } - - @Override - public void render(PoseStack poseStack, int i, int j, float f) { - - } - - @Override - public List<? extends GuiEventListener> children() { - return Collections.emptyList(); - } } private Rectangle getSubsetsButtonBounds() { diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/CurrentDraggingStack.java b/runtime/src/main/java/me/shedaniel/rei/gui/CurrentDraggingStack.java index 9a71db41d..a2014f15c 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/CurrentDraggingStack.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/CurrentDraggingStack.java @@ -34,19 +34,21 @@ import me.shedaniel.rei.api.gui.drag.DraggableStackVisitor; import me.shedaniel.rei.api.gui.drag.DraggingContext; import me.shedaniel.rei.api.gui.widgets.Widget; import me.shedaniel.rei.gui.widget.LateRenderable; +import me.shedaniel.rei.impl.Animator; import net.minecraft.client.gui.components.events.GuiEventListener; import org.jetbrains.annotations.Nullable; -import java.util.Collections; -import java.util.List; -import java.util.Optional; +import java.util.*; import java.util.function.Supplier; +import static me.shedaniel.rei.gui.widget.EntryListWidget.entrySize; + public class CurrentDraggingStack extends Widget implements LateRenderable, DraggingContext { private DraggableStackProvider provider; private DraggableStackVisitor visitor; @Nullable private DraggableEntry entry; + private final List<RenderBackEntry> backToOriginals = new ArrayList<>(); public void set(DraggableStackProvider provider, DraggableStackVisitor visitor) { this.provider = provider; @@ -65,6 +67,20 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag entry.stack.render(matrices, new Rectangle(mouseX - 8, mouseY - 8, 16, 16), mouseX, mouseY, delta); matrices.popPose(); } + + Iterator<RenderBackEntry> iterator = backToOriginals.iterator(); + while (iterator.hasNext()) { + RenderBackEntry renderBackEntry = iterator.next(); + renderBackEntry.update(delta); + if (Math.abs(renderBackEntry.x.doubleValue() - renderBackEntry.x.target()) <= 2 && Math.abs(renderBackEntry.y.doubleValue() - renderBackEntry.y.target()) <= 2) { + iterator.remove(); + } else { + matrices.pushPose(); + matrices.translate(0, 0, 600); + renderBackEntry.stack.render(matrices, new Rectangle(renderBackEntry.x.intValue(), renderBackEntry.y.intValue(), 16, 16), mouseX, mouseY, delta); + matrices.popPose(); + } + } } @Override @@ -131,8 +147,8 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag } @Override - public void renderBackToPosition(DraggableStack stack, Supplier<Point> position) { - + public void renderBackToPosition(DraggableStack stack, Point initialPosition, Supplier<Point> position) { + backToOriginals.add(new RenderBackEntry(stack, initialPosition, position)); } private class DraggableEntry { @@ -145,4 +161,34 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag this.start = start; } } + + private static class RenderBackEntry { + private final DraggableStack stack; + private final Supplier<Point> position; + private Animator x = new Animator(); + private Animator y = new Animator(); + private int lastDestination = -1; + + public RenderBackEntry(DraggableStack stack, Point initialPosition, Supplier<Point> position) { + this.stack = stack; + this.x.setAs(initialPosition.x - 8); + this.y.setAs(initialPosition.y - 8); + this.position = position; + } + + public Point getPosition() { + return position.get(); + } + + public void update(double delta) { + this.x.update(delta); + this.y.update(delta); + Point position = getPosition(); + if (lastDestination != position.hashCode()) { + lastDestination = position.hashCode(); + this.x.setTo(position.x, 200); + this.y.setTo(position.y, 200); + } + } + } } diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java index e1af5ecf2..ee0e7f66c 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java @@ -95,7 +95,7 @@ import java.util.function.Consumer; import java.util.stream.Collectors; @ApiStatus.Internal -public class EntryListWidget extends WidgetWithBounds implements DraggableStackProvider { +public class EntryListWidget extends WidgetWithBounds { static final Comparator<? super EntryStack<?>> ENTRY_NAME_COMPARER = Comparator.comparing(stack -> stack.asFormatStrippedText().getString()); static final Comparator<? super EntryStack<?>> ENTRY_GROUP_COMPARER = Comparator.comparingInt(stack -> { if (stack.getType() == VanillaEntryTypes.ITEM) { @@ -184,33 +184,6 @@ public class EntryListWidget extends WidgetWithBounds implements DraggableStackP } @Override - @Nullable - public DraggableStack getHoveredStack(DraggingContext context, double mouseX, double mouseY) { - for (EntryListEntry entry : entries) { - if (!entry.getCurrentEntry().isEmpty() && entry.containsMouse(mouseX, mouseY)) { - return new DraggableStack() { - EntryStack<?> stack = entry.getCurrentEntry().copy(); - - @Override - public EntryStack<?> getStack() { - return stack; - } - - @Override - public void drag() { - } - - @Override - public void release(boolean accepted) { - context.renderBackToPosition(this, () -> new Point(entry.getBounds().x - 8, entry.getBounds().y - 8)); - } - }; - } - } - return null; - } - - @Override public boolean mouseScrolled(double double_1, double double_2, double double_3) { if (bounds.contains(double_1, double_2)) { if (Screen.hasControlDown()) { diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java index f8a042ac0..6dddd1ffc 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java @@ -35,6 +35,9 @@ import me.shedaniel.rei.api.ConfigManager; import me.shedaniel.rei.api.ConfigObject; import me.shedaniel.rei.api.REIHelper; import me.shedaniel.rei.api.favorites.FavoriteEntry; +import me.shedaniel.rei.api.gui.drag.DraggableStack; +import me.shedaniel.rei.api.gui.drag.DraggableStackProvider; +import me.shedaniel.rei.api.gui.drag.DraggingContext; import me.shedaniel.rei.api.gui.widgets.Slot; import me.shedaniel.rei.api.gui.widgets.Tooltip; import me.shedaniel.rei.api.ingredient.EntryStack; @@ -57,7 +60,7 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; -public class EntryWidget extends Slot { +public class EntryWidget extends Slot implements DraggableStackProvider { @ApiStatus.Internal public static long stackDisplayOffset = 0; protected static final ResourceLocation RECIPE_GUI = new ResourceLocation("roughlyenoughitems", "textures/gui/recipecontainer.png"); @@ -447,4 +450,31 @@ public class EntryWidget extends Slot { } return false; } + + @Override + @Nullable + public DraggableStack getHoveredStack(DraggingContext context, double mouseX, double mouseY) { + if (!getCurrentEntry().isEmpty() && containsMouse(mouseX, mouseY)) { + return new DraggableStack() { + EntryStack<?> stack = getCurrentEntry().copy(); + + @Override + public EntryStack<?> getStack() { + return stack; + } + + @Override + public void drag() { + } + + @Override + public void release(boolean accepted) { + if (!accepted) { + context.renderBackToPosition(this, DraggingContext.getInstance().getCurrentPosition(), () -> new Point(getBounds().x, getBounds().y)); + } + } + }; + } + return null; + } } diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java b/runtime/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java index dea403a31..681818a97 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java @@ -24,13 +24,18 @@ package me.shedaniel.rei.gui.widget; import com.mojang.blaze3d.vertex.PoseStack; +import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.ClientHelper; import me.shedaniel.rei.api.REIHelper; import me.shedaniel.rei.api.gui.Renderer; +import me.shedaniel.rei.api.gui.drag.DraggableStack; +import me.shedaniel.rei.api.gui.drag.DraggableStackProvider; +import me.shedaniel.rei.api.gui.drag.DraggingContext; import me.shedaniel.rei.api.gui.widgets.Tooltip; import me.shedaniel.rei.api.gui.widgets.Widget; import me.shedaniel.rei.api.gui.widgets.WidgetWithBounds; +import me.shedaniel.rei.api.ingredient.EntryStack; import me.shedaniel.rei.api.registry.display.DisplayCategory; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; @@ -45,7 +50,7 @@ import java.util.List; import java.util.function.Predicate; @ApiStatus.Internal -public class TabWidget extends WidgetWithBounds { +public class TabWidget extends WidgetWithBounds implements DraggableStackProvider { public static final ResourceLocation CHEST_GUI_TEXTURE = new ResourceLocation("roughlyenoughitems", "textures/gui/recipecontainer.png"); public static final ResourceLocation CHEST_GUI_TEXTURE_DARK = new ResourceLocation("roughlyenoughitems", "textures/gui/recipecontainer_dark.png"); @@ -134,4 +139,29 @@ public class TabWidget extends WidgetWithBounds { return bounds; } + @Override + public @Nullable DraggableStack getHoveredStack(DraggingContext context, double mouseX, double mouseY) { + if (isShown() && renderer instanceof EntryStack && containsMouse(mouseX, mouseY)) { + return new DraggableStack() { + EntryStack<?> stack = ((EntryStack<?>) renderer).copy(); + + @Override + public EntryStack<?> getStack() { + return stack; + } + + @Override + public void drag() { + } + + @Override + public void release(boolean accepted) { + if (!accepted) { + context.renderBackToPosition(this, DraggingContext.getInstance().getCurrentPosition(), () -> new Point(getBounds().getCenterX() - 8, getBounds().getCenterY() - 8)); + } + } + }; + } + return null; + } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java index b1960af17..85c9ebe12 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java @@ -51,7 +51,6 @@ import java.util.List; @Config(name = "roughlyenoughitems/config") @Environment(EnvType.CLIENT) public class ConfigObjectImpl implements ConfigObject, ConfigData { - @ConfigEntry.Category("basics") @ConfigEntry.Gui.TransitiveObject @DontApplyFieldName public Basics basics = new Basics(); @ConfigEntry.Category("appearance") @ConfigEntry.Gui.TransitiveObject @DontApplyFieldName diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/InternalWidgets.java b/runtime/src/main/java/me/shedaniel/rei/impl/InternalWidgets.java index 4abe7aa01..c9c9968cc 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/InternalWidgets.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/InternalWidgets.java @@ -30,10 +30,7 @@ import me.shedaniel.math.Rectangle; import me.shedaniel.math.impl.PointHelper; import me.shedaniel.rei.api.ConfigObject; import me.shedaniel.rei.api.REIHelper; -import me.shedaniel.rei.api.gui.widgets.Button; -import me.shedaniel.rei.api.gui.widgets.Widget; -import me.shedaniel.rei.api.gui.widgets.WidgetWithBounds; -import me.shedaniel.rei.api.gui.widgets.Widgets; +import me.shedaniel.rei.api.gui.widgets.*; import me.shedaniel.rei.api.registry.display.Display; import me.shedaniel.rei.api.registry.display.DisplayCategory; import me.shedaniel.rei.api.registry.display.TransferDisplayCategory; @@ -51,9 +48,7 @@ import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.resources.language.I18n; import net.minecraft.network.chat.Component; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; -import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.function.Supplier; @@ -169,22 +164,7 @@ public final class InternalWidgets { } return str; }); - return new WidgetWithBounds() { - @Override - public @NotNull Rectangle getBounds() { - return autoCraftingButton.getBounds(); - } - - @Override - public List<? extends GuiEventListener> children() { - return Collections.singletonList(autoCraftingButton); - } - - @Override - public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { - autoCraftingButton.render(matrices, mouseX, mouseY, delta); - } - + return new DelegateWidget(autoCraftingButton) { @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { if (displaySupplier.get().getDisplayLocation().isPresent() && ConfigObject.getInstance().getCopyRecipeIdentifierKeybind().matchesKey(keyCode, scanCode) && containsMouse(PointHelper.ofMouse())) { @@ -211,19 +191,11 @@ public final class InternalWidgets { }; } - public static WidgetWithBounds wrapLateRenderable(WidgetWithBounds widget) { - return new LateRenderableWidgetWithBounds(widget); - } - - public static WidgetWithBounds wrapTranslate(WidgetWithBounds widget, float x, float y, float z) { - return new WidgetWithBoundsWithTranslate(widget, x, y, z); - } - - public static Widget wrapLateRenderable(Widget widget) { + public static WidgetWithBounds wrapLateRenderable(Widget widget) { return new LateRenderableWidget(widget); } - public static Widget mergeWidgets(Widget widget1, Widget widget2) { + public static Widget concatWidgets(Widget widget1, Widget widget2) { return new MergedWidget(widget2, widget1); } @@ -257,102 +229,9 @@ public final class InternalWidgets { } } - private static class LateRenderableWidget extends Widget implements LateRenderable { - private final Widget widget; - + private static class LateRenderableWidget extends DelegateWidget implements LateRenderable { private LateRenderableWidget(Widget widget) { - this.widget = widget; - } - - @Override - public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { - this.widget.setZ(getZ()); - this.widget.render(matrices, mouseX, mouseY, delta); - } - - @Override - public List<? extends GuiEventListener> children() { - return Collections.singletonList(this.widget); - } - - @Override - public boolean mouseScrolled(double mouseX, double mouseY, double amount) { - return this.widget.mouseScrolled(mouseX, mouseY, amount); - } - } - - private static class LateRenderableWidgetWithBounds extends WidgetWithBounds implements LateRenderable { - private final WidgetWithBounds widget; - - private LateRenderableWidgetWithBounds(WidgetWithBounds widget) { - this.widget = widget; - } - - @Override - public @NotNull Rectangle getBounds() { - return this.widget.getBounds(); - } - - @Override - public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { - this.widget.setZ(getZ()); - this.widget.render(matrices, mouseX, mouseY, delta); - } - - @Override - public boolean containsMouse(double mouseX, double mouseY) { - return this.widget.containsMouse(mouseX, mouseY); - } - - @Override - public List<? extends GuiEventListener> children() { - return Collections.singletonList(this.widget); - } - - @Override - public boolean mouseScrolled(double mouseX, double mouseY, double amount) { - return this.widget.mouseScrolled(mouseX, mouseY, amount); - } - } - - private static class WidgetWithBoundsWithTranslate extends WidgetWithBounds implements LateRenderable { - private final WidgetWithBounds widget; - private final float x, y, z; - - public WidgetWithBoundsWithTranslate(WidgetWithBounds widget, float x, float y, float z) { - this.widget = widget; - this.x = x; - this.y = y; - this.z = z; - } - - @Override - public @NotNull Rectangle getBounds() { - return this.widget.getBounds(); - } - - @Override - public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { - matrices.pushPose(); - matrices.translate(x, y, z); - this.widget.setZ(getZ()); - this.widget.render(matrices, mouseX, mouseY, delta); - matrices.popPose(); - } - - @Override - public boolean containsMouse(double mouseX, double mouseY) { - return this.widget.containsMouse(mouseX, mouseY); - } - - @Override - public List<? extends GuiEventListener> children() { - return Collections.singletonList(this.widget); - } - - @Override - public boolean mouseScrolled(double mouseX, double mouseY, double amount) { - return this.widget.mouseScrolled(mouseX, mouseY, amount); + super(widget); } } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/PluginManagerImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/PluginManagerImpl.java index bd7cbd299..e62c18a30 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/PluginManagerImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/PluginManagerImpl.java @@ -58,6 +58,7 @@ public class PluginManagerImpl implements PluginManager { private final List<Reloadable> reloadables = new ArrayList<>(); private final Map<Class<? extends Reloadable>, Reloadable> cache = new ConcurrentHashMap<>(); private boolean arePluginsLoading = false; + private final List<REIPlugin> plugins = new ArrayList<>(); public PluginManagerImpl() { registerReloadable(new ConfigManagerImpl()); @@ -102,6 +103,18 @@ public class PluginManagerImpl implements PluginManager { return Collections.unmodifiableList(reloadables); } + @Override + public <T extends REIPlugin> T registerPlugin(T plugin) { + plugins.add(plugin); + RoughlyEnoughItemsCore.LOGGER.info("Registered plugin %s", plugin.getPluginName()); + return plugin; + } + + @Override + public List<REIPlugin> getPlugins() { + return Collections.unmodifiableList(plugins); + } + private static class SectionClosable implements Closeable { private MutablePair<Stopwatch, String> sectionData; @@ -156,7 +169,7 @@ public class PluginManagerImpl implements PluginManager { } arePluginsLoading = true; - List<REIPlugin> plugins = new ArrayList<>(RoughlyEnoughItemsCore.getPlugins()); + List<REIPlugin> plugins = new ArrayList<>(getPlugins()); plugins.sort(Comparator.comparingInt(REIPlugin::getPriority).reversed()); RoughlyEnoughItemsCore.LOGGER.info("Reloading REI, registered %d plugins: %s", plugins.siz |
