From 67171a5ff24ed77e6c4cc889543e8dfb543e8fe5 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sun, 20 Dec 2020 19:59:49 +0800 Subject: wip more Signed-off-by: shedaniel --- .../java/me/shedaniel/rei/gui/DelegateScreen.java | 284 +++++++++++++++++++++ 1 file changed, 284 insertions(+) create mode 100644 runtime/src/main/java/me/shedaniel/rei/gui/DelegateScreen.java (limited to 'runtime/src/main/java/me/shedaniel/rei/gui/DelegateScreen.java') diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/DelegateScreen.java b/runtime/src/main/java/me/shedaniel/rei/gui/DelegateScreen.java new file mode 100644 index 000000000..4531980d8 --- /dev/null +++ b/runtime/src/main/java/me/shedaniel/rei/gui/DelegateScreen.java @@ -0,0 +1,284 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020 shedaniel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.shedaniel.rei.gui; + +import com.mojang.blaze3d.vertex.PoseStack; +import me.shedaniel.rei.utils.ImmutableLiteralText; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.Style; +import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; + +import java.nio.file.Path; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +@ApiStatus.Internal +@ApiStatus.Experimental +public class DelegateScreen extends Screen { + protected Screen parent; + + public DelegateScreen(Screen parent) { + super(parent == null ? null : parent.getTitle()); + this.parent = parent; + } + + @Override + public Component getTitle() { + return parent == null ? ImmutableLiteralText.EMPTY : parent.getTitle(); + } + + @Override + public String getNarrationMessage() { + return parent == null ? "" : parent.getNarrationMessage(); + } + + @Override + public boolean keyPressed(int i, int j, int k) { + return parent != null && parent.keyPressed(i, j, k); + } + + @Override + public boolean shouldCloseOnEsc() { + return parent == null || parent.shouldCloseOnEsc(); + } + + @Override + public void onClose() { + if (parent != null) { + parent.onClose(); + } + } + + @Override + public T addButton(T abstractWidget) { + if (parent != null) { + return parent.addButton(abstractWidget); + } + return abstractWidget; + } + + @Override + public T addWidget(T guiEventListener) { + if (parent != null) { + return parent.addWidget(guiEventListener); + } + return guiEventListener; + } + + @Override + public List getTooltipFromItem(ItemStack itemStack) { + if (parent == null) { + return super.getTooltipFromItem(itemStack); + } + return parent.getTooltipFromItem(itemStack); + } + + @Override + public void insertText(String string, boolean bl) { + if (parent != null) { + parent.insertText(string, bl); + } + } + + @Override + public boolean handleComponentClicked(@Nullable Style style) { + return parent != null && parent.handleComponentClicked(style); + } + + @Override + public void sendMessage(String string) { + if (parent != null) { + parent.sendMessage(string); + } + } + + @Override + public void sendMessage(String string, boolean bl) { + if (parent != null) { + parent.sendMessage(string, bl); + } + } + + @Override + public List children() { + return parent == null ? Collections.emptyList() : parent.children(); + } + + @Override + public void tick() { + if (parent != null) { + parent.tick(); + } + } + + @Override + public void removed() { + if (parent != null) { + parent.removed(); + } + } + + @Override + public boolean isPauseScreen() { + return parent != null && parent.isPauseScreen(); + } + + @Override + public boolean isValidCharacterForName(String string, char c, int i) { + return parent != null && parent.isValidCharacterForName(string, c, i); + } + + @Override + public boolean isMouseOver(double d, double e) { + return parent != null && parent.isMouseOver(d, e); + } + + @Override + public void onFilesDrop(List list) { + if (parent != null) { + parent.onFilesDrop(list); + } + } + + @Nullable + @Override + public GuiEventListener getFocused() { + return parent == null ? null : parent.getFocused(); + } + + @Override + public void setFocused(@Nullable GuiEventListener guiEventListener) { + if (parent != null) { + parent.setFocused(guiEventListener); + } + } + + @Override + public int getBlitOffset() { + return parent == null ? 0 : parent.getBlitOffset(); + } + + @Override + public void setBlitOffset(int i) { + if (parent != null) { + parent.setBlitOffset(i); + } + } + + @Override + public boolean mouseClicked(double d, double e, int i) { + return parent != null && parent.mouseClicked(d, e, i); + } + + @Override + public boolean mouseReleased(double d, double e, int i) { + return parent != null && parent.mouseReleased(d, e, i); + } + + @Override + public boolean mouseDragged(double d, double e, int i, double f, double g) { + return parent != null && parent.mouseDragged(d, e, i, f, g); + } + + @Override + public boolean mouseScrolled(double d, double e, double f) { + return parent != null && parent.mouseScrolled(d, e, f); + } + + @Override + public boolean keyReleased(int i, int j, int k) { + return parent != null && parent.keyReleased(i, j, k); + } + + @Override + public boolean charTyped(char c, int i) { + return parent != null && parent.charTyped(c, i); + } + + @Override + public void setInitialFocus(@Nullable GuiEventListener guiEventListener) { + if (parent != null) { + parent.setInitialFocus(guiEventListener); + } + } + + @Override + public void magicalSpecialHackyFocus(@Nullable GuiEventListener guiEventListener) { + if (parent != null) { + parent.magicalSpecialHackyFocus(guiEventListener); + } + } + + @Override + public boolean changeFocus(boolean bl) { + return parent != null && parent.changeFocus(bl); + } + + @Override + public void mouseMoved(double d, double e) { + if (parent != null) { + parent.mouseMoved(d, e); + } + } + + @Override + public void resize(Minecraft minecraft, int i, int j) { + if (parent != null) { + parent.resize(minecraft, i, j); + } + } + + @Override + public void init(Minecraft minecraft, int i, int j) { + if (parent != null) { + parent.init(minecraft, i, j); + } + } + + @Override + public void init() { + if (parent != null) { + parent.init(); + } + } + + @Override + public Optional getChildAt(double d, double e) { + return parent == null ? Optional.empty() : parent.getChildAt(d, e); + } + + @Override + public void render(PoseStack poseStack, int i, int j, float f) { + if (parent != null) { + parent.render(poseStack, i, j, f); + } + } +} -- cgit