Saturn title screen

This commit is contained in:
2025-04-07 00:25:09 +02:00
parent 45b3ffb36a
commit fe0a877c65
27 changed files with 249 additions and 109 deletions
@@ -2,11 +2,16 @@ package org.saturnclient.saturnclient;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
import net.minecraft.client.gui.screen.TitleScreen;
import org.saturnclient.saturnclient.auth.SaturnSocket;
import org.saturnclient.saturnclient.config.ConfigManager;
import org.saturnclient.saturnclient.cosmetics.Hats;
import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks;
import org.saturnclient.saturnclient.event.KeyInputHandler;
import org.saturnclient.saturnclient.menus.SaturnMenu;
import org.saturnclient.saturnclient.menus.SaturnTitleScreen;
import org.saturnclient.saturnmods.ModManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -26,6 +31,11 @@ public class SaturnClient implements ModInitializer {
ConfigManager.load();
ClientLifecycleEvents.CLIENT_STOPPING.register(_o -> ConfigManager.save());
ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> {
if (SaturnClientConfig.saturnTitleScreen.value && screen instanceof TitleScreen && !(screen instanceof SaturnMenu)) {
client.setScreen(new SaturnTitleScreen());
}
});
KeyInputHandler.register();
if (SaturnSocket.authenticate()) {
@@ -14,31 +14,35 @@ import net.minecraft.util.math.ColorHelper;
public class SaturnClientConfig {
public static ConfigManager config = new ConfigManager("Saturn Client");
public static Property<Integer> COLOR = config.property(
public static Property<Integer> color = config.property(
"Primary color",
new Property<>(
ColorHelper.getArgb(255, 251, 60, 79),
Property.PropertyType.HEX));
public static Property<Integer> NORMAL = config.property(
public static Property<Integer> normal = config.property(
"Default color",
new Property<>(
ColorHelper.getArgb(255, 182, 182, 182),
Property.PropertyType.HEX));
public static Property<Boolean> REALISTIC_LOGO = config.property(
public static Property<Boolean> realisticLogo = config.property(
"Realistic logo",
new Property<>(false));
public static Property<Boolean> saturnTitleScreen = config.property(
"Saturn client title screen",
new Property<>(true));
public static int WHITE = ColorHelper.getArgb(255, 255, 255, 255);
public static TextRenderer textRenderer = null;
public static int getWhite(float alpha) {
return ((int) (alpha * 255) << 24) | (NORMAL.value & 0x00FFFFFF);
return ((int) (alpha * 255) << 24) | (normal.value & 0x00FFFFFF);
}
public static int getColor(boolean hovering, float alpha) {
return SaturnUi.getAlpha(hovering ? COLOR.value : NORMAL.value, alpha);
return SaturnUi.getAlpha(hovering ? color.value : normal.value, alpha);
}
public static SaturnAnimation[] getAnimations() {
@@ -46,10 +50,10 @@ public class SaturnClientConfig {
}
public static Identifier getLogo() {
return REALISTIC_LOGO.value ? Textures.REALISTIC_LOGO : Textures.LOGO;
return realisticLogo.value ? Textures.REALISTIC_LOGO : Textures.LOGO;
}
public static String getSaturnIndicator() {
return REALISTIC_LOGO.value ? "" : "";
return realisticLogo.value ? "" : "";
}
}
@@ -4,7 +4,7 @@ import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;
import org.saturnclient.saturnclient.menus.MainMenu;
import org.saturnclient.saturnclient.menus.SaturnMenu;
import org.lwjgl.glfw.GLFW;
/**
@@ -33,7 +33,7 @@ public class KeyInputHandler {
// Register the event handler for the main menu key
ClientTickEvents.END_CLIENT_TICK.register(client -> {
if (mainMenuKeyBinding.wasPressed()) {
client.setScreen(new MainMenu());
client.setScreen(new SaturnMenu());
}
});
}
@@ -72,7 +72,6 @@ public class CloaksMenu extends SaturnUi {
draw(
new SaturnClickableImage(Textures.CLOAK, () -> {
client.setScreen(new CloaksMenu());
})
.setSelected(true)
.setX(tabsX - 12)
@@ -10,6 +10,8 @@ import org.saturnclient.saturnmods.HudMod;
import org.saturnclient.saturnmods.ModDimensions;
import org.saturnclient.saturnmods.ModManager;
import org.saturnclient.saturnmods.SaturnMod;
import org.saturnclient.ui.SaturnUi;
import java.util.ArrayList;
import java.util.List;
@@ -87,6 +89,10 @@ public class HudEditor extends Screen {
@Override
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
if (client.world == null && client.getCurrentServerEntry() == null) {
SaturnUi.ROTATING_PANORAMA_RENDERER.render(context, this.width, this.height, 1.0F, delta);
}
for (HudMod mod : hudMods) {
ModDimensions dim = mod.getDimensions();
MatrixStack matrices = context.getMatrices();
@@ -12,9 +12,8 @@ import org.saturnclient.ui.widgets.SaturnButton;
import org.saturnclient.ui.widgets.SaturnImage;
import org.saturnclient.ui.widgets.SaturnImageButton;
public class MainMenu extends SaturnUi {
public MainMenu() {
public class SaturnMenu extends SaturnUi {
public SaturnMenu() {
super(Text.literal("Saturn Client"));
}
@@ -0,0 +1,76 @@
package org.saturnclient.saturnclient.menus;
import org.saturnclient.saturnclient.SaturnClientConfig;
import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.Textures;
import org.saturnclient.ui.animations.FadeIn;
import org.saturnclient.ui.animations.Slide;
import org.saturnclient.ui.widgets.SaturnButton;
import org.saturnclient.ui.widgets.SaturnImage;
import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen;
import net.minecraft.client.gui.screen.option.OptionsScreen;
import net.minecraft.client.gui.screen.world.SelectWorldScreen;
import net.minecraft.text.Text;
public class SaturnTitleScreen extends SaturnUi {
public SaturnTitleScreen() {
super(Text.literal("Title Screen"));
}
@Override
protected void init() {
blur = false;
int logoSize = 49;
int bX = (width - 150) / 2;
int bY = height / 2 - logoSize - 24;
draw(
new SaturnImage(SaturnClientConfig.getLogo())
.setX((width - logoSize) / 2)
.setY(bY)
.setWidth(logoSize)
.setHeight(logoSize)
.setAnimations(new Slide(2, 14)));
bY += 41;
draw(
new SaturnImage(Textures.LOGO_TEXT)
.setX((width - logoSize) / 2)
.setY(bY)
.setWidth(logoSize)
.setHeight(8)
.setAnimations(new FadeIn(2)));
bY += 12;
draw(new SaturnButton("SINGLEPLAYER", () -> {
client.setScreen(new SelectWorldScreen(new SaturnTitleScreen()));
}).setBold(true).setWidth(210).setHeight(26).setX(bX).setY(bY).setScale(0.69f));
bY += 20;
draw(new SaturnButton("MULTIPLAYER", () -> {
client.setScreen(new MultiplayerScreen(new SaturnTitleScreen()));
}).setBold(true).setWidth(210).setHeight(26).setX(bX).setY(bY).setScale(0.69f));
bY += 20;
draw(new SaturnButton("OPTIONS", () -> {
client.setScreen(new OptionsScreen(new SaturnTitleScreen(), this.client.options));
}).setBold(true).setWidth(103).setHeight(26).setX(bX).setY(bY).setScale(0.69f));
draw(new SaturnButton("QUIT", () -> {
client.close();
}).setBold(true).setWidth(103).setHeight(26).setX(bX + 74).setY(bY).setScale(0.69f));
bY += 20;
draw(new SaturnButton("SATURN OPTIONS", () -> {
client.setScreen(new SaturnMenu());
}).setBold(true).setWidth(210).setHeight(26).setX(bX).setY(bY).setScale(0.69f));
super.init();
}
}
@@ -22,11 +22,11 @@ public class Particles implements SaturnMod {
public static Property<Integer> totem_1 = totem.property(
"Totem particle color 1",
new Property<>(SaturnClientConfig.COLOR.value, Property.PropertyType.HEX));
new Property<>(SaturnClientConfig.color.value, Property.PropertyType.HEX));
public static Property<Integer> totem_2 = totem.property(
"Totem particle color 2",
new Property<>(SaturnClientConfig.COLOR.value, Property.PropertyType.HEX));
new Property<>(SaturnClientConfig.color.value, Property.PropertyType.HEX));
@Override
public boolean isEnabled() {
@@ -7,7 +7,9 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import net.minecraft.client.gl.PostEffectProcessor;
import net.minecraft.client.gui.CubeMapRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.RotatingCubeMapRenderer;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.render.DefaultFramebufferSet;
import net.minecraft.client.render.RenderLayer;
@@ -25,12 +27,28 @@ public class SaturnUi extends Screen {
private final Pool pool = new Pool(3);
private float f = 0.0f;
public boolean blur = true;
public boolean titleBackground = false;
protected static final CubeMapRenderer PANORAMA_RENDERER = new CubeMapRenderer(
Identifier.of("saturnclient", "textures/gui/title/background/panorama"));
public static final RotatingCubeMapRenderer ROTATING_PANORAMA_RENDERER;
static {
ROTATING_PANORAMA_RENDERER = new RotatingCubeMapRenderer(PANORAMA_RENDERER);
}
public static MutableText text(String text) {
return Text.literal(text).setStyle(
Style.EMPTY.withFont(Identifier.of("saturnclient:panton")));
}
public static MutableText textBold(String text) {
return Text.literal(text).setStyle(
Style.EMPTY.withFont(Identifier.of("saturnclient:panton_bold")));
}
public static void drawHighResTexture(DrawContext context, Identifier t, int x, int y, int w, int h) {
MatrixStack matricies = context.getMatrices();
matricies.push();
@@ -108,8 +126,13 @@ public class SaturnUi extends Screen {
int mouseX,
int mouseY,
float delta) {
if (client.world == null && client.getCurrentServerEntry() == null) {
ROTATING_PANORAMA_RENDERER.render(context, this.width, this.height, 1.0F, delta);
}
// Blur
if (!(f < 1.0F)) {
if (!(f < 1.0F) && blur) {
PostEffectProcessor postEffectProcessor = this.client.getShaderLoader().loadPostEffect(
Identifier.ofVanilla("blur"),
DefaultFramebufferSet.MAIN_ONLY);
@@ -111,7 +111,7 @@ public class SaturnFloat extends SaturnWidget {
this.width,
this.height,
focused
? SaturnClientConfig.COLOR.value
? SaturnClientConfig.color.value
: SaturnClientConfig.getWhite(this.alpha));
int scrollOffset = getScrollOffset();
@@ -90,7 +90,7 @@ public class SaturnHex extends SaturnWidget {
this.width,
this.height,
focused
? SaturnClientConfig.COLOR.value
? SaturnClientConfig.color.value
: SaturnClientConfig.getWhite(this.alpha));
int textColor = focused ? 0xFFFFFF : 0xAAAAAA;
@@ -111,7 +111,7 @@ public class SaturnInteger extends SaturnWidget {
this.width,
this.height,
focused
? SaturnClientConfig.COLOR.value
? SaturnClientConfig.color.value
: SaturnClientConfig.getWhite(this.alpha));
int scrollOffset = getScrollOffset();
@@ -28,7 +28,7 @@ public class SaturnModComp extends SaturnWidget {
boolean hovering_settings = settingsHovering(mouseX, mouseY);
int color = !hovering_settings && (enabled || hovering)
? SaturnClientConfig.COLOR.value
? SaturnClientConfig.color.value
: SaturnClientConfig.getWhite(alpha);
int size = 12;
@@ -41,7 +41,7 @@ public class SaturnModComp extends SaturnWidget {
0,
86,
20,
SaturnClientConfig.COLOR.value);
SaturnClientConfig.color.value);
}
SaturnUi.drawHighResTexture(
@@ -78,7 +78,7 @@ public class SaturnModComp extends SaturnWidget {
7,
7,
hovering_settings
? SaturnClientConfig.COLOR.value
? SaturnClientConfig.color.value
: SaturnClientConfig.getWhite(alpha));
}
@@ -88,7 +88,7 @@ public class SaturnString extends SaturnWidget {
this.width,
this.height,
focused
? SaturnClientConfig.COLOR.value
? SaturnClientConfig.color.value
: SaturnClientConfig.getWhite(this.alpha));
int scrollOffset = getScrollOffset();
@@ -25,7 +25,7 @@ public class SaturnToggle extends SaturnWidget {
int mouseX,
int mouseY) {
int color = prop.value
? SaturnClientConfig.COLOR.value
? SaturnClientConfig.color.value
: SaturnClientConfig.getWhite(alpha);
int w = 13;
int h = 6;
@@ -4,6 +4,7 @@ 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.text.Text;
import org.saturnclient.saturnclient.SaturnClientConfig;
import org.saturnclient.ui.SaturnUi;
@@ -16,6 +17,7 @@ public class SaturnButton extends SaturnWidget {
public String text;
public Consumer<SaturnButton> onPress;
public boolean background = true;
public boolean bold = false;
private float hoverAlpha = 0.0f;
public SaturnButton(String text, Consumer<SaturnButton> onPress) {
@@ -67,12 +69,12 @@ public class SaturnButton extends SaturnWidget {
}
if (alpha != 0.0f) {
Text t = bold ? SaturnUi.textBold(text) : SaturnUi.text(text);
context.drawText(
minecraftClient.textRenderer,
SaturnUi.text(text),
t,
((this.width -
minecraftClient.textRenderer.getWidth(
SaturnUi.text(text)))
minecraftClient.textRenderer.getWidth(t))
/
2),
((this.height - minecraftClient.textRenderer.fontHeight + 1) /
@@ -94,4 +96,9 @@ public class SaturnButton extends SaturnWidget {
else if (hoverAlpha > 0.9f && hoverAlpha < 1.0f)
hoverAlpha = 1.0f;
}
public SaturnWidget setBold(boolean bold) {
this.bold = bold;
return this;
}
}
@@ -97,7 +97,7 @@ public class SaturnInputBox extends SaturnWidget {
this.width,
this.height,
focused
? SaturnClientConfig.COLOR.value
? SaturnClientConfig.color.value
: SaturnClientConfig.getWhite(this.alpha));
if (hovering || focused) {
@@ -109,7 +109,7 @@ public class SaturnInputBox extends SaturnWidget {
this.width,
this.height,
hovering
? SaturnClientConfig.COLOR.value
? SaturnClientConfig.color.value
: SaturnClientConfig.getWhite(this.alpha));
}
@@ -125,7 +125,7 @@ public class SaturnInputBox extends SaturnWidget {
9,
9,
hovering
? SaturnClientConfig.COLOR.value
? SaturnClientConfig.color.value
: SaturnClientConfig.getWhite(this.alpha));
matrices.scale(0.9f, 0.9f, 1.0f);
@@ -136,7 +136,7 @@ public class SaturnInputBox extends SaturnWidget {
14,
textRenderer.fontHeight / 2 + 1,
hovering
? SaturnClientConfig.COLOR.value
? SaturnClientConfig.color.value
: SaturnClientConfig.getWhite(this.alpha),
false);
}
@@ -3,6 +3,10 @@
{
"type": "reference",
"id": "saturnclient:panton"
},
{
"type": "reference",
"id": "saturnclient:panton_bold"
}
]
}
@@ -0,0 +1,12 @@
{
"providers": [
{
"type": "ttf",
"file": "saturnclient:panton_bold.ttf",
"shift": [0, 0],
"size": 9,
"oversample": 5.0,
"skip_missing": true
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB