0
0
mirror of https://github.com/Wurst-Imperium/Wurst7.git synced 2024-09-20 01:12:13 +02:00

Add abstract superclass for list edit buttons

This commit is contained in:
Alexander01998 2023-02-09 18:24:06 +01:00
parent c153be969e
commit 0c8f05ce61
3 changed files with 162 additions and 218 deletions

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}