Files
mc_video_player_mod/gradle.properties
tkrmagid c53ebcc30d
Some checks failed
build / build (push) Has been cancelled
v0.4.13: fix delete-while-playing race, /videoCache, config additions, name resolution
Crash fix (4K delete EXCEPTION_ACCESS_VIOLATION):
- JavaCvBackend.stopWorker() no longer calls grabber.close() from caller thread.
  Only flips running=false, stops/flushes audio line, then interrupt+join(2s). The
  worker's own finally still closes grabber from the decoder thread, so the av_frame
  native plane is never freed mid-memCopy.
- Validate memCopy length against ByteBuffer.capacity() AND width*height*4 before
  copying, and re-check running/closed inside the frameLock.

Config:
- max_preload_mb (default 1024) — replaces the hard-coded 512 MB cap in VideoCache.
  Pushed to clients at join via CachePolicyPayload.
- render_distance_blocks (default 128) — replaces the hard-coded 128 in
  VideoAnchorRenderer.getViewDistance(). Mirrored client-side via ClientPolicy.

Command rename: /videopreload → /videoCache add|list|remove
- Persistent named index in cache_entries (server config).
- /videoCache list prints clickable URLs (ClickEvent.OpenUrl).
- /videoCache remove broadcasts DeleteCachePayload so each client purges its disk
  cache file.

Name resolution:
- /videoPlace ... <urlOrName> and the GUI save path both accept a /videoCache name
  in place of an http(s) URL; VideoPlayerConfig.resolveUrlOrName() does the lookup
  server-side before persisting to the anchor BE.

Cleanup:
- Drop the lowercase Brigadier aliases (videoplace, videostick, videodelete,
  videomute) — keep camelCase only.
2026-05-16 04:03:43 +09:00

457 B