🛡️ Visibilité du Chat et Blocage d'Entrée
| Paramètre | Détails techniques |
|---|---|
| Target Screen Class | net.minecraft.client.gui.screens.ChatScreen |
| Mixin Handler | ChatScreenMixin.java |
| In-Memory State | BedChatHiderClient.hideChat (boolean) |
| Interception Targets | extractRenderState, keyPressed, mouseClicked, mouseScrolled |
| Focus Gatekeeper | bedchathider$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ée | Comportement vanilla | Action du mod si masqué | Résultat |
|---|---|---|---|
extractRenderState | Rend 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. |
keyPressed | Saisit 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. |
mouseClicked | Clique 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. |
mouseScrolled | Fait 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
