aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2023-10-23 20:56:23 +0800
committershedaniel <daniel@shedaniel.me>2023-10-23 21:45:44 +0800
commit1f1911d12a2c57293e3dcc21e0cc902c8df88724 (patch)
treecc3fa338792bd3ed2e95dfe85d7430448f2bea52 /runtime/src/main
parent718fcccc62f180badfe3d9decec9a27068ce725c (diff)
downloadRoughlyEnoughItems-1f1911d12a2c57293e3dcc21e0cc902c8df88724.tar.gz
RoughlyEnoughItems-1f1911d12a2c57293e3dcc21e0cc902c8df88724.tar.bz2
RoughlyEnoughItems-1f1911d12a2c57293e3dcc21e0cc902c8df88724.zip
Stop registering events between events
Diffstat (limited to 'runtime/src/main')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/DefaultScreenOverlayRenderer.java70
1 files changed, 46 insertions, 24 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/DefaultScreenOverlayRenderer.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/DefaultScreenOverlayRenderer.java
index 520b89bb7..8a76a0da3 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/DefaultScreenOverlayRenderer.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/DefaultScreenOverlayRenderer.java
@@ -31,9 +31,7 @@ import me.shedaniel.rei.api.client.gui.screen.DisplayScreen;
import me.shedaniel.rei.api.client.registry.screen.OverlayRendererProvider;
import me.shedaniel.rei.impl.common.InternalLogger;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
-
-import java.util.ArrayList;
-import java.util.List;
+import org.jetbrains.annotations.Nullable;
import static me.shedaniel.rei.RoughlyEnoughItemsCoreClient.resetFocused;
import static me.shedaniel.rei.RoughlyEnoughItemsCoreClient.shouldReturn;
@@ -41,22 +39,50 @@ import static me.shedaniel.rei.RoughlyEnoughItemsCoreClient.shouldReturn;
public enum DefaultScreenOverlayRenderer implements OverlayRendererProvider {
INSTANCE;
- private final List<Runnable> onRemoved = new ArrayList<>();
+ @Nullable
+ private ClientGuiEvent.ScreenRenderPre renderPre;
+ @Nullable
+ private ClientGuiEvent.ContainerScreenRenderBackground renderContainerBg;
+ @Nullable
+ private ClientGuiEvent.ContainerScreenRenderForeground renderContainerFg;
+ @Nullable
+ private ClientGuiEvent.ScreenRenderPost renderPost;
+
+ {
+ ClientGuiEvent.RENDER_PRE.register((screen, graphics, mouseX, mouseY, delta) -> {
+ if (renderPre != null) {
+ return renderPre.render(screen, graphics, mouseX, mouseY, delta);
+ } else {
+ return EventResult.pass();
+ }
+ });
+ ClientGuiEvent.RENDER_CONTAINER_BACKGROUND.register((screen, graphics, mouseX, mouseY, delta) -> {
+ if (renderContainerBg != null) {
+ renderContainerBg.render(screen, graphics, mouseX, mouseY, delta);
+ }
+ });
+ ClientGuiEvent.RENDER_CONTAINER_FOREGROUND.register((screen, graphics, mouseX, mouseY, delta) -> {
+ if (renderContainerFg != null) {
+ renderContainerFg.render(screen, graphics, mouseX, mouseY, delta);
+ }
+ });
+ ClientGuiEvent.RENDER_POST.register((screen, graphics, mouseX, mouseY, delta) -> {
+ if (renderPost != null) {
+ renderPost.render(screen, graphics, mouseX, mouseY, delta);
+ }
+ });
+ }
@Override
public void onApplied(Sink sink) {
int[] rendered = {0};
- ClientGuiEvent.ScreenRenderPre renderPre;
- ClientGuiEvent.ContainerScreenRenderBackground renderContainerBg;
- ClientGuiEvent.ContainerScreenRenderForeground renderContainerFg;
- ClientGuiEvent.ScreenRenderPost renderPost;
- ClientGuiEvent.RENDER_PRE.register(renderPre = (screen, matrices, mouseX, mouseY, delta) -> {
+ this.renderPre = (screen, matrices, mouseX, mouseY, delta) -> {
if (shouldReturn(screen))
return EventResult.pass();
rendered[0] = 0;
return EventResult.pass();
- });
- ClientGuiEvent.RENDER_CONTAINER_BACKGROUND.register(renderContainerBg = (screen, matrices, mouseX, mouseY, delta) -> {
+ };
+ this.renderContainerBg = (screen, matrices, mouseX, mouseY, delta) -> {
if (shouldReturn(screen))
return;
rendered[0] = 1;
@@ -65,8 +91,8 @@ public enum DefaultScreenOverlayRenderer implements OverlayRendererProvider {
sink.render(matrices, mouseX, mouseY, delta);
}
resetFocused(screen);
- });
- ClientGuiEvent.RENDER_CONTAINER_FOREGROUND.register(renderContainerFg = (screen, matrices, mouseX, mouseY, delta) -> {
+ };
+ this.renderContainerFg = (screen, matrices, mouseX, mouseY, delta) -> {
if (shouldReturn(screen))
return;
rendered[0] = 2;
@@ -79,8 +105,8 @@ public enum DefaultScreenOverlayRenderer implements OverlayRendererProvider {
poseStack.popPose();
RenderSystem.applyModelViewMatrix();
resetFocused(screen);
- });
- ClientGuiEvent.RENDER_POST.register(renderPost = (screen, matrices, mouseX, mouseY, delta) -> {
+ };
+ this.renderPost = (screen, matrices, mouseX, mouseY, delta) -> {
if (shouldReturn(screen) || rendered[0] == 2)
return;
if (screen instanceof AbstractContainerScreen) {
@@ -95,18 +121,14 @@ public enum DefaultScreenOverlayRenderer implements OverlayRendererProvider {
sink.lateRender(matrices, mouseX, mouseY, delta);
}
resetFocused(screen);
- });
- this.onRemoved.add(() -> {
- ClientGuiEvent.RENDER_PRE.unregister(renderPre);
- ClientGuiEvent.RENDER_CONTAINER_BACKGROUND.unregister(renderContainerBg);
- ClientGuiEvent.RENDER_CONTAINER_FOREGROUND.unregister(renderContainerFg);
- ClientGuiEvent.RENDER_POST.unregister(renderPost);
- });
+ };
}
@Override
public void onRemoved() {
- this.onRemoved.forEach(Runnable::run);
- this.onRemoved.clear();
+ this.renderPre = null;
+ this.renderContainerBg = null;
+ this.renderContainerFg = null;
+ this.renderPost = null;
}
}