An open API service indexing awesome lists of open source software.

https://github.com/flo-bit/bskycam


https://github.com/flo-bit/bskycam

Last synced: 13 days ago
JSON representation

Awesome Lists containing this project

README

          

# Bluesky Camera

A Fabric mod for Minecraft **26.1.2** that adds a craftable camera, photo signs,
and text signs. Take screenshots in-game, post them to Bluesky directly from
Minecraft, and hang the resulting photos (with captions) on walls in your world.

## Requirements

- Minecraft **26.1.x**
- **Fabric Loader** 0.18.0 or newer
- **Fabric API** `0.146.0+26.1.2` or newer ([Modrinth](https://modrinth.com/mod/fabric-api))
- Java 25 (runtime — the Modrinth launcher ships this)
- A [Bluesky](https://bsky.app) account and an **App Password**
(Settings → Privacy and Security → App Passwords → Add App Password)

## Installation

1. Install Fabric Loader for MC 26.1 via your launcher of choice
(Modrinth, Prism, etc.).
2. Drop **Fabric API** into your profile's `mods/` folder.
3. Drop `bskycam-1.0.0.jar` into the same `mods/` folder.
4. Launch the game. On first start the mod creates a config file at
`/config/bskycam.json`.

## First-time setup

Open the config screen in-game either by:

- running the client command `/bskycam`, or
- sneak + right-clicking while holding a camera.

Fill in:

| Field | What to enter |
| --- | --- |
| Handle, DID or email | Your Bluesky login (e.g. `you.bsky.social`) |
| App Password | The `xxxx-xxxx-xxxx-xxxx` token from the Bluesky app-passwords page (not your account password) |
| Default post text | Caption pre-fill for new posts |
| Default alt text | Accessibility description pre-fill |
| PDS override | Leave blank — the mod auto-resolves your PDS via the atproto DID document |

Hit **Save**. Config is stored as plaintext JSON at
`/config/bskycam.json`. App passwords are revocable at any time from
the Bluesky settings page, so a leak is recoverable.

## Items

### Camera

```
III I = iron ingot
IGI G = glass pane
IRI R = redstone dust
```

Shows up in the **Tools & Utilities** creative tab or via `/give @s bskycam:camera`.

### Text Sign (craftable, stacks to 16)

```
PPP P = paper
PIP I = ink sac
S S = stick
```

Gives **4** text signs per craft.

### Photo Sign

Not craftable — produced by taking a picture with the camera. Stacks to 1.

## How to take and post a photo

1. Hold the camera.
2. **Right-click and hold** → the camera raises to your eye and zooms in
(less than a spyglass — about 2×). Your held item is hidden while aiming.
3. While zoomed, the HUD shows *"Left-click to take picture"*.
4. **Left-click** → a shutter sound plays, the HUD flashes briefly, and a
clean (HUD-free) screenshot is saved to `/screenshots/` as a PNG.
A **Photo Sign** item lands in your inventory carrying the JPEG + metadata.
5. **Right-click a wall or the air** with the photo sign → the edit screen
opens with a live preview, a caption field, and an alt-text field.
6. Click **Post to Bluesky**. The post uploads in the background; the sign is
marked posted immediately so you can place it right away without waiting.
7. **Right-click a vertical wall** with the posted photo sign → it hangs on
the wall as a world entity, rendering the photo and caption. The item is
consumed on placement.

Break the sign (attack) to drop the item back — it keeps its posted state,
so you can place it again elsewhere.

## Text signs

1. Hold a text sign.
2. **Right-click a wall or the air** → edit screen opens.
3. Type up to 300 characters, hit **Post to Bluesky**.
4. **Right-click a vertical wall** with the posted text sign → it hangs as a
wooden-plank sign with the text rendered on it.

Text signs attach the current player and world context (player name, position,
biome, dimension, weather, health, etc.) to the post's record metadata.

## Metadata on each post

Every post record includes a `minecraftData` object with:

- `playerName`, `gameMode`, `health`, `maxHealth`, `food`, `saturation`,
`xpLevel`, `xpProgress`
- `position: {x, y, z}`, `facing: [yaw, pitch]`
- `dimension`, `biome`, `gameTime`, `dayTime`, `difficulty`, `hardcore`,
`raining`, `thundering`
- `seed` (single-player only)
- `serverName` / `serverAddress` (multiplayer)
- `minecraftVersion`, `capturedAt`, `postedAt`

All numeric values are serialized as strings to satisfy atproto's
no-floats constraint without losing precision.

## Tips and quirks

- Photo signs are saved to world NBT, so your hung photos persist across
reloads.
- Photos are auto-compressed to stay under Bluesky's 1 MB upload cap;
very large screenshots get downscaled.
- Entity placement and auto-post use single-player's integrated server;
multiplayer support is partial (posting works, but some sign-state sync
may be flaky).
- The mod keeps the full-resolution PNG in `screenshots/` even though it
uploads JPEG — so you always have a lossless local copy.

## Commands

- `/bskycam` — open the config screen.

## Building from source

```bash
JAVA_HOME=/path/to/jdk-25 ./gradlew build
```

Output at `build/libs/bskycam-1.0.0.jar`.

## License

CC0-1.0.