From f06a3d6a996e49cca88dc70a69fd1a5da4892818 Mon Sep 17 00:00:00 2001 From: TGdoesCode Date: Tue, 17 Feb 2026 13:09:38 +0100 Subject: [PATCH] loading screen --- gradle.properties | 2 +- .../szar/client/CustomLogoTexture.java | 45 +++++++++ .../tggamesyt/szar/client/SzarTosHandler.java | 2 +- .../szar/client/mixin/SplashOverlayMixin.java | 87 ++++++++++++++++++ src/client/resources/szar.client.mixins.json | 3 +- .../textures/gui/title/mojangstudios.png | Bin 5345 -> 0 bytes .../assets/szar/textures/gui/szarmod.png | Bin 0 -> 5405 bytes 7 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 src/client/java/dev/tggamesyt/szar/client/CustomLogoTexture.java create mode 100644 src/client/java/dev/tggamesyt/szar/client/mixin/SplashOverlayMixin.java delete mode 100644 src/main/resources/assets/minecraft/textures/gui/title/mojangstudios.png create mode 100644 src/main/resources/assets/szar/textures/gui/szarmod.png diff --git a/gradle.properties b/gradle.properties index f675a92..c6b340a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ minecraft_version=1.20.1 yarn_mappings=1.20.1+build.10 loader_version=0.18.3 # Mod Properties -mod_version=26.2.16 +mod_version=26.2.17 maven_group=dev.tggamesyt archives_base_name=szar # Dependencies diff --git a/src/client/java/dev/tggamesyt/szar/client/CustomLogoTexture.java b/src/client/java/dev/tggamesyt/szar/client/CustomLogoTexture.java new file mode 100644 index 0000000..f69d4e7 --- /dev/null +++ b/src/client/java/dev/tggamesyt/szar/client/CustomLogoTexture.java @@ -0,0 +1,45 @@ +package dev.tggamesyt.szar.client; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.resource.metadata.TextureResourceMetadata; +import net.minecraft.client.texture.NativeImage; +import net.minecraft.client.texture.ResourceTexture; +import net.minecraft.resource.ResourceManager; +import net.minecraft.util.Identifier; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +@Environment(EnvType.CLIENT) +public class CustomLogoTexture extends ResourceTexture { + + public CustomLogoTexture(Identifier id) { + super(id); + } + + @Override + protected TextureData loadTextureData(ResourceManager resourceManager) { + try { + InputStream inputStream = MinecraftClient.class + .getResourceAsStream("/assets/szar/textures/gui/szarmod.png"); + + if (inputStream == null) { + return new TextureData( + new FileNotFoundException(this.location.toString()) + ); + } + + return new TextureData( + new TextureResourceMetadata(true, true), + NativeImage.read(inputStream) + ); + + } catch (IOException e) { + return new TextureData(e); + } + } +} + diff --git a/src/client/java/dev/tggamesyt/szar/client/SzarTosHandler.java b/src/client/java/dev/tggamesyt/szar/client/SzarTosHandler.java index 0032268..c572a8e 100644 --- a/src/client/java/dev/tggamesyt/szar/client/SzarTosHandler.java +++ b/src/client/java/dev/tggamesyt/szar/client/SzarTosHandler.java @@ -151,7 +151,7 @@ If you do not agree, click "Decline" and close the game. private String[] lines; protected TosScreen() { - super(Text.literal("Szar Fantasy Mod - Terms of Service")); + super(Text.literal("Szar Mod - Information and Terms of Service")); } @Override diff --git a/src/client/java/dev/tggamesyt/szar/client/mixin/SplashOverlayMixin.java b/src/client/java/dev/tggamesyt/szar/client/mixin/SplashOverlayMixin.java new file mode 100644 index 0000000..005da24 --- /dev/null +++ b/src/client/java/dev/tggamesyt/szar/client/mixin/SplashOverlayMixin.java @@ -0,0 +1,87 @@ +package dev.tggamesyt.szar.client.mixin; + +import dev.tggamesyt.szar.Szar; +import dev.tggamesyt.szar.client.CustomLogoTexture; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.SplashOverlay; +import net.minecraft.client.texture.ResourceTexture; +import net.minecraft.util.Identifier; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.function.IntSupplier; + +@Mixin(SplashOverlay.class) +public abstract class SplashOverlayMixin { + + @Shadow @Final @Mutable + private static Identifier LOGO; + + @Inject(method = "", at = @At("TAIL")) + private static void modifyStatic(CallbackInfo ci) { + LOGO = new Identifier(Szar.MOD_ID, "textures/gui/szarmod.png"); + } + + @Inject(method = "init", at = @At("HEAD"), cancellable = true) + private static void replaceInit(MinecraftClient client, CallbackInfo ci) { + client.getTextureManager().registerTexture(LOGO, new CustomLogoTexture(LOGO)); + ci.cancel(); + } + @Unique + private static final float SCALE = 2.0F; + + @Redirect( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/gui/DrawContext;drawTexture(Lnet/minecraft/util/Identifier;IIIIFFIIII)V" + ) + ) + private void scaleLogo( + DrawContext context, + Identifier texture, + int x, int y, + int width, int height, + float u, float v, + int regionWidth, int regionHeight, + int textureWidth, int textureHeight + ) { + + if (!texture.equals(LOGO)) { + context.drawTexture(texture, x, y, + width, height, + u, v, + regionWidth, regionHeight, + textureWidth, textureHeight); + return; + } + + int scaledWidth = (int)(width * SCALE); + int scaledHeight = (int)(height * SCALE); + + int centerX; + + // Determine shared center + if (u < 0) { + // Left half + centerX = x + width; + x = centerX - scaledWidth; + } else { + // Right half + centerX = x; + } + + // Vertically scale from center + int centerY = y + height / 2; + y = centerY - scaledHeight / 2; + + context.drawTexture(texture, + x, y, + scaledWidth, scaledHeight, + u, v, + regionWidth, regionHeight, + textureWidth, textureHeight); + } +} diff --git a/src/client/resources/szar.client.mixins.json b/src/client/resources/szar.client.mixins.json index 7b2bfbc..e96ea3c 100644 --- a/src/client/resources/szar.client.mixins.json +++ b/src/client/resources/szar.client.mixins.json @@ -6,7 +6,8 @@ "client": [ "MouseMixin", "RadiationHeartMixin", - "RadiatedItemRendererMixin" + "RadiatedItemRendererMixin", + "SplashOverlayMixin" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/assets/minecraft/textures/gui/title/mojangstudios.png b/src/main/resources/assets/minecraft/textures/gui/title/mojangstudios.png deleted file mode 100644 index d97d5800e8891cead54b251662abf5827ff7486a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5345 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 diff --git a/src/main/resources/assets/szar/textures/gui/szarmod.png b/src/main/resources/assets/szar/textures/gui/szarmod.png new file mode 100644 index 0000000000000000000000000000000000000000..2333f5378fba4028fb1f9b31c91c21e20fc52cc2 GIT binary patch literal 5405 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 literal 0 HcmV?d00001