WaterMedia API and integration reference
For mod developers: find playback APIs, supported source handlers and integration requirements reported for version 3.0.0.23.
- Software authors
- SrRapero720 / WaterMedia Team
Build and initialization
This is a PDF-derived reference to watermedia-3.0.0.23.jar. The report inventoried 1,209 archive entries, 1,066 compiled classes and 490 own-namespace classes outside org/watermedia/libs. Counts include inner/generated helpers and do not count gameplay features. Selected behavioral paths were disassembled; there was no branch-by-branch proof of every class.
Fabric onInitialize and Forge/NeoForge constructors call WaterMedia.start with an environment name, paths and side determination. The common start constructs one environment instance and coordinates modules; the constructor rejects an already-created instance.
| Static module order | Reported responsibility |
|---|---|
WaterMediaBinaries | Companion class; binary paths and client FFmpeg preparation |
WaterMediaConfig | Configuration registration via WaterConfig registerBlocking |
CodecsAPI | Media type inspection and image codecs; startup refuses the server-side codec path |
PlatformAPI | Client adapter registration, fetch and search |
MediaAPI | Player selection and engine factories, including server timeline |
NetworkAPI | MIME support and optional media file server |
The main module list directly constructs the companion class. Treat this distribution as a pair even though the main Fabric dependency list omits the companion.
Source locators and adapters
MediaAPI.mrl accepts a String or URI. MRL resolution is separate from playback and can represent multiple sources with per-source metadata. Its states are FETCHING, LOADED, EXPIRED, ERROR, BLOCKED, FORGOTTEN. Integrations must handle pending/unavailable sources and null player creation.
PlatformAPI declares search, searchHistory, fetch, register, unregister. Search uses a cache and can supersede a prior search task. Neither method presence nor a resolver proves a Minecraft search screen exists.
PlatformAPI.load constructs these 21 adapter instances in the reported client startup list:
| Number | Adapter |
|---|---|
| 1 | WaterPlatform |
| 2 | Imgur |
| 3 | Kick |
| 4 | Streamable |
| 5 | Medal |
| 6 | PornHub |
| 7 | Lightshot |
| 8 | Twitch |
| 9 | Twitter |
| 10 | Bluesky |
| 11 | BiliBili |
| 12 | Drive |
| 13 | Dropbox |
| 14 | MediaFire |
| 15 | Sendvid |
| 16 | Odysee |
| 17 | VidLii |
| 18 | TikTok |
| 19 | DTube |
| 20 | YtDlp |
| 21 | YouTube |
These are registered paths, not a live support matrix for 21 services. platforms.allowMatureContent defaults to false. No third-party media was fetched or offered as sample content, and no current service-access claim follows from this catalog.
Player families and controls
| Family | Role and limit |
|---|---|
MediaPlayer | Status, time, duration, start/pause/stop, seek, volume, speed, repeat and release contract |
FFMediaPlayer | Native FFmpeg audio/video pipeline with selected output engines |
TxMediaPlayer | Texture/image playback, including image-frame support; not every animated format certified |
ServerMediaPlayer | Timeline authority/follower without a local video/audio decoder |
createPlayer selects image playback for images and can select FFmpeg for other media when loaded. It can return null for unavailable sources or backends. Player statuses are WAITING, LOADING, BUFFERING, PLAYING, PAUSED, STOPPED, ENDED, ERROR; consumers choose UI messages.
Quality declarations are UNKNOWN, Q144P, LOWEST, LOWER, LOW, MEDIUM, HIGH, HIGHER, HIGHEST, Q8K. They express selection choices rather than guaranteed dimensions or available source renditions. The constructor preference is HIGHER.
In 3.0.0.23, start() and startPaused() return boolean instead of void. Rebuild requirements are dependent-binary concerns even within version 3. A successful call still requires handling asynchronous status and source capability; live media cannot be treated as a finite seekable recording.
Codecs, graphics and sound
| Subsystem | Reported declarations | Boundary |
|---|---|---|
| Raster/animated readers | PNG, JPEG/JPG, GIF, WEBP, NETPBM/PNM/PBM/PGM/PPM/PAM | Reader presence is not decoded-corpus verification |
| Vector | SVGReader, parser/rasterizer | No promise for all SVG features/external references |
| Compressed textures | BC availability checks/native initialization; DDS/BC structures/readers | Missing native BC bindings explicitly handled |
| OpenGL | MediaAPI.glEngine(thread, executor) | Respect render thread and environment |
| Vulkan | MediaAPI.vkEngine(VKContext) | Factory present, Minecraft operation untested |
| Other graphics | AWT, JavaFX, headless factories; SWEngine | API/desktop paths, not automatic Minecraft controls |
| Audio | OpenAL ALEngine; Java Sound JSEngine factories | Requires actual device/context readiness |
Native availability, reader selection, media detection, successful decode and hardware acceleration remain separate claims. No FPS, memory, latency, throughput or GPU measurement was made.
Synchronization and file networking
Synchronization roles are SOLO, AUTHORITY, FOLLOWER. A Bridge transports session bytes. Packet families Sync, Config, Watch, Unwatch, Report, Control and capability flags LOCKSTEP, CONTROLS, VOLUME form an integration vocabulary.
The consumer still supplies Minecraft packet routing, display/session identity, permissions and timeline persistence. A ServerMediaPlayer does not decode video on a dedicated server. Afterfall supplies its own target-time behavior; its television and radio have different drift/seek conditions.
The optional media file server defaults to disabled. Its gate is forceEnableServer OR (not clientSide AND enableServer) and its default port is 25572. Upload is HTTP POST with configured token/filename headers. These facilities do not supply Minecraft station ownership or player progression.
Library caches/binary paths and the companion’s ffmpeg, yt-dlp, botguard directories are program preparation/storage, not a world save format. Placed displays, station links, permissions and progression belong to the consumer.
Separate desktop application and negative content audit
The manifest’s Main-Class is org.watermedia.bootstrap.AppBootstrap. WaterMediaApp, home/player/settings screens, media selection/opening screens, desktop popup players and UI classes establish a packaged standalone application path. They are not Minecraft menus, HUD controls or keybind registrations. The application was not launched; its full interaction paths were not audited.
The report found no data/ entries, registered Minecraft item/block acquisition catalog, recipes, mobs, bosses, combat progression, worldgen, biomes/dimensions, quests, story/economy or Minecraft command tree in the inventoried archive and inspected loader paths. This does not rule out third-party reflective extensions. pack.png, icon.png, banner.png and an eight-frame duck sequence are presentation assets, not gameplay content; none is redistributed here.
Verification still required
The report’s proposed tests cover paired startup, consumer fallback, direct images/animation, finite audio/video, live sources, online helpers, two clients/late join, device/network failures, repeated open/close and file-server gating. They are future tests. Neither this packet nor the report establishes a passing runtime, multiplayer or performance result. The named machine-readable source companions were not attached; this wiki preserves only supplied table values and attributed report findings.
Sources & verification
Evidence: pdf-derived. Feature status: mixed. Article coverage: ready.
Local documentation context: Minecraft 1.21.1 / NeoForge; no launch verification
PDF pages 6-10, 15-18 · Architecture; adapters; players; codecs; sessions; audit; provenance · WaterMedia:L1-L6
Attributed static report findings only. Matching JARs and consumer source not independently inspected for this wiki. No game, native/helper, source-fetch, playback, desktop-app, multiplayer or performance test performed.
The wiki has not independently playtested report-derived instructions. Your server or modpack settings may change them.