High resolution ui

This commit is contained in:
2025-03-31 13:36:45 +02:00
parent 5417e3e742
commit 9cef44d9fe
20 changed files with 375 additions and 596 deletions
@@ -19,7 +19,6 @@ import org.slf4j.LoggerFactory;
/**
* Main class for the Saturn Client mod.
* Originally created by IIpho3nix and modified for Saturn Client by leo.
*/
public class SaturnClient implements ModInitializer {
@@ -17,6 +17,7 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* Manages the cloak system for Saturn Client.
* Handles loading and caching of player cloaks.
* Originally created by IIpho3nix and modified for Saturn Client by leo.
*/
public class Cloaks {
private static final String[] ANIMATED_CLOAKS = { "glitch" };
@@ -25,57 +25,52 @@ public class MainMenu extends SaturnUi {
int buttonHeight = 25;
draw(
new SaturnButton("Mods", () -> {
client.setScreen(new ModMenu());
})
.setX((width - buttonWidth) / 2)
.setY((height - buttonHeight) / 2)
.setWidth(buttonWidth)
.setHeight(buttonHeight)
.setAnimations(new FadeIn(2))
);
new SaturnButton("Mods", () -> {
client.setScreen(new ModMenu());
})
.setX((width - buttonWidth) / 2)
.setY((height - buttonHeight) / 2)
.setWidth(buttonWidth)
.setHeight(buttonHeight)
.setAnimations(new FadeIn(2)));
draw(
new SaturnImageButton(Textures.HUD_ICON, 14, 14, () -> {
client.setScreen(new HudEditor());
})
.setX((width - buttonWidth - (buttonHeight * 2) - 6) / 2)
.setY((height - buttonHeight) / 2)
.setWidth(buttonHeight)
.setHeight(buttonHeight)
.setAnimations(new FadeIn(2))
);
new SaturnImageButton(Textures.HUD_ICON, 14, 14, () -> {
client.setScreen(new HudEditor());
})
.setX((width - buttonWidth - (buttonHeight * 2) - 6) / 2)
.setY((height - buttonHeight) / 2)
.setWidth(buttonHeight)
.setHeight(buttonHeight)
.setAnimations(new FadeIn(2)));
draw(
new SaturnImageButton(Textures.COSMETICS, 14, 14, () -> {
client.setScreen(new CloaksMenu());
})
.setX((width / 2) + (buttonWidth / 2) + 3)
.setY((height - buttonHeight) / 2)
.setWidth(buttonHeight)
.setHeight(buttonHeight)
.setAnimations(new FadeIn(2))
);
new SaturnImageButton(Textures.COSMETICS, 14, 14, () -> {
client.setScreen(new CloaksMenu());
})
.setX((width / 2) + (buttonWidth / 2) + 3)
.setY((height - buttonHeight) / 2)
.setWidth(buttonHeight)
.setHeight(buttonHeight)
.setAnimations(new FadeIn(2)));
int logoSize = 49;
draw(
new SaturnImage(Textures.LOGO_TEXT)
.setX((width - logoSize) / 2)
.setY((height - 8) / 2 - 23)
.setWidth(logoSize)
.setHeight(8)
.setAnimations(new FadeIn(2))
);
new SaturnImage(Textures.LOGO_TEXT)
.setX((width - logoSize) / 2)
.setY((height - 8) / 2 - 23)
.setWidth(logoSize)
.setHeight(8)
.setAnimations(new FadeIn(2)));
draw(
new SaturnImage(Textures.LOGO)
.setX((width - logoSize) / 2)
.setY(height / 2 - logoSize - 24)
.setWidth(logoSize)
.setHeight(logoSize)
.setAnimations(new Slide(2, 14))
);
new SaturnImage(Textures.LOGO)
.setX((width - logoSize) / 2)
.setY(height / 2 - logoSize - 24)
.setWidth(logoSize)
.setHeight(logoSize)
.setAnimations(new Slide(2, 14)));
super.init();
}
@@ -7,6 +7,7 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.MutableText;
import net.minecraft.text.Style;
@@ -23,6 +24,45 @@ public class SaturnUi extends Screen {
Style.EMPTY.withFont(Identifier.of("saturnclient:panton")));
}
public static void drawHighResTexture(DrawContext context, Identifier t, int x, int y, int w, int h) {
MatrixStack matricies = context.getMatrices();
matricies.push();
matricies.scale(.25f, .25f, 1.0f);
context.drawTexture(RenderLayer::getGuiTextured, t, x, y, 0, 0,
w * 4, h * 4, w * 4, h * 4);
matricies.pop();
}
public static void drawHighResTexture(DrawContext context, Identifier t, int x, int y, int w, int h, int c) {
MatrixStack matricies = context.getMatrices();
matricies.push();
matricies.scale(.25f, .25f, 1.0f);
context.drawTexture(RenderLayer::getGuiTextured, t, x, y, 0, 0,
w * 4, h * 4, w * 4, h * 4, c);
matricies.pop();
}
public static void drawHighResGuiTexture(DrawContext context, Identifier t, int x, int y, int w, int h, int c) {
MatrixStack matricies = context.getMatrices();
matricies.push();
matricies.scale(.25f, .25f, 1.0f);
context.drawGuiTexture(
RenderLayer::getGuiTextured,
t,
x,
y,
w * 4,
h * 4,
c);
matricies.pop();
}
public List<SaturnWidget> widgets = new ArrayList<>();
private int tick = 0;
@@ -3,7 +3,6 @@ package org.saturnclient.ui.components;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import org.lwjgl.glfw.GLFW;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnclient.config.Property;
@@ -16,8 +15,7 @@ public class SaturnFloat extends SaturnWidget {
String text = "";
public Property<Float> prop;
public int cursorPosition = 0;
private TextRenderer textRenderer = MinecraftClient.getInstance()
.textRenderer;
private TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
public SaturnFloat(Property<Float> prop, int x, int y, int width) {
this.x = x;
@@ -56,10 +54,9 @@ public class SaturnFloat extends SaturnWidget {
if (text.equals("0") && cursorPosition == 1) {
text = "" + chr;
} else {
text =
text.substring(0, cursorPosition) +
chr +
text.substring(cursorPosition);
text = text.substring(0, cursorPosition) +
chr +
text.substring(cursorPosition);
prop.value = text.isEmpty() ? 0 : Float.parseFloat(text);
@@ -72,9 +69,8 @@ public class SaturnFloat extends SaturnWidget {
public void keyPressed(int keyCode, int scanCode, int modifiers) {
if (keyCode == GLFW.GLFW_KEY_BACKSPACE) {
if (cursorPosition > 0) {
text =
text.substring(0, cursorPosition - 1) +
text.substring(cursorPosition);
text = text.substring(0, cursorPosition - 1) +
text.substring(cursorPosition);
cursorPosition--;
if (text.length() == 0) {
text = "0";
@@ -95,51 +91,44 @@ public class SaturnFloat extends SaturnWidget {
@Override
public void render(
DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
context.drawGuiTexture(
RenderLayer::getGuiTextured,
Textures.BUTTON_BORDER,
0,
0,
this.width,
this.height,
focused
? SaturnClient.COLOR.value
: SaturnClient.getWhite(this.alpha)
);
DrawContext context,
boolean hovering,
int mouseX,
int mouseY) {
SaturnUi.drawHighResGuiTexture(
context,
Textures.BUTTON_BORDER,
0,
0,
this.width,
this.height,
focused
? SaturnClient.COLOR.value
: SaturnClient.getWhite(this.alpha));
int scrollOffset = getScrollOffset();
String visibleText = getVisibleText(scrollOffset);
int textColor = focused ? 0xFFFFFF : 0xAAAAAA;
context.drawText(
textRenderer,
SaturnUi.text(visibleText),
2,
2,
textColor,
false
);
textRenderer,
SaturnUi.text(visibleText),
2,
2,
textColor,
false);
if (focused) {
int cursorX =
2 +
textRenderer.getWidth(
SaturnUi.text(
visibleText.substring(0, cursorPosition - scrollOffset)
)
);
int cursorX = 2 +
textRenderer.getWidth(
SaturnUi.text(
visibleText.substring(0, cursorPosition - scrollOffset)));
context.fill(
cursorX,
2,
cursorX + 1,
textRenderer.fontHeight + 4,
0xFFFFFFFF
);
cursorX,
2,
cursorX + 1,
textRenderer.fontHeight + 4,
0xFFFFFFFF);
}
}
@@ -172,12 +161,8 @@ public class SaturnFloat extends SaturnWidget {
// Ensure text does not overflow past the available width
for (int i = 1; i <= visibleText.length(); i++) {
if (
textRenderer.getWidth(
SaturnUi.text(visibleText.substring(0, i))
) >
width - 4
) {
if (textRenderer.getWidth(
SaturnUi.text(visibleText.substring(0, i))) > width - 4) {
return visibleText.substring(0, i - 1); // Trim overflow
}
}
@@ -3,7 +3,6 @@ package org.saturnclient.ui.components;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import org.lwjgl.glfw.GLFW;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnclient.config.Property;
@@ -16,8 +15,7 @@ public class SaturnHex extends SaturnWidget {
private String text = "#"; // Always starts with '#'
public Property<Integer> prop;
public int cursorPosition = 1; // After '#'
private final TextRenderer textRenderer = MinecraftClient.getInstance()
.textRenderer;
private final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
public SaturnHex(Property<Integer> prop, int x, int y, int width) {
this.x = x;
@@ -37,10 +35,9 @@ public class SaturnHex extends SaturnWidget {
@Override
public void charTyped(char chr) {
if (isHexChar(chr) && text.length() < 7) { // Limit to 6 hex digits + '#'
text =
text.substring(0, cursorPosition) +
chr +
text.substring(cursorPosition);
text = text.substring(0, cursorPosition) +
chr +
text.substring(cursorPosition);
cursorPosition++;
if (text.length() == 7) { // Only update value when full hex is entered
@@ -52,15 +49,12 @@ public class SaturnHex extends SaturnWidget {
@Override
public void keyPressed(int keyCode, int scanCode, int modifiers) {
if (keyCode == GLFW.GLFW_KEY_BACKSPACE && cursorPosition > 1) { // Prevent deleting '#'
text =
text.substring(0, cursorPosition - 1) +
text.substring(cursorPosition);
text = text.substring(0, cursorPosition - 1) +
text.substring(cursorPosition);
cursorPosition--;
} else if (keyCode == GLFW.GLFW_KEY_LEFT && cursorPosition > 1) {
cursorPosition--;
} else if (
keyCode == GLFW.GLFW_KEY_RIGHT && cursorPosition < text.length()
) {
} else if (keyCode == GLFW.GLFW_KEY_RIGHT && cursorPosition < text.length()) {
cursorPosition++;
}
@@ -76,46 +70,40 @@ public class SaturnHex extends SaturnWidget {
@Override
public void render(
DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
context.drawGuiTexture(
RenderLayer::getGuiTextured,
Textures.BUTTON_BORDER,
0,
0,
this.width,
this.height,
focused
? SaturnClient.COLOR.value
: SaturnClient.getWhite(this.alpha)
);
DrawContext context,
boolean hovering,
int mouseX,
int mouseY) {
SaturnUi.drawHighResGuiTexture(
context,
Textures.BUTTON_BORDER,
0,
0,
this.width,
this.height,
focused
? SaturnClient.COLOR.value
: SaturnClient.getWhite(this.alpha));
int textColor = focused ? 0xFFFFFF : 0xAAAAAA;
context.drawText(
textRenderer,
SaturnUi.text(text),
2,
2,
textColor,
false
);
textRenderer,
SaturnUi.text(text),
2,
2,
textColor,
false);
if (focused) {
int cursorX =
2 +
textRenderer.getWidth(
SaturnUi.text(text.substring(0, cursorPosition))
);
int cursorX = 2 +
textRenderer.getWidth(
SaturnUi.text(text.substring(0, cursorPosition)));
context.fill(
cursorX,
2,
cursorX + 1,
textRenderer.fontHeight + 4,
0xFFFFFFFF
);
cursorX,
2,
cursorX + 1,
textRenderer.fontHeight + 4,
0xFFFFFFFF);
}
}
@@ -126,11 +114,9 @@ public class SaturnHex extends SaturnWidget {
}
private boolean isHexChar(char chr) {
return (
(chr >= '0' && chr <= '9') ||
(chr >= 'A' && chr <= 'F') ||
(chr >= 'a' && chr <= 'f')
);
return ((chr >= '0' && chr <= '9') ||
(chr >= 'A' && chr <= 'F') ||
(chr >= 'a' && chr <= 'f'));
}
public static int hexToInt(String hex) {
@@ -3,7 +3,6 @@ package org.saturnclient.ui.components;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import org.lwjgl.glfw.GLFW;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnclient.config.Property;
@@ -16,8 +15,7 @@ public class SaturnInteger extends SaturnWidget {
String text = "";
public Property<Integer> prop;
public int cursorPosition = 0;
private TextRenderer textRenderer = MinecraftClient.getInstance()
.textRenderer;
private TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
public SaturnInteger(Property<Integer> prop, int x, int y, int width) {
this.x = x;
@@ -56,10 +54,9 @@ public class SaturnInteger extends SaturnWidget {
if (text.equals("0") && cursorPosition == 1) {
text = "" + chr;
} else {
text =
text.substring(0, cursorPosition) +
chr +
text.substring(cursorPosition);
text = text.substring(0, cursorPosition) +
chr +
text.substring(cursorPosition);
prop.value = text.isEmpty() ? 0 : Integer.parseInt(text);
@@ -72,9 +69,8 @@ public class SaturnInteger extends SaturnWidget {
public void keyPressed(int keyCode, int scanCode, int modifiers) {
if (keyCode == GLFW.GLFW_KEY_BACKSPACE) {
if (cursorPosition > 0) {
text =
text.substring(0, cursorPosition - 1) +
text.substring(cursorPosition);
text = text.substring(0, cursorPosition - 1) +
text.substring(cursorPosition);
cursorPosition--;
if (text.length() == 0) {
text = "0";
@@ -95,51 +91,44 @@ public class SaturnInteger extends SaturnWidget {
@Override
public void render(
DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
context.drawGuiTexture(
RenderLayer::getGuiTextured,
Textures.BUTTON_BORDER,
0,
0,
this.width,
this.height,
focused
? SaturnClient.COLOR.value
: SaturnClient.getWhite(this.alpha)
);
DrawContext context,
boolean hovering,
int mouseX,
int mouseY) {
SaturnUi.drawHighResGuiTexture(
context,
Textures.BUTTON_BORDER,
0,
0,
this.width,
this.height,
focused
? SaturnClient.COLOR.value
: SaturnClient.getWhite(this.alpha));
int scrollOffset = getScrollOffset();
String visibleText = getVisibleText(scrollOffset);
int textColor = focused ? 0xFFFFFF : 0xAAAAAA;
context.drawText(
textRenderer,
SaturnUi.text(visibleText),
2,
2,
textColor,
false
);
textRenderer,
SaturnUi.text(visibleText),
2,
2,
textColor,
false);
if (focused) {
int cursorX =
2 +
textRenderer.getWidth(
SaturnUi.text(
visibleText.substring(0, cursorPosition - scrollOffset)
)
);
int cursorX = 2 +
textRenderer.getWidth(
SaturnUi.text(
visibleText.substring(0, cursorPosition - scrollOffset)));
context.fill(
cursorX,
2,
cursorX + 1,
textRenderer.fontHeight + 4,
0xFFFFFFFF
);
cursorX,
2,
cursorX + 1,
textRenderer.fontHeight + 4,
0xFFFFFFFF);
}
}
@@ -172,12 +161,8 @@ public class SaturnInteger extends SaturnWidget {
// Ensure text does not overflow past the available width
for (int i = 1; i <= visibleText.length(); i++) {
if (
textRenderer.getWidth(
SaturnUi.text(visibleText.substring(0, i))
) >
width - 4
) {
if (textRenderer.getWidth(
SaturnUi.text(visibleText.substring(0, i))) > width - 4) {
return visibleText.substring(0, i - 1); // Trim overflow
}
}
@@ -2,7 +2,6 @@ package org.saturnclient.ui.components;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnclient.menus.ConfigEditor;
import org.saturnclient.saturnmods.SaturnMod;
@@ -20,96 +19,74 @@ public class SaturnModComp extends SaturnWidget {
@Override
public void render(
DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
DrawContext context,
boolean hovering,
int mouseX,
int mouseY) {
boolean enabled = mod.isEnabled();
boolean hovering_settings = settingsHovering(mouseX, mouseY);
int color = !hovering_settings && (enabled || hovering)
? SaturnClient.COLOR.value
: SaturnClient.getWhite(alpha);
? SaturnClient.COLOR.value
: SaturnClient.getWhite(alpha);
int size = 12;
if (enabled) {
context.drawTexture(
RenderLayer::getGuiTextured,
Textures.MOD_BG,
0,
0,
0,
0,
86,
20,
86,
20,
SaturnClient.COLOR.value
);
SaturnUi.drawHighResTexture(
context,
Textures.MOD_BG,
0,
0,
86,
20,
SaturnClient.COLOR.value);
}
context.drawTexture(
RenderLayer::getGuiTextured,
Textures.MOD,
0,
0,
0,
0,
86,
20,
86,
20,
color
);
SaturnUi.drawHighResTexture(
context,
Textures.MOD,
0,
0,
86,
20,
color);
context.drawTexture(
RenderLayer::getGuiTextured,
mod.getIconTexture(),
4,
4,
0,
0,
size,
size,
size,
size,
color
);
SaturnUi.drawHighResTexture(
context,
mod.getIconTexture(),
4,
4,
size,
size,
color);
context.drawText(
SaturnClient.textRenderer,
SaturnUi.text(mod.getName()),
20,
(21 - SaturnClient.textRenderer.fontHeight) / 2,
color,
false
);
SaturnClient.textRenderer,
SaturnUi.text(mod.getName()),
20,
(21 - SaturnClient.textRenderer.fontHeight) / 2,
color,
false);
context.drawTexture(
RenderLayer::getGuiTextured,
Textures.SETTINGS,
77,
11,
0,
0,
7,
7,
7,
7,
hovering_settings
? SaturnClient.COLOR.value
: SaturnClient.getWhite(alpha)
);
SaturnUi.drawHighResTexture(
context,
Textures.SETTINGS,
77,
11,
7,
7,
hovering_settings
? SaturnClient.COLOR.value
: SaturnClient.getWhite(alpha));
}
@Override
public void click(int mouseX, int mouseY) {
if (settingsHovering(mouseX, mouseY)) {
MinecraftClient.getInstance()
.setScreen(new ConfigEditor(mod.getConfig()));
.setScreen(new ConfigEditor(mod.getConfig()));
} else {
mod.setEnabled(!mod.isEnabled());
}
@@ -120,11 +97,9 @@ public class SaturnModComp extends SaturnWidget {
int sY = 11;
int size = 7;
return (
sX < mouseX &&
sX + size > mouseX &&
sY < mouseY &&
sY + size > mouseY
);
return (sX < mouseX &&
sX + size > mouseX &&
sY < mouseY &&
sY + size > mouseY);
}
}
@@ -3,7 +3,6 @@ package org.saturnclient.ui.components;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import org.lwjgl.glfw.GLFW;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnclient.config.Property;
@@ -15,8 +14,7 @@ public class SaturnString extends SaturnWidget {
public Property<String> prop;
public int cursorPosition = 0;
private TextRenderer textRenderer = MinecraftClient.getInstance()
.textRenderer;
private TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
public SaturnString(Property<String> prop, int x, int y, int width) {
this.x = x;
@@ -50,10 +48,9 @@ public class SaturnString extends SaturnWidget {
@Override
public void charTyped(char chr) {
prop.value =
prop.value.substring(0, cursorPosition) +
chr +
prop.value.substring(cursorPosition);
prop.value = prop.value.substring(0, cursorPosition) +
chr +
prop.value.substring(cursorPosition);
cursorPosition++;
}
@@ -62,9 +59,8 @@ public class SaturnString extends SaturnWidget {
public void keyPressed(int keyCode, int scanCode, int modifiers) {
if (keyCode == GLFW.GLFW_KEY_BACKSPACE) {
if (cursorPosition > 0) {
prop.value =
prop.value.substring(0, cursorPosition - 1) +
prop.value.substring(cursorPosition);
prop.value = prop.value.substring(0, cursorPosition - 1) +
prop.value.substring(cursorPosition);
cursorPosition--;
}
} else if (keyCode == GLFW.GLFW_KEY_LEFT) {
@@ -80,51 +76,44 @@ public class SaturnString extends SaturnWidget {
@Override
public void render(
DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
context.drawGuiTexture(
RenderLayer::getGuiTextured,
Textures.BUTTON_BORDER,
0,
0,
this.width,
this.height,
focused
? SaturnClient.COLOR.value
: SaturnClient.getWhite(this.alpha)
);
DrawContext context,
boolean hovering,
int mouseX,
int mouseY) {
SaturnUi.drawHighResGuiTexture(
context,
Textures.BUTTON_BORDER,
0,
0,
this.width,
this.height,
focused
? SaturnClient.COLOR.value
: SaturnClient.getWhite(this.alpha));
int scrollOffset = getScrollOffset();
String visibleText = getVisibleText(scrollOffset);
int textColor = focused ? 0xFFFFFF : 0xAAAAAA;
context.drawText(
textRenderer,
SaturnUi.text(visibleText),
2,
2,
textColor,
false
);
textRenderer,
SaturnUi.text(visibleText),
2,
2,
textColor,
false);
if (focused) {
int cursorX =
2 +
textRenderer.getWidth(
SaturnUi.text(
visibleText.substring(0, cursorPosition - scrollOffset)
)
);
int cursorX = 2 +
textRenderer.getWidth(
SaturnUi.text(
visibleText.substring(0, cursorPosition - scrollOffset)));
context.fill(
cursorX,
2,
cursorX + 1,
textRenderer.fontHeight + 3,
0xFFFFFFFF
);
cursorX,
2,
cursorX + 1,
textRenderer.fontHeight + 3,
0xFFFFFFFF);
}
}
@@ -156,12 +145,8 @@ public class SaturnString extends SaturnWidget {
// Ensure prop.value does not overflow past the available width
for (int i = 1; i <= visibleText.length(); i++) {
if (
textRenderer.getWidth(
SaturnUi.text(visibleText.substring(0, i))
) >
width - 4
) {
if (textRenderer.getWidth(
SaturnUi.text(visibleText.substring(0, i))) > width - 4) {
return visibleText.substring(0, i - 1); // Trim overflow
}
}
@@ -4,7 +4,6 @@ import com.mojang.blaze3d.systems.RenderSystem;
import java.util.function.Consumer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.math.MathHelper;
import org.lwjgl.opengl.GL11;
import org.saturnclient.saturnclient.SaturnClient;
@@ -32,65 +31,59 @@ public class SaturnButton extends SaturnWidget {
@Override
public void render(
DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
DrawContext context,
boolean hovering,
int mouseX,
int mouseY) {
MinecraftClient minecraftClient = MinecraftClient.getInstance();
int hoverColor =
((int) (alpha * 255) << 24) |
(SaturnClient.COLOR.value & 0x00FFFFFF);
int hoverColor = ((int) (alpha * 255) << 24) |
(SaturnClient.COLOR.value & 0x00FFFFFF);
if (background) {
RenderSystem.setShaderTexture(0, Textures.BUTTON);
RenderSystem.texParameter(
GL11.GL_TEXTURE_2D,
GL11.GL_TEXTURE_MIN_FILTER,
GL11.GL_LINEAR_MIPMAP_LINEAR
);
GL11.GL_TEXTURE_2D,
GL11.GL_TEXTURE_MIN_FILTER,
GL11.GL_LINEAR_MIPMAP_LINEAR);
context.drawGuiTexture(
RenderLayer::getGuiTextured,
Textures.BUTTON,
0,
0,
this.width,
this.height,
SaturnClient.getWhite(this.alpha)
);
if (hovering) {
context.drawGuiTexture(
RenderLayer::getGuiTextured,
Textures.BUTTON_BORDER,
SaturnUi.drawHighResGuiTexture(
context,
Textures.BUTTON,
0,
0,
this.width,
this.height,
hoverColor
);
SaturnClient.getWhite(this.alpha));
if (hovering) {
SaturnUi.drawHighResGuiTexture(
context,
Textures.BUTTON_BORDER,
0,
0,
this.width,
this.height,
hoverColor);
}
}
if (alpha != 0.0f) {
int i = this.active ? 16777215 : 10526880;
context.drawText(
minecraftClient.textRenderer,
SaturnUi.text(text),
((this.width -
minecraftClient.textRenderer.getWidth(
SaturnUi.text(text)
)) /
2),
((this.height - minecraftClient.textRenderer.fontHeight + 1) /
2),
hovering
? hoverColor
: i | (MathHelper.ceil(this.alpha * 255.0F) << 24),
false
);
minecraftClient.textRenderer,
SaturnUi.text(text),
((this.width -
minecraftClient.textRenderer.getWidth(
SaturnUi.text(text)))
/
2),
((this.height - minecraftClient.textRenderer.fontHeight + 1) /
2),
hovering
? hoverColor
: i | (MathHelper.ceil(this.alpha * 255.0F) << 24),
false);
}
}
@@ -2,10 +2,10 @@ package org.saturnclient.ui.widgets;
import java.util.function.Consumer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.SaturnWidget;
public class SaturnClickableImage extends SaturnWidget {
@@ -17,9 +17,8 @@ public class SaturnClickableImage extends SaturnWidget {
public int hoverColor = SaturnClient.COLOR.value;
public SaturnClickableImage(
Identifier texture,
Consumer<SaturnClickableImage> onPress
) {
Identifier texture,
Consumer<SaturnClickableImage> onPress) {
this.texture = texture;
this.onPress = onPress;
}
@@ -32,25 +31,19 @@ public class SaturnClickableImage extends SaturnWidget {
@Override
public void render(
DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
context.drawTexture(
RenderLayer::getGuiTextured,
texture,
0,
0,
0,
0,
width,
height,
width,
height,
(hovering || selected ? hoverColor : color) |
(MathHelper.ceil(this.alpha * 255.0F) << 24)
);
DrawContext context,
boolean hovering,
int mouseX,
int mouseY) {
SaturnUi.drawHighResTexture(
context,
texture,
0,
0,
width,
height,
(hovering || selected ? hoverColor : color) |
(MathHelper.ceil(this.alpha * 255.0F) << 24));
}
@Override
@@ -2,10 +2,10 @@ package org.saturnclient.ui.widgets;
import java.util.function.Consumer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.SaturnWidget;
public class SaturnClickableSprite extends SaturnWidget {
@@ -17,9 +17,8 @@ public class SaturnClickableSprite extends SaturnWidget {
public int hoverColor = SaturnClient.COLOR.value;
public SaturnClickableSprite(
Identifier sprite,
Consumer<SaturnClickableSprite> onPress
) {
Identifier sprite,
Consumer<SaturnClickableSprite> onPress) {
this.sprite = sprite;
this.onPress = onPress;
}
@@ -32,21 +31,19 @@ public class SaturnClickableSprite extends SaturnWidget {
@Override
public void render(
DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
context.drawGuiTexture(
RenderLayer::getGuiTextured,
sprite,
0,
0,
this.width,
this.height,
(hovering || selected ? hoverColor : color) |
(MathHelper.ceil(this.alpha * 255.0F) << 24)
);
DrawContext context,
boolean hovering,
int mouseX,
int mouseY) {
SaturnUi.drawHighResGuiTexture(
context,
sprite,
0,
0,
this.width,
this.height,
(hovering || selected ? hoverColor : color) |
(MathHelper.ceil(this.alpha * 255.0F) << 24));
}
@Override
@@ -1,9 +1,10 @@
package org.saturnclient.ui.widgets;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.ColorHelper;
import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.SaturnWidget;
public class SaturnImage extends SaturnWidget {
@@ -16,23 +17,17 @@ public class SaturnImage extends SaturnWidget {
@Override
public void render(
DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
context.drawTexture(
RenderLayer::getGuiTextured,
sprite,
0,
0,
0,
0,
width,
height,
width,
height,
ColorHelper.getWhite(alpha)
);
DrawContext context,
boolean hovering,
int mouseX,
int mouseY) {
SaturnUi.drawHighResTexture(
context,
sprite,
0,
0,
width,
height,
ColorHelper.getWhite(alpha));
}
}
@@ -1,149 +0,0 @@
package org.saturnclient.ui.widgets;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import org.lwjgl.glfw.GLFW;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.SaturnWidget;
import org.saturnclient.ui.Textures;
public class SaturnInputBox extends SaturnWidget {
public String text = "";
public String placeholder = "";
public int cursorPosition = 0;
public boolean focused = false;
private TextRenderer textRenderer = MinecraftClient.getInstance()
.textRenderer;
public SaturnInputBox(
String placeholder,
int y,
int x,
int width,
int height
) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.placeholder = placeholder;
}
@Override
public void click(int mouseX, int mouseY) {
focused = true;
}
@Override
public void charTyped(char chr) {
if (focused) {
text =
text.substring(0, cursorPosition) +
chr +
text.substring(cursorPosition);
cursorPosition++;
}
}
@Override
public void keyPressed(int keyCode, int scanCode, int modifiers) {
if (focused) {
if (keyCode == GLFW.GLFW_KEY_BACKSPACE) {
if (cursorPosition > 0) {
text =
text.substring(0, cursorPosition - 1) +
text.substring(cursorPosition);
cursorPosition--;
}
} else if (keyCode == GLFW.GLFW_KEY_LEFT) {
if (cursorPosition > 0) {
cursorPosition--;
}
} else if (keyCode == GLFW.GLFW_KEY_RIGHT) {
if (cursorPosition < text.length()) {
cursorPosition++;
}
}
}
}
@Override
public void render(
DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
context.drawGuiTexture(
RenderLayer::getGuiTextured,
Textures.BUTTON,
0,
0,
this.width,
this.height,
SaturnClient.getWhite(this.alpha)
);
int scrollOffset = getScrollOffset();
String visibleText = text.substring(scrollOffset);
int textColor = focused ? 0xFFFFFF : 0xAAAAAA;
context.drawText(
textRenderer,
SaturnUi.text(visibleText),
5,
5,
textColor,
false
);
if (focused) {
int cursorX =
5 +
textRenderer.getWidth(
SaturnUi.text(
visibleText.substring(0, cursorPosition - scrollOffset)
)
);
context.fill(cursorX, 3, cursorX + 1, height - 3, 0xFFFFFFFF);
}
}
public void clearText() {
text = "";
cursorPosition = 0;
}
private int getScrollOffset() {
if (text.isEmpty()) {
return 0;
}
int offset = 0;
if (cursorPosition == text.length()) {
while (
textRenderer.getWidth(SaturnUi.text(text.substring(offset))) >
width
) {
offset++;
}
} else {
while (
textRenderer.getWidth(
SaturnUi.text(text.substring(offset, cursorPosition))
) >
width
) {
offset++;
}
}
return offset;
}
}
@@ -1,9 +1,10 @@
package org.saturnclient.ui.widgets;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.ColorHelper;
import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.SaturnWidget;
public class SaturnSprite extends SaturnWidget {
@@ -16,19 +17,17 @@ public class SaturnSprite extends SaturnWidget {
@Override
public void render(
DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
context.drawGuiTexture(
RenderLayer::getGuiTextured,
sprite,
0,
0,
this.width,
this.height,
ColorHelper.getWhite(this.alpha)
);
DrawContext context,
boolean hovering,
int mouseX,
int mouseY) {
SaturnUi.drawHighResGuiTexture(
context,
sprite,
0,
0,
this.width,
this.height,
ColorHelper.getWhite(this.alpha));
}
}