Skip to content

feat: NeoForge client support and cross-platform client test framework#46

Merged
turtton merged 3 commits into
mainfrom
feat/neoforge-client-and-clienttest
May 9, 2026
Merged

feat: NeoForge client support and cross-platform client test framework#46
turtton merged 3 commits into
mainfrom
feat/neoforge-client-and-clienttest

Conversation

@turtton

@turtton turtton commented May 9, 2026

Copy link
Copy Markdown
Owner

Summary

  • NeoForge マルチローダー対応のクライアントサイド修正と、Fabric/NeoForge 共通のクライアントテストフレームワークを追加

Changes

NeoForge サーバーサイド修正 (f5dbe50)

  • placeTank()setItemInHand 追加 (UseOnContext がプレイヤーの手からアイテムを取得するため)
  • FluidStoragePersistentStatedistinct()isSameFluid() に変更 (NeoForge の FluidStack.equals() は量も比較するため)
  • splitUnevenFluidDistribution テストの Fabric 固有ハードコード値を FLUID_BUCKET ベースに変更
  • ConfigSyncPayload で mock player への payload 送信時の例外ハンドリング追加
  • NeoForge 全39サーバーテスト通過

NeoForge クライアント修正 (2031870)

  • @EventBusSubscriber から bus = EventBusSubscriber.Bus.MOD を削除 (NeoForge FML 10.0.36 では未サポート)
  • AtlasManager の atlas lookup を AtlasIds.BLOCKS キーに修正 (crash fix)
  • モデル JSON に render_type: minecraft:cutout を追加 (NeoForge でのタンク透明描画)
  • build.neoforge.gradle.ktsresources.srcDir("src/main/generated") 追加

クロスプラットフォーム クライアントテストフレームワーク (2031870)

  • FabPose 方式のコルーチンベーステストランナーを実装
  • Fabric 専用の clientGametest (FabricClientGameTest API) から共通の clienttest ソースセットに全10テストを移植
  • Stonecutter 条件分岐でエントリポイントを分離 (Fabric: ClientModInitializer / NeoForge: @EventBusSubscriber)
  • MC バージョン間 API 差異対応 (GameRules, Window handle, KeyboardHandler.keyPress)
  • Mixin: 非フォーカス時 pause 防止 + narrator 抑制
  • Xvfb ディスプレイ番号レース条件修正 (FileLock)
  • PulseAudio SIGABRT 回避 (LD_PRELOAD stub)

Test Results

Version Server (gametest) Client (clienttest)
1.21.8-fabric ✅ 39/39 ✅ 10/10
1.21.11-fabric ✅ 39/39 ✅ 10/10
26.1-fabric ✅ 39/39 ✅ 10/10
1.21.11-neoforge ✅ 39/39 ✅ 10/10

Known Issues

  • spotlessKotlinCheck に1件の既存 lint エラー (ConnectedTank.kt:L19, Stonecutter ブロックコメント折り返し)

turtton added 3 commits May 8, 2026 20:31
- Add NeoForge build config and Stonecutter loader parameter switching
- Abstract Fabric/NeoForge fluid APIs (FluidVariant/FluidStack) with platform types
- Implement NeoForge block registration, capabilities, and network payloads
- Fix game tests for cross-loader compatibility (setItemInHand, isSameFluid, FLUID_BUCKET)
- Fix NeoForge client @SubscribeEvent static method crash (remove @JvmStatic, add Bus.MOD)
- Handle UnsupportedOperationException for mock player payload in game tests
- Update flake.nix vcsVersion guard for multi-loader version format
…t rendering

- Implement coroutine-based client test runner (FabPose-inspired) that works
  on both Fabric and NeoForge via Stonecutter conditionals
- Port all 10 client tests from Fabric-only clientGametest to shared clienttest
- Fix NeoForge atlas lookup crash (AtlasIds.BLOCKS vs TextureAtlas.LOCATION_BLOCKS)
- Add render_type:cutout to model JSONs for NeoForge tank transparency
- Add Xvfb display race condition fix (FileLock) for parallel CI runs
- Add PulseAudio SIGABRT workaround (LD_PRELOAD stub) for headless environments
- Add Mixins for unfocused pause prevention and narrator suppression
- Handle API differences across MC versions (GameRules, Window, KeyboardHandler)
@turtton turtton merged commit 331d07c into main May 9, 2026
2 checks passed
@turtton turtton deleted the feat/neoforge-client-and-clienttest branch May 9, 2026 14:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant