Add configurable theater screens, auditorium audio, remote controls, and Screenwriter automation - #6
Open
Emerald-Railroad wants to merge 1 commit into
Conversation
Add custom theater screens and Screenwriter automation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PixelReel Custom Fork v1.0.0 — Theater Screens, Independent Auditorium Audio, Remote Control, and Screenwriter Automation
Summary
This PR turns PixelReel into a more complete movie-theater playback and automation system while preserving the existing PixelReel media-provider foundation.
The largest additions are:
The internal Fabric mod id remains
pixelreelso existing registry IDs/worlds continue to load. The displayed release identity is PixelReel Custom Fork v1.0.0.1. Custom Cinema Screens
The normal user-facing display lineup is reduced to two theater-focused screens:
Custom Cinema Screen
Custom Curved Cinema Screen
Placement workflow
Right-clicking either custom screen item opens a setup menu containing:
The server validates all requested panel cells before placement. If any required space is blocked, unloaded, or outside the allowed world area, placement is rejected and the item is not consumed.
Supported custom dimensions are 1–64 wide and 1–36 high, with a default of 27×11. Custom geometry and audio settings are persisted in
DisplayBlockEntityand synchronized to clients.Mounting and removal
Flat custom screens are positioned against the back face of their occupied block cells, allowing a screen placed directly in front of a wall to appear flush rather than floating toward the player.
Generated panel blocks are breakable. Breaking any panel resolves its controller and destroys the complete bound screen. The controller remains the only item-dropping part, preventing duplicate drops.
Legacy preset screen registrations remain internally so existing worlds are less likely to lose registry references, but those preset screens are removed from the normal creative/crafting lineup.
2. Auditorium Audio System
The original distance-based/shared VLC audio model was not suitable for adjacent theater auditoriums. This PR replaces it with an auditorium-zone model.
Audio zones
Each custom screen stores:
Defaults are:
Inside the zone, audio stays at the screen's configured volume. There is no distance fade. Outside the zone, the screen is silent.
If zones overlap, the client selects a single eligible screen rather than intentionally mixing multiple auditorium tracks.
True per-screen audio isolation
Separate VLC player objects alone were not sufficient because native LibVLC volume/mute behavior can still be shared at the process level.
The playback path was therefore changed so each screen receives decoded PCM audio through LibVLC callbacks. Each
ChannelPlayerowns its own JavaSound output path. Inactive screens discard/flush their PCM rather than relying on shared native VLC volume state.This gives each physical screen an independent audio track and makes it possible to walk from Auditorium A to Auditorium B and hear only the screen whose configured audio zone contains the local player.
3. Remote Control
A new Remote Control item provides long-range interaction with PixelReel screens.
Normal use
Hold the remote, aim at a PixelReel screen/panel, and right-click to open that screen's normal controls from a distance.
Reset Connection
The control UI now includes Reset Connection.
This is a client-local recovery action for cases where VLC/video/audio becomes desynchronized after moving between auditoriums. Reset Connection:
New on-demand sessions also use the current synchronized playback position rather than blindly beginning from the original movie start.
Crafting recipe
I= Iron IngotR= RedstoneB= any Minecraft Button4. Screenwriter Console
Screenwriter is a central movie-theater automation system inspired by real theater scheduling software.
The console can manage up to 30 linked custom cinema screens.
Console controls
The link-arm state lasts two minutes.
Linking a screen
Auditorium numbers are user-selected rather than assigned by link order. Valid numbers are 1–30, and duplicate auditorium numbers are rejected.
Re-linking an existing screen can change its auditorium number. If today's generated schedule contains entries for the old number, those entries are migrated to the new auditorium number.
5. Automatic Daily Scheduling
Screenwriter uses the real system/server date and clock rather than Minecraft day/night time.
When enabled and linked screens exist, it creates a schedule for the current real-world date. The schedule is saved so restarting the Minecraft server does not reroll the day.
Media providers
Screenwriter schedules movies from PixelReel's existing on-demand catalog layer and supports:
AUTO uses Jellyfin when it is configured/enabled, otherwise Plex.
Only movie entries with usable runtime metadata are eligible.
Scheduling rules
For every linked auditorium, Screenwriter:
Default settings:
First-show staggering
Previously, every auditorium began its first show exactly at opening time. Screenwriter now distributes first shows across the configured stagger window.
For example, a theater with multiple linked screens and a 30-minute stagger can start auditoriums progressively between approximately 11:00 and 11:30 instead of producing one large simultaneous provider connection burst.
/screenwriter stagger 0disables staggering.Three-day no-repeat rule
Screenwriter stores media history by date.
A movie used on a schedule during any of the previous 3 calendar days is blocked from the current day's random pool. A movie is also used at most once in the same generated day.
If the remaining eligible pool cannot fill an auditorium, Screenwriter leaves that remaining time unscheduled instead of violating the history rule.
6. Scheduled Playback and Restart Synchronization
The generated schedule is not only informational—Screenwriter actively controls linked displays.
While a show is scheduled:
Between shows, Screenwriter powers its controlled screen off.
Restart behavior
The current schedule is stored in:
If the server shuts down and comes back while a show is already in progress, Screenwriter calculates:
and starts the movie at that elapsed playback position.
A restart therefore does not restart every movie from 00:00 and does not regenerate the schedule.
When the calendar date changes, the next day's schedule is generated when Screenwriter is enabled and at least one screen is linked.
7. Screenwriter ON/OFF Behavior
Screenwriter can be disabled without deleting its configuration/history.
Turning it OFF:
Turning it back ON resumes automation and generates the current day's schedule when appropriate.
Controls:
or Shift + right-click the Screenwriter Console.
8. Schedule Chat and Written Book
Chat
prints the complete generated schedule in chat.
Written book
gives the player a written book titled Today's Movie Schedule.
The book formatter:
9. Screenwriter Commands
Time input
Minecraft/Brigadier command parsing made colon-formatted time inconvenient, so opening and closing commands accept compact 24-hour values:
Other examples:
930→ 9:30 AM9→ 9:00 AM1830→ 6:30 PMColon-formatted values such as
11:00remain accepted when they reach the parser.10. Screenwriter Console Crafting and Texture
The console has a custom theater-control/scheduling texture.
Crafting recipe:
I= Iron IngotR= RedstoneD= Polished Deepslate11. Release/Compatibility Notes
pixelreel(intentionally unchanged for registry/world compatibility)pixelreel-custom-fork-1.0.0.jar26.3-snapshot-5>=0.19.3gradle.properties12. Suggested Test Matrix
Screens
Audio
Remote
Screenwriter
/screenwriter scheduleand the multi-page/screenwriter bookcontain the full schedule.Screenwriter load protection (v1.1)
Screenwriter now defaults to OFF in fresh worlds and can cap generated schedules with
/screenwriter maxstreams <0-30>. The default is four simultaneous scheduled shows;0means unlimited. The scheduler enforces the cap across each movie's full runtime and schedules chronologically across auditoriums so available capacity is distributed fairly. Existing generated schedules are left untouched until/screenwriter regenerateis used.