diff --git a/mods/nosingleplayer/gradle.properties b/mods/nosingleplayer/gradle.properties index cb1c452..3c803b0 100644 --- a/mods/nosingleplayer/gradle.properties +++ b/mods/nosingleplayer/gradle.properties @@ -5,7 +5,7 @@ loader_version=0.20.0 loom_version=1.19.1 # Mod Properties -mod_version=1.1.6 +mod_version=1.1.7 maven_group=fr.surviepote archives_base_name=nosingleplayer diff --git a/mods/nosingleplayer/src/main/java/fr/surviepote/nosingleplayer/mixin/MinecraftTitleMixin.java b/mods/nosingleplayer/src/main/java/fr/surviepote/nosingleplayer/mixin/MinecraftTitleMixin.java new file mode 100644 index 0000000..8dbce9d --- /dev/null +++ b/mods/nosingleplayer/src/main/java/fr/surviepote/nosingleplayer/mixin/MinecraftTitleMixin.java @@ -0,0 +1,32 @@ +package fr.surviepote.nosingleplayer.mixin; + +import fr.surviepote.nosingleplayer.NoSingleplayer; +import net.minecraft.SharedConstants; +import net.minecraft.client.Minecraft; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +/** + * Titre de la fenêtre : "Minecraft* 26.3" -> "SurviePote [26.3]". + * Minecraft.createTitle() est privé, appelé au démarrage (création de la fenêtre) + * et par updateTitle() (changement de monde, focus, resize...). + */ +@Mixin(Minecraft.class) +public abstract class MinecraftTitleMixin { + + @Unique + private static boolean surviepote$titleLogged; + + @Inject(method = "createTitle", at = @At("HEAD"), cancellable = true) + private void surviepote$customWindowTitle(CallbackInfoReturnable cir) { + String title = "SurviePote [" + SharedConstants.getCurrentVersion().name() + "]"; + cir.setReturnValue(title); + if (!surviepote$titleLogged) { + surviepote$titleLogged = true; + NoSingleplayer.LOGGER.info("[SurviePote] Titre de fenêtre : {}", title); + } + } +} diff --git a/mods/nosingleplayer/src/main/java/fr/surviepote/nosingleplayer/mixin/TitleScreenMixin.java b/mods/nosingleplayer/src/main/java/fr/surviepote/nosingleplayer/mixin/TitleScreenMixin.java index b061af9..a63c20b 100644 --- a/mods/nosingleplayer/src/main/java/fr/surviepote/nosingleplayer/mixin/TitleScreenMixin.java +++ b/mods/nosingleplayer/src/main/java/fr/surviepote/nosingleplayer/mixin/TitleScreenMixin.java @@ -47,7 +47,19 @@ public abstract class TitleScreenMixin { List toRemove = new ArrayList<>(); for (GuiEventListener child : new ArrayList<>(self.children())) { - if (child instanceof Button button) { + // ATTENTION : FriendsButton/SpriteIconButton/PlainTextButton héritent tous + // de Button. Il faut donc les tester AVANT "instanceof Button", sinon la + // première branche les avale et ils ne sont jamais retirés. + if (child instanceof FriendsButton) { + // Bouton "amis" (interactions sociales). + toRemove.add(child); + } else if (child instanceof SpriteIconButton) { + // Bas-gauche : langue, accessibilité, etc. + toRemove.add(child); + } else if (child instanceof PlainTextButton) { + // Copyright Mojang cliquable en bas. + toRemove.add(child); + } else if (child instanceof Button button) { String msg = button.getMessage().getString(); if (msg.equals(solo)) { // Solo retiré complètement (plutôt que grisé). @@ -60,14 +72,6 @@ public abstract class TitleScreenMixin { } else if (msg.equals(realms)) { toRemove.add(button); } - } else if (child instanceof FriendsButton) { - toRemove.add(child); - } else if (child instanceof SpriteIconButton) { - // Bas-gauche : langue, accessibilité, etc. - toRemove.add(child); - } else if (child instanceof PlainTextButton) { - // Copyright Mojang cliquable en bas. - toRemove.add(child); } } for (GuiEventListener widget : toRemove) { diff --git a/mods/nosingleplayer/src/main/java/fr/surviepote/nosingleplayer/mixin/TitleScreenRenderMixin.java b/mods/nosingleplayer/src/main/java/fr/surviepote/nosingleplayer/mixin/TitleScreenRenderMixin.java index d731eeb..a5448f9 100644 --- a/mods/nosingleplayer/src/main/java/fr/surviepote/nosingleplayer/mixin/TitleScreenRenderMixin.java +++ b/mods/nosingleplayer/src/main/java/fr/surviepote/nosingleplayer/mixin/TitleScreenRenderMixin.java @@ -7,7 +7,9 @@ import com.mojang.renderpearl.api.textures.FilterMode; import fr.surviepote.nosingleplayer.NoSingleplayer; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.Font; import net.minecraft.client.gui.components.LogoRenderer; +import net.minecraft.client.gui.components.SplashRenderer; import net.minecraft.client.gui.screens.TitleScreen; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.client.renderer.texture.DynamicTexture; @@ -126,6 +128,13 @@ public abstract class TitleScreenRenderMixin { } } + // Pas de texte de splash (message rotatif) sur le menu principal. + @Redirect(method = "extractRenderState", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/gui/components/SplashRenderer;extractRenderState(Lnet/minecraft/client/gui/GuiGraphicsExtractor;ILnet/minecraft/client/gui/Font;F)V")) + private void surviepote$skipSplash(SplashRenderer splash, GuiGraphicsExtractor extractor, int width, Font font, float fade) { + } + // Pas de logo Minecraft. @Redirect(method = "extractRenderState", at = @At(value = "INVOKE", diff --git a/mods/nosingleplayer/src/main/resources/nosingleplayer.mixins.json b/mods/nosingleplayer/src/main/resources/nosingleplayer.mixins.json index 36c4f74..22bc3d5 100644 --- a/mods/nosingleplayer/src/main/resources/nosingleplayer.mixins.json +++ b/mods/nosingleplayer/src/main/resources/nosingleplayer.mixins.json @@ -6,6 +6,7 @@ "TitleScreenMixin", "TitleScreenRenderMixin", "TitleScreenTextMixin", + "MinecraftTitleMixin", "RealmsNotificationsMixin", "PauseScreenMixin", "ScreenAccessor"