🧩 아키텍처 및 Mixin 분석
| 매개변수 | 기술 사양 |
|---|---|
| Root Package | net.vanillaoutsider.bedchathider |
| Mixin Configuration | vanilla-outsider-bed-chat-hider.mixins.json |
| Compatibility Level | JAVA_25 |
| Default Require Count | 1 (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 = trueInBedChatScreen에서hideChat이 true일 때:super.extractRenderState를 호출하고ChatScreen렌더링을 취소합니다.
- 대상 메서드 2:
keyPressed(KeyEvent, CallbackInfoReturnable<Boolean>)@At("HEAD"),cancellable = truesuper.keyPressed(event)로 우회하여 채팅 텍스트 입력 및 방향키 이동을 비활성화합니다.
- 대상 메서드 3:
mouseClicked(MouseButtonEvent, boolean, CallbackInfoReturnable<Boolean>)@At("HEAD"),cancellable = truesuper.mouseClicked(event, doubleClick)로 우회하여 채팅 URL 링크 클릭을 비활성화합니다.
- 대상 메서드 4:
mouseScrolled(double, double, double, double, CallbackInfoReturnable<Boolean>)@At("HEAD"),cancellable = truesuper.mouseScrolled(x, y, scrollX, scrollY)로 우회하여 채팅 기록 스크롤을 비활성화합니다.
관련 페이지: 홈 | 침대 화면 UI 및 레이아웃 | 채팅 가시성 및 입력 차단
