Puzzle
Présentation
Puzzle transforme un lieu de votre monde en énigme à résoudre. Vous choisissez l'une des neuf mécaniques : pousser des blocs dans des trous, répéter une séquence, actionner des leviers dans l'ordre, rediriger des rayons laser, et plus encore. Chaque énigme est une entrée d'audience que vous placez dans le panneau web. Elle communique son résultat au reste de TypeWriter via des triggers (onStart, onComplete, onFail, onTimeout, onLifespanExpire) et un fact facultatif.
L'essentiel du plateau est dessiné côté client : blocs, surbrillances, aperçus et particules de laser sont des paquets envoyés au joueur qui résout l'énigme, de sorte que deux joueurs peuvent travailler sur le même plateau sans voir la progression de l'autre. Quelques mécaniques modifient bien le monde : l'énigme de cadre d'objet fait pivoter un vrai cadre d'objet, et l'énigme de motif place de vrais blocs sauf si ghostBlocks est activé.
Une énigme appartient à l'endroit où vous l'avez construite. Elle ne s'exécute que pour un joueur se trouvant dans le monde de ses positions, à moins de activationRadius blocs de l'une d'elles. Atteindre le plateau démarre une session ; s'en éloigner y met fin et efface le plateau côté client.
Fonctionnalités
- Neuf types d'énigmes — poussée de blocs, séquence de mémoire, grille de lasers, ordre de leviers, placement de motif, plaques de pression coopératives, cadre d'objet, serrure à combinaison et offrande sur piédestal.
- Cycle de vie partagé — limite de temps, nombre maximal de tentatives erronées, cooldown après échec, durée de vie, indices et message de réussite sur chaque énigme.
- Des triggers partout — le début, la réussite, l'échec, le dépassement de temps et l'expiration de la durée de vie peuvent chacun lancer une entrée TypeWriter.
- Récompense en fact — un fact est augmenté de
amountlorsque l'énigme est résolue. - Chaînes d'énigmes — enchaînez plusieurs énigmes dans l'ordre et réagissez à l'ensemble de la chaîne.
- Restriction spatiale — une vérification du monde et un rayon d'activation empêchent un plateau d'apparaître dans une autre dimension ou trop loin.
- Statistiques — tentatives, réussites et meilleur temps par joueur, avec une commande de classement.
- Facts de statut — lisez si une énigme est résolue ou active pour un joueur.
- Compatible Folia — l'accès au monde s'exécute sur la région qui possède l'énigme.
Installation
- Installez l'extension officielle TypeWriter
Basic, qui fournit les types partagés utilisés par les énigmes (sons, objets, variables). - Placez le JAR de Puzzle dans
plugins/Typewriter/extensions/et redémarrez le serveur. - Facultatif : ajoutez une entrée Puzzle Artifact à vos pages si vous voulez que les tentatives, les réussites et les meilleurs temps soient sauvegardés (voir l'avertissement dans Configuration).
Premiers pas
Construisez une énigme de porte à trois leviers :
- Dans le panneau web de TypeWriter, ouvrez une page manifest et ajoutez une entrée Lever Order.
- Dans
levers, ajoutez trois leviers. Pour chacun, capturez en jeu lapositiond'un bloc levier et définissezorderIndexsur0,1et2, l'ordre dans lequel le joueur doit les actionner. - Définissez
amountsur3pour que l'indice affiche1/3,2/3,3/3. ActivezresetOnWrong, et définissezcooldownOnFailsur5si vous voulez une pause après une erreur. - Reliez
onCompleteà une séquence qui ouvre la porte, etfactà un fact cachable qui stocke la récompense. Ce fact est aussi le moyen fiable de mémoriser que l'énigme a été résolue. - Facultativement, placez l'énigme sous un filtre d'audience tel qu'une audience de quête, pour qu'elle ne s'exécute que pour les bons joueurs.
- Publiez, redémarrez ou rechargez l'extension, puis approchez-vous des leviers. Les actionner dans le bon ordre résout l'énigme. Actionner le mauvais levier réinitialise l'état des leviers et déclenche
onFail.
Les entrées d'énigme sont enregistrées au chargement de l'extension. Après avoir ajouté une énigme, rechargez TypeWriter ou redémarrez avant d'utiliser /typewriter puzzle start.
Fonctionnement
Sessions. Une session démarre lorsque le joueur entre dans le rayon. Elle efface la progression, les tentatives erronées et le cooldown d'échec, lance timeLimit et lifespan, et déclenche onStart. Ainsi, maxAttempts est un budget par session : un joueur qui l'épuise peut s'éloigner puis revenir. Une énigme déjà résolue par un joueur n'est jamais rouverte pour lui.
Un puzzle résolu devient inerte. Une fois qu'un joueur a résolu un Block Push, Combination Lock, Lever Order ou Laser Grid, celui-ci ne dessine plus de plateau pour lui et n'annule plus ses interactions, même s'il revient dans son audience (un filtre qui clignote, une reconnexion). Les leviers et boutons d'un puzzle résolu fonctionnent comme des blocs ordinaires, et un Pedestal résolu n'avale plus la récupération de son objet.
Clics annulés. Le serveur répond à un clic annulé avec l'état réel du bloc cliqué, ce qui effacerait un bloc dessiné côté client. Le plateau est donc redessiné un tick après chaque clic annulé (boutons Memory, grille Pattern, placements refusés, poussées refusées), et quand un joueur frappe un miroir ou un levier dessiné en clic gauche.
La réussite ne se déclenche qu'une fois. L'écriture du fact, le message de réussite, onComplete et la progression de la chaîne proviennent d'un seul résultat accepté ; un clic répété ne peut donc pas les déclencher deux fois.
Progression. Chaque étape correcte augmente la progression d'un point, jusqu'à amount. {progress} et {total} dans hintMessage affichent la progression et amount. Les énigmes ne déduisent pas amount de leur propre taille ; saisissez donc vous-même le nombre réel d'étapes.
Options communes
Chaque énigme possède ces champs.
| Champ | Signification |
|---|---|
fact | Un fact cachable augmenté de amount lorsque l'énigme est résolue. |
amount | Progression maximale, et récompense ajoutée au fact. |
timeLimit | Secondes avant que l'énigme n'expire. 0 la désactive. |
cooldownOnFail | Secondes que le joueur doit attendre après un échec. |
maxAttempts | Tentatives erronées autorisées par session. 0 désactive la limite. |
resetOnWrong | Indique si une mauvaise étape efface la progression. |
showHints, hintMessage | Un indice dans le chat après chaque étape, avec {progress} et {total}. Vide, rien n'est envoyé. |
completionMessage | Envoyé une fois lorsque l'énigme est résolue. Vide pour le désactiver. La valeur par défaut est <green>Puzzle completed!. |
onStart, onComplete, onFail, onTimeout, onLifespanExpire | Entrées déclenchées pour le joueur. |
lifespan | Secondes avant que l'énigme n'expire pour le joueur, quoi qu'il fasse. 0 la désactive. |
activationRadius | Blocs autour des positions de l'énigme. 0 supprime la vérification de distance, mais la vérification du monde s'applique toujours. La valeur par défaut est 16. |
criteria | Conditions qu'un joueur doit remplir pour participer à l'énigme. |
Énigmes partagées
Lorsque isShared est activé et que le fact de l'énigme a un groupe (party, équipe), le groupe joue une seule énigme : chaque étape, erreur et cooldown d'un joueur est copié aux joueurs en ligne de ce groupe. Le premier membre qui la résout la résout pour le groupe : le fact est augmenté de amount une seule fois, et chaque membre reçoit une fois le message de complétion, onComplete et l'étape de chaîne. Un membre absent les reçoit à son retour. Un joueur reçoit la complétion d'une énigme au plus une fois, même s'il change de groupe ; seule une réinitialisation admin qui le concerne lui permet de la recevoir de nouveau.
- La résolution est conservée par groupe. Mourir ou se reconnecter ne la réinitialise pas et ne récompense rien de nouveau, contrairement à une énigme solo, qui peut être rejouée après une mort ou une déconnexion.
- Les statistiques et le plateau de chaque joueur restent personnels. Sans groupe sur le
fact, ou pour un joueur qui n'appartient à aucun groupe, rien n'est partagé. Coop Pressure ignoreisShared: il complète déjà l'énigme pour chaque participant. - Pour la rejouer, utilisez
/typewriter puzzle admin reset <player> <id>, qui la rouvre pour tout le groupe de ce joueur.
La résolution du groupe est sauvegardée dans le Puzzle Artifact. Sans lui, l'enregistrement n'existe qu'en mémoire : après un redémarrage du serveur, le groupe peut résoudre de nouveau l'énigme et être payé de nouveau. Ajoutez l'artifact avant d'utiliser isShared. Revenir à un ancien build de l'extension fait aussi perdre l'enregistrement partagé, car ce build sauvegarde l'artifact sans lui, et les récompenses sont de nouveau versées. La résolution est écrite à la prochaine sauvegarde (toutes les 30 secondes) : un crash dans cette fenêtre peut la perdre.
Types d'énigmes
| Entrée | Ce que fait le joueur | Champs principaux |
|---|---|---|
| Block Push | Faire un clic gauche ou droit sur un bloc pour le pousser d'un bloc dans la direction où regarde le joueur, jusqu'à ce que chaque trou cible soit rempli. | pushBlocks, targetHoles (avec acceptedMaterial), blockMaterial, holeMaterial. Le nombre de blocs doit être égal au nombre de trous. allowPull n'a aucun effet (le tirage n'est pas encore implémenté). |
| Memory Sequence | Regarder des boutons s'allumer, puis cliquer dessus dans le même ordre. La séquence est aléatoire à chaque session. | buttons (au moins 2), sequenceLength, highlightDuration, stepGap, inputDelay (ticks), highlightMaterial. |
| Laser Grid | Faire un clic droit sur des miroirs pour les faire pivoter jusqu'à ce que chaque récepteur soit touché par un rayon de sa couleur. | emitters (couleur, direction), mirrors (rotatable, initialDirection), receivers (requiredColor), maxReflections, maxBeamLength, beamDensity. |
| Lever Order | Faire un clic droit sur des leviers dans l'ordre de leur orderIndex. Un mauvais levier les réinitialise tous. | levers (position, orderIndex). |
| Pattern Placement | Placer des blocs sur une grille pour reproduire un motif. | pattern, gridOrigin, columns, previewOffsetY, ghostBlocks, tolerance. |
| Coop Pressure | Plusieurs joueurs se tiennent sur des plaques différentes et maintiennent la position quelques secondes. | plates, requiredPlayers, holdDuration (secondes). |
| Item Frame | Placer un objet dans un cadre d'objet existant, puis le faire pivoter jusqu'à l'angle cible. | frameTargets (correctRotation de 0 à 7, requiredItem), checkItem. |
| Combination Lock | Cliquer sur des blocs chiffres dans l'ordre d'un code. | digits (positions), code (indices des chiffres, comptés depuis 0). |
| Pedestal | Faire un clic droit sur le bloc piédestal en tenant un objet, ou lâcher ou ramasser l'objet près de lui. | targetPosition, requiredItem, consumeItem, pickupRadius, consumeDroppedItem. |
Détails de chaque type :
- Laser Grid. Un rayon part à un bloc de l'émetteur et va tout droit. Un miroir l'envoie dans la direction vers laquelle il est orienté. Un clic droit sur un miroir définit sa direction à l'opposé de la face cliquée, ou le fait pivoter dans le sens horaire si vous cliquez sur son dessus ou son dessous. Un bloc solide arrête le rayon. L'énigme est résolue lorsque chaque récepteur est touché par un rayon de sa
requiredColor. Les rayons sont affichés avec des particules. Un miroir ne disparaît pas au clic droit : le plateau est redessiné après le clic. Les rayons sont dessinés au centre des blocs et tournent exactement sur chaque miroir ;beamDensityest le nombre de particules par bloc. Un rayon mesure au plusmaxBeamLengthblocs (64 par défaut ; 0 ou moins vaut 64, jamais illimité) et ne charge jamais de chunk : il s'arrête au bord du monde chargé. Un plateau au rayon plus long doit augmentermaxBeamLength. - Block Push. Chaque poussée déplace un bloc d'une case dans la direction où regarde le joueur. Un bloc repoussé sur sa case de départ y est toujours accepté, et un trou cible est redessiné une fois qu'un bloc a été poussé dessus puis au-delà. Laissez les cases de départ vides (air) dans le monde. Un vrai bloc y est caché côté client mais reste solide pour le serveur : personne ne pourrait se tenir dessus. Une poussée refusée (un mur, un autre bloc) compte une erreur par bloc et par case cible jusqu'à ce qu'une poussée réussisse : maintenir le clic contre un mur ne consomme donc pas
maxAttempts. - Lever Order. Un levier repose dans l'état qu'il a dans le monde quand le joueur atteint le plateau, se bascule à partir de là, et y est remis par une réinitialisation ou après un mauvais ordre, même s'il repose allumé. Un clic pendant le délai d'échec n'atteint pas un vrai levier.
- Combination Lock. La numérotation commence à 0 : la première position listée dans
digitsest le chiffre 0, la deuxième le chiffre 1, et ainsi de suite.codeliste ces indices dans l'ordre des clics. Par exemple, avec quatre boutons dansdigits, le code[2, 0, 3]signifie : troisième bouton, premier bouton, quatrième bouton. Une valeur decodehors des chiffres fait ignorer toutes les pressions à la serrure ; le journal du serveur nomme la valeur fautive. - Pattern Placement.
patternliste les matériaux ligne par ligne, surcolumnscolonnes de large, et sa longueur doit être un multiple decolumns. La grille repose sur le plan horizontal à la hauteur Y degridOrigin, avec les colonnes le long de X et les lignes le long de Z. Un aperçu flottepreviewOffsetYblocs au-dessus. AvecghostBlocksactivé, une version translucide est dessinée sur la grille elle-même et les blocs corrects sont affichés côté client, en prélevant l'objet chez le joueur. Un mauvais placement est toujours annulé.toleranceest le nombre de mauvais placements autorisés avant que la progression ne soit réinitialisée. - Coop Pressure. Une plaque compte lorsque les pieds d'un joueur sont sur ce bloc, ou sur le bloc au-dessus. Un joueur par plaque. Tous les joueurs de l'audience participent ; ajoutez-les donc avec
/typewriter puzzle join <entry id>. Lorsque les plaques ont été maintenues pendantholdDuration, chaque participant réussit l'énigme. - Item Frame. Le cadre doit déjà exister à la position configurée ; l'énigme n'en fait jamais apparaître. Un cadre vide n'accepte que le
requiredItem, pris dans la main du joueur. Chaque clic sur un cadre rempli le fait pivoter d'un cran (45 degrés), etcorrectRotationest le nombre de crans, de 0 à 7, pour lequel il est correct. Le cadre est une vraie entité, la rotation est donc visible de tous. - Pedestal. Le
requiredItempeut être donné par clic droit, ou lâché à moins depickupRadiusblocs du piédestal. Un objet lâché qui correspond est retiré lorsqueconsumeDroppedItemest activé.
Commandes
Toutes les commandes sont des sous-commandes de /typewriter (alias /tw). <id> est l'identifiant d'entrée d'une énigme. Seules les commandes admin nécessitent une permission.
| Commande | Description |
|---|---|
/typewriter puzzle | Ouvre le menu de chat de la première entrée Puzzle Menu, ou indique qu'il n'en existe aucune. |
/typewriter puzzle list | Liste les énigmes enregistrées et leurs types. |
/typewriter puzzle start <id> | Vous ajoute à l'audience d'une énigme. Refuse si vous l'avez déjà résolue. |
/typewriter puzzle join <id> | Rejoint une énigme déjà en cours, par exemple une énigme coopérative. |
/typewriter puzzle chain <id> | Démarre une chaîne d'énigmes par son identifiant d'entrée ou son nom. |
/typewriter puzzle status | Affiche votre état sur chaque énigme : active, terminée, arrêtée ou inactive. |
/typewriter puzzle leaderboard <id> | Affiche vos statistiques et les dix meilleurs joueurs d'une énigme. |
/typewriter puzzle stop [id] | Arrête une énigme ou toutes vos énigmes actives, et réinitialise leur progression. |
/typewriter puzzle close | Ferme votre inventaire ouvert. |
/typewriter puzzle admin reset <player> <id> | Réinitialise l'état d'un joueur pour une énigme et la relance. Pour une énigme partagée, la rouvre pour tout le groupe du joueur. |
/typewriter puzzle admin reload | Efface tous les états d'exécution et toutes les chaînes. |
Permissions
| Permission | Autorise |
|---|---|
puzzle.admin | Les commandes /typewriter puzzle admin. |
Configuration
Persistance. Sans Puzzle Artifact, rien n'est sauvegardé. Avec un artifact, l'extension sauvegarde l'état et les statistiques toutes les 30 secondes et à l'arrêt, et les charge au démarrage. Créez exactement un artifact et conservez son artifactId généré. L'artifact est obligatoire pour les énigmes partagées (voir Énigmes partagées).
Lorsqu'un joueur se déconnecte, l'état de ses énigmes est retiré de la mémoire, et la sauvegarde suivante ne le contient pas. Les statistiques restent. Pour mémoriser durablement une énigme résolue, définissez le fact de l'énigme et lisez ce fact dans vos critères. Puzzle Solved Fact ne reflète que l'état en mémoire. Une énigme partagée fait exception : sa résolution appartient au groupe et est sauvegardée dans l'artifact.
Messages. Aucun texte affiché en jeu n'est figé dans le code. Les textes propres à une énigme sont des champs de son entrée ; les réponses des commandes et les deux messages communs à toutes les énigmes sont des snippets. Voir Textes modifiables.
Textes modifiables
Les textes sont en MiniMessage : vous pouvez les reformuler, les traduire ou les recolorer. Un {name} dans un texte est remplacé par la valeur indiquée dans les tableaux ci-dessous ; un placeholder qui n'existe pas reste tel quel. Les placeholders PlaceholderAPI (%...%) sont lus pour le joueur qui reçoit le texte. Seul le journal de la console du serveur reste figé, en anglais.
Champs des entrées
Ces champs se trouvent sur l'entrée, dans le panel web. Chacun est un texte par joueur : il accepte donc des variables, et une valeur vide n'envoie rien. Les pages existantes gardent les textes qu'elles stockent déjà ; les valeurs par défaut ci-dessous s'appliquent aux nouvelles entrées et aux pages qui n'ont jamais stocké le champ.
| Entrée | Champ | Par défaut | Placeholders |
|---|---|---|---|
| Toutes les énigmes | hintMessage | L'indice de chaque type d'énigme, par exemple <yellow>Repeat the sequence! {progress}/{total}. | {progress}, {total} |
| Toutes les énigmes | completionMessage | <green>Puzzle completed! | aucun |
| Puzzle Menu | titleText | <gold><bold>Puzzles</bold> <gray>- | aucun |
| Puzzle Menu | puzzleLineText | <green>{puzzle} <gray>- <aqua>click to start | {puzzle}, l'identifiant d'entrée de l'énigme |
| Puzzle Menu | footerText | <gray>Use <white>/typewriter puzzle stop<gray> to stop all active puzzles. | aucun |
| Memory Sequence | memorizeMessage | <gold>Memorize the sequence… | aucun |
| Memory Sequence | yourTurnMessage | <green>Your turn! <white>{progress}/{total} | {progress}, {total} |
| Memory Sequence | stepCorrectMessage | <green>Well done! <white>{progress}/{total} | {progress}, {total} |
| Lever Order | wrongOrderMessage | <red>Wrong order — the levers have been reset. | aucun |
| Pattern Placement | progressMessage | <green>Pattern <white>{progress}/{total} | {progress}, {total} |
| Item Frame | missingFrameMessage | <red>No item frame at <white>{x} {y} {z} | {x}, {y}, {z} |
| Item Frame | wrongItemMessage | <red>That is not the right item in the frame. | aucun |
| Item Frame | insertingMessage | <gray>Inserting the item… | aucun |
| Item Frame | missingItemMessage | <yellow>First place the requested item in the frame. | aucun |
| Item Frame | itemPlacedMessage | <green>Item placed — rotate the frame. | aucun |
| Item Frame | rotationMessage | <gray>Rotation {current}/{total} | {current}, {total} |
hintMessage, completionMessage et les champs du menu de chat sont envoyés dans le chat ; les autres champs s'affichent dans l'action bar. Certaines de ces valeurs par défaut étaient en français dans les versions précédentes ; elles sont désormais en anglais, et une page qui a stocké le texte français le garde.
Snippets
Tout ce qu'affichent les commandes /typewriter puzzle, commandes d'administration comprises, ainsi que les deux messages communs à toutes les énigmes, est un snippet TypeWriter. Ouvrez plugins/Typewriter/snippets.yml, trouvez la clé sous content.puzzle, changez la valeur et lancez /tw reload. L'extension enregistre tous ses snippets avec leur texte par défaut au démarrage : ils apparaissent donc dans le fichier après le premier démarrage.
Snippet (sous content.puzzle.) | Par défaut | Placeholders |
|---|---|---|
command.no_menu | <red>No puzzle menu configured. | aucun |
command.list.none | <red>No puzzles configured. | aucun |
command.list.header | <gold>=== Available Puzzles === | aucun |
command.list.line | <green>{puzzle} <gray>- {type} | {puzzle}, {type} |
command.puzzle_not_found | <red>Puzzle not found: <white>{puzzle} | {puzzle} |
command.start.already_completed | <yellow>Puzzle already completed. Use <white>/typewriter puzzle admin reset {player} {puzzle}<yellow> to replay it. | {player}, {puzzle} |
command.start.started | <green>Starting puzzle: <white>{type} | {type} |
command.join.already_completed | <yellow>Puzzle already completed for you: <white>{puzzle} | {puzzle} |
command.join.joined | <green>Joined puzzle: <white>{type} | {type} |
command.stop.not_active | <gray>Puzzle is not active: <white>{puzzle} | {puzzle} |
command.stop.stopped | <yellow>Stopped puzzle: <white>{puzzle} | {puzzle} |
command.stop.all_none | <gray>No active puzzle. | aucun |
command.stop.all_stopped | <yellow>Stopped <white>{count} <yellow>puzzle(s). | {count} |
command.status.header | <gold>=== Puzzle Status === | aucun |
command.status.line | <gray>{puzzle}: {status} <dark_gray>progress={progress} | {puzzle}, {status}, {progress} |
command.status.active | <green>ACTIVE | aucun |
command.status.completed | <aqua>COMPLETED | aucun |
command.status.stopped | <yellow>STOPPED | aucun |
command.status.inactive | <gray>INACTIVE | aucun |
command.chain.not_found | <red>Chain not found: <white>{chain} | {chain} |
command.chain.invalid | <red>Chain is invalid or contains unresolved puzzles: <white>{chain} | {chain} |
command.chain.empty | <red>Chain has no resolvable puzzle entries. | aucun |
command.chain.started | <green>Starting puzzle chain: <white>{chain} | {chain} |
command.leaderboard.header | <gold>=== Puzzle Stats: <white>{puzzle} <gold>=== | {puzzle} |
command.leaderboard.attempts | <gray>Attempts: <white>{attempts} | {attempts} |
command.leaderboard.solves | <gray>Solves: <white>{solves} | {solves} |
command.leaderboard.best_time | <gray>Best time: <white>{seconds}s | {seconds} |
command.leaderboard.rows_header | <gold>--- Leaderboard --- | aucun |
command.leaderboard.row | <gray>#{rank} <white>{player} <gray>- <white>{solves} solves | {rank}, {player}, {solves} |
command.leaderboard.row_timed | <gray>#{rank} <white>{player} <gray>- <white>{solves} solves <gray>{seconds}s | {rank}, {player}, {solves}, {seconds} |
command.admin.reset.player_not_found | <red>Player not found: <white>{player} | {player} |
command.admin.reset.done | <green>Reset puzzle <white>{puzzle} <green>for <white>{player} | {puzzle}, {player} |
command.admin.reset.done_group | <green>Reset puzzle <white>{puzzle} <green>for <white>{player} <green>and its group (<white>{count}<green> online) | {puzzle}, {player}, {count} |
command.admin.reload.done | <green>Puzzle runtime states cleared. | aucun |
play.cooldown_wait | <red>Puzzle on cooldown — <white>{seconds}s | {seconds} |
play.max_attempts | <red>Too many mistakes — restart the puzzle to try again. | aucun |
{type} est le nom du type d'énigme (Memory Sequence, Lever Order, ...) et {status} est l'un des quatre snippets command.status.* : les deux gardent donc leurs couleurs. Tout autre placeholder est du texte brut : ce qu'un joueur tape dans une commande ne peut pas ajouter de mise en forme à la réponse.
Entrées
14 entrées, générées depuis la source de l'extension.
Actions1
- Puzzle MenuPuzzle Menu
Faits2
- Puzzle Active FactPuzzle Active Fact
- Puzzle Solved FactPuzzle Solved Fact
Audiences9
- Puzzle Block PushPush blocks into target holes -
- Puzzle Combination LockEnter the correct code by pressing buttons/levers in sequence
- Puzzle Coop PressureCooperative pressure plate puzzle -
- Puzzle Item FrameRotate item frames to the correct angles
- Puzzle Laser GridLaser grid puzzle -
- Puzzle Lever OrderPuzzle where levers must be activated in the correct order
- Puzzle MemoryMemory sequence puzzle -
- Puzzle PatternPattern placement puzzle -
- Puzzle PedestalOffer an item on a pedestal to solve the puzzle
Artefacts1
- Puzzle ArtifactPersists puzzle states across server restarts
Autres entrées1
- Puzzle ChainChain of puzzles -
Dépannage
Le plateau n'apparaît pas. Vous devez être dans le monde des positions de l'énigme et à moins de activationRadius de l'une d'elles. Les positions laissées à 0, 0, 0 sont ignorées ; une énigme sans position définie n'a donc pas d'ancrage.
Rien ne se passe quand je clique. Vérifiez que vous faites partie de l'audience (les critères doivent correspondre, et un filtre d'audience doit vous inclure) et que l'énigme n'est pas déjà résolue pour vous : utilisez /typewriter puzzle status, et /typewriter puzzle admin reset <player> <id> pour rejouer. Les clics pendant le cooldown d'échec sont ignorés ; l'action bar indique le temps restant.
/typewriter puzzle start indique que l'énigme est introuvable. Les énigmes sont enregistrées au chargement de l'extension, par identifiant d'entrée. Rechargez après avoir ajouté une énigme, et utilisez l'identifiant d'entrée, pas son nom.
L'énigme de mémoire ne démarre jamais. buttons doit contenir au moins 2 éléments, et chacun doit avoir une position.
L'énigme de motif ignore mes blocs. pattern doit avoir une longueur multiple de columns, et vous devez placer les blocs sur la grille à la hauteur Y de gridOrigin. Un mauvais matériau est annulé.
L'énigme de cadre d'objet indique qu'il n'y a pas de cadre. Placez d'abord un cadre d'objet à la position configurée. Le journal affiche aussi un avertissement avec les coordonnées.
La progression est perdue après la reconnexion. Voir l'avertissement dans Configuration : utilisez fact pour conserver le résultat.
Une énigme coopérative ne se termine jamais. Chaque joueur doit faire partie de l'audience (/typewriter puzzle join <id>), se tenir sur une plaque différente et y rester pendant holdDuration. Les objets lâchés sur les plaques ne comptent pas.