🛡️ Chat-Sichtbarkeit & Eingabeblockierung
| Parameter | Technische Details |
|---|---|
| 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() |
🔄 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 Methode | Vanilla-Verhalten | Mod-Aktion bei Ausblendung | Ergebnis |
|---|---|---|---|
extractRenderState | Rendert Chat-Hintergrund, Verlaufstext und Befehlsvorschläge. | Ruft super.extractRenderState auf und führt ci.cancel() aus. | Chat-Text und Hintergrundbox sind vollständig unsichtbar. |
keyPressed | Schreibt 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. |
mouseClicked | Klickt 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. |
mouseScrolled | Scrollt 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
