Myven Client の開発用モノレポです。
この README は、Myven Client 本体(主に 1.8 ワークスペース)の実装方針、軽量化技術、独自レンダリング方式、ClickGUI の設計、ビルド/起動手順をまとめています。
開発者向けの詳細メモ(実装ポイント、調査索引、運用上の注意、変更履歴メモ)は
eaglercraft-1_8-workspace/MYVEN_BUILD_MEMO.txt を参照してください。
この README よりさらに深く確認したい時は、まずそこを見る運用を推奨します。
Myven Client は、長年の大規模運営を前提に始まったプロジェクトではなく、
「Eaglercraftを遊んでいるときに、欲しい機能を自分で実装したい」という動機から始まりました。
開発方針の原点として、公式Discordで共有したメッセージの一部をここに引用します。
「Eaglercraftを遊んでいるときに『こんな機能があったらいいな』と思ったことがきっかけで作り始めました。」
「日本人ユーザーの意見を反映できるEaglercraftクライアントとしてMyven Clientを作ってきました。」
「もし開発を終了する場合、GitHubのprivateになっているMyven Clientのリポジトリをpublicにします。」
「コミュニティの誰かがこのプロジェクトをベースに開発を続けてくれるのであれば、それもとても嬉しく思います。」
また、Resent / Astra / Pixel をはじめ、先行するクライアントや開発者コミュニティから得た学びに感謝しています。
Myven Clientを使ってくれたすべてのユーザーと、フィードバックをくれたコミュニティにも感謝します。
- 日本語圏ユーザーの要望を反映した実装を、将来も継続可能にするため
- 開発終了後も、コミュニティが保守・改良・派生開発を続けられるようにするため
- 軽量化や描画最適化など、実装知見を共有してEaglercraft系全体に還元するため
Myven Client 本体の公式開発は終了予定ですが、このDiscordでは今後、 公式の後継という形ではなく、Forkベースで更新が続く可能性があります。
また、クライアント本体だけでなく、便利系のプラグインや周辺ツールの共有が行われる場合があります。
最新の動きや配布情報を追いたい場合は、参加しておくと便利です。
- Discord Invite:
https://discord.gg/3mWvyxh6qQ
- 学習用途
- Eaglercraftクライアント構造
- Java -> TeaVM -> JavaScript / WASM-GC のビルド導線
- GUI描画・レンダリング最適化の実装例
- 改造用途
- モジュール追加、HUD拡張、ClickGUI改造
- Block Overlay / Hitbox / AntiSnipe などの挙動調整
- 派生開発用途
- Forkして独自クライアントを作成
- プロジェクトをベースに新規クライアント開発
- メイン開発対象:
eaglercraft-1_8-workspace - 開発詳細メモ:
eaglercraft-1_8-workspace/MYVEN_BUILD_MEMO.txt - 1.12 系:
eagercraft-1.12-workspace - Wispcraft:
wispcraft,wispcraft-latest - ローカル静的配信:
serve.ps1
- Java 17 以上
- Windows + PowerShell(本READMEのコマンド例)
- Wispcraft を触る場合: Node.js + npm
Myven Client は「必要な時だけ処理を走らせる」方針で設計されています。
- モジュール有効時のみ処理を適用
- 例:
MyvenModules.isEnabled(...)による早期分岐
- 例:
- HUD 描画は有効モジュールのみループ
HudManager.renderAll(...)はenabled && hud != nullの要素だけ描画
- Overlay/Hitbox も機能ごとに個別分岐
RenderGlobalとRenderManager側で ON 時のみ拡張描画
- FBO 再利用で無駄な再作成を抑制
GameOverlayFramebufferは遅延作成し、解像度変更時だけ再確保
- ClickGUI 側で可視カードのみ描画
- スクロール範囲外カードは
visible判定で描画スキップ
- スクロール範囲外カードは
Myven では、標準のテクスチャ貼りUIだけでなく、独自の描画経路を複数使っています。
- 角丸UIを頂点描画で直接生成
GuiButtonは丸角をTessellator + TRIANGLE_FANで描画- ボタンごとに radius/hover/alpha を制御
- SDFベースの角丸シェーダUI
ShaderUtil.drawRoundedRect(...)で角丸矩形をシェーダ描画- border/shadow/gradient/innerGlow/glass をスタイル指定
- オフスクリーンAA合成
GuiMyvenClick/GuiMyvenModuleSettingsはCLICKGUI_AA=2のFBO描画- FBO結果を本画面に線形補間で合成してジャギーを軽減
- Overlayの拡張レンダリング
Block Overlay: fill/outline/throughWalls/pulse/rainbowHitbox: fill/outline/filter(Players/Mobs/Self)/eyeLine/lookLineParticle Overlay: 攻撃時の粒子種類・量・速度倍率制御
- AntiSnipe の見た目差し替え
- Skin/Cape/FOV/表示名を描画時に差し替え
- Tab/Scoreboard/Chat の自己名置換も実施
- Web向けWisp統合の自動注入
- Offline HTML へ
wispcraft/index.jsを Base64 埋め込み + 実行 - 設定UIレイアウトを MutationObserver で後適用
- Offline HTML へ
- WASM-GCオフライン単体化
classes.wasm, runtime, assets をBase64埋め込み- 実行時に Blob URL 化して1ファイル起動
- タブ構成:
ALL / FPS / PVP / GUI / MISC / PROFILE - カードUI:
- モジュールごとに Enable トグルと Settings ボタン
- hover / bounce / glow / gradient アニメーション
- 検索・スクロール:
- 検索文字列でフィルタ
- スクロール位置を再オープン時に復元
- プロファイル連携:
- 保存・読込・削除
- UIテーマやカード背景、言語設定も統合
- General/HUD/Color のタブ分離
- 設定行コンポーネント:
- トグル、スライダー、色、テキスト入力
- ColorPicker:
- HSV/Alpha 操作 + ドラッグ移動対応
- こちらもFBO AA + SDF角丸で統一描画
- HUD のドラッグ移動・拡大縮小
- 組み込みHUD(Scoreboard/Hotbar/Tab)もオフセット調整可能
- レイアウトは
ProfileManager経由で保存
- ToggleSprint
EntityPlayerSPの sprint 判定を拡張
- Fullbright
EntityRenderer.updateLightmap(...)で gamma を引き上げ
- No Hurt Cam / No Dynamic FOV
EntityRenderer.hurtCameraEffect(...)とAbstractClientPlayer.getFovModifier()を分岐
- Block Overlay
RenderGlobal.drawSelectionBox(...)拡張
- Hitbox
RenderManager.renderDebugBoundingBox(...)拡張
- Particle Overlay
EntityPlayer攻撃ヒット時の粒子生成追加
- AntiSnipe
AbstractClientPlayer,GuiIngame,GuiPlayerTabOverlay,NetHandlerPlayClientなどで描画/表示名置換
作業ディレクトリ:
cd .\eaglercraft-1_8-workspace.\gradlew target_teavm_javascript:makeMainOfflineDownloadまたは:
.\target_teavm_javascript\MakeOfflineDownload.bat主な出力:
target_teavm_javascript/javascript/EaglercraftX_1.8_Offline_en_US.htmltarget_teavm_javascript/javascript/classes.jstarget_teavm_javascript/javascript/assets.epk
.\gradlew target_teavm_wasm_gc:makeMainWasmClientBundleまたは:
.\target_teavm_wasm_gc\MakeWASMClientBundle.bat主な出力:
target_teavm_wasm_gc/javascript_dist/MyvenClient_WASMGC_Offline.htmltarget_teavm_wasm_gc/javascript_dist/classes.wasmtarget_teavm_wasm_gc/javascript_dist/eagruntime.jstarget_teavm_wasm_gc/javascript_dist/wispcraft/index.js
.\gradlew target_lwjgl_desktop:packageDesktopDistribution出力:
dist/MyvenClient-Desktop.zip
cd .\eaglercraft-1_8-workspace
.\gradlew :target_lwjgl_desktop:eaglercraftDebugRuntimeまたは:
.\target_lwjgl_desktop\StartDesktopRuntime.batリポジトリルートで:
.\serve.ps1 -Port 8080 -DocRoot .\eaglercraft-1_8-workspace\target_teavm_javascript\javascriptWASM-GC を配信する場合:
.\serve.ps1 -Port 8081 -DocRoot .\eaglercraft-1_8-workspace\target_teavm_wasm_gc\javascript_dist詳細は MYVEN_BUILD_MEMO.txt にあります。ここでは要点のみ。
- ビルド失敗時
- Java 17+ を最初に確認
- PowerShell ではコマンドを1行ずつ実行
- 不正文字エラー時は該当 Java ファイルの先頭崩れを確認
- UI修正が反映されない時
- 生成物HTMLを直編集しない
target_teavm_javascript/build.gradle.kts/target_teavm_wasm_gc/build.gradle.ktsを修正
- 大容量ファイルで push 失敗
- GitHub 100MB制限あり
- 必要なら Git LFS を利用