Skip to content

🧩 아키텍처 및 Mixin 분석

매개변수기술 사양
Root Packagenet.vanillaoutsider.bedchathider
Mixin Configurationvanilla-outsider-bed-chat-hider.mixins.json
Compatibility LevelJAVA_25
Default Require Count1 (injectors.defaultRequire: 1)

🏛️ 클래스 아키텍처 개요

                        [ BedChatHiderClient ]
                        (ClientModInitializer)

                  ┌───────────────┴───────────────┐
                  ▼                               ▼
       [ InBedChatScreenMixin ]           [ ChatScreenMixin ]
       (Widget & Layout Injection)        (Input & Render Gating)
                  │                               │
                  ▼                               ▼
     '침대에서 일어나기' 위치 조정 및 '채팅 숨기기' 버튼 주입  채팅 렌더링, 키보드 입력, 클릭 및 마우스 휠 우회

🔍 상세 Mixin 주입 목록

1. InBedChatScreenMixin (InBedChatScreen.class)

  • 대상 메서드: init()
  • 주입 지점: @At("TAIL")
  • 동작 내용:
    • leaveBedButton 크기를 $200\text{px}$에서 $98\text{px}$로 줄이고 $X = W/2 - 100$에 배치합니다.
    • $X = W/2 + 2, Y = H - 40$ 위치에 $98\text{px}$ 크기의 토글 Button을 추가합니다.
    • bedchathider$updateChatState()를 통해 input 가시성 및 포커스 상태를 동기화합니다.

2. ChatScreenMixin (ChatScreen.class)

  • 대상 메서드 1: extractRenderState(GuiGraphicsExtractor, int, int, float, CallbackInfo)
    • @At("HEAD"), cancellable = true
    • InBedChatScreen에서 hideChat이 true일 때: super.extractRenderState를 호출하고 ChatScreen 렌더링을 취소합니다.
  • 대상 메서드 2: keyPressed(KeyEvent, CallbackInfoReturnable<Boolean>)
    • @At("HEAD"), cancellable = true
    • super.keyPressed(event)로 우회하여 채팅 텍스트 입력 및 방향키 이동을 비활성화합니다.
  • 대상 메서드 3: mouseClicked(MouseButtonEvent, boolean, CallbackInfoReturnable<Boolean>)
    • @At("HEAD"), cancellable = true
    • super.mouseClicked(event, doubleClick)로 우회하여 채팅 URL 링크 클릭을 비활성화합니다.
  • 대상 메서드 4: mouseScrolled(double, double, double, double, CallbackInfoReturnable<Boolean>)
    • @At("HEAD"), cancellable = true
    • super.mouseScrolled(x, y, scrollX, scrollY)로 우회하여 채팅 기록 스크롤을 비활성화합니다.

관련 페이지: | 침대 화면 UI 및 레이아웃 | 채팅 가시성 및 입력 차단

Official documentation & web portal for Dasik Igaijinn mods.