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

Before

Width:  |  Height:  |  Size: 391 B

After

Width:  |  Height:  |  Size: 672 B

@@ -4,7 +4,7 @@
"type": "nine_slice", "type": "nine_slice",
"width": 80, "width": 80,
"height": 80, "height": 80,
"border": 9 "border": 16
} }
} }
} }
Binary file not shown.

Before

Width:  |  Height:  |  Size: 421 B

After

Width:  |  Height:  |  Size: 753 B

@@ -4,7 +4,7 @@
"type": "nine_slice", "type": "nine_slice",
"width": 80, "width": 80,
"height": 80, "height": 80,
"border": 9 "border": 16
} }
} }
} }
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB