From 0c8f05ce6111adfd093bb9691af5f85e86184144 Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Thu, 9 Feb 2023 18:24:06 +0100 Subject: [PATCH] Add abstract superclass for list edit buttons --- .../components/AbstractListEditButton.java | 142 ++++++++++++++++++ .../components/BlockListEditButton.java | 119 ++------------- .../components/ItemListEditButton.java | 119 ++------------- 3 files changed, 162 insertions(+), 218 deletions(-) create mode 100644 src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java diff --git a/src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java b/src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java new file mode 100644 index 00000000..6673927b --- /dev/null +++ b/src/main/java/net/wurstclient/clickgui/components/AbstractListEditButton.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2014-2023 Wurst-Imperium and contributors. + * + * This source code is subject to the terms of the GNU General Public + * License, version 3. If a copy of the GPL was not distributed with this + * file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt + */ +package net.wurstclient.clickgui.components; + +import org.joml.Matrix4f; +import org.lwjgl.opengl.GL11; + +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.render.Tessellator; +import net.minecraft.client.render.VertexFormat; +import net.minecraft.client.render.VertexFormats; +import net.minecraft.client.util.math.MatrixStack; +import net.wurstclient.WurstClient; +import net.wurstclient.clickgui.ClickGui; +import net.wurstclient.clickgui.Component; +import net.wurstclient.settings.Setting; + +public abstract class AbstractListEditButton extends Component +{ + protected static final MinecraftClient MC = WurstClient.MC; + + private final String buttonText = "Edit..."; + private final int buttonWidth; + + public AbstractListEditButton() + { + buttonWidth = MC.textRenderer.getWidth(buttonText); + } + + protected abstract void openScreen(); + + protected abstract String getText(); + + protected abstract Setting getSetting(); + + @Override + public void handleMouseClick(double mouseX, double mouseY, int mouseButton) + { + if(mouseButton != 0) + return; + + if(mouseX < getX() + getWidth() - buttonWidth - 4) + return; + + openScreen(); + } + + @Override + public void render(MatrixStack matrixStack, int mouseX, int mouseY, + float partialTicks) + { + ClickGui gui = WurstClient.INSTANCE.getGui(); + float[] bgColor = gui.getBgColor(); + float[] acColor = gui.getAcColor(); + int txtColor = gui.getTxtColor(); + float opacity = gui.getOpacity(); + + int x1 = getX(); + int x2 = x1 + getWidth(); + int x3 = x2 - buttonWidth - 4; + int y1 = getY(); + int y2 = y1 + getHeight(); + + int scroll = getParent().isScrollingEnabled() + ? getParent().getScrollOffset() : 0; + boolean hovering = mouseX >= x1 && mouseY >= y1 && mouseX < x2 + && mouseY < y2 && mouseY >= -scroll + && mouseY < getParent().getHeight() - 13 - scroll; + boolean hText = hovering && mouseX < x3; + boolean hBox = hovering && mouseX >= x3; + + Matrix4f matrix = matrixStack.peek().getPositionMatrix(); + Tessellator tessellator = RenderSystem.renderThreadTesselator(); + BufferBuilder bufferBuilder = tessellator.getBuffer(); + RenderSystem.setShader(GameRenderer::getPositionProgram); + + // tooltip + if(hText) + gui.setTooltip(getSetting().getWrappedDescription(200)); + + // background + RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], + opacity); + bufferBuilder.begin(VertexFormat.DrawMode.QUADS, + VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x1, y1, 0).next(); + bufferBuilder.vertex(matrix, x1, y2, 0).next(); + bufferBuilder.vertex(matrix, x3, y2, 0).next(); + bufferBuilder.vertex(matrix, x3, y1, 0).next(); + tessellator.draw(); + + // box + RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], + hBox ? opacity * 1.5F : opacity); + bufferBuilder.begin(VertexFormat.DrawMode.QUADS, + VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x3, y1, 0).next(); + bufferBuilder.vertex(matrix, x3, y2, 0).next(); + bufferBuilder.vertex(matrix, x2, y2, 0).next(); + bufferBuilder.vertex(matrix, x2, y1, 0).next(); + tessellator.draw(); + RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); + bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, + VertexFormats.POSITION); + bufferBuilder.vertex(matrix, x3, y1, 0).next(); + bufferBuilder.vertex(matrix, x3, y2, 0).next(); + bufferBuilder.vertex(matrix, x2, y2, 0).next(); + bufferBuilder.vertex(matrix, x2, y1, 0).next(); + bufferBuilder.vertex(matrix, x3, y1, 0).next(); + tessellator.draw(); + + // setting name + RenderSystem.setShaderColor(1, 1, 1, 1); + TextRenderer fr = MC.textRenderer; + fr.draw(matrixStack, getText(), x1, y1 + 2, txtColor); + fr.draw(matrixStack, buttonText, x3 + 2, y1 + 2, txtColor); + GL11.glEnable(GL11.GL_BLEND); + } + + @Override + public int getDefaultWidth() + { + TextRenderer fr = MC.textRenderer; + return fr.getWidth(getText()) + buttonWidth + 6; + } + + @Override + public int getDefaultHeight() + { + return 11; + } +} diff --git a/src/main/java/net/wurstclient/clickgui/components/BlockListEditButton.java b/src/main/java/net/wurstclient/clickgui/components/BlockListEditButton.java index 18db1973..cc387843 100644 --- a/src/main/java/net/wurstclient/clickgui/components/BlockListEditButton.java +++ b/src/main/java/net/wurstclient/clickgui/components/BlockListEditButton.java @@ -7,137 +7,38 @@ */ package net.wurstclient.clickgui.components; -import org.joml.Matrix4f; -import org.lwjgl.opengl.GL11; +import java.util.Objects; -import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.GameRenderer; -import net.minecraft.client.render.Tessellator; -import net.minecraft.client.render.VertexFormat; -import net.minecraft.client.render.VertexFormats; -import net.minecraft.client.util.math.MatrixStack; -import net.wurstclient.WurstClient; -import net.wurstclient.clickgui.ClickGui; -import net.wurstclient.clickgui.Component; import net.wurstclient.clickgui.screens.EditBlockListScreen; import net.wurstclient.settings.BlockListSetting; +import net.wurstclient.settings.Setting; -public final class BlockListEditButton extends Component +public final class BlockListEditButton extends AbstractListEditButton { private final BlockListSetting setting; - private int buttonWidth; public BlockListEditButton(BlockListSetting setting) { - this.setting = setting; - - TextRenderer fr = WurstClient.MC.textRenderer; - buttonWidth = fr.getWidth("Edit..."); - + this.setting = Objects.requireNonNull(setting); setWidth(getDefaultWidth()); setHeight(getDefaultHeight()); } @Override - public void handleMouseClick(double mouseX, double mouseY, int mouseButton) + protected void openScreen() { - if(mouseButton != 0) - return; - - if(mouseX < getX() + getWidth() - buttonWidth - 4) - return; - - WurstClient.MC.setScreen( - new EditBlockListScreen(WurstClient.MC.currentScreen, setting)); + MC.setScreen(new EditBlockListScreen(MC.currentScreen, setting)); } @Override - public void render(MatrixStack matrixStack, int mouseX, int mouseY, - float partialTicks) + protected String getText() { - ClickGui gui = WurstClient.INSTANCE.getGui(); - float[] bgColor = gui.getBgColor(); - float[] acColor = gui.getAcColor(); - int txtColor = gui.getTxtColor(); - float opacity = gui.getOpacity(); - - int x1 = getX(); - int x2 = x1 + getWidth(); - int x3 = x2 - buttonWidth - 4; - int y1 = getY(); - int y2 = y1 + getHeight(); - - int scroll = getParent().isScrollingEnabled() - ? getParent().getScrollOffset() : 0; - boolean hovering = mouseX >= x1 && mouseY >= y1 && mouseX < x2 - && mouseY < y2 && mouseY >= -scroll - && mouseY < getParent().getHeight() - 13 - scroll; - boolean hText = hovering && mouseX < x3; - boolean hBox = hovering && mouseX >= x3; - - Matrix4f matrix = matrixStack.peek().getPositionMatrix(); - Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - RenderSystem.setShader(GameRenderer::getPositionProgram); - - // tooltip - if(hText) - gui.setTooltip(setting.getWrappedDescription(200)); - - // background - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - tessellator.draw(); - - // box - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - hBox ? opacity * 1.5F : opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - tessellator.draw(); - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - tessellator.draw(); - - // setting name - RenderSystem.setShaderColor(1, 1, 1, 1); - TextRenderer fr = WurstClient.MC.textRenderer; - String text = setting.getName() + ": " + setting.getBlockNames().size(); - fr.draw(matrixStack, text, x1, y1 + 2, txtColor); - fr.draw(matrixStack, "Edit...", x3 + 2, y1 + 2, txtColor); - GL11.glEnable(GL11.GL_BLEND); + return setting.getName() + ": " + setting.getBlockNames().size(); } @Override - public int getDefaultWidth() + protected Setting getSetting() { - TextRenderer fr = WurstClient.MC.textRenderer; - String text = setting.getName() + ": " + setting.getBlockNames().size(); - return fr.getWidth(text) + buttonWidth + 6; - } - - @Override - public int getDefaultHeight() - { - return 11; + return setting; } } diff --git a/src/main/java/net/wurstclient/clickgui/components/ItemListEditButton.java b/src/main/java/net/wurstclient/clickgui/components/ItemListEditButton.java index 962e1741..c1ce41ad 100644 --- a/src/main/java/net/wurstclient/clickgui/components/ItemListEditButton.java +++ b/src/main/java/net/wurstclient/clickgui/components/ItemListEditButton.java @@ -7,137 +7,38 @@ */ package net.wurstclient.clickgui.components; -import org.joml.Matrix4f; -import org.lwjgl.opengl.GL11; +import java.util.Objects; -import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.GameRenderer; -import net.minecraft.client.render.Tessellator; -import net.minecraft.client.render.VertexFormat; -import net.minecraft.client.render.VertexFormats; -import net.minecraft.client.util.math.MatrixStack; -import net.wurstclient.WurstClient; -import net.wurstclient.clickgui.ClickGui; -import net.wurstclient.clickgui.Component; import net.wurstclient.clickgui.screens.EditItemListScreen; import net.wurstclient.settings.ItemListSetting; +import net.wurstclient.settings.Setting; -public final class ItemListEditButton extends Component +public final class ItemListEditButton extends AbstractListEditButton { private final ItemListSetting setting; - private int buttonWidth; public ItemListEditButton(ItemListSetting setting) { - this.setting = setting; - - TextRenderer fr = WurstClient.MC.textRenderer; - buttonWidth = fr.getWidth("Edit..."); - + this.setting = Objects.requireNonNull(setting); setWidth(getDefaultWidth()); setHeight(getDefaultHeight()); } @Override - public void handleMouseClick(double mouseX, double mouseY, int mouseButton) + protected void openScreen() { - if(mouseButton != 0) - return; - - if(mouseX < getX() + getWidth() - buttonWidth - 4) - return; - - WurstClient.MC.setScreen( - new EditItemListScreen(WurstClient.MC.currentScreen, setting)); + MC.setScreen(new EditItemListScreen(MC.currentScreen, setting)); } @Override - public void render(MatrixStack matrixStack, int mouseX, int mouseY, - float partialTicks) + protected String getText() { - ClickGui gui = WurstClient.INSTANCE.getGui(); - float[] bgColor = gui.getBgColor(); - float[] acColor = gui.getAcColor(); - int txtColor = gui.getTxtColor(); - float opacity = gui.getOpacity(); - - int x1 = getX(); - int x2 = x1 + getWidth(); - int x3 = x2 - buttonWidth - 4; - int y1 = getY(); - int y2 = y1 + getHeight(); - - int scroll = getParent().isScrollingEnabled() - ? getParent().getScrollOffset() : 0; - boolean hovering = mouseX >= x1 && mouseY >= y1 && mouseX < x2 - && mouseY < y2 && mouseY >= -scroll - && mouseY < getParent().getHeight() - 13 - scroll; - boolean hText = hovering && mouseX < x3; - boolean hBox = hovering && mouseX >= x3; - - Matrix4f matrix = matrixStack.peek().getPositionMatrix(); - Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder bufferBuilder = tessellator.getBuffer(); - RenderSystem.setShader(GameRenderer::getPositionProgram); - - // tooltip - if(hText) - gui.setTooltip(setting.getWrappedDescription(200)); - - // background - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x1, y1, 0).next(); - bufferBuilder.vertex(matrix, x1, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - tessellator.draw(); - - // box - RenderSystem.setShaderColor(bgColor[0], bgColor[1], bgColor[2], - hBox ? opacity * 1.5F : opacity); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - tessellator.draw(); - RenderSystem.setShaderColor(acColor[0], acColor[1], acColor[2], 0.5F); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y2, 0).next(); - bufferBuilder.vertex(matrix, x2, y1, 0).next(); - bufferBuilder.vertex(matrix, x3, y1, 0).next(); - tessellator.draw(); - - // setting name - RenderSystem.setShaderColor(1, 1, 1, 1); - TextRenderer fr = WurstClient.MC.textRenderer; - String text = setting.getName() + ": " + setting.getItemNames().size(); - fr.draw(matrixStack, text, x1, y1 + 2, txtColor); - fr.draw(matrixStack, "Edit...", x3 + 2, y1 + 2, txtColor); - GL11.glEnable(GL11.GL_BLEND); + return setting.getName() + ": " + setting.getItemNames().size(); } @Override - public int getDefaultWidth() + protected Setting getSetting() { - TextRenderer fr = WurstClient.MC.textRenderer; - String text = setting.getName() + ": " + setting.getItemNames().size(); - return fr.getWidth(text) + buttonWidth + 6; - } - - @Override - public int getDefaultHeight() - { - return 11; + return setting; } }