Skip to content

🛡️ Visibilité du Chat et Blocage d'Entrée

ParamètreDétails techniques
Target Screen Classnet.minecraft.client.gui.screens.ChatScreen
Mixin HandlerChatScreenMixin.java
In-Memory StateBedChatHiderClient.hideChat (boolean)
Interception TargetsextractRenderState, keyPressed, mouseClicked, mouseScrolled
Focus Gatekeeperbedchathider$updateChatState()

🔄 Cycle de vie de la machine à états

                 [ User Clicks 'Hide Chat' ]


                BedChatHiderClient.hideChat = true


                   this.rebuildWidgets()

         ┌────────────────────┴────────────────────┐
         ▼                                         ▼
[ EditBox Input State ]                   [ Input Interception ]
• input.visible = false                   • extractRenderState -> cancel
• input.active  = false                   • keyPressed -> super.keyPressed
• input.setFocused(false)                 • mouseClicked -> super.mouseClicked
• screen.setFocused(null)                 • mouseScrolled -> super.mouseScrolled

🛡️ Détail de l'interception d'entrée en 4 points

Lorsque le chat est masqué, ChatScreenMixin intercepte 4 voies de saisie critiques pour éviter la saisie fantôme en arrière-plan ou les clics accidentels sur des liens :

Méthode interceptéeComportement vanillaAction du mod si masquéRésultat
extractRenderStateRend l'arrière-plan du chat, le texte d'historique et les suggestions de commandes.Appelle super.extractRenderState et exécute ci.cancel().Le texte du chat et la boîte d'arrière-plan sont totalement invisibles.
keyPressedSaisit des caractères dans input, complète les commandes, parcourt l'historique.Retourne cir.setReturnValue(super.keyPressed(event)).Saisie et flèches désactivées ; Échap ferme l'écran normalement.
mouseClickedClique sur les URL du chat, suggestions ou sélection de journal.Retourne cir.setReturnValue(super.mouseClicked(event, doubleClick)).Sélection désactivée ; les boutons d'interface (Quitter le lit, Afficher le chat) fonctionnent normalement.
mouseScrolledFait défiler l'historique du chat de haut en bas.Retourne cir.setReturnValue(super.mouseScrolled(x, y, scrollX, scrollY)).Défilement désactivé ; l'écran reste statique.

💻 Vérification du code source

java
// Sourced from ChatScreenMixin.java
@Inject(method = "extractRenderState", at = @At("HEAD"), cancellable = true)
private void onExtractRenderState(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a, CallbackInfo ci) {
    if ((Object) this instanceof InBedChatScreen && BedChatHiderClient.hideChat) {
        super.extractRenderState(graphics, mouseX, mouseY, a);
        ci.cancel();
    }
}

@Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true)
private void onKeyPressed(KeyEvent event, CallbackInfoReturnable<Boolean> cir) {
    if ((Object) this instanceof InBedChatScreen && BedChatHiderClient.hideChat) {
        cir.setReturnValue(super.keyPressed(event));
    }
}

Pages connexes: Accueil | Interface et Disposition du Lit | Architecture et Analyse des Mixins

Official documentation & web portal for Dasik Igaijinn mods.