langsystem-1.51.1.jar
Curse Maven Snippet
What's new
Language System — Changelog
1.51.1 (latest)
This is a big one. It covers everything since 1.23.1, the last version published on CurseForge (versions 1.24.0 → 1.51.1). Features are grouped by topic and describe the final state in this release, not every intermediate step; a per-version table is at the end.
Highlights
- Writing paper is now a full document system: a rich-text editor with a language picker, freehand drawing with an eraser, glued Exposure photographs, ink and cleaning-fluid supplies, lecterns, folders, and a sewable 54-page Book of Papers.
- Copying Press: a new machine that duplicates written and drawn paper, glues and removes photographs, and can now copy entire bound books. Comes with a redesigned 3D model, a brand-new ornate GUI and its own recipe.
- Muteness and deafness are real, persistent player states with their own commands, chat rules, voice-chat behaviour and a genuine low-pass audio filter ("like a knock on a thick wooden door").
- Signs, anvils and name tags are now language-aware: every viewer sees their own decryption.
- Fixed a long list of bugs, including a crash-on-disconnect when gluing a photo and the press's shift-click that silently never worked.
Upgrade note: the server and every client must run this version. The language-sync network packet changed (two new fields), so mixed versions will fail to connect. Existing worlds and saves load unchanged.
1. Writing paper
Language paper (langsystem:language_book, "Blank Writing Paper") was overhauled from a plain text sheet into a proper document.
1.1 The page
- The writing and reading sheet was enlarged several times and settled at 168 × 204 logical pixels with a 136 px text column and 19 lines (originally 120 px and 16 lines — about 30% more text now fits).
- Typing wraps whole words to the next line instead of splitting them letter by letter.
- The sheet is drawn at natural size and zooms only when the window has room, with every button around it scaled by the same factor (1.5×) so the UI stays proportional.
- Leading blank lines and spaces are saved, so text can sit in the middle of the page.
- Written papers no longer carry a language label or language lore (it would have given the language away); old papers with legacy lore are cleaned up the first time they are used.
- An item note / title (shown in gray in the tooltip) can be set on papers, books and folders.
1.2 Rich text editor
- Formatting: bold, italic, underline, strikethrough, the 16 chat colors (buttons, palette, and
Ctrl+B / I / U). Styles are stored per character in a parallel string, so the language cipher can never mangle them, and they carry over onto cipher glyphs when a reader sees scrambled text. - "Magic" (obfuscated) font is creative-mode only: the button is hidden on the client and the flag is stripped on the server for everyone else.
- Page-wide selection: the caret and selection span the whole page, with mouse click and drag,
Shift+ arrows,Ctrl+A / C / X / V, word-by-word movement, Enter to split lines, and Backspace / Delete merging lines when the result fits. - Alignment: left, center or right, per line.
- Formatting applies to every selected character across lines.
- Language picker: a column of language buttons inside the editor chooses which language a paper is written in (instead of always using your current speech language). Languages you know too poorly to write in (below the writing threshold) are disabled.
- Fixed: erasing a paper left the "Written Paper" name behind.
1.3 Draft / finalize lifecycle
- Every edit is now saved immediately as a draft — the paper looks "written" at once, and nothing is lost if you close the screen without saving.
- Only the Save button finalizes a paper and locks it as read-only. Until then, reopening the item returns to the editor, pre-filled with your draft.
- Anything that previously keyed off "has text" (press copying, erasing with cleaning fluid) now keys off "finalized".
1.4 Freehand drawing
- A pencil toggle switches the page between text selection and drawing. Strokes are stored as polylines over the whole page (not just the text column), drawn on top of both text and photos, in every screen that shows a paper (editor, reader, book).
- Eraser tool — three mouse modes (text / draw / erase); clicking the active tool again returns to text. The eraser cuts exact circular holes in strokes (line segments are clipped against the eraser circle) and splits a stroke in two if the middle is wiped out.
- Size slider shared by pen thickness and eraser radius, remembering each separately; stroke thickness is saved with the stroke.
- Brush preview: a translucent square follows the cursor in draw/erase mode, showing the affected area.
- The pen follows the selected palette color ("Auto" uses the classic ink color).
- Fixed: drawing over a glued photo was invisible because of a depth-test conflict with Exposure's renderer; the overlay is now pushed forward in the render order the same way vanilla tooltips are.
- Drawing costs ink, exactly like text (see section 2).
1.5 Exposure photographs on paper (optional compat)
- Glue an Exposure photograph onto a blank language paper using a slime ball at the Copying Press (see section 3). One photo per page; the paper becomes "Paper with Photo" (and "Written Paper with Photo" once text or a drawing is added).
- The photo is rendered as the real image (through Exposure's own renderer, found by reflection — there is no compile-time dependency, and nothing breaks if Exposure isn't installed; a plain item icon is used as a fallback). It is shown as a centered square inside Exposure's own white paper frame, sized to the lines reserved for it.
- Movable: up/down buttons in the editor move the photo by line. A move that would cover existing text is refused and the button is disabled, so text can never be permanently hidden under a photo.
- The editor reserves the photo's lines as a "hole" anywhere on the page: the caret and word-wrap jump across it, and merging lines never removes a physically glued photo.
- Fixed a crash-disconnect when a photo was glued to only one side of a paper (an empty stack nested inside a component used a codec that vanilla forbids; it now uses the optional-stack codec).
- Cleaning fluid in the press's ink slot unglues the photo back out.
1.6 Four dedicated item textures
New hand-made artwork for every state of the paper:
- Blank paper —
language_book(now has its own texture instead of the vanilla paper icon) - Written paper —
language_book_written - Paper with a glued photo —
language_book_photo - Written paper with a glued photo —
language_book_written_photo
The states are selected through custom model data (1 = written, 2 = photo, 3 = written + photo).
1.7 Lecterns
- Language paper has been added to the
lectern_bookstag. Right-clicking a lectern with paper on it opens the read or edit screens, andShift+ empty hand takes it back. - Paper on a lectern needs no ink and no cleaning fluid to write or erase.
2. Ink, cleaning fluid and supplies
- Ink Bottle — holds 400 characters of ink; each non-whitespace character costs 1 point. Refill it in a crafting grid with ink sacs (each sac restores 100; surplus sacs that wouldn't fit are rejected so they never go to waste). The recipe is
langsystem:ink_refill, and it now appears in the recipe book (it was craftable before, but never unlocked). - Cleaning Fluid — 8 uses; one use erases a finalized paper back to blank. A used-up flask stays as an empty flask.
- Amounts are stored in a dedicated component instead of vanilla durability, so third-party tooltips no longer call an empty bottle "broken". Empty supplies are renamed ("Empty …"), show "Empty" in the tooltip and switch to dedicated empty textures. Tooltips read "Cleaner: n/8". New textures for both items (full and empty).
- Writing and erasing require the supplies anywhere in your inventory (or in a folder's dedicated slots).
- The editor shows and enforces an ink counter, and the Save button accounts for the full cost. Drawings now cost ink: one unit per stroke point, charged together with the text when you press Save.
- Ink is spent only on Save, not on every draft update, so a line you keep typing is never charged repeatedly.
- The anvil repair recipe for supplies was dropped; the crafting refill stays.
3. Copying Press
A brand-new machine (langsystem:copy_press) for duplicating, decorating and restoring paper and books.
Recipe: 2 iron ingots, 3 paper, 3 oak planks (shaped: iron on the top corners, paper in the middle row, planks along the bottom).
3.1 Block and GUI
- A real block with a 4-slot GUI and progress arrow: ink / activator on the left, target above original in the middle, output on the right. A copy takes 5 seconds, drawn on the progress arrow.
- The press faces the player when placed (the model rotates in 90° steps) and has a full-cube hitbox and collision — fixed an early bug where three of four facings had no collision and could not be broken. Contents drop when the block is broken.
- Each slot only accepts what belongs in it (a plain slot ignores the container's own rules, so every slot now enforces its item type).
- Shift-click now routes items to the right slot automatically: ink, slime and cleaning fluid → the ink slot; blank paper, photographs, and (for book copying) other books → the target slot; written paper and bound books → the original slot. (This used to silently never work — the menu was passing container slot numbers where menu slot numbers were expected, so every shift-click aimed at the wrong slot and was rejected.)
- The GUI uses a new dark, ornate texture. All four slots and the arrow were measured pixel-by-pixel from the artwork (and re-measured when the art was updated with the slots moved slightly higher), labels were repositioned and recolored for the dark background, and the output slot's item is centered in its larger frame. The experimental flickering "ghost item" hints in empty slots (briefly shipped in 1.45.0) were removed again.
3.2 Modes
The mode is picked automatically from what's in the slots:
- Copy paper: a finalized written paper (text, drawing, or both) in original, blank paper or vanilla paper in target, an ink bottle in the ink slot. The original is kept; a copy appears in the output with a gray "Copy" note. The copy keeps the language, text, formatting, alignment and drawing, and identical copies stack. Costs the same ink as writing it.
- Glue photo: an Exposure photograph in target, a slime ball in the ink slot, a blank language paper in original → the finished paper with the photo comes out of the output slot.
- Remove photo: target empty, cleaning fluid in the ink slot, a paper with a photo in original → the photo comes out of the output slot and the paper keeps everything else.
- Copy a whole book — new, see below.
3.3 Copying whole books
- Original slot: a Book of Papers that is already sewn (bound). An unsewn book is still a work in progress and can't be copied.
- Target slot: a book holding at least as many blank sheets as the original has pages. Each page of the original is copied, in order, onto the next blank sheet inside the target (text and drawings both); any extra blank sheets stay blank.
- Ink: 65 ink for every started group of 9 pages (1–9 pages = 65, 10–18 = 130, …). This is a provisional formula and may change.
- Result: the target book comes out of the output slot as the finished copy, already sewn, with the "Copy" note. The original is not consumed. The output slot must be completely empty (books don't stack).
- The single-sheet modes are not checked while a book sits in the original slot.
3.4 New 3D model
- The press has a completely redesigned 3D model, converted from the supplied Blockbench project (it reuses the previous textures; the book adds new ones).
- A second model with a book sitting on the press is shown whenever a book is in the original slot. This uses a new
has_bookblock-state property (the same approach as the vanilla lectern), kept in sync by the press every tick. The block-state file now covers every combination of facing ×has_book(8 variants). - The model was authored at about half size and off-center; it has been scaled up to fill the block and centered, matching the footprint of the previous press.
- The press item has a custom inventory transform (a slight counter-clockwise turn, a tilt to show the top, and a smaller scale) so it reads well in a slot.
4. Folder and Book of Papers
4.1 Folder (langsystem:language_folder)
- A container for papers. Accepts any language paper, book or tome, and has dedicated ink and cleaner slots: while the folder is in your inventory, writing and erasing use the supplies in those slots.
- A new texture. Contents are stored on the item, and it has its own menu type so slots enforce their rules.
- Only the stack you are holding is locked in the menu, so a book can be put inside a folder.
4.2 Book of Papers (langsystem:paper_book)
- A real book: a page-flipping reader with buttons, arrows and mouse-wheel support over the papers inside it.
Shift+ use opens a 54-slot menu where papers go in and out. - Sewing: a Sew button (costs one string) binds the book permanently — its contents and note can no longer change and the slot menu no longer opens. Reading still works.
- The appearance follows the number of papers: an empty cover, one to two papers, three or more (three Blockbench models, selected through custom model data).
- Several model fixes: correct UV scaling, a duplicated cover cube and the coplanar back faces of the decal planes were removed, decals sit slightly off the cover so textures no longer fight for depth, and the spine geometry was tweaked to match the latest source model.
- Recipe: leather, string and 3 paper (shapeless).
5. Signs, anvils and name tags are language-aware
- Signs show per-viewer decryption in the world. Each player sees the sign decoded with their own language progress just by looking at it — no clicking needed. Right-clicking a sign is now purely for editing, and signs are no longer write-once: clicking a written side opens the editor pre-filled with what you can read, so you can retype the parts you don't understand. Nothing is sent if the text comes back unchanged, so an idle look-and-close never silently rewrites a sign.
- The sign editor has a language picker, exactly like the paper editor (defaulting to the side's existing language, otherwise your current speaking language).
- Anvil renaming in a chosen language: a picker column on the anvil screen (default "no language", so ordinary renaming is unaffected) lets you rename an item in a conlang. The name is stored as ambient ciphertext plus the real text; every viewer reads it decrypted at their own level, in tooltips, chat links and item frames alike. If you aren't fluent enough, the rename falls back to a plain literal name instead of failing.
- Name tags carry their language to the mob: a name tag renamed on the anvil in a chosen language puts that name on the mob it is used on, and the floating name tag decrypts per viewer. A plain name tag clears any earlier language name. (Scoped to the floating tag only; the tab list and death messages are unchanged.)
6. Muteness and deafness
6.1 Muteness — /language mute give|take <player>
- A mute player can only speak Sign Language. Their active language is pinned to it and cannot be switched, including through the language-select screen.
- Their voice is dropped on the server in Simple Voice Chat — the microphone packets are cancelled before distribution, so nobody hears them, not even players on modified clients.
- If the player doesn't know Sign Language at all, it is granted at 100% so they can always communicate. Existing progress is otherwise left alone.
6.2 Deafness — /language deaf give|take <player>
- Chat: a deaf player cannot hear spoken languages at all. Instead of the message they see " is saying something, but you hear nothing ", and the language tag next to the speaker's name is hidden.
- Sign Language: a deaf player understands it only if they can see the speaker (same line-of-sight and range check as before) and know Sign Language at 100%. If they can see but don't know it perfectly: " is signing, but you don't know sign language well enough to follow ".
- Passive learning: deaf players no longer pick up spoken languages by overhearing nearby speakers (they still can pick up Sign Language by watching).
- Voice chat: a deaf player hears no voices in Simple Voice Chat; an occasional quiet, low, dull thump plays where someone is talking.
- World sounds: see below.
- As with muteness, Sign Language is granted at 100% if unknown. Both states are saved with the player, survive death and relogging, and are synced to the client.
6.3 Deaf audio — muffled like a thick wooden door
Three independent layers:
- Volume and pitch. Every sound the engine plays for a deaf player is wrapped so volume is multiplied by 0.3 and pitch by 0.5 (the engine's own minimum, so most sounds sit at the lowest pitch the game allows). Looping and continuously-updating sounds (elytra, minecarts…) keep working. Music is lowered too; UI click sounds keep their volume and pitch.
- Real low-pass filter. An OpenAL EFX low-pass filter is attached to every sound source right before it plays, cutting off the highs and leaving a bassy "boom" (gain 0.7, high-frequency gain 0.05 — roughly a 250 Hz cutoff). If the sound device has no EFX support, the filter silently does nothing and only layer 1 applies.
- Voice chat thump — see 6.2.
Tunables are the constants in DeafSoundHandler (VOLUME_FACTOR, PITCH_FACTOR) and MuffleFilter (GAIN, GAIN_HF).
7. Compatibility
- Exposure: optional; photo features are detected by registry id and a reflection-based renderer, with graceful fallbacks.
- Simple Voice Chat: remains optional. The new server-side mute hook lives in its own class so no client classes are pulled onto a dedicated server.
- Sound Physics Remastered (and other mods that attach OpenAL filters to sources) may override, or be overridden by, the deaf low-pass filter on some sounds.
8. Technical notes
SyncLanguagePayloadcarries two extra booleans (mute,deaf);LanguageDatagained persistentmuteanddeafflags (optional codec fields, so old saves load unchanged). While muted,current()always reports Sign Language.- New data components:
Drawing/Stroke,FINALIZED,PAPER_PHOTO, aSUPPLYamount,BOUND, and an item-language-name component; new synced entity attachment for name-tag language names. - New network payloads for notes, photo moves, strokes, erasing, sign language selection and anvil language.
- New mixins:
AnvilMenuMixin,ItemCombinerMenuAccessor,NameTagItemMixin,ItemStackMixin(hover name),EntityRendererMixin(floating tag),SignRendererMixin,LocalPlayerMixin(sign editor) andChannelMixin(deaf filter). The short-livedSignBlockMixinwas removed again. - New Simple Voice Chat server hook (
MicrophonePacketEvent). PressMenunow records each slot's real menu index instead of relying on container constants.- The
PaperEditorpage model has no Minecraft dependencies and was checked against standalone test harnesses. - New English and Russian language keys for every new message, button and command.
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include

