Skip to content

About

MCA: Conversations is an add-on for MCA: Reborn that replaces the Chat button with a hub of deeper conversations. Heart-gated personal topics, per-villager personality and profession flavor, conversation memory, gift gratitude and village gossip.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Repository files navigation

MCA: Conversations

Minecraft Forge Requires License Status

Deeper, less repetitive villager conversations for Minecraft Comes Alive: Reborn.

Features (1.8.1)

  • A first meeting sounds like one. A villager who has never met you says a plain hello rather than greeting you by name like an old friend; someone you have met says "hello again"; a regular, a friend, a confidant, a spouse, a relative and somebody you have fallen out with each get a greeting of their own, in their own personality's voice.
  • Friendship has to be lived. How close a villager treats you now needs separate days of actually talking and the familiarity you have built, not just hearts — and being their parent, child or sibling finally counts as family. Worlds from before this version, and MCA worlds adding Conversations for the first time, keep the friendships they had.
  • Walking through the village is quieter. Friends greet you more often than strangers, one greeting at a time, and a villager who says hello as you pass keeps walking unless you answer.
  • Nobody knows your name before you have met. Strangers greet and see you off without it, a respected stranger gets courtesy and nothing presumed, and partners and family have greetings of their own — your child greets you as a parent, your parent as their grown child. Every personality voices all of these greetings in character.
  • Townstead villagers live their Townstead lives in conversation. With Townstead installed, a Life here category of eight topics — how they are keeping, their day, their trade, the years, their people, their places, what the village is becoming, the calendar — answers to their real needs, shift, trade level, building, village spirit and calendar. Villagers at work or worn out put off long talks in chat, collapsed ones do not greet you, a gift only counts as having helped when it did, the village gossips about crises, promotions, birthdays and new buildings, and a reply can play a heart-neutral reaction (with Emotecraft). Without Townstead, none of it appears.

Features (1.7.3)

  • Topics that belong to a kingdom. With MCA: Kingdoms installed, a topic can be offered only to villagers of the right kingdom, judged by where they live or where they came from, and only while the player stands well enough with its faction. The restriction holds on every way into a conversation — the dialogue screen, a numbered reply, typed chat, the dynamic hub, a crafted packet — and a gate Kingdoms cannot answer hides what it guards.
  • Guild contacts. A villager appointed to speak for a guild can explain what the guild does and put in a request for an introduction or for its commissions. Kingdoms decides; the villager relays its answer to you alone and never repeats where an introduction leads.

Features (1.7.2)

  • Villagers remark on what they know you for. With MCA: Reputation 0.6.0, a villager who has heard that you stood your ground, or that somebody got hurt, can say so — filtered through what that villager knows, and never mistaken for liking you.
  • An apology is paid for once. A conversation deed is recorded against the decision and the exact grievance it answers, not against whoever you said it to, and a fuller apology supersedes a partial one instead of stacking on it.

Features (1.7.1)

  • Villagers stay put and face you for the whole of a discussion, including minutes of reading, and are handed straight back to their schedule when it ends.
  • Sixteen blocks to keep talking, with a second's grace out to twenty-four; nothing can be done from out of range, and opening a conversation still takes MCA's ordinary reach.
  • An attack ends the conversation for good, and the villager is free to flee; a guard still fights back unless the server asks otherwise.
  • Another player can take the villager over cleanly: the first player's window closes saying so, and nothing from it can reach the new conversation. The choice channel is protocol 4, so update client and server together.

Features (1.7.0)

  • The restrained card is now the one you get. New installations default to dialogueMenuStyle = MINIMAL and motionMode = REDUCED: the same numbered menu and the same input, drawn as one flat panel with a hairline above the answers, a plain numeral, and a focus mark in the row's gutter that moves no text. The full card is unchanged and one setting away. Upgrading changes nothing — an existing mcaconversations-client.toml already states both keys, and a stored RESPONSIVE or FULL is read as a choice, not as an old default.

  • Reduced motion means reduced motion. Under REDUCED the only animation left is a short fade when the menu genuinely opens and closes. Focus, selection, expanding a clipped answer and turning the page are immediate. The entrance belongs to the menu rather than to each question, so a pause between two turns of a conversation is the card waiting, not the card closing and reopening. As before, this governs Conversations' own effects; Townstead keeps its own screen, camera and typewriter.

  • The card can show its own working. Two overlays open inside the response viewport without moving anything: H lists the lines this client actually received and the responses it sent, each with its real outcome, bounded and forgotten when you disconnect; P changes the menu style, motion, reveal, interface sounds and control hints in place, and says plainly when the legacy numberedResponses = false switch is overriding the style you configured. Neither can select a response, and neither claims Townstead's own screen.

  • An offered topic that cannot be opened says why. Ask a villager about something their own menu was showing you and you get a sentence — they are working, you already talked about it today, they are not ready — instead of silence. The sentence is a description of a refusal that already happened, never permission: selecting a topic still goes through the server's ordinary gate, and nothing you have not been shown is ever mentioned.

Features (1.5.0)

  • The speaker has a face. The villager you are talking to is framed in the card header, so the line you are reading has someone attached to it. MCA keeps ownership of the identity, profession and mood it already displays; the card adds a face and nothing else.
  • The card is a vanilla screen. The panel and its recessed list body are flat translucent backing fills, capped by the two shading gradients vanilla puts at the ends of a list, and the two things that genuinely are buttons — the number badge and the page controls — are nine-sliced out of the button strip in widgets.png. A resource pack that reskins vanilla menus reskins those with it, and the card has no colour scheme of its own to fall out of step with the rest of the game.
  • An optional reveal. questionRevealMode = FAST lets the villager's line appear a few characters at a time. It is off by default, skipped when motion is off, and any input finishes it.
  • The portrait is dropped rather than shrunk on narrow or short screens, so the reading width is never traded for it. Network protocol remains 2.

Features (1.4.4)

  • A conversation card with deliberate visual hierarchy — villager names anchor the prompt in bold yellow, the rows sit in a recessed list body, and the focused response takes vanilla's selection frame with a highlighted number badge and a fixed hitbox.
  • Motion that explains state and then stops — new offers rise into place, rows enter in a short cascade, focus eases, selection presses and locks, and page changes shift only a few pixels. Full, reduced, and disabled motion profiles keep every focus and lock cue functional. The motion settings govern Conversations' own card effects only; where Townstead owns the dialogue screen, its camera, typewriter and screen behaviour stay Townstead's and are not changed by them.
  • Short screens and custom fonts are first-class — every vertical measurement follows the active font, pages contain at most nine shortcuts and only as many rows as fit, clickable page arrows agree with wheel and keyboard paging, and an oversized response is clipped with a full-text hover.
  • Keyboard and mouse no longer fight — a stationary pointer cannot restore an old hover after an arrow key moves focus; actual pointer movement or a click immediately returns pointer control.
  • One visual language across frontends — chat names and entire quick-reply lines share the same speaker emphasis, while Townstead keeps its native RPG screen and receives only matching, five-tick-faded number badges. Network protocol 2 and all server-owned dialogue outcomes are unchanged.

Features (1.4.3)

  • Conversations finally have room to breathe — the base MCA interaction screen now uses a responsive choice card instead of the fixed 170-pixel popup. Questions and answers form a clear vertical hierarchy, long responses wrap, each full row is clickable, and menus page at nine responses rather than overlapping the villager or falling off the screen.
  • Use the input that is comfortable — click a response, press its top-row or Numpad number, move with Up/Down and confirm with Enter or Space, or use Home/End and Page Up/Page Down on larger menus. Focus has a visible border, scrolling belongs to the open conversation instead of changing the hotbar, and the first input locks the offer so a double-click or held key cannot apply it twice.
  • Chat choices are complete and readable — quick replies are one per line and no longer stop at five; the bundled six- and eight-response menus show every response. Bare multi-digit replies such as 10 remain supported, while ordinary sentences containing numbers remain ordinary speech. With an empty chat box open, 1–9 can select directly without broadcasting the digit.
  • The number is presentation; the offer is authority — protocol 2 synchronizes a revisioned, bounded projection of MCA's exact constraint-filtered answer order. The client sends only a revision and absolute index; the server re-resolves the answer, villager, distance, interaction, expiry, and constraints, then consumes it before running MCA's existing answer path.
  • Townstead keeps owning its RPG screen — when Townstead is installed, its existing wrapped, scrollable hub/submenu/Back model receives visible number badges and digit activation. Its camera, typewriter, mouse, arrows, Enter behavior, and native selection routine remain intact.

Features (1.4.1)

Since 1.4.1, a villager is somebody in particular.

  • Two farmers stop being one farmer (new) — every villager now carries a small set of stable anchors: two things they are interested in, two things they value, a comfort, an aversion, and a way of working, of being sociable, and of opening up. They are generated once from the world seed and the villager's own id, and never rerolled — not on a restart, not when they move, not when a different player talks to them. Two players meet the same person.
  • Situations that are actually going on (new) — a librarian has a specific damaged book: hers, with a specific kind of damage, and it stays hers until it is dealt with. Ask about her work and she tells you what is wrong with it. Come back and it has dried, or it has not. Two librarians in one village are worrying about two different volumes.
  • Promises the game can check (new) — "I can bring you wool" is only ever offered when something in the running game can actually watch for wool arriving. If nothing can, the button says what it honestly means instead. No villager will ever thank you for something you did not do, or accuse you of breaking a promise nothing was watching.
  • She does not always agree with you (new) — advise the librarian to save the ink and let the pages warp, and whether she takes it depends on what she values. When she pushes back she names the reason, and you can hold your ground or hand the judgement back to the person who actually knows books.
  • You cannot shop for a different subject (new) — closing the screen and reopening it gets you the same conversation. What she raises is decided once, from the world and your shared history, and reopening a window is not a reroll.
  • Seven more things to ask about (new) — what she enjoys, what she will not do, how her days run, where she came from, which corner of the village is hers, what she makes of you, and what the two of you have been through. That last one is adult-only and needs time on the clock, because there has to be a history before there is a topic.
  • A village that is somewhere in particular (new) — every village draws six things once and keeps them: a tradition, a public value, a shared work worry, a landmark, a festival, and an argument currently going on. Residents do not all agree about them — whether somebody is glad of the frost supper depends on who they already are — and two players walking in from opposite directions find the same place.
  • News that travels, and can be corrected (new) — a thing one villager knows can reach the villager next to them. It loses confidence with every telling and never gains detail, a confidence does not become ordinary by being repeated, and what you said about yourself never travels unless you made it public. Because the event keeps its identity through the whole chain, setting the record straight later corrects the actual event rather than one villager's copy of it.
  • Villagers who know when not to talk to you (new) — what a villager may start on its own is budgeted and gated: at most one greeting per villager per day, nothing at all from somebody asleep, fighting, panicking or busy with another player, and a "stop talking" that is honoured before anything else is even considered. Greetings are raised by GreetOnApproach, as one line that costs nothing against the day's initiative allowance. InitiativePlanner raises everything else unprompted: a promise that has come due, a rupture between the two of them that has not been acknowledged, a thread the villager left open and is ready to pick back up, and their own situation having changed since they last spoke — plus, with MCA: Reputation or MCA: Capitals installed, the village having just changed its mind about the player, or this villager's own place at court having changed. Each of those can open a decision page and spends the day's one allowance, except a changed situation, which is gated the same way but never counts against that cap. All of it is gated by the same busy/asleep/muted checks as a greeting.
  • Somebody else can join in (new, off by default) — in chat mode, a second villager may corroborate something public, differ about a preference, add a detail only their trade would know, remember a family event differently, or tell the first one that it is not theirs to tell. Three speakers, fixed turn order, and every line has to answer the one before it.

Features (1.1.0)

Asking a question is not what earns affection — answering one is.

  • Your reply is what shapes the relationship — asking a villager how their day went used to hand you hearts for the click. It doesn't any more. Now they answer, and you choose what to say back, and that is what lands. Sit with someone's bad day and offer to take something off their hands, and you've earned something. Tell them everyone has bad days and then double down when they bristle, and you've lost it — and apologising settles the air without buying the hearts back, because a slight isn't undone by saying sorry. All 28 catalogued topics are converted — from the weather and what's for supper up through fears, regrets, secrets, and the spouse and family topics — and no topic pays hearts for being clicked any more.
  • Conversations that remember (new) — tell a villager you'll stand with them and they hold you to it a week later, by name. Get them to crack all the way open about what frightens them and they answer differently ever after, because they know you remember. Press them after they've said no and that is permanent: the topic opens warily from then on, and the only way back is an honest apology that doesn't erase it.
  • The same conversation by typing (new) — every one of those choices is reachable in chat, in your own words. When a villager puts a decision to you, the options come with it, numbered, so you can answer 2 if you'd rather pick than phrase. While you're mid-decision, an idle "how's the weather" can't be mistaken for your answer.

Features (1.0.0)

  • Chat mode — talk to villagers by just typing. Hey Coralia! How's your day going? in the vanilla chat box gets an answer in chat, in her voice, through the same dialogue engine as the GUI — identical heart gates, cooldowns, moods, dialogue checks, memories, and gossip. No AI/LLM: matching is deterministic, datapack-driven (keywords + phrases with typo tolerance, synonyms, negation awareness), and unit-tested. Address villagers by name, by looking at them, or just keep talking — your conversation partner stays "sticky" for follow-ups. Multi-turn depth works too: open up their fears, then answer "You could face it — I'd stand with you."
  • A living village — villagers may greet you as you pass (a personality-weighted daily coin flip — the peppy farmer usually says hi, the introverted librarian rarely; villagers who dislike you brush you off instead). Open the chat box and nearby villagers stop and turn to you expectantly; your conversation partner stays put, facing you, until a while after the conversation lapses — and still flees danger. Say "bye" or "stop talking" and they respect it, per villager. Shout a question in the square and the villagers it applies to answer, staggered. Optional radius-local chat (chatModeLocalChat, off by default, EXPERIMENTAL) keeps conversations neighborhood-scale.
  • A relationship deeper than hearts — every villager quietly tracks how much they trust and respect you, how warm they feel around you, recent tension, and how long you've known each other. Hearts stay MCA's one visible number — the vector never shows and never grants hearts; it decides which replies open up and how they land. It drifts back toward the villager's personality baseline over days, is capped against farming, and is per-player.
  • Dialogue checks — the deepest stances resolve like a CRPG check with four outcomes: a crit opens the villager further than asked, a success lands, a partial half-lands, a rebuff misfires in character (and always exits gracefully). Outcomes come from the relationship, hearts, mood, and a seeded roll — closing and re-opening the screen never re-rolls; coming back tomorrow might. Piloted on the fears topic: try "You could face it. I'd stand with you."
  • Chat, replaced — MCA's own "Chat" button now opens the Conversations hub: how their day actually went, whether they like their work, food, the neighbors, their life story, dreams, fears, feelings, regrets, and secrets. (Reachable via hubEntryMode; see CONFIG.md.)
  • Category menu — the hub opens on six clean categories (Chit-Chat, Profession, Village, Events, Personal, Relationships) instead of one long list; pick one to see its starters, with "Something else." to step back. Categories with nothing to offer are hidden — Relationships only appears for spouses and family.
  • Personalized per villager — work talk is profession-aware (hand-written lines for all vanilla trades plus every profession mod in the pack: MCA, More Villagers, Ars Nouveau, Chef's Delight, Ice and Fire, Vampirism, Werewolves — and a self-personalizing generic line for any other mod's professions); food talk respects MCA traits (vegetarian, lactose intolerance, ...); children and teens answer in their own voice. Every personality has a flavored overlay — all 16 of MCA 7.7's, plus MCA 7.6's athletic and the four 7.6 spellings (witty/shy/lazy/grumpy) kept as aliases of their 7.7 successors, so a villager keeps its voice across an MCA upgrade. 21 overlay namespaces in all. Each covers the high-traffic lines (greetings, check-ins, day/work/village, the topic openers, deflects, gossip and the personality-voiced chat-mode deflections), each with 2–3 variants — a crabby villager and a peppy one answer the same question in visibly different words. New in 1.2.0: the overlays reach the first reply as well as the opener, so accepting sympathy, accepting help, being promised support and being asked again days later all sound like the villager saying them — not like one narrator speaking for everyone after the first sentence

Requirements

Minecraft 1.20.1 · Forge 47.x · requires MCA Reborn [7.6,8).

Built and tested against MCA 7.7.0-beta.2; verified to still start and run on MCA 7.6.20.

Architectury is no longer declared as a dependency of this mod. MCA 7.6 requires it and asks for it itself; MCA 7.7 dropped it. Conversations has never referenced Architectury, and declaring it mandatory only blocked people upgrading to 7.7 who had removed it.

MCA 7.7.0-beta.1 does not work — with or without this mod. That build ships a truncated forge-mca.refmap.json, so MCA's own MixinLivingEntity fails to apply in a production runtime. Reproduced with MCA alone. Use 7.7.0-beta.2 or newer.

Languages

English (en_us) and Brazilian Portuguese (pt_br) — both complete: UI strings, the full base dialogue pool, every personality overlay, the age voices and the whole chat-mode vocabulary (37,915 key/value entries per locale across 23 namespaces, of which 14,042 are the base mca_dialogue pool). MCA gates per-personality dialogue to en_us/ru_ru; a narrow client-only hook widens that gate to the locales this mod ships complete overlays for, while preserving MCA's voice-pack and online-TTS restrictions untouched.

Optional: MCA: Quests (quest-aware lines), MCA: Reputation (public standing, villagers telling each other what you have done, and — from 0.6.0 — remarking on what they know you for), MCA: Capitals [1.3,) (villages that are capitals speak about their sovereign, heirs and court; court changes seed village gossip), MCA: Kingdoms [0.1,), formerly Ultima Kingdoms (topics offered only in the right kingdom, and guild contacts who relay requests to their guild), Townstead [0.7.5,0.9) (needs, schedules, trades, life stages, roots, buildings, village spirit and calendar become conversation state, with a Life here topic category, reactions, gossip, and numbered choices in its RPG dialogue screen; Emotecraft is needed for reactions to play) and Serene Seasons (real seasons; calendar fallback otherwise) — all soft dependencies; the mod works fully without any of them.

How it works

MCA's dialogue system loads datapack JSON from any namespace and merges same-named questions, so most of Conversations is data: data/mcaconversations/dialogues/*.json adds new questions and extends MCA's main/greet. The Java side registers custom dialogue conditions/actions (conversations_gossip, conversations_disposition, conversations_check, conversations_say, ...) into MCA's public registries. mcaconversations.mixins.json lists thirteen mixins in total — seven common and six client (client: list) — every one soft-fail on a missed injection point (injectors.defaultRequire = 0, so an unresolved method target is skipped at startup instead of crashing it); tolerance of a target class that does not exist at all comes separately from @Pseudo and, on the mixins that name MCA's two package roots, from Mixin simply omitting whichever root it cannot find (see mixin/NetworkHandlerMixin, mixin/InteractionDialogueMessageMixin). The seven common mixins patch MCA classes directly: DialoguesMixin (the Chat→hub redirect), BreedableRelationshipMixin (a gift-acceptance observer), InteractionDialogueMessageMixin (validates a GUI dialogue submission — distance, ownership, constraints and the catalog's age gate — before MCA acts on it), NetworkHandlerMixin (chat mode's dialogue-packet-to-chat redirect), QuestionMixin (filters the injected hub answer, and the catalog's age gate, out of MCA's own answer list), McaInteractionCloseMixin (guards MCA's tokenless interaction-close request, so a player who does not own a managed discussion cannot end it) and InteractTaskMovementMixin (cancels InteractTask#followPlayer while a managed hold owns the villager). Chat mode's matcher is a second frontend to the same engine: free text resolves to the exact (question, answer) a GUI click would send, so parity is structural, not re-implemented; its intents live in data/<any-namespace>/chat_intents/*.json and are fully datapack-extensible (including synonym packs).

Client-side code is not limited to a ping. client tracks whether the chat box is open so villagers can turn toward a typing player. client.dialogue renders the interaction-screen response card in three menu styles — RESPONSIVE, MINIMAL and MCA_ORIGINAL (DialogueStyleProfile) — with the villager portrait, paging, mouse and keyboard navigation, narrator announcements on focus and selection (DialogueChoiceNarrator), and an optional per-character text reveal (QuestionReveal, see questionRevealMode above). client.dialogue.dev is a development-only response-card preview screen and command; its classes ship in the jar same as any other, but the command only registers when FMLLoader.isProduction() is false, so it never appears in a production build. client.townstead bridges Townstead's own RPG dialogue screen, and the two Townstead client mixins (TownsteadChoicePanelMixin, TownsteadRpgDialogueScreenMixin) give its choice panel and RPG dialogue screen numbered digit selection without touching its camera, typewriter or native selection routine, and a third (TownsteadEmotionTagOverridesMixin) lets its typewriter find Conversations' emotion tags when it has none of its own. The remaining four client mixins are ChatScreenChoiceMixin (vanilla ChatScreen, an empty-chat-field digit shortcut for chat mode's numbered choices), InteractScreenChoiceMixin (MCA's own interaction screen, the same responsive-choice rendering as the dialogue-screen response card), and VillagerMessageMixin and MCAClientMixin, covering pooled-dialogue-variant stability and the personality-locale widening described under Languages above.

The relationship vector lives in its own versioned world save data and never touches hearts: MCA's hearts remain the only authoritative, visible relationship number, and every heart change still flows through MCA's own dialogue actions. See DATAPACK.md for the full JSON vocabulary (datapack authors can build on it, including their own checked stances) and CONFIG.md for configuration.

Status

Alpha. Pure logic (gossip log, diffing, templates, content lint) is unit-tested; MCA-touching behavior can only be verified in a production-style instance — MCA Reborn does not load under a ForgeGradle dev runtime (its bundled mixins only resolve against SRG names), so runClient is not a valid test of MCA integration. See the in-world checklist in CHANGELOG.md.

What is verified

CI runs the unit/lint suites and the real-jar binding probes (McaBindingProbeTest and friends) against the MCA versions in gradle.properties/mca_probe_versions. It does not run the game. In-game production checks — a real client and dedicated server on the supported loaders — are listed, with what has and has not been run for each release, in docs/ROADMAP.md; a passing CI run is not a claim that any of those checks were performed. Optional radius-local chat (chatModeLocalChat, off by default) is experimental for the same reason: its production check (finding F05) has not yet been exercised in a running game.

License

GPL-3.0-only, matching MCA Reborn, whose internals this mod links against.

About

MCA: Conversations is an add-on for MCA: Reborn that replaces the Chat button with a hub of deeper conversations. Heart-gated personal topics, per-villager personality and profession flavor, conversation memory, gift gratitude and village gossip.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages