Blood on the Clocktower - Unofficial

An unofficial Minecraft companion mod for running [Blood on the Clocktower](https://bloodontheclocktower.com/) sessions inside Minecraft.

File Details

boct-unofficial-mod-1.0.1.jar

  • R
  • May 4, 2026
  • 629.55 KB
  • 11
  • 1.21.1
  • Fabric

File Name

boct-unofficial-mod-1.0.1.jar

Supported Versions

  • 1.21.1

Curse Maven Snippet

Fabric

modImplementation "curse.maven:blood-on-the-clocktower-unofficial-1530198:8035539"
Curse Maven does not yet support mods that have disabled 3rd party sharing

Learn more about Curse Maven

1.0.1

A bookkeeping + UX pass on top of 1.0.0. No save-format breakage; existing worlds should load cleanly. Storyteller-tunable settings now live in <gamedir>/config/boctunofficialmod/ so they carry across worlds.

Voting & phases

  • Successful execution now requires ≥ 50% of living players voting yes.
  • Tied nominations clear the block — including any previous "on the block" nominee.
  • A re-nomination whose yes-count strictly exceeds the current block leader's becomes the new on-the-block.
  • Only one execution per day; a second /boct execute after one has landed reports "Someone has already been executed today."
  • Voting is rejected while the resolve animation is running ("Voting is locked while the indicators settle.") to avoid votes silently missing the tally.
  • Night start: every vote indicator is reset to "no", any in-flight resolve animation is cancelled, and the execution-column anvils are cleared.
  • Ghost-vote-spent dead players are guaranteed to stay on the "no" indicator (manager rejection prevents flipping their block).
  • The bell that opens the rolecall now fires on the MORNING_ROLECALL phase transition.

Custom roles (storyteller-defined)

  • New "Add Custom Role" button on the Build Script screen footer; opens a form for name, team, and ability text.
  • Custom rows show both an edit (✎) and delete (✕) icon at the right edge. Built-in roles still have neither.
  • Custom roles persist to <gamedir>/config/boctunofficialmod/custom_roles.json (cross-world, not in the world save).
  • Server broadcasts the custom-role set to every connected client on join and after every add/edit/delete, so all menus that read RoleRegistry see the same set the storyteller does.

New built-in roles

  • Wizard (Townsfolk) — "Once per game, choose to make a wish. If granted, it might have a price & leave a clue as to its nature."
  • Harpy (Minion) — "Each night, choose 2 players: tomorrow, the 1st player is mad that the 2nd is evil, or one or both might die."
  • Lord of Typhon (Demon) — "Each night*, choose a player: they die. [Evil characters are in a line. You are in the middle. +1 Minion. -? to +? Outsiders]"
  • Ojo (Demon) — "Each night*, choose a character: they die. If they are not in play, the Storyteller chooses who dies."

Voice (Simple Voice Chat integration)

  • Each seat auto-creates a matching voice channel named House N when the seat is added or edited (no thresholds are auto-created).
  • Removing a seat from the map now also removes the matching House N channel (and any join thresholds bound to it) so abandoned channels don't accumulate.
  • The threshold scanner only commits a transition when the underlying SVC call lands; if a player's connection wasn't ready yet, the next scan retries instead of silently leaving them un-joined. Fixes the "multiple players step on at once and only one joins" race.
  • New Voice submenu under /boct bundles the existing Voice Channels / Join Thresholds / Exit Thresholds screens.

Settings

  • Settings now persist to <gamedir>/config/boctunofficialmod/settings.json instead of the world save (BoctSettingsSavedData removed). Settings carry across worlds.
  • New Weather Cycle toggle (clock icon, settings menu). Applied to all worlds via the doWeatherCycle gamerule on toggle and at server start.
  • The "all seat label heights" control moved out of the Map menu into the /boct Settings menu (right column, last field).
  • Updated defaults: blindness off, adventure mode on.

UI

  • Active Script viewer rebuilt as a uniform-card grid that fills the available screen width: each card has the role name on top with the ability text wrapped underneath, all cards share the same height (sized to the longest description in the script), team color shown in both the name and the card border.
  • Grimoire now renders every map seat (including empty ones). Empty rows show "— empty —" with a green + Add Player button at the icon block; occupied rows show a red Remove Player button alongside the existing Nominate / Kill / Role / Nick icons.
  • Add Player picker matches the build-script visual language: a scrollable column with a top search field and hover-highlighted rows.
  • Manage Seats simplified to a single column of seats with only the ⚙ config button per row. Per-row × (remove from chart) and the right column of online unseated players were removed; player removal moved into the Grimoire.
  • Map menu trimmed to three icons: Configure Seats (custom seats icon), Set Execution Block, Refresh (re-applies the active map's saved state — voice channels, vote indicators, seat labels). Change Map and Save buttons removed; per-field edits already auto-save.
  • /boct main menu drops the Manage Seats button — seats live under the Map menu now.
  • Stats Board HUD (top-right while playing): one row per seated player showing display name + ✓/✗ "in House" indicator (in-house = the player's current SVC group matches the House N channel for their seat). Hidden when chat or F3 is open. During Sunset, when every living seated player is in their House channel, the phase auto-advances to Night.

Items & blocks

  • New Infinite Frame block (creative-only, Tools tab). Visual is a thin item-frame-style plate that mounts on the side the player clicks. Right-click while empty + holding an item locks that item in (single copy template); right-click on a filled frame dispenses a full stack. The locked item never changes once set. Looking at a filled frame shows the held item's name above the crosshair.
  • Seat Marker held → translucent green wireframes around every configured seat block, red wireframes around vote indicators (mirrors the Voice Wand's threshold glow). Sneak + right-click on an existing seat block opens that seat's config without auto-creating a new seat.

Compatibility

  • Chat Heads

SFX

  • Morning Bell (BLOCK_BELL_USE) plays for every player at the start of the MORNING_ROLECALL phase.
  • Execution heavy-impact: ENTITY_GENERIC_EXPLODE plays at the execution column on top of the existing piston / anvil-land sounds.