nosingleplayer 1.1.7 : menu titre nettoyé (splash, amis, copyright) + titre de fenêtre

- Titre de fenêtre : "Minecraft* 26.3" -> "SurviePote [26.3]"
  (mixin sur Minecraft.createTitle(), la classe Window a changé de package
  en 26.3 : com.mojang.blaze3d.platform.Window).
- Suppression du texte de splash (message rotatif) du menu principal.
- Bouton "amis" (FriendsButton) réellement supprimé : le if/else if de
  TitleScreenMixin testait "instanceof Button" en premier, et FriendsButton /
  SpriteIconButton / PlainTextButton en héritent -> ils tombaient dans cette
  branche et n'étaient jamais retirés. Ordre des tests corrigé (icônes et
  texte cliquable testés avant Button).
This commit is contained in:
Anaïs Saraiva
2026-10-19 21:31:41 +02:00
parent fc80845f5c
commit 89e6b6f680
5 changed files with 56 additions and 10 deletions
+1 -1
View File
@@ -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
@@ -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<String> 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);
}
}
}
@@ -47,7 +47,19 @@ public abstract class TitleScreenMixin {
List<GuiEventListener> 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) {
@@ -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",
@@ -6,6 +6,7 @@
"TitleScreenMixin",
"TitleScreenRenderMixin",
"TitleScreenTextMixin",
"MinecraftTitleMixin",
"RealmsNotificationsMixin",
"PauseScreenMixin",
"ScreenAccessor"