Skip to content

🛡️ Chat-Sichtbarkeit & Eingabeblockierung

ParameterTechnische Details
Target Screen Classnet.minecraft.client.gui.screens.ChatScreen
Mixin HandlerChatScreenMixin.java
In-Memory StateBedChatHiderClient.hideChat (boolean)
Interception TargetsextractRenderState, keyPressed, mouseClicked, mouseScrolled
Focus Gatekeeperbedchathider$updateChatState()

🔄 Zustandsautomaten-Lebenszyklus

                 [ 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

🛡️ Aufschlüsselung der 4-Punkte-Eingabeabfangung

Wenn der Chat ausgeblendet ist, fängt ChatScreenMixin 4 kritische Eingabepfade ab, um versehentliche Eingaben oder Klicks auf Links zu verhindern:

Abgefangene MethodeVanilla-VerhaltenMod-Aktion bei AusblendungErgebnis
extractRenderStateRendert Chat-Hintergrund, Verlaufstext und Befehlsvorschläge.Ruft super.extractRenderState auf und führt ci.cancel() aus.Chat-Text und Hintergrundbox sind vollständig unsichtbar.
keyPressedSchreibt Zeichen in input, vervollständigt Befehle, durchblättert Verlauf.Gibt cir.setReturnValue(super.keyPressed(event)) zurück.Tippen und Pfeiltasten deaktiviert; Escape schließt Bildschirm normal.
mouseClickedKlickt auf Chat-URLs, Vorschläge oder Chat-Auswahl.Gibt cir.setReturnValue(super.mouseClicked(event, doubleClick)) zurück.Chat-Auswahl deaktiviert; GUI-Schaltflächen (Bett verlassen, Chat anzeigen) funktionieren einwandfrei.
mouseScrolledScrollt den Chat-Verlauf nach oben und unten.Gibt cir.setReturnValue(super.mouseScrolled(x, y, scrollX, scrollY)) zurück.Verlauf-Scrollen deaktiviert; Bildschirm bleibt statisch.

💻 Quellcode-Verifizierung

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));
    }
}

Verwandte Seiten: Startseite | Bett-Bildschirm UI & Layout | Architektur & Mixin-Analyse

Official documentation & web portal for Dasik Igaijinn mods.