- Java 97.1%
- GLSL 1.6%
- Nix 1.3%
| .sworm | ||
| src/main | ||
| .gitignore | ||
| build.gradle | ||
| flake.lock | ||
| flake.nix | ||
| gradle.properties | ||
| LICENSE-THIRDPARTY.txt | ||
| README.md | ||
| settings.gradle | ||
Picture Frames
Display internet images on in-world picture frames for NeoForge 1.21.1.
Supports PNG, JPEG, GIF, and WebP (including animated WebP) from any URL. Works on servers so other players see what you see. GPU shader effects (dithering, palette reduction) give images a Minecrafty look.
Features
- Place a frame, right-click as owner to paste a URL.
- GIF animation plays at the source's native frame delays.
- Animated WebP supported via bundled
dwebp(see below). - Dither modes: off, 2x2, 4x4 Bayer.
- Palette reduction: 16, 32, 64 levels per channel.
- Owner-only edits; anyone can break + pick the item back up.
- Server-side permission gates: ops-only place, survival-only, domain whitelist/denylist, size and download caps.
- SSRF-hardened HTTP client: no localhost, no RFC1918, http/https only.
Dependencies
- KwahsCore (embedded via JarJar; no manual install).
Build
nix run # build jar into dist/
Or via gradle directly:
nix develop --command gradle jar
Produces build/libs/pictureframes-*.jar (and dist/ if using nix run).
Develop
nix develop --command bash -c 'gradle createLaunchScripts && bash build/moddev/runClient.sh'
VS Code tasks are provided under .vscode/tasks.json (Run Client, Run Server,
Build JAR, Compile).
WebP native binaries
WebP decoding invokes dwebp (Google libwebp) as a subprocess. Before a
distribution release, drop per-platform dwebp binaries into:
src/main/resources/dwebp/
dwebp-linux-x64
dwebp-linux-arm64
dwebp-mac-x64
dwebp-mac-arm64
dwebp-win-x64.exe
They're extracted to <gameDir>/pictureframes-native/ on first WebP decode and
marked executable. A dev fallback searches PATH (the nix develop shell
exposes libwebp so WebP works out of the box).
If no binary is available, WebP URLs fail with an informative error and the other formats (PNG/JPEG/GIF) still work.
Specification
See specifications.md for the full design doc, including the phased implementation plan, file layout, security model, and verification steps.
License
GPL-3.0-or-later. Bundled third-party components are listed in LICENSE-THIRDPARTY.txt.