My girlfriend Laura | Laura Compagne

Laura is a mysterious companion who follows you, reacts to your actions, and stores your items
Back to Files

lauramod-fabric-26.1.2-2.0.0

File namelauramod-fabric-26.1.2-2.0.0.jar
Uploader
vyrrioxvyrriox
Uploaded
Oct 1, 2026
Downloads
18
Size
1.8 MB
Mod Loaders
Fabric
File ID
9030632
Type
R
Release
Supported game versions
  • 26.1.2

Curse Maven Snippet

Fabric

modImplementation "curse.maven:laura-compagne-1459108:9030632"

Learn more about Curse Maven

What's new

## [2.0.0] - 2026-10-01

### Added

- **Nine targets, one code base**: the repository is laid out for Minecraft 1.20.1, 1.21.1 and 26.1.2, each on NeoForge, Forge and Fabric. Code and resources that do not depend on a loader live in `common/<mcversion>`, and each `<loader>-<mcversion>` folder is a standalone Gradle project that only holds the loader glue. This release is built for the nine targets, and the nine pass the in-game self test suite. Fabric is a new loader for the mod: 1.x shipped for Forge and NeoForge only. See [docs/BUILDING.md](docs/BUILDING.md).
- **Needs**: hunger, energy, fun, attention and hygiene go from 100 (satisfied) to 0. Each one is refilled in its own way (food, sleep, dancing and gifts, talking and hugs, water or rain) and has consequences when it runs low. A right click on her with a water bucket washes her, and the bucket comes back empty. `needs.annoyance` (`CHILL`, `NORMAL`, `NEEDY`, or `UNBEARABLE`, the default) sets how demanding she is, and `needs.enabled` turns them all off. See [docs/ACTIONS.md](docs/ACTIONS.md).
- **Moods and relationship**: ten moods (happy, in love, calm, bored, hungry, tired, sad, angry, jealous, sulking) choose her idle animation and her lines. Affection goes from 0 to 1000 and gives six relationship levels, from "Hates you" to "Soulmates". When she is unhappy she may refuse an order (`needs.refuseOrders`); giving it a second time always works. A hug is never refused because she is hungry, sad or jealous: it comforts her. She only pushes a hug away while she sulks or is still angry, and asking again within 20 seconds gets through. A kiss is refused while she is gagged, while she sulks or is still angry, and under 200 affection. An order sent from out of earshot is never refused.
- **Desires**: every 12 minutes on average she wishes for an item, a place or an activity, shown in a thought bubble, to fulfil within 15 minutes. The pool is `desires.json`.
- **Gifts and food**: items listed in `gifts.json` are gifts with their own affection, fun and reaction tier, and she may give something back. The `match` of an entry is an item id, an `#item_tag` or the built-in group `@music_disc` (any music disc, with or without mods). Favourite and disliked foods have their own reactions. She eats on her own from her inventory or from a pantry chest.
- **Chat orders**: follow, stay, come, wander, go home, stop, fetch, tasks, jobs, chest assignment, hug, kiss, compliments, apologies, emotes and small talk are understood in plain chat. Each language has 75 intents.
- **Proximity chat**: she hears players, and everybody hears her, within 64 blocks in the same dimension (`dialogue.chatRange`). The summoning phrase works from anywhere.
- **Chained orders**: "bring me wood then come here" starts the first order at once and puts the following ones in her to-do list.
- **Listening per language and spelling rules**: she listens in each player's game language plus English (`dialogue.matchAllLanguages` for every language she knows). Case, accents and punctuation are ignored, and each language can declare `spelling` rules for chat shortcuts and common mistakes. Rules ship for English and French.
- **Fetch orders**: "bring me 16 bread", `/laura fetch <item> [count]` or the Fetch tab. A number written in a chat order is the quantity ("bring me 32 bread"). Within 24 blocks she looks for items on the ground, then in storage, then for blocks of the `lauramod:fetch_harvestable` tag, and brings the items back.
- **Jobs**: lumberjack (fells natural trees, replants a sapling), farmer (harvests, replants, sows, uses bone meal) and cook (furnaces, smokers, campfires, and the meals of `recipes.json` at a crafting table). A job is continuous work in an area around the place where the order is given, 10 blocks of radius by default.
- **Task queue**: a to-do list of 16 tasks (fetch, chop a tree, harvest, cook, come, go home, follow, stay, back to work) that run one after the other.
- **Chests by purpose**: a container can be assigned to `wood`, `harvest`, `seeds`, `ingredients`, `fuel`, `meals`, `pantry` or `storage`. She remembers 48 containers.
- **Several companions**: 3 per player by default (`general.maxPerPlayer`), each bound to the player who summoned her, with `/laura list`, `/laura select`, `/laura where` and selection by name in chat.
- **Gravestone and revival**: with the default `GRAVE` mode a dead companion waits until a flower is laid on a Laura's Gravestone, then comes back with her inventory and her memories. `general.reviveMode` also offers `TIMER` and `NONE`.
- **Laura's Heart**: obtained by smelting a pink tulip in a furnace. The heart summons a first companion, or calls back the ones a player already has.
- **Home, combat modes and pickup**: a home she lives around and sleeps at, passive, defensive and aggressive combat modes, and a switch that makes her collect items lying nearby.
- **Hay gag**: a way to keep her quiet for a while. Right click her with a hay bale, remove it with shears. The settings are in the `gag` section.
- **Skins**: six built-in skins, PNG files of the server's `config/lauramod/skins` folder, player uploads, URL skins limited by a domain whitelist, and the skin of a Minecraft account by name. See [docs/SKINS.md](docs/SKINS.md).
- **Custom Blockbench models**: `.bbmodel` and `.geo.json` models with their own textures and animations, from the server folder, a resource pack or a player upload. Head, body, arm and leg bones are recognised by name in several languages, a model without animations borrows the default ones, and keyframes accept Molang expressions. See [docs/MODELS.md](docs/MODELS.md).
- **Kawaii menu**: key K, or right click with an empty hand. Seven tabs: Home, Orders, Emotes, Work, Fetch, Style, Settings.
- **Emote wheel**: key G, 30 emotes.
- **Inventory screen**: 3 rows of 9 slots by default (`general.inventoryRows`, 1 to 6), four armor slots, both hands and a back slot.
- **Needs overlay**: optional (`display.showNeedsHud`), with the face, name, health and needs of the nearest companion.
- **Speech bubble**: what she says is shown in a bubble above her head as well as in chat, and her current desire in a thought bubble.
- **18 languages**: interface and dialogues in `cs_cz`, `de_de`, `en_us`, `es_es`, `fr_fr`, `id_id`, `it_it`, `ja_jp`, `ko_kr`, `nl_nl`, `pl_pl`, `pt_br`, `ru_ru`, `sv_se`, `tr_tr`, `uk_ua`, `zh_cn` and `zh_tw`. Each dialogue file has 216 line keys.
- **Languages from config files**: `config/lauramod/dialogues/<language>.json` adds or replaces lines, chat triggers, item keywords and spelling rules, and a file for a language code the mod does not ship adds that language. `config/lauramod/lang/<language>.json` overrides interface texts. See [docs/LANGUAGES.md](docs/LANGUAGES.md).
- **JSON config files**: `lauramod-common.json`, `lauramod-client.json`, `gifts.json`, `desires.json` and `recipes.json` in `config/lauramod/`. The two settings files are written with a comment, a range and a default for every option, and `/laura reload` applies server changes. See [docs/CONFIG.md](docs/CONFIG.md).
- **Commands**: a complete `/laura` tree for orders, fetch, tasks, jobs, chests, home, skins, models and administration. See [docs/COMMANDS.md](docs/COMMANDS.md).
- **58 advancements**: in their own tab, with counters kept per player. Going to the Nether or the End with her grants the matching advancement however you get there together, and the bath advancement is also granted when water really washes her, not only when she decides to bathe.
- **Public API and KubeJS**: `com.vyrriox.lauramod.api.LauraAPI` lets other mods add gifts, desires, meals and dialogue, read a companion's state, give orders and listen to eight events. With KubeJS, server scripts get the same functions as the `Laura` binding and the `LauraEvents` event group. See [docs/KUBEJS.md](docs/KUBEJS.md).
- **Optional integrations**: on Minecraft 1.21.1, Applied Energistics 2 (network storage for fetch and jobs), Curios (trinket slots), Farmer's Delight (cooking pots) and KubeJS on NeoForge, and Farmer's Delight Refabricated on Fabric. Forge 1.21.1 has none of these four, which have no Forge 1.21.1 release. On Minecraft 1.20.1, Farmer's Delight (Refabricated on Fabric) and KubeJS on the three loaders, and Curios on NeoForge and Forge; the Applied Energistics 2 bridge is compiled in on the three loaders and has never been run in game on 1.20.1. On Minecraft 26.1.2, Farmer's Delight Refabricated on Fabric only. Storage blocks of other mods are used like vanilla chests, and a backpack worn on her back adds storage when it exposes its inventory: on NeoForge and Forge for every Minecraft version, and on Fabric for 26.1.2. Carry On cannot pick her up. None of these mods is required. See [docs/COMPATIBILITY.md](docs/COMPATIBILITY.md).
- **In-game self tests**: the in-game self test suite (with extra tests for Farmer's Delight, KubeJS and Curios when they are loaded) runs on a dedicated server started with `-Dlauramod.selftest=true`, writes `lauramod-selftest.json` and ends the process with the result as exit code. A visual client test (`-Dlauramod.clienttest=true`) opens every screen of the mod and saves a screenshot of each.
- **Fights between players**: she follows the rules of the server. She fights another player, or the companion or pet of another player, only when PvP is on and the two players are not teammates without friendly fire; where those fights are forbidden, the other side cannot hurt her either (creative mode players still can). She never fights her partner's other companions and pets. The PvP switch is the `pvp` setting of `server.properties` on Minecraft 1.20.1 and 1.21.1, and the `pvp` game rule on Minecraft 26.1.2. Options `combat.attackPlayers` and `combat.shieldWithoutPvp`.
- **Gift cooldown**: the same kind of gift, or the same favourite food, makes her fonder only once every 300 seconds per companion (`needs.giftCooldownSeconds`, 0 for no limit). In between she still takes the gift and eats the food, and a wish is still fulfilled, but she gains no affection and no fun and gives nothing back. A gift she dislikes always counts. A gift that does not fit in her inventory lands at her feet, and she says a single line for each item she is given.
- **Hug and kiss cooldown**: a hug makes her fonder only once every 60 seconds per companion, and so does a kiss (`needs.cuddleCooldownSeconds`, 0 for no limit). In between she still hugs and kisses back, her need for attention is still met, a wish for a hug or a kiss is still fulfilled and the advancements still count.
- **Locked and protected containers**: for fetching, for her jobs and when she looks for food, she leaves alone a container locked with the vanilla `Lock` unless she or her partner holds its key. A container her partner did not assign to her is only used while that player is in the same dimension and could open it himself: spawn protection, world border, and the claims of protection mods. A container the player could not open cannot be assigned to her.
- **Work safeguards**: with `work.onlyNaturalTrees` the lumberjack only fells trees that stand on soil, are made of one kind of log and carry natural leaves at the top, and leaves the logs of a build that touch a tree standing. The cook only takes food out of furnaces and smokers. The lumberjack and the farmer stop at once when the `mobGriefing` game rule is turned off, even for a job given earlier or a task under way: the tree or the field is left as it is. Work that finds nothing to do says so once, then tries again by itself after a wait that grows from 1 minute.
- **Limits for servers**: skins and models leave the server at 640 KB per second for each player, and requests for them are budgeted. A client only accepts the files it asked for and only keeps those whose content matches the announced hash. A player sends one upload every 3 seconds and asks for one account lookup every 5 seconds, a companion changes look once every 2 seconds, and a player sends 20 menu actions per second at most. Uploaded files are named after the UUID of the player. A model holds at most 4096 cubes, 1024 bones and 8 textures, each at most 2048x2048 pixels, and Molang expressions are bounded in length and depth. See [docs/SKINS.md](docs/SKINS.md) and [docs/MODELS.md](docs/MODELS.md).
- **Mod missing on the server**: where the loader lets a client with the mod join a server without it (Fabric), the client leaves after 5 seconds with a message that says why. NeoForge and Forge refuse such a connection themselves.
- **Documentation**: ten bilingual guides in `docs/` (config, commands, actions, skins, models, languages, KubeJS, compatibility, building, FAQ).

### Changed

- **Complete rewrite**: 2.0.0 is written from scratch. The entries below are what differs for players coming from 1.x.
- **Health**: 100 health points instead of 1000 (`general.maxHealth`), and no free regeneration (1.x healed 1 health per tick). She heals 0.5 health per second while her hunger is 60 or more. Set `general.maxHealth` to 1000 and `general.regenPerSecond` to 20 for the old values.
- **Follow and teleport**: she no longer teleports like a vanilla pet. She walks to her partner beyond 7 blocks, stops at 3.5 blocks, and teleports only beyond 128 blocks (`follow.teleportDistance`, 8 to 1024). Stuck for 10 seconds, she says so and teleports only if `follow.teleportWhenStuck` is true. `/laura come` makes her walk when a path exists, and teleport when none exists or when she is beyond that distance or in another dimension. In follow mode she joins her partner in other dimensions and after any long teleport, and she arrives on a safe spot next to her partner.
- **Safe teleports**: every teleport puts her on a safe spot next to her partner: at the surface of the water when he swims or sits in a boat, on the ground below him when he flies, and without fall damage. When there is no safe spot (the void, lava) she stays where she is: after a call she says so, and while she follows she tries again every 2 seconds. Summoned by a player who flies, she appears on the ground. Over the void or over lava nothing is created: the player reads "There is no safe place for her here. Stand on solid ground and call her again." and the summon cooldown is not used up. The same holds for a dismissed companion who comes back, a revival at the grave and a restore from her saved state. A timed respawn waits and tries again every 5 seconds until her partner stands somewhere safe.
- **Portals and dimensions**: when her partner changes dimension, the companions in follow mode arrive with him at once, a sulking one included; those who sleep, stay, are at home, wander, work or fetch something stay behind. She can also walk through a portal herself: she then waits about 10 seconds for her partner on the other side and returns to him if he does not come. With `follow.followAcrossDimensions` set to false she neither follows him there nor takes portals. `/laura come`, `/laura home`, the call key and Laura's Heart work across dimensions for every player, and what she answers when she goes home or cannot come reaches him even out of earshot.
- **Single companion limit lifted**: 1.x allowed one Laura for the whole world. Each player can now have 3 companions and the world has no limit by default. `general.maxPerWorld` set to 1 restores the old rule.
- **Config format**: 1.x had no settings file, every value was fixed in the code. Settings now live in JSON files in `config/lauramod/`.
- **License**: MIT instead of All Rights Reserved.
- **Right click**: an empty hand opens her menu instead of making her sit or stand (`controls.menuOnRightClick`). Sneak and right click still opens her inventory.
- **Chat**: in 1.x her lines were private messages to her partner, and she listened within about 10 blocks. She now speaks in proximity chat, heard by every player within 64 blocks.
- **Skin command**: `/laura skin <url>` becomes `/laura skin url <url> [slim]`. Only her partner and operators may change her look unless `skins.othersCanChangeSkin` is true, and the domain must be in `skins.urlDomainWhitelist`.
- **Death**: with the default `GRAVE` mode she waits for a flower on a gravestone. In 1.x the chat phrase simply summoned a new Laura.
- **Inventory**: 27 slots by default instead of 9, plus armor, hand and back slots.
- **Villagers**: they walk away only while she follows her partner nearby, within 5 blocks instead of 10, and not when they sleep or trade (`personality.jealousOfVillagers`).
- **Worlds from 1.x**: a companion saved by 1.x is kept. Her inventory, her URL skin and her sulking state are read from the old data, and she is registered to her partner when she is loaded.

### Fixed

- **Partial word matching in chat**: 1.x searched its triggers anywhere inside a message, so the Spanish "ven" made her follow on "seven" or "souvent", and the "no" of "know" counted as a refusal of her love question. Triggers now match whole words (`dialogue/TextMatcher.java`), a trailing `*` is needed to match the beginning of a word, and the longest trigger wins. Languages written without spaces between words (Chinese and Japanese among the shipped ones) are still matched inside the text.
- **Words of another language**: 1.x tested the triggers of all its languages on every message. She now listens in the player's own language plus English.
- **Summon message always in French**: "Laura est apparue !" was sent as is to the player who summoned her, whatever the language of their game. The summon line now comes from the dialogue file of the player's language.
- **A diamond for every poppy**: in 1.x each poppy given to her dropped a diamond. Flowers are now ordinary gifts of `gifts.json`.
- **Companion lost in unloaded chunks**: 1.x could neither locate nor summon again a Laura left in unloaded chunks. The world now keeps a record and a saved state of every companion: `/laura where` lists them, `/laura come` and Laura's Heart call them back, and a companion that cannot be found is restored from her last saved state.
- **Name always shown as "Laura"**: 1.x ignored name tags. She can now be renamed with `/laura name`, the menu or a name tag.
- **Inventory lost on death**: in 1.x the items she carried disappeared when she died. With `GRAVE` and `TIMER` she keeps them, with `NONE` she drops them.
- **Skin command open to everyone**: in 1.x any player standing within 10 blocks of Laura could change her skin, with any address, and clients downloaded it without a size limit. The server now checks who asks and which domain is used. Clients limit the size (`network.maxSkinDownloadKb`), follow at most 3 redirects and refuse local network addresses.
- **Pre-release builds**: the entries below fix problems found in the 2.0.0 builds tested before this release. They only matter for worlds and servers that ran those builds.
- **Nether and End advancements**: they are granted as soon as she is next to her partner (16 blocks) in the Nether or the End, whichever way each of them got there: his portal, a portal she took herself, `/laura come`, the call key, Laura's Heart or a teleport command. She comments on the place when they are together there.
- **Bath advancement**: it is granted whenever water really washes her: 4 seconds in a row in water or 20 seconds in the rain while her hygiene is under 100 %, or a water bucket, and no longer only when she walks to water by herself.
- **Recalls and forced chunks**: recalling a companion from unloaded chunks uses a temporary chunk ticket (5 by 5 chunks, 15 seconds at most) that is never saved, instead of forcing her chunk, and calling twice starts a single recall. An automatic recall that does not find her no longer creates a copy from her saved state: only a call from her partner restores her. A world played with a pre-release build may still hold forced chunks: list them with `/forceload query` and free them with `/forceload remove`.
- **Companion existing twice**: when a companion exists in two dimensions (a world saved by a pre-release build), the copy that loaded last is removed after 5 seconds, with a warning in the server log.
- **Recorded position**: the position shown by `/laura where` is refreshed every second while she is active, at once after a teleport or a change of dimension, and when her chunk unloads. With `GRAVE` and `TIMER`, her partner is told about her death even from another dimension.
- **Items of an interrupted fetch**: what she carries for a fetch is saved with her and goes back into her inventory when the fetch is cut short by an unloaded chunk, her death, a dismissal or a change of dimension.
- **Gifts**: the message of a gift she gives back names the item and the count she really gave. What she gives and does not fit in the player's inventory lands at his feet. A name tag without a name can be a gift or a wish like any other item.
- **Sleep, gag and beds**: a sleep ordered with `/laura sleep` lasts until she is rested instead of ending at the next daylight check. With `gag.durationSeconds` set to 0 she keeps her gag after a reload. A companion who is dismissed, released or restored no longer keeps a bed occupied.
- **Inventory size**: when `general.inventoryRows` is lowered, the items that no longer fit drop at her feet instead of being deleted.
- **Administration**: `/laura admin remove` also removes the companions left in unloaded chunks, as soon as they load, and a companion who is in the world leaves what she carries on the ground. A wrong value in one config file no longer stops the other files from loading, and a wrong meal in `recipes.json` only costs that meal.
- **Refusal to other players**: a player who may not command her gets her refusal as a private message, at most once every 5 seconds, instead of a line said to everybody around. Her status (home, jobs, needs) is only sent to players who may command her.
- **Model and network safety**: a model file or a packet made to break the parser (deep nesting, huge textures, endless bone chains) is refused instead of crashing or freezing the game.
- **Mod integrations**: with Curios, her trinkets stay on her when she dies in `GRAVE` or `TIMER` mode instead of being dropped as well, and they are dropped when she leaves for good. With Farmer's Delight, the bowls a cooking pot does not take go back to her inventory. With KubeJS on NeoForge 1.21.1, `event.cancel()` is accepted in every `LauraEvents` listener. Crafters are no longer treated as storage on Fabric.
- **Forge 1.21.1**: the mod declares Forge 52.1.2 as its minimum, the first build it can load on.

### Performance

- **Personality on a one second tick**: needs, mood, desires and reactions are computed once per second for each companion, with a random offset per companion so that several companions do not all run on the same tick. Her to-do list is checked every 5 ticks.
- **Throttled scans**: the searches for items to pick up, a playing jukebox, water for a bath and food in storage run at intervals instead of every tick, and a job waits before scanning its work area again when it found nothing to do.
- **Jukebox check**: it reads the block entities of the loaded chunks instead of scanning blocks, and its result is kept for 3 seconds per companion.
- **Chat matching**: triggers are normalised once when the dialogues load and kept in an index sorted from the most to the least specific. For each lookup, a message is normalised once and re-spelled at most once per language.
- **Server upkeep at intervals**: pending recalls are processed every 10 ticks, timed respawns every second, companions left behind every 2 seconds. The record of a companion is refreshed every second and her full saved state every 5 minutes and when her chunk unloads.
- **Caches**: smoking results are cached per item, account lookups for player name skins are kept for one hour (five minutes for an unknown name, 256 names at most), and clients keep downloaded skins and models in memory (32 skins at most) and in `<game folder>/lauramod/cache`, where files unused for 30 days are deleted. The server keeps up to 32 MB of the skin and model files it already read, so a request costs at most one disk read per file, and storing an upload no longer rescans the folders. Rescans of the skin and model folders caused by an unknown name are limited to one every 5 seconds.
- **No thread per message**: 1.x started a thread for each chat reply and each skin download. Chat is now handled on the next server tick, and skin downloads share one background thread.

### Ajouts

- **Neuf cibles, une seule base de code**: le dépôt est organisé pour Minecraft 1.20.1, 1.21.1 et 26.1.2, chacun sur NeoForge, Forge et Fabric. Le code et les ressources qui ne dépendent pas d'un loader sont dans `common/<mcversion>`, et chaque dossier `<loader>-<mcversion>` est un projet Gradle autonome qui ne contient que la partie propre au loader. Cette version est compilée pour les neuf cibles, et les neuf réussissent la suite de self tests en jeu. Fabric est un nouveau loader pour le mod : la 1.x n'existait que pour Forge et NeoForge. Voir [docs/BUILDING.md](docs/BUILDING.md).
- **Besoins**: la faim, l'énergie, l'amusement, l'attention et l'hygiène vont de 100 (satisfait) à 0. Chacun se remplit à sa façon (nourriture, sommeil, danse et cadeaux, discussions et câlins, eau ou pluie) et a des conséquences quand il est bas. Un clic droit sur elle avec un seau d'eau la lave, et le seau revient vide. `needs.annoyance` (`CHILL`, `NORMAL`, `NEEDY`, ou `UNBEARABLE`, la valeur par défaut) règle son niveau d'exigence, et `needs.enabled` les désactive tous. Voir [docs/ACTIONS.md](docs/ACTIONS.md).
- **Humeurs et relation**: dix humeurs (heureuse, amoureuse, calme, s'ennuie, affamée, fatiguée, triste, en colère, jalouse, boude) choisissent son animation de repos et ses répliques. L'affection va de 0 à 1000 et donne six niveaux de relation, de « Te déteste » à « Âmes sœurs ». Quand elle est mécontente elle peut refuser un ordre (`needs.refuseOrders`) ; le donner une seconde fois marche toujours. Un câlin n'est jamais refusé parce qu'elle a faim, qu'elle est triste ou jalouse : il la réconforte. Elle ne repousse un câlin que lorsqu'elle boude ou est encore en colère, et le redemander dans les 20 secondes passe. Un bisou est refusé quand elle est bâillonnée, quand elle boude ou est encore en colère, et sous 200 d'affection. Un ordre envoyé hors de portée de voix n'est jamais refusé.
- **Désirs**: toutes les 12 minutes en moyenne elle désire un objet, un lieu ou une activité, affiché dans une bulle de pensée, à satisfaire dans les 15 minutes. La liste se trouve dans `desires.json`.
- **Cadeaux et nourriture**: les objets listés dans `gifts.json` sont des cadeaux avec leur affection, leur amusement et leur niveau de réaction, et elle peut offrir quelque chose en retour. Le `match` d'une entrée est un identifiant d'objet, un `#tag_d_objets` ou le groupe intégré `@music_disc` (n'importe quel disque de musique, avec ou sans mods). Les aliments préférés et détestés ont leurs propres réactions. Elle mange seule dans son inventaire ou dans un coffre garde-manger.
- **Ordres dans le chat**: suivre, rester, venir, se promener, rentrer, stop, rapporter, tâches, métiers, attribution de coffres, câlin, bisou, compliments, excuses, émotes et bavardage sont compris en clair dans le chat. Chaque langue a 75 intentions.
- **Chat de proximité**: elle entend les joueurs, et tout le monde l'entend, dans un rayon de 64 blocs dans la même dimension (`dialogue.chatRange`). La phrase d'invocation fonctionne de partout.
- **Ordres enchaînés**: « apporte-moi du bois puis viens ici » lance le premier ordre tout de suite et place les suivants dans sa liste de tâches.
- **Écoute par langue et règles d'orthographe**: elle écoute dans la langue du jeu de chaque joueur plus l'anglais (`dialogue.matchAllLanguages` pour toutes les langues qu'elle connaît). La casse, les accents et la ponctuation sont ignorés, et chaque langue peut déclarer des règles `spelling` pour les abréviations du chat et les fautes courantes. Des règles sont fournies pour l'anglais et le français.
- **Ordres de rapport**: « apporte-moi 16 pains », `/laura fetch <item> [count]` ou l'onglet Chercher. Un nombre écrit dans un ordre du chat est la quantité (« apporte-moi 32 pains »). Dans un rayon de 24 blocs elle cherche les objets au sol, puis dans les rangements, puis les blocs du tag `lauramod:fetch_harvestable`, et rapporte les objets.
- **Métiers**: bûcheronne (abat les arbres naturels, replante une pousse), fermière (récolte, replante, sème, utilise la poudre d'os) et cuisinière (fours, fumoirs, feux de camp, et les plats de `recipes.json` sur un établi). Un métier est un travail continu dans une zone autour de l'endroit où l'ordre est donné, de 10 blocs de rayon par défaut.
- **File de tâches**: une liste de 16 tâches (rapporter, couper un arbre, récolter, cuisiner, venir, rentrer, suivre, rester, retour au travail) exécutées l'une après l'autre.
- **Coffres par usage**: un conteneur peut être attribué à `wood`, `harvest`, `seeds`, `ingredients`, `fuel`, `meals`, `pantry` ou `storage`. Elle retient 48 conteneurs.
- **Plusieurs compagnes**: 3 par joueur par défaut (`general.maxPerPlayer`), chacune liée au joueur qui l'a invoquée, avec `/laura list`, `/laura select`, `/laura where` et la sélection par le nom dans le chat.
- **Tombe et retour à la vie**: avec le mode `GRAVE` par défaut, une compagne morte attend qu'une fleur soit déposée sur une Tombe de Laura, puis revient avec son inventaire et ses souvenirs. `general.reviveMode` propose aussi `TIMER` et `NONE`.
- **Cœur de Laura**: il s'obtient en faisant cuire une tulipe rose dans un four. Le cœur invoque une première compagne, ou rappelle celles qu'un joueur a déjà.
- **Maison, modes de combat et ramassage**: une maison autour de laquelle elle vit et où elle dort, les modes de combat passif, défensif et agressif, et un interrupteur qui lui fait ramasser les objets au sol à proximité.
- **Bâillon de foin**: un moyen de la faire taire un moment. Clic droit sur elle avec une botte de foin, des cisailles pour le retirer. Les réglages sont dans la section `gag`.
- **Skins**: six skins intégrés, les fichiers PNG du dossier `config/lauramod/skins` du serveur, les envois des joueurs, les skins par URL limités par une liste blanche de domaines, et le skin d'un compte Minecraft par son nom. Voir [docs/SKINS.md](docs/SKINS.md).
- **Modèles Blockbench personnalisés**: des modèles `.bbmodel` et `.geo.json` avec leurs textures et leurs animations, depuis le dossier du serveur, un pack de ressources ou l'envoi d'un joueur. Les os de la tête, du corps, des bras et des jambes sont reconnus par leur nom dans plusieurs langues, un modèle sans animation emprunte les animations par défaut, et les images clés acceptent des expressions Molang. Voir [docs/MODELS.md](docs/MODELS.md).
- **Menu kawaii**: touche K, ou clic droit à main vide. Sept onglets : Accueil, Ordres, Émotes, Travail, Chercher, Style, Réglages.
- **Roue des émotes**: touche G, 30 émotes.
- **Écran d'inventaire**: 3 rangées de 9 emplacements par défaut (`general.inventoryRows`, de 1 à 6), quatre emplacements d'armure, les deux mains et un emplacement de dos.
- **Cadre des besoins**: en option (`display.showNeedsHud`), avec le visage, le nom, la vie et les besoins de la compagne la plus proche.
- **Bulle de dialogue**: ce qu'elle dit s'affiche dans une bulle au-dessus de sa tête en plus du chat, et son désir du moment dans une bulle de pensée.
- **18 langues**: l'interface et les dialogues en `cs_cz`, `de_de`, `en_us`, `es_es`, `fr_fr`, `id_id`, `it_it`, `ja_jp`, `ko_kr`, `nl_nl`, `pl_pl`, `pt_br`, `ru_ru`, `sv_se`, `tr_tr`, `uk_ua`, `zh_cn` et `zh_tw`. Chaque fichier de dialogue compte 216 clés de répliques.
- **Langues par fichiers de configuration**: `config/lauramod/dialogues/<langue>.json` ajoute ou remplace des répliques, des déclencheurs du chat, des mots-clés d'objets et des règles d'orthographe, et un fichier pour un code de langue que le mod ne fournit pas ajoute cette langue. `config/lauramod/lang/<langue>.json` remplace des textes de l'interface. Voir [docs/LANGUAGES.md](docs/LANGUAGES.md).
- **Fichiers de configuration JSON**: `lauramod-common.json`, `lauramod-client.json`, `gifts.json`, `desires.json` et `recipes.json` dans `config/lauramod/`. Les deux fichiers de réglages sont écrits avec un commentaire, une plage et une valeur par défaut pour chaque option, et `/laura reload` applique les changements du serveur. Voir [docs/CONFIG.md](docs/CONFIG.md).
- **Commandes**: une arborescence `/laura` complète pour les ordres, le rapport d'objets, les tâches, les métiers, les coffres, la maison, les skins, les modèles et l'administration. Voir [docs/COMMANDS.md](docs/COMMANDS.md).
- **58 progrès**: dans leur propre onglet, avec des compteurs conservés par joueur. Aller dans le Nether ou l'End avec elle donne le progrès correspondant, quelle que soit la façon dont vous y arrivez ensemble, et le progrès du bain (« Toute propre ») est aussi accordé quand de l'eau la lave vraiment, pas seulement quand elle décide de se baigner.
- **API publique et KubeJS**: `com.vyrriox.lauramod.api.LauraAPI` permet aux autres mods d'ajouter des cadeaux, des désirs, des plats et des dialogues, de lire l'état d'une compagne, de donner des ordres et d'écouter huit événements. Avec KubeJS, les scripts serveur disposent des mêmes fonctions par la liaison `Laura` et le groupe d'événements `LauraEvents`. Voir [docs/KUBEJS.md](docs/KUBEJS.md).
- **Intégrations optionnelles**: sur Minecraft 1.21.1, Applied Energistics 2 (stockage du réseau pour le rapport d'objets et les métiers), Curios (emplacements de bijoux), Farmer's Delight (marmites) et KubeJS sur NeoForge, et Farmer's Delight Refabricated sur Fabric. Forge 1.21.1 n'a aucune de ces quatre intégrations, ces mods n'ayant pas de version Forge 1.21.1. Sur Minecraft 1.20.1, Farmer's Delight (Refabricated sur Fabric) et KubeJS sur les trois loaders, et Curios sur NeoForge et Forge ; le pont Applied Energistics 2 est compilé sur les trois loaders et n'a jamais été lancé en jeu sur la 1.20.1. Sur Minecraft 26.1.2, Farmer's Delight Refabricated sur Fabric uniquement. Les blocs de rangement des autres mods s'utilisent comme les coffres du jeu de base, et un sac à dos porté sur son dos ajoute du rangement quand il expose son inventaire : sur NeoForge et Forge pour toutes les versions de Minecraft, et sur Fabric pour la 26.1.2. Carry On ne peut pas la porter. Aucun de ces mods n'est requis. Voir [docs/COMPATIBILITY.md](docs/COMPATIBILITY.md).
- **Tests automatiques en jeu**: la suite de self tests en jeu (avec des tests supplémentaires pour Farmer's Delight, KubeJS et Curios quand ils sont chargés) tourne sur un serveur dédié lancé avec `-Dlauramod.selftest=true`, écrit `lauramod-selftest.json` et termine le processus avec le résultat comme code de sortie. Un test visuel du client (`-Dlauramod.clienttest=true`) ouvre chaque écran du mod et enregistre une capture de chacun.
- **Combats entre joueurs**: elle suit les règles du serveur. Elle ne se bat contre un autre joueur, ou contre la compagne ou l'animal d'un autre joueur, que si le PvP est activé et que les deux joueurs ne sont pas coéquipiers sans tir ami ; là où ces combats sont interdits, l'autre camp ne peut pas la blesser non plus (les joueurs en mode créatif le peuvent toujours). Elle ne se bat jamais contre les autres compagnes et les animaux de son partenaire. L'interrupteur du PvP est le réglage `pvp` de `server.properties` sur Minecraft 1.20.1 et 1.21.1, et la règle de jeu `pvp` sur Minecraft 26.1.2. Options `combat.attackPlayers` et `combat.shieldWithoutPvp`.
- **Délai entre deux cadeaux identiques**: un même type de cadeau, ou un même aliment préféré, ne la rend plus affectueuse qu'une fois toutes les 300 secondes par compagne (`needs.giftCooldownSeconds`, 0 pour aucune limite). Entre-temps elle prend quand même le cadeau et mange la nourriture, et un désir est quand même réalisé, mais elle ne gagne ni affection ni amusement et n'offre rien en retour. Un cadeau qu'elle déteste compte toujours. Un cadeau qui ne rentre pas dans son inventaire tombe à ses pieds, et elle dit une seule réplique par objet reçu.
- **Délai entre deux câlins ou deux bisous**: un câlin ne la rend plus affectueuse qu'une fois toutes les 60 secondes par compagne, et un bisou de même (`needs.cuddleCooldownSeconds`, 0 pour aucune limite). Entre-temps elle rend quand même le câlin et le bisou, son besoin d'attention est quand même comblé, un désir de câlin ou de bisou est quand même réalisé et les progrès comptent toujours.
- **Conteneurs verrouillés et protégés**: pour rapporter des objets, pour ses métiers et quand elle cherche à manger, elle ne touche pas à un conteneur verrouillé par le `Lock` du jeu de base, sauf si elle ou son partenaire tient sa clé. Un conteneur que son partenaire ne lui a pas attribué n'est utilisé que si ce joueur est dans la même dimension et pourrait l'ouvrir lui-même : protection du spawn, bordure du monde, et zones des mods de protection. Un conteneur que le joueur ne pourrait pas ouvrir ne peut pas lui être attribué.
- **Garde-fous du travail**: avec `work.onlyNaturalTrees` la bûcheronne n'abat que les arbres qui reposent sur de la terre, sont faits d'une seule sorte de bûche et portent des feuilles naturelles au sommet, et laisse en place les bûches d'une construction qui touchent un arbre. La cuisinière ne sort que de la nourriture des fourneaux et des fumoirs. La bûcheronne et la fermière s'arrêtent aussitôt quand la règle de jeu `mobGriefing` est désactivée, même pour un métier donné auparavant ou une tâche en cours : l'arbre ou le champ est laissé tel quel. Un travail qui ne trouve rien à faire le dit une fois, puis réessaie de lui-même après une attente qui grandit à partir de 1 minute.
- **Limites pour les serveurs**: les skins et les modèles quittent le serveur à 640 Ko par seconde pour chaque joueur, et leurs demandes sont plafonnées. Un client n'accepte que les fichiers qu'il a demandés et ne garde que ceux dont le contenu correspond à l'empreinte annoncée. Un joueur envoie un fichier toutes les 3 secondes et demande une recherche de compte toutes les 5 secondes, une compagne change d'apparence une fois toutes les 2 secondes, et un joueur envoie au plus 20 actions de menu par seconde. Les fichiers envoyés portent l'UUID du joueur. Un modèle contient au plus 4096 cubes, 1024 os et 8 textures, chacune d'au plus 2048x2048 pixels, et les expressions Molang sont bornées en longueur et en profondeur. Voir [docs/SKINS.md](docs/SKINS.md) et [docs/MODELS.md](docs/MODELS.md).
- **Mod absent du serveur**: là où le loader laisse un client équipé du mod rejoindre un serveur qui ne l'a pas (Fabric), le client quitte le serveur après 5 secondes avec un message qui explique pourquoi. NeoForge et Forge refusent d'eux-mêmes une telle connexion.
- **Documentation**: dix guides bilingues dans `docs/` (configuration, commandes, actions, skins, modèles, langues, KubeJS, compatibilité, compilation, FAQ).

### Modifications

- **Réécriture complète**: la 2.0.0 est écrite à partir de zéro. Les entrées ci-dessous sont ce qui change pour les joueurs venant de la 1.x.
- **Vie**: 100 points de vie au lieu de 1000 (`general.maxHealth`), et plus de régénération gratuite (la 1.x soignait 1 point de vie par tick). Elle récupère 0,5 point de vie par seconde tant que sa faim est à 60 ou plus. Mettez `general.maxHealth` à 1000 et `general.regenPerSecond` à 20 pour retrouver les anciennes valeurs.
- **Suivi et téléportation**: elle ne se téléporte plus comme un animal apprivoisé du jeu de base. Elle marche vers son partenaire au-delà de 7 blocs, s'arrête à 3,5 blocs, et ne se téléporte qu'au-delà de 128 blocs (`follow.teleportDistance`, de 8 à 1024). Coincée pendant 10 secondes, elle le dit et ne se téléporte que si `follow.teleportWhenStuck` est activé. `/laura come` la fait marcher quand un chemin existe, et se téléporter quand il n'y en a pas, quand elle est au-delà de cette distance ou dans une autre dimension. En mode suivi elle rejoint son partenaire dans les autres dimensions et après toute téléportation lointaine, et elle arrive à un endroit sûr à côté de lui.
- **Téléportations sûres**: chaque téléportation la pose à un endroit sûr à côté de son partenaire : à la surface de l'eau quand il nage ou est en bateau, au sol sous lui quand il vole, et sans dégât de chute. Quand il n'y a aucun endroit sûr (le vide, la lave) elle reste où elle est : après un appel elle le dit, et tant qu'elle suit elle réessaie toutes les 2 secondes. Invoquée par un joueur qui vole, elle apparaît au sol. Au-dessus du vide ou de la lave rien n'est créé : le joueur lit « Il n'y a aucun endroit sûr pour elle ici. Pose-toi sur un sol solide et rappelle-la. » et le délai entre deux invocations n'est pas entamé. Il en va de même pour une compagne congédiée qui revient, un retour à la vie sur la tombe et une restauration depuis son état sauvegardé. Un retour différé attend et réessaie toutes les 5 secondes jusqu'à ce que son partenaire soit à un endroit sûr.
- **Portails et dimensions**: quand son partenaire change de dimension, les compagnes en mode suivi arrivent avec lui aussitôt, y compris une compagne qui boude ; celles qui dorment, restent sur place, sont à la maison, se promènent, travaillent ou cherchent un objet ne bougent pas. Elle peut aussi passer un portail d'elle-même : elle attend alors son partenaire environ 10 secondes de l'autre côté et revient près de lui s'il ne vient pas. Avec `follow.followAcrossDimensions` à false elle ne le suit pas là-bas et ne prend plus les portails. `/laura come`, `/laura home`, la touche d'appel et le Cœur de Laura fonctionnent d'une dimension à l'autre pour tous les joueurs, et ce qu'elle répond quand elle rentre à la maison ou ne peut pas venir lui parvient même hors de portée de voix.
- **Fin de la limite à une seule compagne**: la 1.x autorisait une seule Laura pour tout le monde. Chaque joueur peut maintenant avoir 3 compagnes et le monde n'a pas de limite par défaut. `general.maxPerWorld` à 1 rétablit l'ancienne règle.
- **Format de configuration**: la 1.x n'avait pas de fichier de réglages, chaque valeur était fixée dans le code. Les réglages sont maintenant dans des fichiers JSON de `config/lauramod/`.
- **Licence**: MIT au lieu de All Rights Reserved.
- **Clic droit**: la main vide ouvre son menu au lieu de la faire s'asseoir ou se lever (`controls.menuOnRightClick`). S'accroupir et faire un clic droit ouvre toujours son inventaire.
- **Chat**: dans la 1.x ses répliques étaient des messages privés à son partenaire, et elle écoutait dans un rayon d'environ 10 blocs. Elle parle maintenant dans le chat de proximité, entendue par tous les joueurs à moins de 64 blocs.
- **Commande de skin**: `/laura skin <url>` devient `/laura skin url <url> [slim]`. Seuls son partenaire et les opérateurs peuvent changer son apparence, sauf si `skins.othersCanChangeSkin` est activé, et le domaine doit figurer dans `skins.urlDomainWhitelist`.
- **Mort**: avec le mode `GRAVE` par défaut elle attend une fleur sur une tombe. Dans la 1.x la phrase du chat invoquait simplement une nouvelle Laura.
- **Inventaire**: 27 emplacements par défaut au lieu de 9, plus les emplacements d'armure, de mains et de dos.
- **Villageois**: ils ne s'éloignent que lorsqu'elle suit son partenaire de près, à moins de 5 blocs au lieu de 10, et pas quand ils dorment ou commercent (`personality.jealousOfVillagers`).
- **Mondes de la 1.x**: une compagne enregistrée par la 1.x est conservée. Son inventaire, son skin par URL et sa bouderie sont lus dans les anciennes données, et elle est rattachée à son partenaire quand elle est chargée.

### Correctifs

- **Correspondance partielle des mots dans le chat**: la 1.x cherchait ses déclencheurs n'importe où dans un message, si bien que l'espagnol « ven » la faisait suivre sur « seven » ou « souvent », et que le « no » de « know » comptait comme un refus à sa question d'amour. Les déclencheurs correspondent maintenant à des mots entiers (`dialogue/TextMatcher.java`), un `*` final est nécessaire pour correspondre au début d'un mot, et le déclencheur le plus long l'emporte. Les langues écrites sans espaces entre les mots (le chinois et le japonais parmi celles fournies) restent recherchées à l'intérieur du texte.
- **Mots d'une autre langue**: la 1.x testait les déclencheurs de toutes ses langues sur chaque message. Elle écoute maintenant dans la langue du joueur plus l'anglais.
- **Message d'invocation toujours en français**: « Laura est apparue ! » était envoyé tel quel au joueur qui l'invoquait, quelle que soit la langue de son jeu. La réplique d'invocation vient maintenant du fichier de dialogue de la langue du joueur.
- **Un diamant pour chaque coquelicot**: dans la 1.x chaque coquelicot offert lâchait un diamant. Les fleurs sont maintenant des cadeaux ordinaires de `gifts.json`.
- **Compagne perdue dans des chunks déchargés**: la 1.x ne pouvait ni localiser ni invoquer de nouveau une Laura restée dans des chunks déchargés. Le monde conserve maintenant une fiche et un état sauvegardé de chaque compagne : `/laura where` les liste, `/laura come` et le Cœur de Laura les rappellent, et une compagne introuvable est restaurée depuis son dernier état sauvegardé.
- **Nom toujours affiché « Laura »**: la 1.x ignorait les étiquettes de nom. Elle peut maintenant être renommée avec `/laura name`, le menu ou une étiquette de nom.
- **Inventaire perdu à la mort**: dans la 1.x les objets qu'elle portait disparaissaient à sa mort. Avec `GRAVE` et `TIMER` elle les garde, avec `NONE` elle les lâche.
- **Commande de skin ouverte à tous**: dans la 1.x n'importe quel joueur situé à moins de 10 blocs de Laura pouvait changer son skin, avec n'importe quelle adresse, et les clients le téléchargeaient sans limite de taille. Le serveur vérifie maintenant qui demande et quel domaine est utilisé. Les clients limitent la taille (`network.maxSkinDownloadKb`), suivent au plus 3 redirections et refusent les adresses du réseau local.
- **Préversions**: les entrées ci-dessous corrigent des problèmes trouvés dans les versions 2.0.0 testées avant cette publication. Elles ne concernent que les mondes et les serveurs qui ont utilisé ces versions.
- **Progrès du Nether et de l'End**: ils sont accordés dès qu'elle est à côté de son partenaire (16 blocs) dans le Nether ou l'End, quelle que soit la façon dont chacun y est arrivé : son portail à lui, un portail qu'elle a pris d'elle-même, `/laura come`, la touche d'appel, le Cœur de Laura ou une commande de téléportation. Elle commente l'endroit quand ils s'y retrouvent.
- **Progrès du bain**: il est accordé chaque fois que de l'eau la lave vraiment : 4 secondes d'affilée dans l'eau ou 20 secondes sous la pluie quand son hygiène est sous 100 %, ou un seau d'eau, et plus seulement quand elle va à l'eau d'elle-même.
- **Rappels et chunks forcés**: rappeler une compagne depuis des chunks déchargés utilise un ticket de chunk temporaire (5 chunks sur 5, 15 secondes au plus) qui n'est jamais sauvegardé, au lieu de forcer son chunk, et l'appeler deux fois ne lance qu'un seul rappel. Un rappel automatique qui ne la trouve pas ne crée plus de copie depuis son état sauvegardé : seul un appel de son partenaire la restaure. Un monde joué avec une préversion peut encore contenir des chunks forcés : listez-les avec `/forceload query` et libérez-les avec `/forceload remove`.
- **Compagne en double**: quand une compagne existe dans deux dimensions (un monde sauvegardé par une préversion), la copie chargée en dernier est retirée après 5 secondes, avec un avertissement dans le journal du serveur.
- **Position enregistrée**: la position affichée par `/laura where` est rafraîchie chaque seconde tant qu'elle est active, aussitôt après une téléportation ou un changement de dimension, et quand son chunk se décharge. Avec `GRAVE` et `TIMER`, son partenaire est prévenu de sa mort même depuis une autre dimension.
- **Objets d'une recherche interrompue**: ce qu'elle porte pour une recherche est sauvegardé avec elle et retourne dans son inventaire quand la recherche est interrompue par un chunk déchargé, sa mort, un renvoi ou un changement de dimension.
- **Cadeaux**: le message d'un cadeau qu'elle offre en retour nomme l'objet et la quantité qu'elle a vraiment donnés. Ce qu'elle donne et qui ne rentre pas dans l'inventaire du joueur tombe à ses pieds. Une étiquette sans nom peut être un cadeau ou un désir comme n'importe quel objet.
- **Sommeil, bâillon et lits**: un sommeil ordonné avec `/laura sleep` dure jusqu'à ce qu'elle soit reposée au lieu de s'arrêter à la prochaine vérification du jour. Avec `gag.durationSeconds` à 0 elle garde son bâillon après un rechargement. Une compagne congédiée, libérée ou restaurée ne garde plus un lit occupé.
- **Taille de l'inventaire**: quand `general.inventoryRows` est réduit, les objets qui ne rentrent plus tombent à ses pieds au lieu d'être supprimés.
- **Administration**: `/laura admin remove` supprime aussi les compagnes restées dans des chunks déchargés, dès qu'ils se chargent, et une compagne présente dans le monde laisse au sol ce qu'elle porte. Une valeur incorrecte dans un fichier de configuration n'empêche plus les autres fichiers de se charger, et un plat incorrect de `recipes.json` ne coûte que ce plat.
- **Refus aux autres joueurs**: un joueur qui n'a pas le droit de lui donner d'ordres reçoit son refus en message privé, au plus une fois toutes les 5 secondes, au lieu d'une réplique dite à tout le monde autour. Son état (maison, métiers, besoins) n'est envoyé qu'aux joueurs qui peuvent lui donner des ordres.
- **Sûreté des modèles et du réseau**: un fichier de modèle ou un paquet conçu pour casser l'analyseur (imbrication profonde, textures énormes, chaînes d'os sans fin) est refusé au lieu de planter ou de figer le jeu.
- **Intégrations**: avec Curios, ses bijoux restent sur elle quand elle meurt en mode `GRAVE` ou `TIMER` au lieu d'être aussi lâchés, et ils tombent au sol quand elle part pour de bon. Avec Farmer's Delight, les bols qu'une marmite ne prend pas retournent dans son inventaire. Avec KubeJS sur NeoForge 1.21.1, `event.cancel()` est accepté dans tous les écouteurs `LauraEvents`. Les fabricateurs ne sont plus pris pour des rangements sur Fabric.
- **Forge 1.21.1**: le mod déclare Forge 52.1.2 comme version minimale, la première sur laquelle il peut se charger.

### Performance

- **Personnalité sur un tick d'une seconde**: les besoins, l'humeur, les désirs et les réactions sont calculés une fois par seconde pour chaque compagne, avec un décalage aléatoire par compagne pour que plusieurs compagnes ne tournent pas toutes sur le même tick. Sa liste de tâches est vérifiée tous les 5 ticks.
- **Recherches espacées**: les recherches d'objets à ramasser, d'un jukebox en marche, d'eau pour un bain et de nourriture dans les rangements se font à intervalles au lieu de chaque tick, et un métier attend avant de parcourir de nouveau sa zone de travail quand il n'a rien trouvé à faire.
- **Détection du jukebox**: elle lit les entités de bloc des chunks chargés au lieu de parcourir les blocs, et son résultat est gardé 3 secondes par compagne.
- **Correspondance du chat**: les déclencheurs sont normalisés une seule fois au chargement des dialogues et gardés dans un index trié du plus précis au moins précis. À chaque recherche, un message est normalisé une fois et réécrit au plus une fois par langue.
- **Entretien du serveur à intervalles**: les rappels en attente sont traités tous les 10 ticks, les retours différés chaque seconde, les compagnes laissées en arrière toutes les 2 secondes. La fiche d'une compagne est rafraîchie chaque seconde et son état sauvegardé complet toutes les 5 minutes et quand son chunk se décharge.
- **Caches**: les résultats de fumage sont mis en cache par objet, les recherches de compte pour les skins par nom de joueur sont gardées une heure (cinq minutes pour un pseudo inconnu, 256 pseudos au plus), et les clients gardent les skins et les modèles téléchargés en mémoire (32 skins au plus) et dans `<dossier du jeu>/lauramod/cache`, où les fichiers inutilisés depuis 30 jours sont supprimés. Le serveur garde jusqu'à 32 Mo des fichiers de skins et de modèles déjà lus, si bien qu'une demande coûte au plus une lecture du disque par fichier, et enregistrer un envoi ne relance plus l'analyse des dossiers. Les nouvelles analyses des dossiers de skins et de modèles provoquées par un nom inconnu sont limitées à une toutes les 5 secondes.
- **Plus de thread par message**: la 1.x lançait un thread pour chaque réponse du chat et chaque téléchargement de skin. Le chat est maintenant traité au tick serveur suivant, et les téléchargements de skins partagent un seul thread d'arrière-plan.

This mod has no related projects