Aller au contenu principal

Journal des modifications

Notes de version des extensions BTC Studio publiques. Chaque version indique l'extension, son numéro de version et ce qui a changé pour les propriétaires de serveurs, de la plus récente à la plus ancienne, avec un lien vers la release et vers la documentation de l'extension.

Les extensions payantes renvoient uniquement vers leur documentation ; leurs téléchargements restent sur la boutique. Les extensions privées ne sont pas listées ici.

2026-10-16​

Dungeon v1.2​

Chaque changement est listé dans le journal des modifications de Dungeon. Rien ne change pour un donjon existant tant qu'il n'utilise pas l'un des nouveaux champs.

  • Requiert GUI (OmniGUI) 0.20 : le classement de Dungeon utilise la source de classement de GUI 0.20 et ne se charge pas avec un GUI plus ancien. Mettez d'abord GUI à jour.
  • Butin partagé : nouvelle entrée Dungeon Loot Table, utilisée par les coffres (lootTableRef) et par les mobs (lootTable). Un coffre la tire une fois à sa première ouverture, un mob à sa mort.
  • Plus de coffres : additionalLocations place plusieurs coffres depuis une seule entrée Dungeon Loot Chest (ignoré dans un donjon généré). Loot Chest Trigger reçoit particleEffect, avec des axes X, Y et Z séparés.
  • Vagues et adaptation : Dungeon Mob Spawn reçoit waves, maxSimultaneous, l'adaptation au nombre de joueurs (perExtraPlayer, maxCount, playerCountSource), spawnParticle et les déclencheurs onWaveCleared et onCleared. Nouvel événement On Dungeon Mobs Cleared, pour ouvrir une porte ou faire apparaître un coffre quand tous les mobs sont vaincus.
  • Restrictions : nouvelle entrée Dungeon Restrictions (élytre, bateau ou wagonnet, perle de l'Ender, fruit de chorus, impulsion du trident, commandes bloquées, message de refus, permission de contournement), avec gameMode, limitInteractions (interactions autorisées, entités protégées) et messageRepeatDelay. L'impulsion du trident et le fruit de chorus sont refusés dès le clic. Seule la permission de contournement exempte un joueur : un opérateur l'a tant que le nœud n'est pas à false.
  • Statistiques : 22 statistiques par joueur, comptées par artefact avec un total sur plusieurs artefacts : dégâts infligés et subis (seulement la vie réellement perdue), kills, vagues et salles nettoyées, temps joué, morts, records... statsMobScope choisit les mobs comptés. Une mort qui fait sortir le joueur de la run ne compte plus comme runs_left. Nouveau fact dungeon_stat ; placeholders dungeon_stat_<key>[_raw], dungeon_total_<key> et dungeon_inst_<id>_<key> ; snippets content.dungeon_stats.duration_format et content.dungeon_stats.missing_value.
  • Classement : nouvelle entrée dungeon_leaderboard_source (LIFETIME ou CURRENT_RUN, rankBy, values, durationFormat, decimals) à brancher sur le champ source d'un classement GUI.
  • Reconnexion : reconnectGrace (2 minutes par défaut). Un membre déconnecté garde sa place et reprend là où il était (sidebar, masquages, mode de jeu). Au-delà, il quitte la run et revient à son point d'entrée à la reconnexion.
  • MMOProfiles : le retour au point d'entrée et le mode de jeu d'origine sont réappliqués après le choix du profil.
  • Menus : les champs d'emplacement de Dungeon Category unlockedLore et lockedLore deviennent unlockLore et lockLore. Les anciennes pages se lisent toujours ; la nouvelle clé l'emporte si les deux sont présentes.
  • Rupture d'API pour les addons : DungeonArtifactData, DungeonStats et PlayerDungeonStats passent dans le package btcrenaud.dungeons.core, et DungeonArtifactEntry.getPlayerStats et update changent de signature. Un addon compilé contre Dungeon 1.1.x doit être recompilé.

Documentation

GUI v0.20​

  • Rendre le butin : dropOnClose sur un layout simple rend, à la fermeture du menu, ce que le joueur n'a pas pris ou ce qu'il y a posé. closeDelivery choisit GIVE_OR_DROP (par défaut : dans l'inventaire, le surplus aux pieds) ou DROP. Désactivé par défaut.
  • Objets aléatoires : rollPerSlot tire un objet aléatoire pour chaque emplacement répété au lieu d'un seul pour tous, et le nouveau liveItem le tire de nouveau à chaque rafraîchissement.
  • Nom vide ignoré : un objet dont le nom est vide garde son propre nom au lieu de s'afficher sans nom.
  • Lignes de classement d'une autre extension : nouveau champ source sur gui_leaderboard. Les lignes viennent d'une entrée source, pour tous les joueurs en ligne ou non, comme celle de Dungeon. Les textes de ligne acceptent {score}, {score_raw} et {value_<key>}. Les textes d'une source sont du texte brut : un nom qui ressemble à une balise MiniMessage, comme <red>, ne change plus l'ordre.

Release v0.20 · Documentation

MythicMobs v0.12​

  • Mobs visibles seulement par certains joueurs : spawn_mythicmobs_mob et mythic_spawner ont un nouveau champ visibilityCriteria. Le mob n'est visible, ciblable et blessable que pour les joueurs qui remplissent les criteria, réévalués en continu (visibilityRefreshInterval, 1 seconde par défaut). Un visibilityGroup est désormais suivi en direct au lieu d'être figé au spawn.
  • collidable (spawn_mythicmobs_mob, mythic_spawner, true par défaut) : false supprime collision et poussée pour tout le monde.
  • Abandon : spawn_mythicmobs_mob a de nouveaux champs abandonRange et abandonDelay. Le mob est retiré si aucun joueur autorisé ne reste à portée pendant le délai (abandonRange 0 = désactivé). L'éditeur web préremplit les nouvelles durées à 1 seconde : vérifiez abandonDelay.
  • despawn_mythicmobs_mob : nouveau champ scope, ALL (défaut, comme avant) ou VISIBLE_TO_PLAYER (seulement les mobs que le joueur voit).
  • Protection : tous les dégâts liés à un mob restreint (corps à corps, projectiles, skills MythicMobs, feu) sont bloqués envers les joueurs non autorisés, et inversement. Les projectiles traversent, et le mob lâche une cible non autorisée.
  • Condition MythicMobs typewritervisible (alias twvisible) : ajoutez-la aux skills sans dégâts (potion, projection...), dans le targeter (conditions=[ - twvisible true ]) ou en TargetCondition, pour qu'ils ignorent les joueurs qui ne voient pas le mob. L'extension exécute /mm reload une fois au démarrage quand vos fichiers MythicMobs l'utilisent.
  • Un mob dont l'entrée source est supprimée reste masqué à tous.
  • Limites : la collision est tout ou rien ; les skills sans dégâts ne sont pas filtrés sans twvisible ; les sons et particules joués loin du mob ne sont pas masqués.

Release v0.12 · Documentation

Shops v1.12​

  • Recompilée contre GUI 0.20, qu'elle requiert désormais : la version précédente n'ouvre plus ses menus avec GUI 0.20. Rien d'autre ne change.

Release v1.12 · Documentation

Quest Codex v2.16​

  • Recompilée contre GUI 0.20, qu'elle requiert désormais : la version précédente n'ouvre plus ses menus avec GUI 0.20. Rien d'autre ne change.

Release v2.16 · Documentation

Corpse v0.7​

  • Recompilée contre GUI 0.20, qu'elle requiert désormais : la version précédente n'ouvre plus ses menus avec GUI 0.20. Rien d'autre ne change.

Release v0.7 · Documentation

Numerical Storage v0.15​

  • Recompilée contre GUI 0.20, qu'elle requiert désormais : la version précédente n'ouvre plus ses menus avec GUI 0.20. Rien d'autre ne change.

Release v0.15 · Documentation

2026-10-12​

Dungeon v1.1.1​

  • Paper 26.x, WORLD_PER_RUN : une partie pouvait échouer avec The server did not create world 'dungeon_classic_...'. La copie du modèle gardait l'ID de monde du modèle (data/paper/metadata.dat), si bien que le serveur la refusait comme doublon. La copie reçoit désormais son propre ID.

Documentation · Changelog de Dungeon

2026-10-08​

Dungeon v1.1​

Une refonte complète autour des runs : mondes isolés, donjons générés, NPC par run et mobs vanilla. Lisez la note de migration avant de mettre à jour depuis la 0.10 ; chaque changement est listé dans le journal des modifications de Dungeon.

  • Runs : chaque run a son propre état et son propre journal. Le démarrage d'un run est tout ou rien, et le coût d'entrée est remboursé en cas d'échec. /tw reload et Publish reprennent les runs en cours au lieu de les terminer.
  • Isolation : trois modes par donjon (SLIME_CLONE, WORLD_PER_RUN, SHARED_WORLD_SLOTS) ou AUTO.
  • Donjons générés : modèles de salles, connecteurs, pools, générateurs et affixes, avec un éditeur en jeu pour les portes et les marqueurs.
  • NPC et mobs : NPC par run issus de n'importe quelle définition d'entité, visibles uniquement par les membres du run ; mobs de combat vanilla générés une fois par run, avec un plafond de mobs vivants.
  • Textes : chaque texte joueur est un snippet modifiable. Paper uniquement.
  • Réponses des commandes : chaque réponse des commandes /tw dungeon, commandes d'administration comprises, est un snippet modifiable (content.dungeon_command.).
  • Statistiques : rangées par profil MMOProfiles quand ce plugin est installé, sinon par joueur.
  • Mondes Paper 26.x : les mondes rangés à la manière de Paper 26.x (dimensions/minecraft/<nom>) sont trouvés pour SHARED_WORLD_SLOTS et copiés pour WORLD_PER_RUN.

Documentation

MythicMobs NPC v5.0​

  • NPC dans les donjons : avec ticking désactivé, un NPC placé par Dungeon 1.0 n'est visible que par les membres de son run, et un clic donne une interaction au bon joueur.
  • Bone Visibility Data et Attachment Data sont désormais appliqués au modèle du NPC, avec ticking activé ou non, et de nouveau après chaque réapparition.
  • Play Animation : force arrête désormais les autres animations lancées par l'action sur ce NPC ; une speed inférieure ou égale à 0 joue à vitesse normale.
  • MythicMob Skill Objective : skillName fonctionne désormais via la mécanique MythicMobs typewriterSkill{name=..} (alias twskill), ajoutée à la compétence puis suivie d'un /mm reload. La progression est stockée dans fact, et la progression précédente est migrée automatiquement. La mécanique survit à une publication depuis l'éditeur web ; après un arrêt et un démarrage complets de Typewriter, la console demande /mm reload.
  • Objectif de loot : les noms d'objet et de mob du loot sont lisibles avec leurs couleurs (c'était du texte technique auparavant), et la marque de fin ✔ est la même que dans les autres extensions d'objectifs.

Documentation

MMOItems v2.4​

  • Advanced Tooltip Config : overrideDefaultLore est désormais lu. Lorsqu'il est désactivé, que le système est désactivé ou que l'entrée est absente, tout le lore MMOItems s'affiche sur une seule page, sans pagination ni comparaison.
  • Balises du lore : les balises du format de lore MMOItems (<page_break>, <category_image>, <pagination_indicator>, <comparison_indicator>, <requirement_met>, <requirement_not_met>, <total_pages>, <current_page>, <comparison_value>, <comparison_sign>) sont désormais toujours remplacées ou retirées : le joueur ne les voit plus en texte brut.
  • Mode créatif : la pagination et le lore avancé ne s'appliquent qu'en survie et en aventure. En créatif, le lore MMOItems est laissé intact (balises comprises), car le client créatif renvoie les objets tels qu'il les affiche et réécrire le lore altérerait l'objet réel.
  • Les champs de l'entrée démarrent avec des valeurs fonctionnelles quand l'entrée est créée dans l'éditeur web (isEnabled, overrideDefaultLore et enableComparisonTags activés, paginationKeybind SWAP_OFFHAND, comparisonKeybind SNEAK, statsStartOnPage 2, symboles et indicateurs par défaut).

Documentation

Shops v1.11​

  • perPlayer donne désormais à chaque joueur son propre stock de chaque objet ; une réinitialisation recharge celui de tout le monde. Les limites gardent leur propre portée.
  • defaultRefreshTicks et le refreshTicks de l'objet redessinent une boutique ouverte lorsque le stock affiché change (stocks finis uniquement ; 0 sur la boutique signifie aucune vérification automatique).
  • Le guiSlot de l'objet épingle un objet à un emplacement fixe de la zone de contenu sur chaque page ; un objet qui ne peut pas être placé est déplacé vers une case libre ou signalé dans la console.
  • sellAllEnabled désactivé refuse désormais l'action de vente globale avec cannotSellMessage.
  • Les réponses des commandes, les icônes de tendance, le lore Limited/Unlimited, les lignes de prix, les noms par défaut, le texte sans prix et le format de durée sont désormais modifiables ; le jour du cooldown par défaut s'écrit d (avant j).

Release v1.11 · Documentation

GUI v0.19​

  • audioDefaults de gui_settings s'applique désormais comme valeur de repli : un son laissé vide sur une action Open GUI est repris depuis celui-ci, son par son.
  • Les agencements défilants reçoivent des flèches par défaut tant que showDefaultButtons est activé (valeur par défaut) : une par direction sans entrée buttons, affichée uniquement lorsque le contenu peut défiler dans ce sens, et jamais sur une case occupée. Les menus défilants existants gagnent des flèches ; passez showDefaultButtons à false pour les conserver comme avant.
  • Nouveau champ defaultStep sur les agencements défilants et nouvelle liste scrollArrows dans gui_settings (direction, item, name, x, y) pour modifier les flèches par défaut.
  • Nouveau texts dans gui_settings : les boutons Confirm et Cancel et la ligne de progression du stockage sont modifiables. « Confirmer » devient « Confirm ». Le séparateur du fil d'Ariane, qui s'affichait corrompu, est réparé.

Release v0.19 · Documentation

Quest Codex v2.15​

  • La permission typewriter.codex.open est désormais déclarée par l'extension, réservée aux opérateurs par défaut, ce qui la fait apparaître dans les plugins de permissions tels que LuckPerms.
  • Les libellés de navigation, les libellés de tri, les titres de menu par défaut et le message de catégorie inconnue sont modifiables (navLabels, sortTexts, mainMenuTitle, trackedQuestsTitle, unknownCategoryMessage).

Release v2.15 · Documentation

Vote System v0.9​

  • Vote Config est désormais lu : cooldownSeconds supérieur à 0 permet à un joueur de voter à nouveau après ce nombre de secondes (les compteurs sont cumulatifs), et debug journalise les votes acceptés et refusés.
  • Les votes enregistrés avant l'existence du délai sont datés du premier contact après la mise à jour, leur délai commence donc à ce moment-là.
  • Les réponses des commandes /tw vote sont des snippets modifiables (content.vote.).
  • Couleurs MiniMessage : le message de fermeture, le nouveau blockedMessage et les deux textes de Vote Message sont désormais lus en MiniMessage, placeholders résolus (les balises s'affichaient telles quelles). Les réponses de commande par défaut sont colorées.
  • Un vote refusé est vraiment refusé : les triggers et modifiers de Vote Action ne s'exécutent que si le vote est enregistré ; un refus n'affiche plus le message d'acceptation et rien ne se déclenche deux fois. Un refus affiche le closedMessage (après la date de fin) ou le nouveau blockedMessage (avant la fin du délai) et déclenche les nouveaux refusedTriggers. Chaque refus est journalisé quand debug est activé.
  • Nouveaux placeholders vote_has_voted_<id> et vote_closed_<id> (1 ou 0), et vote_remaining_<id> (secondes avant la date de fin, 0 sans date).

Release v0.9 · Documentation

Discord v0.13​

  • Les triggers d'un Webhook Fact Event s'exécutent désormais après la publication d'un webhook, pour le joueur dont le changement de fact a été publié.
  • Nouveau triggerCooldownSeconds (par défaut 1) sur Webhook Fact Event : une protection anti-boucle entre deux déclenchements de triggers pour le même joueur ; 0 la désactive.

Release v0.13 · Documentation

Custom Biome v0.9​

  • Explore Biome Objective fonctionne désormais : biomes et requireAll sont lus lorsqu'un joueur entre dans un biome, et le nouveau champ triggers exécute des entries lorsque l'objectif est terminé et actif. L'objectif enregistre lui-même la découverte ; aucun Enter Biome Event n'est nécessaire.
  • Les réponses des commandes /tw biome et le texte unknown des placeholders de biome sont des snippets modifiables (content.custombiome.).
  • Paper 26.3 : les biomes personnalisés s'enregistrent de nouveau ; sur 26.3 ils ne se chargeaient pas (injection à chaud et repli par datapack).

Release v0.9 · Documentation

Numerical Storage v0.14​

  • optionalButtons du menu et de chaque sous-menu sont désormais dessinés : des items d'affichage seul placés à leurs slots, qui remplacent tout ce que l'agencement met dans le même emplacement.
  • profileMode utilise désormais MMOProfiles : un solde par profil MMOProfiles. Sans MMOProfiles, c'est le solde du joueur. Avec MMOProfiles et aucun profil actif (sélection de profil, ou après /mmoprofiles quit), le solde affiché vaut 0 et les écritures sont refusées : les commandes admin et les actions de menu répondent par le noActiveProfileMessage modifiable (dans adminMessages) et n'écrivent rien. L'intérêt d'un profil est réglé à sa sélection.
  • Les réponses des commandes d'administration sont modifiables (adminMessages) ; les textes des placeholders et le format de durée sont des snippets (numericalstorage.placeholder., numericalstorage.duration.).
  • Les placeholders chargent le stockage à la connexion : ils affichent le solde enregistré au lieu d'un solde vide tant que le cache est froid.
  • Les placeholders et le bouton d'amélioration de niveau suivent désormais profileMode ; /tw ns add/remove répondent à un montant invalide ou à un artefact manquant par des messages modifiables.

Release v0.14 · Documentation

Puzzle v0.6​

  • isShared partage désormais la progression d'un groupe (le groupe du fact du puzzle) : la première résolution compte pour le groupe, le fact est levé une fois, et chaque membre reçoit une seule fois le message de complétion, onComplete et l'étape de chaîne (un membre absent les reçoit à son retour).
  • Un joueur obtient la complétion d'un puzzle au plus une fois, même en changeant de groupe, jusqu'à une réinitialisation par un admin qui le concerne. /typewriter puzzle admin reset <player> <id> rouvre un puzzle partagé pour tout le groupe.
  • Un Puzzle Artifact est désormais requis pour les puzzles partagés : sans lui, un redémarrage verse à nouveau la complétion, et le retour à une ancienne build perd l'enregistrement partagé.
  • Les textes joueur et les réponses des commandes sont modifiables : les messages de chaque énigme et du Puzzle Menu sont des champs d'entrée, et les réponses de /tw puzzle sont des snippets (content.puzzle.). Les textes qui étaient en français par défaut sont désormais en anglais ; une page qui a stocké le texte français le garde.
  • Corrigé, blocs côté client : un bloc dessiné ne disparaît plus quand son clic est annulé. Le plateau est redessiné un tick après chaque clic annulé (les miroirs du Laser Grid disparaissaient au clic droit au lieu de tourner, les blocs du Block Push disparaissaient quand une poussée était refusée, et de même pour les clics de Memory, Pattern, Item Frame et Pedestal).
  • Corrigé, Block Push : un bloc repoussé sur sa case de départ ne rebondit plus et ne disparaît plus, et un trou cible est redessiné une fois qu'un bloc a été poussé dessus puis au-delà. Une poussée refusée compte une erreur par bloc et par case cible, et non plus une par clic : maintenir le clic contre un mur ne consomme pas maxAttempts. Laissez les cases de départ vides (air) dans le monde. allowPull n'a toujours aucun effet (non implémenté).
  • Corrigé, Lever Order : les leviers qui reposent allumés reviennent à leur position d'origine après un mauvais ordre, et leur bascule est visible. Un clic pendant le délai d'échec n'atteint plus un vrai levier.
  • Corrigé, puzzles résolus : un Block Push, Combination Lock, Lever Order ou Laser Grid résolu est inerte (pas de plateau, pas d'interaction annulée) et n'avale plus les clics de ses leviers et boutons quand le joueur revient dans son audience. Un Pedestal résolu n'avale plus la récupération de son objet.
  • Laser Grid : le rayon est désormais dessiné au centre des blocs et tourne exactement sur chaque miroir (il était décalé). beamDensity est un nombre de particules par bloc, et les sommets sont toujours dessinés.
  • Laser Grid, maxBeamLength : nouveau champ, 64 blocs par défaut (0 ou moins vaut 64, jamais illimité). Un plateau dont le rayon est plus long doit l'augmenter. Le rayon ne charge jamais de chunk : il s'arrête au bord du monde chargé.
  • Combination Lock : les chiffres sont numérotés depuis 0 (la première position listée est le chiffre 0) ; l'aide l'indique avec un exemple. Une valeur de code hors des chiffres écrit désormais un avertissement dans la console au lieu d'ignorer silencieusement toutes les pressions.

Release v0.6 · Documentation

Corpse v0.6​

  • Filtre de mondes : allowedWorlds et excludedWorlds sur corpse_settings choisissent les mondes où une mort laisse un cadavre. Une liste d'autorisés vide = tous les mondes. Les jokers * et ? (dungeon_*), les noms de monde et les clés de dimension (minecraft:the_nether) sont compris, et une exclusion l'emporte toujours. Hors des mondes autorisés, la mort est vanilla.
  • filteredWorldDeath : dans un monde que le filtre refuse, VANILLA_DEATH_SCREEN (défaut) garde la mort Minecraft ordinaire, dont le corps et l'écran de mort sont dessinés par le client, et INSTANT_RESPAWN fait réapparaître le joueur au tick suivant, sans écran de mort. Les objets et l'expérience tombent comme en vanilla. Sans effet quand les deux listes sont vides.
  • Chaque texte est modifiable : messages, libellés et matériaux du menu, format du waypoint et ses huit flèches de direction, réponses de /corpses, nom par défaut du cadavre et texte de l'objectif de récupération. Le nom d'un joueur est échappé et ne devient jamais une balise cliquable.
  • Nouveaux réglages interactionReach (6 blocs ; le serveur ne vérifiait pas la distance d'un clic), interactionCooldownMillis et unknownWorldLabel. Une définition peut aussi être choisie avec la clé de dimension, et l'en-tête de /corpses list est modifiable. /corpses list et clear s'appliquent à tout le serveur. Nouveau outOfReachMessage facultatif (vide par défaut : aucun message).
  • Contrôle des pertes et duplications d'objets : les morts, le pillage et le stockage ont été passés en revue ; les correctifs ci-dessous ferment tous les chemins de perte ou de duplication trouvés.
  • Corrigé, morts : une mort annulée par un autre plugin (totem, réanimation) ne prend plus l'équipement du joueur ; keepInventory et keepLevel sont respectés (pas de cadavre avec keepInventory), et les objets que d'autres plugins gardent pour le joueur ne sont plus dupliqués dans le cadavre. Si le cadavre ne peut pas être créé, les objets tombent normalement.
  • Corrigé, pillage : prendre un objet avec l'inventaire plein ne duplique plus la part qui avait tenu, et deux clics en course pour le même cadavre ne peuvent plus distribuer son contenu deux fois.
  • Corrigé, stockage : un redémarrage ne ramène plus les objets déjà pris, et un fichier de stockage illisible ou à moitié écrit n'efface plus les cadavres stockés. Les cadavres restaurés gardent leur pose, leur lueur, leur nom et leur animation (pas la peau ni l'armure du propriétaire).
  • Le message de réapparition, le waypoint et l'objectif utilisent le dernier cadavre, et le menu de pillage prévient avant de s'ouvrir au lieu d'après le premier clic.

Release v0.6 · Documentation

MythicMobs v0.11​

  • mythic_spawner.group est désormais lu : seuls les membres du groupe activent le spawner, criteria est vérifié sur ce groupe, et chaque groupe a son propre échauffement et son propre délai de récupération ; l'état d'un groupe est supprimé lorsqu'aucun membre n'est en ligne.
  • La ligne du MythicMob Kill Objective dans le suivi de quêtes est modifiable avec les snippets advancedQuest.display et advancedQuest.completed.

Release v0.11 · Documentation

Enchantment Creator v0.11​

  • Agricultural Harvest lit désormais l'événement de destruction de bloc et récolte les cultures mûres autour du bloc cassé (radius plafonné à 8) au lieu du bloc que le joueur regarde.
  • Agricultural Harvest : nouveaux champs particle, particleCount, sound, soundVolume et soundPitch.
  • Ce qu'un joueur tape dans /enchantcreator give (le nom de l'enchantement) est affiché tel quel dans les réponses, sans jamais être interprété comme du formatage.

Release v0.11 · Documentation

TextDisplayDialogue v2.4​

  • Textes modifiables : les 15 snippets sont désormais lus. Les mises en page, noms d'interlocuteur, lignes de texte, indications, lignes d'options et préfixes d'options des dialogues Spoken, Option et Player option et des sous-titres de cinématique se modifient dans plugins/Typewriter/snippets ; les valeurs par défaut reproduisent l'affichage précédent.
  • Placeholder du minuteur : %typewriter_textdisplaydialogue_timer% est désormais enregistré dans PlaceholderAPI et fonctionne en dehors des dialogues (0 quand aucun minuteur n'est actif).
  • Deux messages de plus modifiables : textdisplay.inventory.blocked (inventaire bloqué pendant un dialogue) et textdisplay.error.init (l'affichage n'a pas pu démarrer) ; un snippet vide masque le message. La cause d'une erreur d'initialisation va désormais uniquement dans le journal du serveur : aucun détail d'exception n'est montré au joueur. Le dialogue Player option lit aussi textdisplay.speaker.format et les snippets textdisplay.option.* (affichage par défaut identique).
  • audioProfile retiré de textdisplay_spoken : le champ n'était jamais lu.
  • Paper uniquement : Folia n'est pas pris en charge.

Documentation

Retiré de la documentation​

  • BTC Nameplates : fusionné dans UiCore (mêmes entries, /nameplates) ; les anciennes pages redirigent vers UiCore.
  • MMO Profile : abandonné, jamais publié ; ses pages sont supprimées.

2026-10-02​

MythicMobs NPC v4.9.1​

Correctifs pour les interactions, les animations et les cinématiques sur Paper 26.x.

  • Clics : le clic droit fonctionne de nouveau sur Paper 26.x, et LEFT_CLICK et ALL se déclenchent désormais aussi. Un clic déclenche le dialogue une seule fois, jamais deux, et /tw reload ne casse plus les clics avec une NoClassDefFoundError.
  • Play Animation : une action dont la vitesse était laissée vide jouait figée sur sa première image ; elle joue désormais à vitesse normale. Elle fonctionne aussi sur les NPC dont ticking est désactivé, joue par-dessus les animations d'inactivité, de marche et de compétence MythicMobs, et attend le modèle lorsqu'il n'est pas encore chargé.
  • Cinématiques dans un autre monde : le NPC d'une cinématique d'entité restait dans le monde précédent du joueur, et n'apparaissait donc qu'après plusieurs lancements. Il apparaît désormais dès le premier lancement, avec son animation.
  • Déplacement en cinématique : marche plus fluide, plus d'alternance inactivité/marche, et plus de scintillement ModelEngine à courte distance.
  • Nettoyage : les porteurs de NPC invisibles ne s'accumulent plus dans le monde après les cinématiques.

Documentation

CraftEngine v1.1​

  • Audience de la zone de quête : dispose() vide toujours son état et réinitialise l'indicateur de libération, de sorte qu'un /tw reload ne laisse plus fuir un écouteur retenant l'ancien classloader de l'extension.

Documentation

2026-09-19​

GUI v0.18​

  • L'avertissement de chevauchement d'emplacements nomme désormais gap et rappelle qu'il s'agit d'un pas, et non d'un espacement : gap: 1 signifie des emplacements adjacents, et non un emplacement vide entre chaque copie. Une copie répétée qui entre en collision avec une décoration placée entre deux de ses copies est la cause la plus courante de cet avertissement.
  • Les menus écrits selon l'ancienne formule de Quest Codex antérieure à la 0.3.0, où le pas appliqué était gap + 1, tombent exactement ici (voir Quest Codex v2.14).

Release v0.18 · Documentation

Quest Codex v2.14​

  • Documentation d'un changement incompatible introduit dans Quest Codex 0.3.0 et jamais annoncé. Jusque-là, les marqueurs du codex utilisaient leur propre formule de répétition où gap était un espacement (pas gap + 1). Depuis la 0.3.0, ils utilisent la formule du moteur GUI où gap est un pas : count: 3, direction: right, gap: 1 à partir de x=2 donne désormais x=2, 3, 4 au lieu de 2, 4, 6.
  • Un menu écrit avant la 0.3.0 place donc ses marqueurs à un emplacement d'écart et peut entrer en collision avec la décoration placée entre eux. Pour retrouver l'ancien espacement, doublez le pas : gap: 1 devient gap: 2. La sémantique du pas est conservée.
  • Les marqueurs indexés réinitialisent désormais gap en même temps que count et repeatY, de sorte que la validation des menus ne signale plus de répétition orpheline sur eux.
  • Compilée avec GUI v0.18.

Release v2.14 · Documentation

2026-09-14​

GUI v0.17​

  • Un gap de 0 n'empile plus toutes les copies répétées sur la cellule d'origine. L'éditeur web sérialise un gap non modifié sous la forme 0 : un QUEST_SLOT avec count: 7 et direction: right produisait sept marqueurs à la même position et un avertissement « Slot overlap » que vous n'aviez jamais écrit. gap est désormais forcé à au moins 1, comme count et repeatY.
  • Le correctif se trouve dans le code de répétition d'emplacements partagé : Quest Codex et Shops en bénéficient donc sans recompilation.

Release v0.17 · Documentation

Shops v1.10​

  • Troc : prix payés en objets. Le nouveau priceMode: ITEMS vend un article contre un ou plusieurs objets au lieu d'une monnaie. itemPrice sur l'objet liste le coût (objet plus quantité par unité achetée) ; defaultItemPrice sur la boutique couvre tous les articles ITEMS qui n'en déclarent aucun. La liste de l'article remplace celle de la boutique, elle ne s'y ajoute jamais.
  • Un article ITEMS sans prix nulle part est refusé et consigné, jamais donné. Le paiement est simulé sur tout l'inventaire avant que quoi que ce soit ne soit retiré, et la place pour l'objet acheté est vérifiée en premier, car un troc n'a pas de remboursement.
  • Nouveau cannotAffordItemsMessage (jetons {missing}, {amount}) et jeton de lore {item_price}, une ligne par objet demandé. Les lignes {buy} et {sell} sont supprimées sur un tel article, et les placeholders buy_price / sell_price affichent un tiret.
  • « Buy max » fonctionne sur les articles de troc. Un article ITEMS ne peut pas être revendu contre une monnaie : son prix de vente est nul.
  • Recompilée avec GUI v0.17.

Release v1.10 · Documentation

2026-09-09​

Puzzle v0.5​

  • Correction : NoClassDefFoundError sur PuzzleRenderers après un rechargement de l'extension. L'extension enregistrait deux écouteurs Bukkit sur le plugin du moteur sans jamais les retirer ; les anciennes instances continuaient donc de s'exécuter sur un classloader fermé. Les deux sont désormais désenregistrés à l'arrêt de l'extension, ce qui évite aussi qu'une copie supplémentaire ne s'accumule à chaque rechargement.
  • Un rafraîchissement visuel déjà planifié au moment de l'arrêt de l'extension ne peut plus déclencher un chargement de classe sur le loader mort.

Release v0.5 · Documentation

2026-09-08​

Shops v1.9​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Aucun changement de comportement.
  • Compilée avec GUI v0.16.

Release v1.9 · Documentation

Discord v0.12​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Aucun changement de comportement.

Release v0.12 · Documentation

Companion v0.10​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Aucun changement de comportement.

Release v0.10 · Documentation

Corpse v0.5​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Aucun changement de comportement.

Release v0.5 · Documentation

Custom Biome v0.8​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Aucun changement de comportement.

Release v0.8 · Documentation

InputTracker v0.5​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Aucun changement de comportement.

Release v0.5 · Documentation

Numerical Storage v0.13​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Aucun changement de comportement.

Release v0.13 · Documentation

Puzzle v0.4​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Aucun changement de comportement.

Release v0.4 · Documentation

Vanilla v1.4​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Les textes de progression des objectifs (objectifs de récolte, de comptage et de vérification de fact) sont désormais analysés avec le joueur, de sorte que les placeholders qu'ils contiennent sont résolus pour ce joueur.

Release v1.4 · Documentation

Vote System v0.8​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Aucun changement de comportement.

Release v0.8 · Documentation

Enchantment Creator v0.10​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Les actions de mécanique sont désormais planifiées via le dispatcher synchrone propre à Typewriter plutôt que via l'utilitaire de planification privé de l'extension.

Release v0.10 · Documentation

MMO Inventory v0.7​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Aucun changement de comportement.

Release v0.7 · Documentation

MythicMobs v0.10​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Aucun changement de comportement.

Release v0.10 · Documentation

GUI v0.16​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Correction des lignes de classement qui décrivaient le spectateur : une ligne pour un joueur classé résout désormais ses Var d'objet, de nom et de lore par rapport à ce joueur plutôt qu'à celui qui a ouvert le menu, de sorte que chaque ligne n'affiche plus les valeurs du spectateur. Les lignes de monde, de groupe et de joueur hors ligne se rabattent sur le spectateur.

Release v0.16 · Documentation

Quest Codex v2.13​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Aucun changement de comportement.
  • Compilée avec GUI v0.16.

Release v2.13 · Documentation

Tracking v0.11​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-177.
  • Aucun changement de comportement.

Release v0.11 · Documentation

2026-09-06​

Shops v1.8​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Aucun changement de comportement.
  • Compilée avec GUI v0.15.

Release v1.8 · Documentation

Discord v0.11​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Aucun changement de comportement.

Release v0.11 · Documentation

Companion v0.9​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Aucun changement de comportement.

Release v0.9 · Documentation

Corpse v0.4​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • La nameplate du cadavre utilise désormais la CustomNameProperty du moteur.
  • Compilée avec GUI v0.15.

Release v0.4 · Documentation

Custom Biome v0.7​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Aucun changement de comportement.

Release v0.7 · Documentation

InputTracker v0.4​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Aucun changement de comportement.

Release v0.4 · Documentation

Numerical Storage v0.12​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Aucun changement de comportement.

Release v0.12 · Documentation

Puzzle v0.3​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Aucun changement de comportement.

Release v0.3 · Documentation

Vanilla v1.3​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Les activités d'entité (détection de visibilité, suivi, orbite, évitement, ouïe, odorat, patrouille et similaires) sont portées vers le cycle de vie des activités du moteur 0.9. Les noms d'entrées sont inchangés.

Release v1.3 · Documentation

Vote System v0.7​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Changement incompatible : champ vote_action renommé. option est remplacé par optionIndex, un simple nombre commençant à 0. Resélectionnez l'option sur chaque vote_action existant.
  • Changement incompatible : champ vote_message scindé. message est remplacé par notVotedMessage et alreadyVotedMessage ; laissez le second vide pour n'envoyer aucun message aux joueurs qui ont déjà voté.
  • vote_data définit désormais artifactId à vote_storage par défaut : définissez un nom fixe pour conserver les bulletins entre les rechargements.
  • De nouvelles entrées vote_config (avec debug et cooldownSeconds), vote_fact et vote_cast_event apparaissent dans l'éditeur.

Release v0.7 · Documentation

Dialog Menu v0.7​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Aucun changement de comportement.

Release v0.7 · Documentation

Enchantment Creator v0.9​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Aucun changement de comportement.

Release v0.9 · Documentation

MMO Inventory v0.6​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Aucun changement de comportement.

Release v0.6 · Documentation

MythicMobs v0.9​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Aucun changement de comportement.

Release v0.9 · Documentation

GUI v0.15​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Aucun changement de comportement.

Release v0.15 · Documentation

Quest Codex v2.12​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Aucun changement de comportement.
  • Compilée avec GUI v0.15.

Release v2.12 · Documentation

Protection v1.3​

  • Obsolète : ceci est la dernière version de Protection. Le système de régions natif de Typewriter est le remplaçant pour les nouveaux déploiements.
  • L'extension est conservée pour les serveurs existants et ne recevra plus de nouvelles fonctionnalités.
  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.

Release v1.3 · Documentation

Tracking v0.10​

  • Recompilée avec le moteur Typewriter 0.9.0-beta-176.
  • Aucun changement de comportement.

Release v0.10 · Documentation

2026-08-29​

GUI v0.14​

  • Classements de facts. La nouvelle définition gui_leaderboard classe des joueurs, des mondes ou des groupes Typewriter sur une ou plusieurs valeurs de fact, rendue par le nouveau layout leaderboard dans n'importe quel pool open_gui. Les lignes acceptent {rank}, {name}, {score}, {group}, {world} et {score_<fact_id>}.
  • Le nouvel artifact gui_leaderboard_population conserve les dernières valeurs connues des joueurs hors ligne, de sorte qu'un classement ne se limite plus aux joueurs connectés.
  • Le nouveau dropOnClose sur les emplacements de stockage fait tomber le contenu restant aux pieds du joueur à la fermeture, avec Échap et à la déconnexion.
  • Correction des emplacements de stockage temporary qui n'étaient jamais vidés, et du Maj + clic droit sur un objet de curseur correspondant qui prélevait au lieu de déposer.
  • Un viewPermission / clickPermission vide n'est plus traité comme une permission : les restrictions non définies enregistrées par l'éditeur web masquaient auparavant l'emplacement ou l'onglet à tout non-opérateur.
  • La validation au démarrage connaît désormais le layout leaderboard et signale une zone de rang située en dehors de l'inventaire.

Release v0.14 · Documentation

Quest Codex v2.11​

  • Recompilée avec GUI v0.14.

Release v2.11 · Documentation

Shops v1.7​

  • Recompilée avec GUI v0.14.

Release v1.7 · Documentation

Corpse v0.3​

  • Recompilée avec GUI v0.14.

Release v0.3 · Documentation

Numerical Storage v0.11​

  • Recompilée avec GUI v0.14.

Release v0.11 · Documentation

2026-08-24​

Shops v1.6​

  • Nouvelle arborescence de commandes d'opérateur /tw shop admin : liste des boutiques, inspection des définitions, contrôle des sessions de joueurs, réinitialisation à l'exécution, gestion directe du stock des objets et historique des transactions.
  • Nouvelle permission typewriter.shop.admin (opérateurs uniquement). typewriter.shop.open reste disponible pour les joueurs par défaut.
  • Une réinitialisation manuelle partage le comportement de la réinitialisation automatique et recalcule la prochaine réinitialisation planifiée.
  • Correction de l'enregistrement de la permission de la commande publique afin que les non-opérateurs puissent ouvrir les boutiques.

Release v1.6 · Documentation

2026-08-16​

Discord v0.10​

  • Webhooks de facts. Le nouveau webhook_fact_event publie un changement de fact vers n'importe quelle destination webhook_definition, pour les portées joueur, groupe Typewriter et globale, avec audiences facultatives, conditions de valeur, modèles de message et d'embed, fils de forum et mentions de rôle. Les portées de groupe et globale dédoublonnent les rappels des joueurs qui observent le même fact.
  • Le lien Discord est entièrement facultatif : sans discord_link_manifest, l'extension n'initialise plus les ponts Discord ni ne résout les classes JDA.
  • Un JDA désactivé ou incomplet est signalé par le client au lieu de lever un NoClassDefFoundError sur le thread du serveur.
  • La version publique embarque désormais JDA 6.5.0 et ses dépendances d'exécution.

Release v0.10 · Documentation

2026-08-21​

GUI v0.13​

  • Objets d'emplacement dynamiques. itemProvider reconstruit l'objet, le nom et le lore d'un emplacement au moment du rendu. Les emplacements d'un layout sont analysés une seule fois et la même liste est renvoyée à chaque rendu : un placeholder ou un compte à rebours dans un lore était donc résolu une fois puis figé — autoRefreshTicks redessinait indéfiniment un inventaire identique.
  • Une seule ouverture de fenêtre en cours à la fois. GuiFactory.open() se termine un tick plus tard ; jusque-là, l'inventaire supérieur est donc toujours la vue précédente et chaque rendu décidait de rouvrir. La seconde ouverture fermait la première fenêtre, cette fermeture était interprétée comme une vraie fermeture, et la session était détruite alors que son menu restait à l'écran — tous les boutons étaient alors morts.
  • Une animation de durée 0 n'est plus une animation. Le panneau appose un bloc d'animation par défaut sur chaque emplacement ; les objets décoratifs étaient donc dessinés à l'index 0, et le re-rendu qu'ils planifiaient entrait en course avec l'ouverture en attente.
  • Un bouton étiqueté conserve les propres interactions de l'auteur. Renseigner buttonType supprimait auparavant toute la liste d'interactions ; un marqueur qu'aucun résolveur ne revendiquait — mauvais préfixe, mauvaise casse, ou extension propriétaire absente de cet écran — devenait donc un objet qui cliquait en silence, sans rien dans la console.

Release v0.13 · Documentation

Quest Codex v2.10​

  • Les menus qui ne peuvent pas s'afficher sont signalés au démarrage, pendant que la console est encore lue, au lieu d'échouer silencieusement au moment du clic. Chaque message indique la solution, pas le symptôme.
  • Conversion unique des pages créées avant le châssis open_gui. Le pool de layouts est passé de category_menu à une entrée open_gui référencée ; une page écrite selon l'ancien schéma conservait donc un layout que le moteur ne lisait plus : entièrement configurée dans le panneau, mais n'affichant rien.
  • Les titres d'advancements passent par la vraie conversion MiniMessage vers JSON, de sorte que la mise en forme écrite dans un titre de quête survit dans l'advancement qu'il génère.
  • Nécessite OmniGUI v0.13.

Release v2.10 · Documentation

Puzzle v0.2​

  • Nouveau activationRadius sur chaque énigme, 16 blocs par défaut. Une énigme ne s'affiche et ne s'exécute que pour un joueur se trouvant dans le monde de ses propres positions, à moins de ce rayon de l'une d'elles. 0 ne désactive que la vérification de distance — la vérification du monde s'applique toujours.
  • Correction : une énigme était dessinée dans toutes les dimensions. Les blocs et les particules côté client portent des coordonnées mais pas de monde ; une grille de lasers configurée dans l'Overworld était donc peinte devant le joueur dans le Nether, l'End ou tout autre monde qu'il visitait.
  • Correction : une énigme démarrait dès que le joueur rejoignait son audience, quelle que soit la distance. Une séquence de mémoire pouvait jouer tout son motif à quelqu'un situé à des milliers de blocs, ou dans un autre monde. La séquence démarre désormais lorsque le joueur atteint le plateau.
  • S'éloigner efface le plateau côté client et annule les animations en attente. Le budget de tentatives, le cooldown d'échec, timeLimit et lifespan sont armés à l'arrivée plutôt qu'à l'entrée dans l'audience.

Release v0.2 · Documentation

Custom Biome v0.6​

  • Changement incompatible : biome_audience est supprimé. Il répondait à « ce joueur est-il dans ce biome » en lisant le biome propre du monde, qu'une surcouche côté client ne modifie jamais — ainsi, pour chaque biome que cette extension peint, il répondait faux, quoi que le joueur voie à l'écran. Aucune configuration ne le faisait fonctionner.
  • Deux entrées le remplacent : biome_overlay_audience (ce joueur porte-t-il cette surcouche) et biome_region_audience (ce joueur est-il à l'intérieur de cette région, monde compris). Les pages qui utilisent biome_audience doivent être redirigées vers l'une d'elles.
  • Les audiences de région comparent aussi le monde en plus des coordonnées : une région définie dans un monde ne correspond donc plus aux mêmes coordonnées dans un autre. ignoreY transforme une région en colonne infinie.
  • /tw biome region <entry> remplit les deux coins d'une entrée à partir de votre sélection WorldEdit actuelle, au lieu de saisir les coordonnées à la main.
  • Les surcouches par joueur sont suivies par chunk et par propriétaire : plusieurs surcouches peuvent couvrir un même chunk, l'une l'emporte, et l'effacer restaure le biome réel de ce chunk plutôt que la dernière palette peinte.

Release v0.6 · Documentation

Shops v1.5​

  • Recompilée avec OmniGUI v0.13. GuiSlot a gagné un paramètre itemProvider au moment du rendu, ce qui a modifié le constructeur sur lequel ses appelants se lient ; le JAR v1.4 levait donc un NoSuchMethodError dès qu'une boutique était ouverte sur le moteur GUI mis à jour — l'inventaire n'apparaissait jamais.
  • Aucun changement de comportement. Les deux versions vont de pair : la v1.4 ne peut pas fonctionner sur OmniGUI v0.13, et la v1.5 ne peut pas fonctionner sur la v0.12.

Release v1.5 · Documentation

Numerical Storage v0.10​

  • Recompilée avec OmniGUI v0.13, pour le même changement de signature de GuiSlot : le JAR v0.9 levait un NoSuchMethodError à l'ouverture d'un menu de stockage, et le menu n'apparaissait jamais.
  • Aucun changement de comportement, et aucune seconde migration : le stockage au schéma v2 est relu exactement tel que la v0.9 l'a écrit.

Release v0.10 · Documentation

Corpse v0.2​

  • Recompilée avec OmniGUI v0.13, pour le même changement de signature de GuiSlot : le JAR v0.1 levait un NoSuchMethodError lorsqu'un cadavre était fouillé, de sorte que le menu de butin ne s'ouvrait jamais et que le cadavre restait là avec son inventaire inaccessible.
  • Aucun changement de comportement. Les cadavres stockés, leurs inventaires et leurs règles de protection sont relus comme avant.

Release v0.2

2026-08-12​

Release v0.2 · Documentation

GUI v0.12​

  • Menus étendus. extendToPlayerInventory sur open_gui transforme les 36 emplacements propres du joueur en quatre lignes de menu supplémentaires, donnant un canevas de 10 lignes. La projection est uniquement côté client : l'inventaire réel n'est jamais modifié, et il est restauré à la fermeture du menu.
  • Un layout racine dont l'identifiant se termine par _extended active cette projection de lui-même, de sorte qu'un châssis partagé peut fournir une variante normale et une variante étendue sans que chaque menu répète l'option.
  • DynamicMarkers transforme les marqueurs de contenu répétés en marqueurs indexés (QUEST_SLOT#0, QUEST_SLOT#1, …) avant l'analyse, afin que les extensions cessent de conserver chacune une copie privée de cette sémantique.
  • La répétition d'emplacements est bornée et signalée : les positions en dehors de la grille sont supprimées et consignées avec l'identifiant du layout et les coordonnées rejetées. L'éditeur avertit lorsque count/gap/repeatY sont définis sans direction, et signale une erreur pour une direction inconnue.
  • Documentation du fait que gap est un pas (1 = adjacent) et que repeatY répète sur l'axe perpendiculaire à direction.
  • Correction de l'héritage de mainLayoutId : une valeur vide sur l'enfant l'emportait auparavant sur la valeur héritée ; une page héritant de tout son châssis résolvait donc un layout inexistant et s'affichait vide — sans aucun bouton pour recevoir un clic.
  • Le masquage d'emplacements a un seul propriétaire : lorsque deux emplacements revendiquent une même cellule, celui qui porte un comportement l'emporte, au rendu et au clic, et la collision est consignée une seule fois.
  • La validation au démarrage ne signale désormais que ce qui échoue réellement. Les vérifications qui signalaient l'absence d'éléments facultatifs ont été supprimées — frame.view.unresolved, slot.outOfFrame, layout.unreferenced — car dans une architecture de modèles, elles décrivent la conception, pas un défaut. Ce qui reste désigne une intention écrite qui a échoué : une vue pointant vers un layout manquant, un emplacement qui sort de l'inventaire, deux emplacements de même nature qui entrent en collision dans un même layout.

Release v0.12 · Documentation

Shops v1.4​

  • Mode onglet. baseMenuId fait d'une boutique un onglet d'un menu partagé : son pool de layouts et ses vues fusionnent sous le châssis, avec views, defaultViewId et un rectangle de contenu (contentX, contentY, contentColumns, contentRows). Laissé vide, une boutique s'ouvre exactement comme avant.
  • Prise en charge des châssis étendus : une boutique ouverte dans une coque étendue obtient désormais le canevas de 10 lignes.
  • Ajout de defaultNameFormat et defaultLoreFormat. Un objet qui ne déclare ni nom ni lore hérite du format de la boutique ; un objet qui déclare le sien le conserve intact — le format de la boutique comble les vides, il ne remplace jamais la formulation d'un auteur.
  • Les deux acceptent les mêmes jetons : {item}, {buy}, {sell}, {stock}, {stock_max}, {currency}. Une ligne de lore demandant un prix indisponible est supprimée plutôt qu'affichée vide.
  • Ajout de ShopTransactionEvent, déclenché une fois un achat ou une vente terminé. C'est le point d'accroche auquel se branchent d'autres extensions — un relais Discord, un journal d'audit — sans que Shops ne sache qu'elles existent. Annoncé, jamais annulable.
  • Ajout de notificationWebhookId. Shops ne le résout pas et ne sait pas ce qu'est un webhook ; l'identifiant voyage avec l'événement. Un écouteur qui lève une exception est signalé et la transaction est maintenue — rien n'annule un achat payé.
  • Correction d'un layout vidé de ses marqueurs qui était retiré du pool : un écran de boutique composé uniquement de marqueurs, ou un onglet encore vide, disparaissait en silence.

Release v1.4 · Documentation

Quest Codex v2.9​

  • La promotion en châssis étendu est désormais portée par l'héritage plutôt que par un identifiant de layout littéral. Un châssis dont la racine porte un autre nom que shell_root perdait son habillage étendu, et chaque contrôle ancré dans la bande inférieure disparaissait au rendu — donc impossible à cliquer.
  • L'extension est compilée avec le moteur GUI de la vague de publication au lieu d'un ancien JAR figé. Elle était figée sur la v0.11 du moteur, de sorte que tout ajout postérieur à cette version lui était invisible.

Release v2.9 · Documentation

Discord v0.9​

  • L'extension s'appelle désormais Discord, et non Community. Le répertoire, le package et le nom de l'extension suivent. Les noms d'entrées sont inchangés, car les pages les sérialisent.
  • DiscordClientService a quitté la fonctionnalité de liaison pour son propre package : la synchronisation du chat, la console et les rapports de bugs l'utilisent tous, il n'a donc jamais eu sa place dans la liaison de comptes.
  • Les webhooks sont des entrées. webhook_definition déclare une destination Discord une seule fois et la référence partout. La synchronisation du chat, la liaison de comptes et les rapports de bugs portaient chacune leur propre copie de l'URL, du nom d'utilisateur et de l'avatar — changer de salon obligeait à modifier chaque manifest, sans rien garantir qu'ils pointaient au même endroit.
  • WebhookService est un singleton que n'importe quelle extension peut injecter. Le client HTTP était auparavant construit à la main dans l'initialiseur et transmis à chaque service ; rien d'extérieur ne pouvait donc livrer un message.
  • Les rapports de bugs ont perdu leur second interrupteur : une destination vide est l'état désactivé.
  • Migration. Les pages écrites avant cette version sont converties au premier démarrage : une webhook_definition par destination distincte — les manifests configurés de façon identique partagent une seule entrée — et les manifests sont redirigés vers elle. Chaque page réécrite est d'abord sauvegardée, sous backup/community-webhook-v1/. La conversion est pilotée par la forme et non par un numéro de version ; l'exécuter deux fois ne change donc rien. Un manifest qui était désactivé conserve son URL sur une destination désactivée plutôt que de la perdre.
  • Annonces de boutique. shop_notification_manifest décrit comment une transaction de boutique se présente une fois arrivée sur Discord. La destination en est volontairement absente — elle appartient à la boutique. Une seule présentation sert donc toutes les boutiques tout en laissant chacune publier dans son propre salon. Nécessite l'extension Shops mais n'en dépend pas.

Release v0.9 · Documentation

Puzzle v0.1​

  • Première version.
  • Neuf types d'énigmes, chacune étant un objectif Typewriter avec sa propre audience, sa progression et ses triggers : poussée de blocs, offrandes sur piédestal, séquences de mémoire, ordres de leviers, placement de motifs, rotations de cadres d'objets, serrures à combinaison, grilles de lasers et plaques de pression coopératives.
  • Tout ce qu'une énigme dessine est côté client — blocs, aperçus fantômes, surbrillances et rayons laser sont envoyés au joueur qui la résout. Deux joueurs peuvent travailler sur le même plateau sans voir la progression de l'autre, et le monde n'est jamais modifié.
  • Cycle de vie partagé sur chaque énigme : timeLimit, maxAttempts, cooldownOnFail, resetOnWrong, lifespan, indices, et triggers onStart / onComplete / onFail / onTimeout / onLifespanExpire.
  • isShared fait passer une énigme d'une progression privée à un plateau unique que tout le groupe fait avancer ensemble.
  • puzzle_chain enchaîne plusieurs énigmes dans l'ordre et se déclenche une fois la séquence résolue ; resetOnFail décide si une erreur renvoie le joueur au début.
  • puzzle_artifact conserve l'état des énigmes, de sorte qu'un redémarrage en pleine tentative n'efface pas la progression.
  • puzzle_solved_fact et puzzle_active_fact exposent la progression au reste de votre contenu ; puzzle_menu liste les énigmes et leur état dans le chat.
  • Compatible Folia : chaque lecture et écriture dans le monde s'exécute sur la région qui possède l'énigme.

Release v0.1 · Documentation

Corpse v0.1​

  • Première version.
  • Les cadavres sont rendus une fois par spectateur, comme les affichages d'entités du moteur, de sorte que tous les joueurs proches les voient, avec animation du modèle et nameplates mises à jour sur les moteurs BetterModel, PNJ BTC Mob et PNJ MythicMobs.
  • Fonctionne sur Folia : toute la planification passe par un scheduler compatible Folia, et les objets lâchés, les orbes d'expérience et les particules s'exécutent sur la région qui possède le cadavre.
  • L'inventaire que contient un cadavre survit à un redémarrage, à un plantage ou à un rechargement. Les cadavres sont stockés dans MySQL lorsqu'il est disponible, sinon dans le dossier du plugin, et restaurés au démarrage.
  • onlyOwnerCanLoot est appliqué, et la fouille est associée à l'identifiant d'entité propre du cadavre plutôt qu'à n'importe quel clic droit à moins de quatre blocs.
  • Une définition de cadavre est choisie à chaque mort selon le monde et la priorité, et sa durée de vie est résolue une seule fois, sur ce cadavre.
  • Les événements on_corpse_spawn, on_corpse_loot et on_corpse_expire passent par le pipeline de triggers du moteur et publient le propriétaire, le butin et la position du cadavre comme contexte.
  • displayName, showDisplayName, dropOnInteract, renderArmor, playDeathAnimation et deathAnimationName sont tous pris en compte, et la plupart des paramètres sont des valeurs dynamiques, ils peuvent donc être pilotés par des placeholders et des facts.
  • Un contour lumineux rendu côté client avec une couleur configurable, et des sons de cadavre envoyés à chaque joueur proche plutôt qu'à l'ensemble du monde.
  • Facts has_corpse et corpse_count, audience corpse_owner_audience, corpse_waypoint affichant la distance et la direction vers le cadavre du joueur, corpse_recovery_objective, et corpse_admin_command avec les sous-commandes list et clear.
  • Une fenêtre de protection du butin, après laquelle un cadavre s'ouvre à tout le monde.
  • Le menu de butin est un menu de l'extension GUI plutôt qu'un simple inventaire avec son propre écouteur de clics ; il hérite donc du routage des clics, de l'historique des menus et de la projection d'inventaire étendu du moteur. L'extension GUI est par conséquent requise.

Release v0.1 · Documentation

Custom Biome v0.5​

  • Les biomes personnalisés existent immédiatement. Une définition est enregistrée dans le registre actif dès qu'elle est sauvegardée, et non plus seulement après un redémarrage du serveur. Le datapack généré est désormais la couche de persistance plutôt que l'unique chemin.
  • Correction du datapack généré qui était ignoré par le serveur : son format de pack était codé en dur sur une ancienne valeur, et il était écrit dans un dossier que le serveur ne lit jamais.
  • Correction de baseBiome qui n'avait d'effet que pour les plaines. Les biomes sont désormais construits à partir du biome de base détenu par le serveur et encodés avec son propre codec, de sorte que les apparitions de mobs, les features et les carvers sont hérités au lieu d'être perdus.
  • Correction des changements de biome qui perçaient des trous dans le monde : le rafraîchissement envoyait des paquets de déchargement de chunk, que le serveur ne faisait jamais suivre d'un renvoi. Les clients reçoivent désormais une mise à jour de biome construite à partir des vraies données du chunk.
  • Correction de leave_biome_event qui ne se déclenchait jamais. Les écouteurs d'entrée et de sortie écrasaient l'état l'un de l'autre, de sorte que le résultat dépendait de l'ordre d'enregistrement.
  • Correction de la peinture qui écrivait chaque bloc d'une colonne au lieu d'un par cellule de 4x4x4, et le faisait depuis le thread appelant. Les écritures sont désormais planifiées sur la région qui possède chaque chunk.
  • Un biome que le serveur refuserait de sérialiser est désormais rejeté à l'enregistrement, avec la valeur fautive nommée. Auparavant, il était accepté puis faisait planter la connexion de chaque joueur.
  • Surcouches de biome par joueur (player_biome_overlay_action) : montrez à un joueur un biome différent sans toucher au monde ni affecter qui que ce soit d'autre.
  • Peinture de région (paint_biome_region_action) avec instantanés, et restore_biome_action pour remettre une région en place.
  • biome_transition_cinematic : changez le biome que voit un joueur au fil d'une cinématique.
  • custom_biome_preset : partagez des couleurs et des attributs visuels entre biomes, surchargés par définition.
  • explore_biome_objective et biome_discovery_fact : des quêtes accomplies en visitant des biomes.
  • Chaque entrée de lecture a gagné une option source, permettant de choisir entre ce qui est montré au joueur et ce que contient le monde.
  • Suppression de /tw biome setcolor, qui créait des biomes jetables jamais persistés, et du mode de fact HASH, dont la valeur n'était pas stable d'un redémarrage à l'autre.
  • Le JAR de l'extension est passé de 2,6 Mo à 230 Ko : il n'embarque plus les bibliothèques que le serveur fournit déjà.

Release v0.5 · Documentation

Enchantment Creator v0.8​

  • levelMode sur une mécanique compare runOnLevel comme un niveau exact, un minimum (AT_LEAST) ou un maximum (AT_MOST). Auparavant, seule une correspondance exacte était possible.
  • eventPhase exécute les actions d'une mécanique pendant l'événement Bukkit en cours, de sorte qu'annuler l'événement ou modifier les dégâts prend effectivement effet. Définissez-le sur false pour les interactions Typewriter mises en file d'attente.
  • clientSideEffects est devenu conscient du client, avec une action client_particle_effect : l'artifact BTC personnalisé utilise le moteur de rendu basé sur PacketEvents lorsqu'il est disponible, l'artifact Paper public un repli Bukkit limité au joueur.
  • Les clés de registre sont désormais dérivées de id. L'ancien name est conservé comme alias historique lors du chargement des pages et des objets existants, de sorte que rien n'a à être recréé.
  • L'artifact public ne porte volontairement aucune dépendance à BTC-CORE ni à BTC Velocity : il fonctionne sur Paper 1.21.x avec Java 21, compilé depuis JDK 25 en ciblant le bytecode Java 21.

Release v0.8 · Documentation

Numerical Storage v0.9​

  • transactionMode dans la configuration de transaction : INTERNAL conserve le chemin PlaceholderAPI plus commande console, VAULT passe directement par l'API Vault Economy et ignore amountPlaceholder et les champs de commande.
  • addCommand et removeCommand étaient documentés à l'envers. addCommand termine un dépôt dans le stockage et est vérifié avant la modification persistante ; removeCommand termine un retrait.
  • La persistance est désormais asynchrone, avec des verrous de modification par artifact et un cache de courte durée, de sorte que des dépôts concurrents ne peuvent plus entrer en course les uns avec les autres.
  • Les fichiers de stockage passent à la version 2 du schéma JSON sous un chemin d'artifact technique. Un ancien fichier basé sur l'artifactId sémantique d'origine est sauvegardé sous backups/numericalstorage/ et migré au premier accès — sauvegardez le dossier assets/ de Typewriter avant la mise à jour.
  • artifactId est un identifiant technique généré : laissez-le vide et Typewriter le renseigne.
  • Les placeholders prennent un argument de définition explicite (%typewriter_ns_balance_bank%), ce qui supprime l'ancienne ambiguïté de découpage par tirets bas lorsqu'un identifiant de définition contient lui-même des tirets bas.
  • Clés facultatives tenant compte des profils lorsque l'intégration Profiles est installée.

Release v0.9

2026-08-07​

Release v0.9 · Documentation

Quest Codex v2.8​

  • De vrais advancements Minecraft. La nouvelle entrée advancement_definition écrit de véritables advancements dans un datapack que possède l'extension, de sorte qu'ils apparaissent dans l'écran d'advancements vanilla avec leur propre onglet, leur arbre, leurs cadres et leurs toasts. parent référence une autre définition, de sorte que l'arbre est dessiné dans l'éditeur de nœuds.
  • grant_advancement attribue un advancement ou le retire, et parcourt la chaîne des parents afin qu'un enfant ne soit jamais obtenu sous un parent non obtenu.
  • autoGrant fait obtenir un advancement dès le premier tick du joueur. Sur une racine, c'est ce qui donne une existence à son onglet avant que quoi que ce soit n'ait été obtenu.
  • Correction de l'ordre des quêtes : une quête imbriquée lit son ordre depuis sa propre sous-catégorie, les quêtes sans ordre explicite ne se confondent plus, et l'ajout d'une quête n'efface plus l'ordre qu'elle avait déjà.
  • Les marqueurs de quêtes sont paginés, le mode de tri est propre à chaque joueur, et le suivi multiple survit à une reconnexion dans l'ordre choisi par le joueur.

Release v2.8 · Documentation

GUI v0.11​

  • Infobulles d'objets, avec un interrupteur hideVanillaItemStats sur l'entrée de configuration GUI.
  • Un layout paginé peut porter un indicateur de page, grâce au nouveau rôle INDICATOR.
  • Les menus sont validés au démarrage du serveur : un emplacement hors limites, un modèle manquant ou un type de bouton inconnu est nommé dans la console avant qu'un joueur n'ouvre le menu.
  • <shift:N> se résout sans CraftEngine, grâce à la police Magic Digit fournie.
  • count et repeatY sont documentés comme des nombres de répétitions d'emplacements, et non comme des tailles de pile.

Release v0.11 · Documentation

Shops v1.3​

  • Une boutique ne peut plus faire tomber un joueur sous zéro. Trois chemins indépendants le permettaient.
  • Un solde illisible n'est plus lu comme zéro, et les soldes formatés tels que 12.5k sont analysés.

2026-08-03​

Release v1.3 · Documentation

Quest Codex v2.7​

  • Ajout de modes d'affichage des waypoints : WORLD_DIRECTIONAL projette les marqueurs sur une sphère autour des yeux du joueur selon la vraie direction de sa destination, TARGET_ANCHORED les place sur la cible, et ADAPTIVE fait la transition entre les deux. HUD_LOCKED reste la valeur par défaut, les pages existantes sont donc inchangées.
  • Ajout d'une taille apparente constante et d'un désencombrement angulaire pour que plusieurs marqueurs restent lisibles lorsque leurs destinations partagent une même ligne de vue.
  • Ajout du rendu multi-cibles dans une seule entrée de waypoint, avec les nouvelles sélections d'objectifs suivis ALL et ONE_PER_QUEST et un plafond maxTargets.
  • Correction du suivi multiple ignoré par les waypoints : les objectifs des quêtes suivies secondaires n'étaient jamais résolus, de sorte que seule la quête principale produisait un marqueur.
  • Ajout de quest_codex_locator_bar, qui affiche les mêmes cibles résolues sous forme de points de la barre de localisation vanilla sur Minecraft 1.21.6+ sans faire apparaître aucune entité.

Release v2.7

2026-08-02​

Release v2.7 · Documentation

Quest Codex v2.6​

  • Ajout de la récupération persistante des dialogues et cinématiques Typewriter interrompus, y compris la dernière image de cinématique. La récupération conserve désormais l'instantané capturé lorsque Typewriter émet des événements de démontage après la déconnexion d'un joueur.
  • Ajout du suivi multi-quêtes persistant avec un menu des quêtes suivies, des placeholders dédiés et une fixture publique de waypoint à deux quêtes.
  • Ajout de waypoints côté client en texte seul avec texte d'icône configurable, affichages de blocs centrés, rotation de balise centrée, alignement de la cible au niveau, interpolation fluide, placement près de la cible, et un cône de visibilité horizontal configurable.
  • Suppression des anciennes couches de waypoint à affichage d'objet et à flèche directionnelle avant leur premier déploiement public.

Release v2.6 · Documentation

GUI v0.10​

  • Ajout des moteurs de layout Flex et Composite pour un placement d'emplacements adaptatif et des couches de menu composées.
  • Ajout de vues adressables réutilisables avec pools de layouts hérités, vues par défaut, fils d'Ariane, étiquettes de vues et intégration facultative de l'historique.
  • Ajout de la migration de schéma tenant compte des vues et de l'intégration QuestCodex, ainsi que des métadonnées de publication Maven.
  • Correction des changements de vue pour reconstruire les menus sans scintillement de fermeture/réouverture, et fermeture d'inventaire rendue compatible Folia.

Release v0.10 · Documentation

Shops v1.2​

  • Recompilation et validation de l'extension Shop publique avec OmniGUI v0.10.
  • Conservation des layouts de boutique dynamiques existants, de l'historique de navigation, de la gestion des objets de remplissage, des règles de stock et de limites, et des gestionnaires de boutons de boutique personnalisés.
  • Aucune migration n'est nécessaire depuis Shop Extension v1.1.

Release v1.2 · Documentation

MythicMobsNPC Extension v0.4.6​

  • Correction d'un changement d'échelle ignoré sur un modèle livré sans aucune animation, de la même façon que pour l'extension BetterModel.
  • Les variantes de mobs vanilla (chat, renard, loup, villageois et similaires) sont signalées une seule fois dans la console plutôt qu'ignorées en silence : elles relèvent de la configuration MythicMobs, qui possède l'identité du mob et les écraserait à chaque réapparition.
  • Correction d'une seule entrée de données en échec qui annulait toutes les autres entrées envoyées dans le même lot, ce qui pouvait laisser un PNJ sans aucune de ses données configurées appliquée.
  • L'effet de lueur et l'équipement sont désormais appliqués sur le modèle, et pas seulement sur le mob. Le corps du mob est masqué derrière le modèle ; les définir sur le mob seul ne laissait donc rien de visible.
  • L'équipement signale désormais dans la console lorsque le modèle n'a pas d'os d'objet, au lieu de ne rien faire en silence.
  • Le feu est réaffirmé chaque seconde afin de ne plus s'éteindre de lui-même, et il indique désormais quand BetterModel masque le corps sur lequel les flammes sont dessinées.
  • Correction de la nameplate qui saccadait lorsque le PNJ marche ou suit un réseau de routes : l'affichage de texte interpole désormais entre les mises à jour au lieu de se téléporter par à-coups.

BetterModel Extension v1.3​

  • Correction de l'échelle du modèle ignorée sur les modèles livrés sans aucune animation. BetterModel ne recalcule la transformation d'un modèle que pendant qu'une animation s'exécute ; un changement d'échelle appliqué à l'exécution n'atteignait donc jamais un modèle statique. L'extension force désormais elle-même le recalcul.
  • Le même correctif s'applique au décalage du modèle, qui passait par le même chemin de code.
  • Les entrées de données d'entité atteignent désormais réellement le modèle au lieu d'être abandonnées. Pris en charge : effet de lueur, couleur d'effet de potion (rendue comme une teinte d'objet), luminosité, contrainte de billboard, durée d'interpolation, translation, échelle 3D, taille de boîte, équipement et feu.
  • Ajout de bettermodel_bone_appearance, une version par os des paramètres de lueur, de teinte, de brillance d'enchantement et de luminosité, avec le même système de critères que bettermodel_bone_visibility.
  • L'équipement est associé aux os d'objet de main et de tête de BetterModel. Les emplacements d'armure sont signalés une seule fois dans la console plutôt qu'ignorés en silence, car le torse et les jambes d'un modèle portent leur propre géométrie.
  • Une échelle 3D non uniforme avertit désormais au lieu d'utiliser silencieusement un seul axe : BetterModel ne prend en charge qu'une échelle uniforme.
  • Toute entrée de données sans signification sur un modèle 3D (poses, variantes de mobs, état de reproduction...) est désormais signalée une seule fois dans la console au lieu d'être écartée en silence.
  • La lueur, la teinte, la luminosité, le billboard, la translation et l'équipement survivent désormais à un rechargement du resource pack ou à une réapparition au lieu de revenir à l'apparence par défaut du modèle.
  • L'équipement signale désormais dans la console lorsque le modèle n'a aucun os étiqueté ri, li ou ph, au lieu de ne rien faire en silence — c'est la raison habituelle pour laquelle un objet n'apparaît pas.
  • Le feu est désormais dessiné sur l'entité d'interaction du PNJ plutôt que sur les os du modèle : le client met la flamme à l'échelle de la boîte englobante de l'entité, et une entité d'affichage n'en a pas ; les flammes étaient donc rendues à une taille nulle.

Nexo Extension v1.0​

  • Ajout de facts pour vérifier ce que le joueur tient, porte dans son inventaire, regarde ou sur quoi il se tient.
  • Ajout de variables donnant l'identifiant et les propriétés de l'objet, du bloc et du meuble ciblés.
  • Ajout d'une action pour donner et d'une pour retirer un objet, toutes deux fonctionnant à partir de l'identifiant d'objet Nexo.
  • Ajout d'événements de ramassage, de lâcher et de consommation d'objets.
  • Ajout d'événements d'interaction et de dégâts pour les blocs et meubles personnalisés, ainsi qu'un événement de butin lâché.
  • Les événements transmettent désormais leurs données (identifiant de bloc, position, objet en main) à ce qui s'exécute ensuite, de sorte qu'un dialogue ou une action peut les utiliser directement.

CraftEngine Extension v1.0​

  • Les objectifs de quête fonctionnent désormais. Ils peuvent être attachés à une quête, ils sauvegardent leur progression, et ils peuvent déclencher une séquence à leur achèvement.
  • Ajout de facts pour les cooldowns, pour les objets tenus et portés, et pour le bloc ou le meuble ciblé par le joueur.
  • Ajout de variables donnant des identifiants, des propriétés d'objets et la liste du contenu chargé.
  • Ajout d'une action pour donner et d'une pour retirer un objet, toutes deux fonctionnant à partir de l'identifiant d'objet CraftEngine.
  • Ajout d'événements de ramassage, de lâcher et de consommation d'objets.
  • Ajout d'événements pour les tentatives de placement et pour les coups portés aux meubles.
  • Les événements transmettent désormais leurs données à ce qui s'exécute ensuite.

ItemsAdder Extension v1.0​

  • Les événements de blocs et de meubles lisent désormais directement ItemsAdder au lieu de deviner à partir des événements vanilla, ce qui les rend fiables et supprime un court délai qui pouvait faire manquer ou répéter un trigger.
  • Ajout de facts pour les objets tenus et portés, les utilisations restantes, la durabilité personnalisée, la visibilité du HUD et la croissance des cultures.
  • Ajout de variables donnant des identifiants, des propriétés d'objets et des images de police.
  • Ajout d'une action pour donner et d'une pour retirer un objet, toutes deux fonctionnant à partir de l'identifiant d'objet ItemsAdder.
  • Ajout d'événements de ramassage, de lâcher et de consommation d'objets.
  • Ajout d'événements d'interaction, d'un événement de pré-placement pour les meubles et d'un événement de mort d'entité personnalisée.
  • Les événements transmettent désormais leurs données à ce qui s'exécute ensuite.

2026-07-26​

Quest Codex v2.5​

  • Ajout du suivi multi-quêtes persistant via l'entrée quest_codex_tracking_artifact.
  • Ajout du mode de menu de catégorie @tracked et des marqueurs dynamiques TRACKED_QUEST_SLOT.
  • Ajout de /tw codex tracked et de la commande GUI interne codex:tracked.
  • Ajout de placeholders PlaceholderAPI pour le nombre de quêtes suivies, la limite, la quête principale, les quêtes suivies indexées, les statuts, les objectifs et les priorités.
  • Documentation de la disposition du bundle de pages publiques : manifest principal, artifact statique de suivi, définitions de quêtes et paramètres GUI.

Release v2.5 · Documentation

GUI v0.9​

  • Ajout de la migration automatique du schéma des pages publiques pour le stockage en ligne et les anciens champs de pagination.
  • Documentation du schéma compact storagePool / storageId et navigationButtons utilisé pour réduire les blocages de l'éditeur Typewriter lors de la publication.
  • Clarification du modèle recommandé de menu référencé pour les grands menus QuestCodex.

Release v0.9 · Documentation