diff options
| author | shedaniel <daniel@shedaniel.me> | 2023-10-23 20:56:23 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2023-10-23 21:45:44 +0800 |
| commit | 1f1911d12a2c57293e3dcc21e0cc902c8df88724 (patch) | |
| tree | cc3fa338792bd3ed2e95dfe85d7430448f2bea52 /runtime/src/main/java | |
| parent | 718fcccc62f180badfe3d9decec9a27068ce725c (diff) | |
| download | RoughlyEnoughItems-1f1911d12a2c57293e3dcc21e0cc902c8df88724.tar.gz RoughlyEnoughItems-1f1911d12a2c57293e3dcc21e0cc902c8df88724.tar.bz2 RoughlyEnoughItems-1f1911d12a2c57293e3dcc21e0cc902c8df88724.zip | |
Stop registering events between events
Diffstat (limited to 'runtime/src/main/java')
| -rw-r--r-- | runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/DefaultScreenOverlayRenderer.java | 70 |
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; } } |
