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:
parent
c153be969e
commit
0c8f05ce61
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user