02 ║ IN-GAME MOD
인게임 mod
Fabric 모드 하나가 HUD, 설정 화면, 서버와 대화하는 bridge를 맡아요.
세 화면 모두 Ui.java로 그려서, 게임 안 화면과 런처가 같은
제품처럼 보여요.
색과 간격은 두 곳에만 있어요
pinion-mod/src/main/java/dev/pinion/hud/Ui.java
런처의 tokens.css와 모드의 Ui.java는 같은 팔레트를
써요. 밤하늘 잉크(0xFF0B101F), 골드 액센트, 비슷한 라운딩과
이징이에요. 색을 바꿀 곳이 두 곳이라, 맞춰 두면 게임 안 화면과 런처가 비슷해
보여요. 상자 칸으로 메뉴를 만들면 게임 아이템 모양을 따라가게 되는데,
직접 그리면 런처와 같은 말로 화면을 만들 수 있어요.
워프 스크린: 서버 데이터, 우리 레이아웃
pinion-mod/src/main/java/dev/pinion/bridge/WarpScreen.java
워프 메뉴에 나오는 장소는 전부 서버가 보내요
(FullmoonBridge.waypoints()). 클라는 장소를 만들지 않고,
좌표를 고치지 않고, 플레이어를 직접 옮기지도 않아요. 클릭하면 서버에
요청을 보내고, 결과는 화면 아래 푸터에 나와요. 마우스로 가리키거나
화살표로 옮겨도 같은 선택을 쓰고, ENTER로 요청해요. 선택된 줄에는 2px
골드 선이 그어져요.
서버가 답하기 전에는 줄이 "서버 응답 대기…"로 깜빡이고, 결과는
tp_result의 성공·거절을 그대로 보여 줘요. 클라가 성공했다고
먼저 그리는 경로는 없어요.
bridge 클라이언트의 세 규칙
pinion-mod/src/main/java/dev/pinion/bridge/FullmoonBridge.java클래스 맨 위 주석에 적어 둔 규칙이에요.
- 채널에 등록됐다고 바로 켜지지는 않아요.
welcome이 없으면 그 접속 동안 브리지는 가만히 있어요. 모드는 깔렸는데 서버가 예전 버전이면, 어중간하게 켜 두지 않고/워프같은 기존 경로를 써요. - 클라가 보낸 값은 화면용이에요. 그래도 서버가 한 번 더 확인해요. 보내는 내용은 요청이고, 결정은 서버 쪽이에요.
- 서버 프로토콜이 더 새면 브리지를 꺼요. 모르는 형식을 대충 그리기보다 그냥 꺼 두는 쪽이 덜 헷갈려요.
mixin은 세 개뿐
pinion-mod/src/main/java/dev/pinion/hud/mixin/
게임 코드에 손대는 지점은 아바타 렌더, 조명(lightmap, 풀브라이트),
마우스 핸들러(줌) 세 곳이에요. mixin을 늘리면 게임 업데이트 때 깨질 면이
늘어나서, 새 기능은 되도록 게임 API와 Ui.java 안에서 만들어요.
HUD(PinionHud.java)와 설정 화면
(PinionSettingsScreen.java)도 마인크래프트 위젯이 아니라
Ui.java로 직접 그려요.