Pular para o conteúdo principal

Changelog

Notas de versão das extensões públicas do BTC Studio. Cada release lista a extensão, sua versão e o que mudou para os donos de servidor, das mais recentes para as mais antigas, com um link para a release e para a documentação da extensão.

As extensões pagas linkam apenas para a sua documentação; seus downloads permanecem na loja. As extensões privadas não são listadas aqui.

2026-10-16​

Dungeon v1.2​

Cada mudança está listada no changelog do Dungeon. Nada muda para uma dungeon existente até que ela use um dos novos campos.

  • Requer GUI (OmniGUI) 0.20: o ranking do Dungeon usa a fonte de ranking do GUI 0.20 e não carrega com um GUI mais antigo. Atualize o GUI primeiro.
  • Loot compartilhado: nova entry Dungeon Loot Table, usada pelos baús (lootTableRef) e pelos mobs (lootTable). Um baú a sorteia uma vez na primeira abertura, um mob quando morre.
  • Mais baús: additionalLocations coloca vários baús a partir de uma única entry Dungeon Loot Chest (ignorado em uma dungeon gerada). O Loot Chest Trigger ganha particleEffect, com eixos X, Y e Z separados.
  • Ondas e escala: o Dungeon Mob Spawn ganha waves, maxSimultaneous, escala com o número de jogadores (perExtraPlayer, maxCount, playerCountSource), spawnParticle e os gatilhos onWaveCleared e onCleared. Novo evento On Dungeon Mobs Cleared, para abrir uma porta ou fazer um baú aparecer quando todos os mobs forem derrotados.
  • Restrições: nova entry Dungeon Restrictions (elytra, barco ou carrinho, pérola do Ender, fruta de chorus, impulso do tridente, comandos bloqueados, mensagem de recusa, permissão de contorno), com gameMode, limitInteractions (interações permitidas, entidades protegidas) e messageRepeatDelay. O impulso do tridente e a fruta de chorus são recusados no clique. Só a permissão de contorno isenta um jogador: um operador a tem, a menos que o nó esteja em false.
  • Estatísticas: 22 estatísticas por jogador, contadas por artifact com um total entre vários artifacts: dano causado e sofrido (só a vida realmente perdida), abates, ondas e salas limpas, tempo jogado, mortes, recordes... statsMobScope escolhe os mobs contados. Uma morte que tira o jogador da run não conta mais como runs_left. Novo fact dungeon_stat; placeholders dungeon_stat_<key>[_raw], dungeon_total_<key> e dungeon_inst_<id>_<key>; snippets content.dungeon_stats.duration_format e content.dungeon_stats.missing_value.
  • Ranking: nova entry dungeon_leaderboard_source (LIFETIME ou CURRENT_RUN, rankBy, values, durationFormat, decimals) para ligar ao campo source de um ranking do GUI.
  • Reconexão: reconnectGrace (2 minutos por padrão). Um membro desconectado mantém seu lugar e retoma de onde estava (sidebar, ocultamentos, modo de jogo). Depois disso, ele sai da run e volta ao ponto de entrada na próxima conexão.
  • MMOProfiles: o retorno ao ponto de entrada e o modo de jogo original são aplicados de novo depois da escolha do perfil.
  • Menus: os campos de slot da Dungeon Category unlockedLore e lockedLore agora são unlockLore e lockLore. Páginas antigas continuam sendo lidas; a chave nova vence se as duas estiverem presentes.
  • Quebra de API para addons: DungeonArtifactData, DungeonStats e PlayerDungeonStats passaram para o pacote btcrenaud.dungeons.core, e DungeonArtifactEntry.getPlayerStats e update mudaram de assinatura. Um addon compilado contra o Dungeon 1.1.x precisa ser recompilado.

Documentação

GUI v0.20​

  • Devolver o loot: dropOnClose em um layout simples devolve, ao fechar o menu, o que o jogador não pegou ou o que colocou ali. closeDelivery escolhe GIVE_OR_DROP (padrão: no inventário, o excedente aos pés) ou DROP. Desativado por padrão.
  • Itens aleatórios: rollPerSlot sorteia um item aleatório para cada slot repetido em vez de um só para todos, e o novo liveItem o sorteia de novo a cada atualização.
  • Nome vazio ignorado: um item com nome vazio mantém o próprio nome em vez de aparecer sem nome.
  • Linhas de ranking de outra extensão: novo campo source em gui_leaderboard. As linhas vêm de uma entry fonte, para todos os jogadores, online ou não, como a do Dungeon. Os textos de linha aceitam {score}, {score_raw} e {value_<key>}. Os textos de uma fonte são texto puro: um nome que parece uma tag MiniMessage, como <red>, não muda mais a ordem.

Release v0.20 · Documentação

MythicMobs v0.12​

  • Mobs visíveis apenas para alguns jogadores: spawn_mythicmobs_mob e mythic_spawner têm um novo campo visibilityCriteria. O mob só é visível, alvejável e ferível para os jogadores que atendem aos criteria, reavaliados continuamente (visibilityRefreshInterval, 1 segundo por padrão). Um visibilityGroup agora é acompanhado ao vivo em vez de ficar fixo no spawn.
  • collidable (spawn_mythicmobs_mob, mythic_spawner, padrão true): false remove colisão e empurrões para todos.
  • Abandono: spawn_mythicmobs_mob tem novos campos abandonRange e abandonDelay. O mob é removido quando nenhum jogador autorizado permanece ao alcance durante o atraso (abandonRange 0 = desativado). O editor web preenche as novas durações com 1 segundo: confira abandonDelay.
  • despawn_mythicmobs_mob: novo campo scope, ALL (padrão, como antes) ou VISIBLE_TO_PLAYER (apenas os mobs que o jogador vê).
  • Proteção: todo o dano ligado a um mob restrito (corpo a corpo, projéteis, skills do MythicMobs, fogo) é bloqueado em relação aos jogadores não autorizados, e vice-versa. Os projéteis atravessam, e o mob larga um alvo não autorizado.
  • Condição do MythicMobs typewritervisible (alias twvisible): adicione-a às skills sem dano (poção, arremesso...), no targeter (conditions=[ - twvisible true ]) ou como TargetCondition, para que ignorem os jogadores que não veem o mob. A extensão executa /mm reload uma vez na inicialização quando seus arquivos do MythicMobs a usam.
  • Um mob cuja entrada de origem é excluída continua oculto para todos.
  • Limites: a colisão é tudo ou nada; skills sem dano não são filtradas sem twvisible; sons e partículas longe do mob não são ocultados.

Release v0.12 · Documentation

Shops v1.12​

  • Recompilada contra o GUI 0.20, que agora é exigido: a versão anterior não abre seus menus com o GUI 0.20. Nada mais muda.

Release v1.12 · Documentation

Quest Codex v2.16​

  • Recompilada contra o GUI 0.20, que agora é exigido: a versão anterior não abre seus menus com o GUI 0.20. Nada mais muda.

Release v2.16 · Documentation

Corpse v0.7​

  • Recompilada contra o GUI 0.20, que agora é exigido: a versão anterior não abre seus menus com o GUI 0.20. Nada mais muda.

Release v0.7 · Documentation

Numerical Storage v0.15​

  • Recompilada contra o GUI 0.20, que agora é exigido: a versão anterior não abre seus menus com o GUI 0.20. Nada mais muda.

Release v0.15 · Documentation

2026-10-12​

Dungeon v1.1.1​

  • Paper 26.x, WORLD_PER_RUN: uma run podia falhar com The server did not create world 'dungeon_classic_...'. A cópia do modelo mantinha o ID de mundo do modelo (data/paper/metadata.dat), então o servidor a recusava como duplicada. Agora a cópia recebe o próprio ID.

Documentação · Changelog do Dungeon

2026-10-08​

Dungeon v1.1​

Uma reformulação completa construída em torno de runs: mundos isolados, dungeons geradas, NPCs por run e mobs vanilla. Leia a nota de migração antes de atualizar a partir da 0.10; cada mudança está listada no changelog do Dungeon.

  • Runs: cada run tem seu próprio estado e seu próprio diário. Iniciar uma run é tudo ou nada, e o custo de entrada é reembolsado se ela falhar. /tw reload e Publish retomam as runs em andamento em vez de encerrá-las.
  • Isolamento: três modos por dungeon (SLIME_CLONE, WORLD_PER_RUN, SHARED_WORLD_SLOTS) ou AUTO.
  • Dungeons geradas: modelos de salas, conectores, pools, geradores e afixos, com um editor no jogo para portas e marcadores.
  • NPCs e mobs: NPCs por run a partir de qualquer definição de entidade, exibidos apenas para os membros da run; mobs de combate vanilla gerados uma vez por run, com um limite de mobs vivos.
  • Textos: todo texto do jogador é um snippet editável. Somente Paper.
  • Respostas dos comandos: cada resposta dos comandos /tw dungeon, os de administração incluídos, é um snippet editável (content.dungeon_command.).
  • Estatísticas: guardadas por perfil do MMOProfiles quando esse plugin está instalado e, caso contrário, por jogador.
  • Mundos do Paper 26.x: os mundos guardados no estilo do Paper 26.x (dimensions/minecraft/<nome>) são encontrados para SHARED_WORLD_SLOTS e copiados para WORLD_PER_RUN.

Documentação

MythicMobs NPC v5.0​

  • NPCs em dungeons: com ticking desativado, um NPC colocado pelo Dungeon 1.0 é exibido apenas para os membros da sua run, e um clique dá uma interação ao jogador certo.
  • Bone Visibility Data e Attachment Data agora são aplicados ao modelo do NPC, com ticking ativado ou desativado, e novamente após cada respawn.
  • Play Animation: force agora interrompe as outras animações iniciadas pela ação nesse NPC; uma speed de 0 ou menos toca em velocidade normal.
  • MythicMob Skill Objective: skillName agora funciona por meio da mecânica do MythicMobs typewriterSkill{name=..} (alias twskill), adicionada à habilidade e seguida de /mm reload. O progresso é armazenado em fact, e o progresso anterior é migrado automaticamente. A mecânica sobrevive a uma publicação a partir do editor web; após uma parada e inicialização completas do Typewriter, o console pede /mm reload.
  • Objetivo de loot: os nomes de item e de mob do loot são legíveis, com suas cores (antes eram texto técnico), e a marca de conclusão ✔ é a mesma das outras extensões de objetivos.

Documentação

MMOItems v2.4​

  • Advanced Tooltip Config: overrideDefaultLore agora é lido. Quando está desativado, quando o sistema está desativado ou quando a entrada não existe, todo o lore do MMOItems aparece em uma só página, sem paginação nem comparação.
  • Tags do lore: as tags do formato de lore do MMOItems (<page_break>, <category_image>, <pagination_indicator>, <comparison_indicator>, <requirement_met>, <requirement_not_met>, <total_pages>, <current_page>, <comparison_value>, <comparison_sign>) agora são sempre substituídas ou removidas, e o jogador não as vê mais como texto bruto.
  • Modo criativo: a paginação e o lore avançado só se aplicam em sobrevivência e aventura. No criativo o lore do MMOItems é deixado intacto (tags incluídas), porque o cliente criativo devolve os itens como os exibe e reescrever o lore alteraria o item real.
  • Os campos da entrada começam com valores funcionais quando a entrada é criada no editor web (isEnabled, overrideDefaultLore e enableComparisonTags ativados, paginationKeybind SWAP_OFFHAND, comparisonKeybind SNEAK, statsStartOnPage 2, símbolos e indicadores padrão).

Documentação

Shops v1.11​

  • perPlayer agora dá a cada jogador seu próprio estoque de cada item; um reset reabastece o de todos. Os limites mantêm seu próprio escopo.
  • defaultRefreshTicks e o refreshTicks do item redesenham uma loja aberta quando o estoque exibido muda (somente estoques finitos; 0 na loja significa nenhuma verificação automática).
  • O guiSlot do item fixa um item em um slot fixo da área de conteúdo em todas as páginas; um item que não pode ser colocado é movido para uma célula livre ou informado no console.
  • sellAllEnabled desativado agora recusa a ação de vender tudo com cannotSellMessage.
  • As respostas dos comandos, os ícones de tendência, o lore Limited/Unlimited, as linhas de preço, os nomes padrão, o texto sem preço e o formato de duração agora são editáveis; o dia do cooldown padrão é escrito d (antes j).

Release v1.11 · Documentação

GUI v0.19​

  • audioDefaults de gui_settings agora se aplica como valor de reserva: um som deixado vazio em uma ação Open GUI é tomado dele, som por som.
  • Os layouts roláveis recebem setas padrão enquanto showDefaultButtons estiver ativado (o padrão): uma por direção sem entrada em buttons, exibida apenas quando o conteúdo pode rolar nessa direção, e nunca sobre uma célula ocupada. Os menus roláveis existentes ganham setas; defina showDefaultButtons como false para mantê-los como estavam.
  • Novo campo defaultStep nos layouts roláveis e nova lista scrollArrows em gui_settings (direction, item, name, x, y) para alterar as setas padrão.
  • Novo texts em gui_settings: os botões Confirm e Cancel e a linha de progresso do armazenamento são editáveis. "Confirmer" passa a ser "Confirm". O separador do caminho de navegação, que aparecia corrompido, foi corrigido.

Release v0.19 · Documentação

Quest Codex v2.15​

  • A permissão typewriter.codex.open agora é declarada pela extensão, somente para operadores por padrão, e por isso aparece em plugins de permissões como o LuckPerms.
  • Os rótulos de navegação, os rótulos de ordenação, os títulos de menu padrão e a mensagem de categoria desconhecida são editáveis (navLabels, sortTexts, mainMenuTitle, trackedQuestsTitle, unknownCategoryMessage).

Release v2.15 · Documentação

Vote System v0.9​

  • Vote Config agora é lido: cooldownSeconds acima de 0 permite que um jogador vote novamente após esse número de segundos (as contagens são cumulativas), e debug registra os votos aceitos e recusados.
  • Os votos salvos antes da existência do cooldown são datados do primeiro contato após a atualização, então o cooldown deles começa nesse momento.
  • As respostas dos comandos /tw vote são snippets editáveis (content.vote.).
  • Cores MiniMessage: a mensagem de encerramento, o novo blockedMessage e os dois textos de Vote Message agora são lidos como MiniMessage, com os placeholders resolvidos (as tags apareciam como escritas). As respostas de comando padrão são coloridas.
  • Um voto recusado é realmente recusado: os triggers e modifiers de Vote Action só são executados quando o voto é registrado; uma recusa não mostra mais a mensagem de aceitação e nada dispara duas vezes. Uma recusa mostra o closedMessage (após a data final) ou o novo blockedMessage (antes do fim da espera) e dispara os novos refusedTriggers. Cada recusa é registrada no log quando debug está ativado.
  • Novos placeholders vote_has_voted_<id> e vote_closed_<id> (1 ou 0), e vote_remaining_<id> (segundos até a data final, 0 sem data).

Release v0.9 · Documentação

Discord v0.13​

  • Os triggers de um Webhook Fact Event agora são executados depois que um webhook é publicado, para o jogador cuja mudança de fact foi publicada.
  • Novo triggerCooldownSeconds (padrão 1) no Webhook Fact Event: uma proteção contra loops entre dois disparos de triggers para o mesmo jogador; 0 a desativa.

Release v0.13 · Documentação

Custom Biome v0.9​

  • Explore Biome Objective agora funciona: biomes e requireAll são lidos quando um jogador entra em um bioma, e o novo campo triggers executa entries quando o objetivo está concluído e ativo. O objetivo registra a descoberta por conta própria; nenhum Enter Biome Event é necessário.
  • As respostas dos comandos /tw biome e o texto unknown dos placeholders de bioma são snippets editáveis (content.custombiome.).
  • Paper 26.3: os biomas personalizados voltam a ser registrados; no 26.3 eles falhavam ao carregar (injeção ao vivo e fallback por datapack).

Release v0.9 · Documentação

Numerical Storage v0.14​

  • optionalButtons do menu e de cada submenu agora são desenhados: itens somente de exibição em seus slots que substituem o que o layout colocar no mesmo slot.
  • profileMode agora usa o MMOProfiles: um saldo por perfil do MMOProfiles. Sem o MMOProfiles, é o saldo do jogador. Com o MMOProfiles e sem perfil ativo (seleção de perfil, ou após /mmoprofiles quit), o saldo exibido é 0 e as gravações são recusadas: os comandos de administração e as ações de menu respondem com o noActiveProfileMessage editável (em adminMessages) e não gravam nada. Os juros de um perfil são acertados quando ele é selecionado.
  • As respostas dos comandos de administração são editáveis (adminMessages); os textos dos placeholders e o formato de duração são snippets (numericalstorage.placeholder., numericalstorage.duration.).
  • Os placeholders carregam o armazenamento ao entrar, então mostram o saldo guardado em vez de um saldo vazio enquanto o cache está frio.
  • Os placeholders e o botão de upgrade de nível agora seguem profileMode; /tw ns add/remove respondem a um valor inválido ou a um artifact ausente com mensagens editáveis.

Release v0.14 · Documentação

Puzzle v0.6​

  • isShared agora compartilha a progressão de um grupo (o grupo do fact do puzzle): a primeira resolução conta para o grupo, o fact é levantado uma vez, e cada membro recebe uma única vez a mensagem de conclusão, onComplete e a etapa da cadeia (um membro ausente os recebe ao voltar).
  • Um jogador recebe a conclusão de um puzzle no máximo uma vez, mesmo ao mudar de grupo, até que um reset de admin o envolva. /typewriter puzzle admin reset <player> <id> reabre um puzzle compartilhado para todo o grupo.
  • Um Puzzle Artifact agora é obrigatório para puzzles compartilhados: sem ele, uma reinicialização paga a conclusão novamente, e voltar a uma build mais antiga perde o registro compartilhado.
  • Os textos para o jogador e as respostas dos comandos são editáveis: as mensagens de cada puzzle e do Puzzle Menu são campos da entrada, e as respostas de /tw puzzle são snippets (content.puzzle.). Os textos que eram em francês por padrão agora estão em inglês; uma página que armazenou o texto em francês o mantém.
  • Corrigido, blocos do lado do cliente: um bloco desenhado não some mais quando o seu clique é cancelado. O tabuleiro é redesenhado um tick após cada clique cancelado (os espelhos do Laser Grid sumiam ao clicar com o botão direito em vez de girar, os blocos do Block Push sumiam quando um empurrão era recusado, e o mesmo para os cliques de Memory, Pattern, Item Frame e Pedestal).
  • Corrigido, Block Push: um bloco empurrado de volta para a sua casa inicial não quica mais nem some, e um buraco-alvo é desenhado de novo quando um bloco foi empurrado sobre ele e além. Um empurrão recusado conta um erro por bloco e casa-alvo, e não mais um por clique, então manter o clique contra uma parede não consome maxAttempts. Deixe as casas iniciais vazias (ar) no mundo. allowPull continua sem efeito (não implementado).
  • Corrigido, Lever Order: as alavancas que ficam ligadas voltam à posição original após uma ordem errada, e o seu acionamento é visível. Um clique durante o cooldown de falha não alcança mais uma alavanca real.
  • Corrigido, puzzles resolvidos: um Block Push, Combination Lock, Lever Order ou Laser Grid resolvido fica inerte (sem tabuleiro, sem interação cancelada) e não engole mais os cliques das suas alavancas e botões quando o jogador volta à sua audiência. Um Pedestal resolvido não engole mais a coleta do seu item.
  • Laser Grid: o feixe agora é desenhado pelo centro dos blocos e vira exatamente sobre cada espelho (antes estava deslocado). beamDensity é um número de partículas por bloco, e os vértices são sempre desenhados.
  • Laser Grid, maxBeamLength: novo campo, 64 blocos por padrão (0 ou menos equivale a 64, nunca ilimitado). Um tabuleiro com feixe mais longo deve aumentá-lo. O feixe nunca carrega um chunk: ele para na borda do mundo carregado.
  • Combination Lock: os dígitos são numerados a partir de 0 (a primeira posição listada é o dígito 0); a ajuda diz isso com um exemplo. Um valor de code fora dos dígitos agora registra um aviso no console em vez de ignorar em silêncio todos os toques.

Release v0.6 · Documentação

Corpse v0.6​

  • Filtro de mundos: allowedWorlds e excludedWorlds em corpse_settings escolhem onde uma morte deixa um corpo. Uma lista de permitidos vazia significa todos os mundos. Os curingas * e ? (dungeon_*), os nomes de mundo e as chaves de dimensão (minecraft:the_nether) são entendidos, e uma exclusão sempre vence. Fora dos mundos permitidos, a morte é vanilla.
  • filteredWorldDeath: em um mundo que o filtro recusa, VANILLA_DEATH_SCREEN (padrão) mantém a morte comum do Minecraft, cujo corpo e tela de morte são desenhados pelo cliente, e INSTANT_RESPAWN faz o jogador renascer no tick seguinte, sem tela de morte. Os itens e a experiência caem como no vanilla. Sem efeito quando as duas listas estão vazias.
  • Todos os textos são editáveis: mensagens, rótulos e materiais do menu, o formato do waypoint com suas oito setas de direção, as respostas de /corpses, o nome padrão do corpo e o texto do objetivo de recuperação. O nome de um jogador é escapado e nunca vira uma tag clicável.
  • Novas configurações interactionReach (6 blocos; o servidor não verificava a distância de um clique), interactionCooldownMillis e unknownWorldLabel. Uma definição também pode ser escolhida com a chave de dimensão, e o cabeçalho de /corpses list é editável. /corpses list e clear valem para todo o servidor. Novo outOfReachMessage opcional (vazio por padrão: nenhuma mensagem).
  • Verificação de perda e duplicação de itens: mortes, saque e armazenamento foram revisados; as correções abaixo fecham todos os caminhos de perda ou duplicação encontrados.
  • Corrigido, mortes: uma morte cancelada por outro plugin (totem, ressurreição) não leva mais o equipamento do jogador; keepInventory e keepLevel são respeitados (sem corpo com keepInventory), e os itens que outros plugins mantêm para o jogador não são mais duplicados no corpo. Se o corpo não puder ser criado, os itens caem normalmente.
  • Corrigido, saque: pegar um item com o inventário cheio não duplica mais a parte que coube, e dois cliques disputando o mesmo corpo não podem mais entregar o seu conteúdo duas vezes.
  • Corrigido, armazenamento: uma reinicialização não traz mais de volta itens já pegos, e um arquivo de armazenamento ilegível ou escrito pela metade não apaga mais os corpos guardados. Os corpos restaurados mantêm pose, brilho, nome e animação (não a skin nem a armadura do dono).
  • A mensagem de renascimento, o waypoint e o objetivo usam o corpo mais recente, e o menu de saque avisa antes de abrir em vez de depois do primeiro clique.

Release v0.6 · Documentação

MythicMobs v0.11​

  • mythic_spawner.group agora é lido: somente os membros do grupo ativam o spawner, criteria é verificado nesse grupo, e cada grupo tem seu próprio aquecimento e cooldown; o estado de um grupo é descartado quando nenhum membro está online.
  • A linha do MythicMob Kill Objective no rastreador de quests é editável pelos snippets advancedQuest.display e advancedQuest.completed.

Release v0.11 · Documentação

Enchantment Creator v0.11​

  • Agricultural Harvest agora lê o evento de quebra de bloco e colhe as plantações maduras ao redor do bloco quebrado (radius limitado a 8) em vez do bloco para o qual o jogador olha.
  • Agricultural Harvest: novos campos particle, particleCount, sound, soundVolume e soundPitch.
  • O que um jogador digita em /enchantcreator give (o nome do encantamento) é exibido como digitado nas respostas, nunca interpretado como formatação.

Release v0.11 · Documentação

TextDisplayDialogue v2.4​

  • Textos editáveis: os 15 snippets agora são lidos. Os layouts, nomes de interlocutor, linhas de texto, dicas, linhas de opções e prefixos de opções dos diálogos Spoken, Option e Player option e das legendas de cinemática são editados em plugins/Typewriter/snippets; os valores padrão reproduzem a exibição anterior.
  • Placeholder do temporizador: %typewriter_textdisplaydialogue_timer% agora está registrado no PlaceholderAPI e funciona fora dos diálogos (0 quando nenhum temporizador está ativo).
  • Mais duas mensagens editáveis: textdisplay.inventory.blocked (inventário bloqueado durante um diálogo) e textdisplay.error.init (a exibição não conseguiu iniciar); um snippet vazio oculta a mensagem. A causa de um erro de inicialização agora vai apenas para o log do servidor: nenhum detalhe da exceção é mostrado ao jogador. O diálogo Player option também lê textdisplay.speaker.format e os snippets textdisplay.option.* (mesma exibição padrão).
  • audioProfile removido de textdisplay_spoken: o campo nunca era lido.
  • Somente Paper: o Folia não é suportado.

Documentação

Removido da documentação​

  • BTC Nameplates: incorporado ao UiCore (mesmas entries, /nameplates); as páginas antigas redirecionam para o UiCore.
  • MMO Profile: abandonado, nunca lançado; suas páginas foram removidas.

2026-10-02​

MythicMobs NPC v4.9.1​

Correções para interações, animações e cinemáticas no Paper 26.x.

  • Cliques: o clique direito volta a funcionar no Paper 26.x, e LEFT_CLICK e ALL agora também disparam. Um clique dispara o diálogo uma única vez, nunca duas, e /tw reload não quebra mais os cliques com um NoClassDefFoundError.
  • Play Animation: uma ação cuja velocidade era deixada vazia tocava congelada no primeiro quadro; agora toca em velocidade normal. Também funciona em NPCs com ticking desativado, toca por cima das animações de repouso, de caminhada e de habilidades do MythicMobs, e espera pelo modelo quando ele ainda não foi carregado.
  • Cinemáticas em outro mundo: o NPC de uma cinemática de entidade permanecia no mundo anterior do jogador, por isso só aparecia depois de algumas execuções. Agora aparece já na primeira execução, com sua animação.
  • Movimento em cinemáticas: caminhada mais suave, sem alternância entre repouso e caminhada, e sem cintilação do ModelEngine de perto.
  • Limpeza: os portadores de NPC invisíveis não se acumulam mais no mundo após as cinemáticas.

Documentação

CraftEngine v1.1​

  • Audiência da zona de missão: dispose() sempre limpa seu estado e redefine o indicador de descarte, de modo que um /tw reload não deixa mais vazar um listener que retém o classloader anterior da extensão.

Documentação

2026-09-19​

GUI v0.18​

  • O aviso de sobreposição de slots agora cita gap e lembra que ele é um passo, e não um espaçamento: gap: 1 significa slots adjacentes, e não um slot vazio entre cada um. Um slot repetido colidindo com uma decoração colocada entre duas de suas cópias é a causa mais comum desse aviso.
  • Os menus escritos conforme a fórmula do Quest Codex anterior à 0.3.0, em que o passo aplicado era gap + 1, caem exatamente aqui (veja o Quest Codex v2.14).

Release v0.18 · Documentação

Quest Codex v2.14​

  • Documentada uma mudança incompatível feita no Quest Codex 0.3.0 e que nunca foi anunciada. Até então, os marcadores do codex usavam a própria fórmula de repetição, em que gap era um espaçamento (passo gap + 1). Desde a 0.3.0, eles usam a fórmula do motor GUI, em que gap é um passo: count: 3, direction: right, gap: 1 a partir de x=2 agora resulta em x=2, 3, 4 em vez de 2, 4, 6.
  • Um menu escrito antes da 0.3.0 portanto posiciona seus marcadores com um slot de distância e pode colidir com a decoração entre eles. Para restaurar o espaçamento anterior, dobre o passo: gap: 1 passa a ser gap: 2. A semântica de passo é mantida.
  • Os marcadores indexados agora redefinem gap junto com count e repeatY, de modo que a validação de menus não informa mais uma repetição órfã neles.
  • Compilado contra o GUI v0.18.

Release v2.14 · Documentação

2026-09-14​

GUI v0.17​

  • Um gap igual a 0 não empilha mais todas as cópias repetidas na célula de origem. O editor web serializa um gap intocado como 0: um QUEST_SLOT com count: 7 e direction: right produzia sete marcadores na mesma posição e um aviso "Slot overlap" que você nunca escreveu. gap agora é forçado a pelo menos 1, como count e repeatY.
  • A correção está no código compartilhado de repetição de slots, então o Quest Codex e o Shops a recebem sem recompilar.

Release v0.17 · Documentação

Shops v1.10​

  • Escambo: preços pagos em itens. O novo priceMode: ITEMS vende um artigo em troca de um ou vários itens em vez de moeda. itemPrice no item lista o custo (item mais quantidade por unidade comprada); defaultItemPrice na loja cobre todo artigo ITEMS que não declare nenhum. A lista do artigo substitui a da loja, nunca é somada a ela.
  • Um artigo ITEMS sem preço em lugar nenhum é recusado e registrado no log, nunca entregue de graça. O pagamento é simulado em todo o inventário antes de qualquer coisa ser removida, e o espaço para o item comprado é verificado primeiro, já que um escambo não tem reembolso.
  • Novos cannotAffordItemsMessage (tokens {missing}, {amount}) e o token de lore {item_price}, uma linha por item solicitado. As linhas {buy} e {sell} são descartadas em um artigo assim, e os placeholders buy_price / sell_price mostram um traço.
  • "Buy max" funciona em artigos de escambo. Um artigo ITEMS não pode ser revendido por moeda: seu preço de venda é zero.
  • Recompilado contra o GUI v0.17.

Release v1.10 · Documentação

2026-09-09​

Puzzle v0.5​

  • Corrigido: NoClassDefFoundError em PuzzleRenderers após o recarregamento de uma extensão. A extensão registrava dois listeners do Bukkit no plugin do motor e nunca os removia, então as instâncias antigas continuavam disparando contra um classloader fechado. Ambos agora são removidos quando a extensão é desligada, o que também impede o acúmulo de uma cópia extra a cada recarregamento.
  • Uma atualização visual já agendada quando a extensão é desligada não pode mais provocar o carregamento de uma classe no loader morto.

Release v0.5 · Documentação

2026-09-08​

Shops v1.9​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • Nenhuma mudança de comportamento.
  • Compilado contra o GUI v0.16.

Release v1.9 · Documentação

Discord v0.12​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • Nenhuma mudança de comportamento.

Release v0.12 · Documentação

Companion v0.10​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • Nenhuma mudança de comportamento.

Release v0.10 · Documentação

Corpse v0.5​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • Nenhuma mudança de comportamento.

Release v0.5 · Documentação

Custom Biome v0.8​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • Nenhuma mudança de comportamento.

Release v0.8 · Documentação

InputTracker v0.5​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • Nenhuma mudança de comportamento.

Release v0.5 · Documentação

Numerical Storage v0.13​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • Nenhuma mudança de comportamento.

Release v0.13 · Documentação

Puzzle v0.4​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • Nenhuma mudança de comportamento.

Release v0.4 · Documentação

Vanilla v1.4​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • Os textos de progresso dos objetivos (coletar, contar e verificar facts) agora são interpretados com o jogador, então os placeholders neles são resolvidos para esse jogador.

Release v1.4 · Documentação

Vote System v0.8​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • Nenhuma mudança de comportamento.

Release v0.8 · Documentação

Enchantment Creator v0.10​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • As ações das mecânicas agora são agendadas pelo próprio dispatcher síncrono do Typewriter em vez do auxiliar de scheduler privado da extensão.

Release v0.10 · Documentação

MMO Inventory v0.7​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • Nenhuma mudança de comportamento.

Release v0.7 · Documentação

MythicMobs v0.10​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • Nenhuma mudança de comportamento.

Release v0.10 · Documentação

GUI v0.16​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • Corrigidas as linhas de ranking que descreviam o espectador: uma linha de um jogador classificado agora resolve seu item, nome e as Vars de lore a partir desse jogador, e não de quem abriu o menu, então nem toda linha mostra mais os valores do espectador. As linhas de mundo, grupo e jogadores offline recorrem ao espectador.

Release v0.16 · Documentação

Quest Codex v2.13​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • Nenhuma mudança de comportamento.
  • Compilado contra o GUI v0.16.

Release v2.13 · Documentação

Tracking v0.11​

  • Recompilado contra o motor Typewriter 0.9.0-beta-177.
  • Nenhuma mudança de comportamento.

Release v0.11 · Documentação

2026-09-06​

Shops v1.8​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • Nenhuma mudança de comportamento.
  • Compilado contra o GUI v0.15.

Release v1.8 · Documentação

Discord v0.11​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • Nenhuma mudança de comportamento.

Release v0.11 · Documentação

Companion v0.9​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • Nenhuma mudança de comportamento.

Release v0.9 · Documentação

Corpse v0.4​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • A nameplate do cadáver agora usa o CustomNameProperty do motor.
  • Compilado contra o GUI v0.15.

Release v0.4 · Documentação

Custom Biome v0.7​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • Nenhuma mudança de comportamento.

Release v0.7 · Documentação

InputTracker v0.4​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • Nenhuma mudança de comportamento.

Release v0.4 · Documentação

Numerical Storage v0.12​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • Nenhuma mudança de comportamento.

Release v0.12 · Documentação

Puzzle v0.3​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • Nenhuma mudança de comportamento.

Release v0.3 · Documentação

Vanilla v1.3​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • As atividades de entidade (detecção de visibilidade, seguir, orbitar, evitar, audição, olfato, patrulha e semelhantes) foram portadas para o ciclo de vida de atividades do motor 0.9. Os nomes das entries não mudaram.

Release v1.3 · Documentação

Vote System v0.7​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • Mudança incompatível: campo de vote_action renomeado. option foi substituído por optionIndex, um número simples iniciado em 0. Selecione novamente a opção em todo vote_action existente.
  • Mudança incompatível: campo de vote_message dividido. message foi substituído por notVotedMessage e alreadyVotedMessage; deixe o segundo vazio para não enviar mensagem aos jogadores que já votaram.
  • vote_data agora usa vote_storage como padrão de artifactId: defina um nome fixo para manter as cédulas entre recarregamentos.
  • Novas entries vote_config (com debug e cooldownSeconds), vote_fact e vote_cast_event aparecem no editor.

Release v0.7 · Documentação

Dialog Menu v0.7​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • Nenhuma mudança de comportamento.

Release v0.7 · Documentação

Enchantment Creator v0.9​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • Nenhuma mudança de comportamento.

Release v0.9 · Documentação

MMO Inventory v0.6​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • Nenhuma mudança de comportamento.

Release v0.6 · Documentação

MythicMobs v0.9​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • Nenhuma mudança de comportamento.

Release v0.9 · Documentação

GUI v0.15​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • Nenhuma mudança de comportamento.

Release v0.15 · Documentação

Quest Codex v2.12​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • Nenhuma mudança de comportamento.
  • Compilado contra o GUI v0.15.

Release v2.12 · Documentação

Protection v1.3​

  • Obsoleto: esta é a última release do Protection. O sistema nativo de regiões do Typewriter é o substituto para novas instalações.
  • A extensão é mantida para os servidores existentes e não receberá novos recursos.
  • Recompilado contra o motor Typewriter 0.9.0-beta-176.

Release v1.3 · Documentação

Tracking v0.10​

  • Recompilado contra o motor Typewriter 0.9.0-beta-176.
  • Nenhuma mudança de comportamento.

Release v0.10 · Documentação

2026-08-29​

GUI v0.14​

  • Rankings de facts. A nova definição gui_leaderboard classifica jogadores, mundos ou grupos do Typewriter por um ou mais valores de fact, renderizada pelo novo layout leaderboard em qualquer pool de open_gui. As linhas aceitam {rank}, {name}, {score}, {group}, {world} e {score_<fact_id>}.
  • O novo artifact gui_leaderboard_population mantém os últimos valores conhecidos de jogadores offline, de modo que um ranking classifica mais do que apenas quem está conectado.
  • O novo dropOnClose em slots de armazenamento solta o conteúdo restante aos pés do jogador ao fechar, com Esc e ao desconectar.
  • Corrigidos os slots de armazenamento temporary que nunca eram limpos e o shift + clique direito em um item de cursor correspondente que retirava em vez de depositar.
  • Um viewPermission / clickPermission em branco não é mais tratado como uma permissão: os bloqueios não definidos salvos pelo editor web costumavam ocultar o slot ou a aba para todo não operador.
  • A validação na inicialização agora conhece o layout leaderboard e informa uma área de posições fora do inventário.

Release v0.14 · Documentação

Quest Codex v2.11​

  • Recompilado contra o GUI v0.14.

Release v2.11 · Documentação

Shops v1.7​

  • Recompilado contra o GUI v0.14.

Release v1.7 · Documentação

Corpse v0.3​

  • Recompilado contra o GUI v0.14.

Release v0.3 · Documentação

Numerical Storage v0.11​

  • Recompilado contra o GUI v0.14.

Release v0.11 · Documentação

2026-08-24​

Shops v1.6​

  • Nova árvore de comandos de operador /tw shop admin: listagem de lojas, inspeção de definições, controle de sessões de jogadores, reset em tempo de execução, gerenciamento de estoque de itens diretos e histórico de transações.
  • Nova permissão typewriter.shop.admin (apenas OP). typewriter.shop.open continua disponível aos jogadores por padrão.
  • Um reset manual compartilha o comportamento do reset automático e recalcula o próximo reset agendado.
  • Corrigido o registro da permissão do comando público para que não operadores possam abrir lojas.

Release v1.6 · Documentação

2026-08-16​

Discord v0.10​

  • Webhooks de facts. O novo webhook_fact_event publica uma mudança de fact em qualquer destino webhook_definition, para os escopos de jogador, grupo do Typewriter e global, com audiences opcionais, condições de valor, templates de mensagem e embed, threads de fórum e menções de cargos. Os escopos de grupo e global eliminam callbacks duplicados de jogadores que observam o mesmo fact.
  • O vínculo com o Discord é totalmente opcional: sem um discord_link_manifest, a extensão não inicializa mais as pontes do Discord nem resolve classes do JDA.
  • Um JDA desativado ou incompleto é informado pelo cliente em vez de lançar um NoClassDefFoundError na thread do servidor.
  • A release pública agora inclui o JDA 6.5.0 e suas dependências de execução.

Release v0.10 · Documentação

2026-08-21​

GUI v0.13​

  • Itens de slot ao vivo. itemProvider reconstrói o item, o nome e a lore de um slot no momento da renderização. Os slots de um layout são interpretados uma vez e a mesma lista é devolvida a cada renderização, então um placeholder ou uma contagem regressiva em uma lore era resolvido uma vez e depois congelado — autoRefreshTicks redesenhava um inventário idêntico para sempre.
  • Apenas uma abertura de janela em andamento por vez. GuiFactory.open() conclui um tick depois, então até lá o inventário superior ainda é a view anterior e toda renderização decidia reabrir. A segunda abertura fechava a primeira janela, esse fechamento era lido como um fechamento genuíno, e a sessão era destruída enquanto o menu continuava na tela — todos os botões ficavam mortos.
  • Uma animação com duração 0 não é mais uma animação. O painel grava um bloco de animação padrão em todo slot, então itens decorativos eram desenhados no índice 0, e a nova renderização que eles agendavam concorria com a abertura pendente.
  • Um botão marcado mantém as interações do próprio autor. Preencher buttonType costumava descartar toda a lista de interações, então um marcador que nenhum resolvedor reivindicava — prefixo errado, maiúsculas/minúsculas erradas ou a extensão dona ausente daquela tela — virava um item que clicava em silêncio, sem nada no console.

Release v0.13 · Documentação

Quest Codex v2.10​

  • Os menus que não conseguem ser desenhados são informados na inicialização, enquanto o console ainda está sendo lido, em vez de falharem silenciosamente na hora do clique. Cada mensagem indica a correção, não o sintoma.
  • Conversão única de pages criadas antes do chassi open_gui. O pool de layouts saiu de category_menu para uma entry open_gui referenciada, então uma page escrita conforme o esquema antigo mantinha um layout que o motor não lê mais: totalmente configurada no painel, sem renderizar nada.
  • Os títulos de advancements passam pela conversão real de MiniMessage para JSON, então a formatação escrita no título de uma quest sobrevive no advancement que ela gera.
  • Exige o OmniGUI v0.13.

Release v2.10 · Documentação

Puzzle v0.2​

  • Novo activationRadius em todo puzzle, padrão 16 blocos. Um puzzle só é renderizado e executado para um jogador que esteja no mundo de suas próprias posições, a esse raio de uma delas. 0 desativa apenas a verificação de distância — a verificação de mundo sempre se aplica.
  • Corrigido: um puzzle era desenhado em todas as dimensões. Os blocos e partículas no lado do cliente carregam coordenadas, mas não o mundo, então uma grade de laser configurada no Overworld era pintada diante do jogador no Nether, no End ou em qualquer outro mundo que ele visitasse.
  • Corrigido: um puzzle começava assim que o jogador entrava na sua audience, qualquer que fosse a distância. Uma sequência de memória podia exibir todo o seu padrão a alguém a milhares de blocos de distância, ou em outro mundo. A sequência agora começa quando o jogador chega ao tabuleiro.
  • Afastar-se limpa o tabuleiro no cliente e cancela as animações pendentes. O orçamento de tentativas, o cooldown de falha, timeLimit e lifespan são armados na chegada em vez de na entrada na audience.

Release v0.2 · Documentação

Custom Biome v0.6​

  • Mudança incompatível: biome_audience foi removida. Ela respondia "este jogador está nesse bioma" lendo o bioma do próprio mundo, que uma sobreposição no lado do cliente nunca altera — então, para todo bioma que esta extensão pinta, ela respondia falso, qualquer que fosse o que o jogador via na tela. Nenhuma configuração a fazia funcionar.
  • Duas entries a substituem: biome_overlay_audience (este jogador carrega essa sobreposição) e biome_region_audience (este jogador está dentro dessa região, mundo incluído). As pages que usam biome_audience devem ser reapontadas para uma delas.
  • As audiences de região comparam também o mundo, além das coordenadas, então uma região definida em um mundo não corresponde mais às mesmas coordenadas em outro. ignoreY transforma uma região em uma coluna infinita.
  • /tw biome region <entry> preenche os dois cantos de uma entry a partir da sua seleção atual do WorldEdit, em vez de digitar as coordenadas à mão.
  • As sobreposições por jogador são rastreadas por chunk e por dono: várias sobreposições podem cobrir um chunk, uma prevalece, e removê-la restaura o bioma real desse chunk em vez da última paleta pintada.

Release v0.6 · Documentação

Shops v1.5​

  • Recompilado contra o OmniGUI v0.13. GuiSlot ganhou um parâmetro itemProvider de tempo de renderização, o que alterou o construtor ao qual seus chamadores se ligam, então o JAR da v1.4 lançava NoSuchMethodError assim que uma loja era aberta no motor GUI atualizado — o inventário nunca aparecia.
  • Nenhuma mudança de comportamento. As duas versões andam juntas: a v1.4 não roda no OmniGUI v0.13, e a v1.5 não roda na v0.12.

Release v1.5 · Documentação

Numerical Storage v0.10​

  • Recompilado contra o OmniGUI v0.13, pela mesma mudança de assinatura de GuiSlot: o JAR da v0.9 lançava NoSuchMethodError quando um menu de armazenamento era aberto, e o menu nunca aparecia.
  • Nenhuma mudança de comportamento e nenhuma segunda migração: o armazenamento do esquema v2 é lido exatamente como a v0.9 o gravou.

Release v0.10 · Documentação

Corpse v0.2​

  • Recompilado contra o OmniGUI v0.13, pela mesma mudança de assinatura de GuiSlot: o JAR da v0.1 lançava NoSuchMethodError quando um cadáver era saqueado, então o menu de saque nunca abria e o cadáver ficava ali com o inventário inacessível.
  • Nenhuma mudança de comportamento. Os cadáveres armazenados, seus inventários e suas regras de proteção são lidos como antes.

Release v0.2

2026-08-12​

Release v0.2 · Documentação

GUI v0.12​

  • Menus estendidos. extendToPlayerInventory em open_gui transforma os 36 slots do próprio jogador em quatro linhas extras de menu, resultando em um canvas de 10 linhas. A projeção é apenas no lado do cliente: o inventário real nunca é gravado e é restaurado quando o menu fecha.
  • Um layout raiz cujo id termina em _extended ativa essa projeção por conta própria, de modo que um chassi compartilhado pode oferecer uma variante normal e uma estendida sem que todo menu repita a flag.
  • DynamicMarkers transforma marcadores de conteúdo repetidos em indexados (QUEST_SLOT#0, QUEST_SLOT#1, …) antes da interpretação, para que as extensões deixem de manter cada uma uma cópia privada dessa semântica.
  • A repetição de slots é limitada e informada: as posições fora da grade são descartadas e registradas no log com o id do layout e as coordenadas rejeitadas. O editor avisa quando count/gap/repeatY são definidos sem uma direction e acusa erro em uma desconhecida.
  • Documentado que gap é um passo (1 = adjacente) e que repeatY repete no eixo perpendicular a direction.
  • Corrigida a herança de mainLayoutId: um valor em branco no filho costumava prevalecer sobre o herdado, então uma page que herdava todo o seu chassi resolvia um layout inexistente e era renderizada vazia — sem nenhum botão para receber um clique.
  • O encobrimento de slots tem um único dono: quando dois slots reivindicam uma célula, vence o que carrega comportamento, na renderização e no clique, e a colisão é registrada uma vez.
  • A validação na inicialização agora informa apenas o que realmente falha. As verificações que sinalizavam a ausência de coisas opcionais foram removidas — frame.view.unresolved, slot.outOfFrame, layout.unreferenced — porque, em uma arquitetura de templates, elas descrevem o design, não um defeito. O que resta nomeia uma intenção escrita que falhou: uma view que aponta para um layout ausente, um slot que sai do inventário, dois slots de mesma natureza colidindo em um layout.

Release v0.12 · Documentação

Shops v1.4​

  • Modo aba. baseMenuId torna uma loja uma aba de um menu compartilhado: seu pool de layouts e suas views se mesclam por baixo do chassi, com views, defaultViewId e um retângulo de conteúdo (contentX, contentY, contentColumns, contentRows). Se deixado vazio, uma loja abre exatamente como antes.
  • Suporte a chassis estendidos: uma loja aberta dentro de um shell estendido agora recebe o canvas de 10 linhas.
  • Adicionados defaultNameFormat e defaultLoreFormat. Um item que não declara nome ou lore herda o formato da loja; um item que declara o próprio mantém o seu intacto — o formato da loja preenche lacunas, nunca sobrescreve o texto de um autor.
  • Ambos aceitam os mesmos tokens: {item}, {buy}, {sell}, {stock}, {stock_max}, {currency}. Uma linha de lore que pede um preço indisponível é descartada em vez de renderizada vazia.
  • Adicionado ShopTransactionEvent, disparado quando uma compra ou venda é concluída. É o ponto de ligação em que outras extensões se conectam — um repasse ao Discord, um log de auditoria — sem que o Shops saiba que elas existem. Apenas anunciado, nunca cancelável.
  • Adicionado notificationWebhookId. O Shops não o resolve e não sabe o que é um webhook; o id viaja no evento. Um listener que lance uma exceção é informado e a transação permanece — nada desfaz uma compra paga.
  • Corrigido um layout esvaziado de seus marcadores ser descartado do pool: uma tela de loja feita inteiramente de marcadores, ou uma aba ainda vazia, desaparecia em silêncio.

Release v1.4 · Documentação

Quest Codex v2.9​

  • A promoção de chassi estendido agora é transportada por herança e não por um id de layout literal. Um chassi cuja raiz tinha qualquer nome diferente de shell_root perdia seu acabamento estendido, e todo controle ancorado na faixa inferior sumia na renderização — e, portanto, não podia ser clicado.
  • A extensão é compilada contra o motor GUI da onda de releases em vez de um jar mais antigo fixado. Ela estava congelada na v0.11 do motor, então toda adição posterior a essa release era invisível para ela.

Release v2.9 · Documentação

Discord v0.9​

  • A extensão agora é Discord, não Community. O diretório, o pacote e o nome da extensão acompanham. Os nomes das entries não foram alterados, porque as pages os serializam.
  • DiscordClientService saiu do recurso de vínculo para o próprio pacote: a sincronização de chat, o console e os relatórios de bugs o usam, então ele nunca pertenceu ao vínculo de contas.
  • Os webhooks são entries. webhook_definition declara um destino do Discord uma vez e o referencia em todo lugar. A sincronização de chat, o vínculo de contas e os relatórios de bugs costumavam carregar cada um a própria cópia da URL, do nome de usuário e do avatar — trocar de canal significava editar todo manifest, sem nada garantindo que apontassem para o mesmo lugar.
  • WebhookService é um singleton que qualquer extensão pode injetar. O cliente HTTP costumava ser construído à mão no inicializador e entregue a cada serviço, então nada de fora conseguia enviar uma mensagem.
  • Os relatórios de bugs perderam sua segunda chave liga/desliga: um destino vazio é o estado desativado.
  • Migração. As pages escritas antes desta versão são convertidas na primeira inicialização: um webhook_definition por destino distinto — manifests configurados de forma idêntica compartilham uma entry — e os manifests são reapontados para ele. Cada page reescrita recebe antes um backup, em backup/community-webhook-v1/. A conversão é guiada pela forma, não por um número de versão, então executá-la duas vezes não muda nada. Um manifest que estava desligado mantém sua URL em um destino desativado em vez de perdê-la.
  • Anúncios de loja. shop_notification_manifest descreve como uma transação de loja é apresentada quando chega ao Discord. O destino está deliberadamente ausente dele — pertence à loja. Uma única apresentação serve, portanto, a todas as lojas, enquanto cada uma ainda publica no próprio canal. Exige a extensão Shops, mas não depende dela.

Release v0.9 · Documentação

Puzzle v0.1​

  • Primeira release.
  • Nove tipos de puzzle, cada um um objetivo do Typewriter com sua própria audience, progresso e triggers: empurrar blocos, oferendas em pedestal, sequências de memória, ordens de alavancas, colocação de padrões, rotações de item frames, fechaduras de combinação, grades de laser e placas de pressão cooperativas.
  • Tudo o que um puzzle desenha é no lado do cliente — blocos, prévias fantasma, destaques e feixes de laser são enviados ao jogador que o resolve. Dois jogadores podem trabalhar no mesmo tabuleiro sem ver o progresso um do outro, e o mundo nunca é modificado.
  • Ciclo de vida compartilhado em todo puzzle: timeLimit, maxAttempts, cooldownOnFail, resetOnWrong, lifespan, dicas e triggers onStart / onComplete / onFail / onTimeout / onLifespanExpire.
  • isShared troca um puzzle de progresso privado para um único tabuleiro que o grupo inteiro avança em conjunto.
  • puzzle_chain executa vários puzzles em ordem e dispara quando a sequência é resolvida; resetOnFail decide se um erro devolve o jogador ao início.
  • puzzle_artifact persiste o estado dos puzzles, então um reinício no meio de uma tentativa não apaga o progresso.
  • puzzle_solved_fact e puzzle_active_fact expõem o progresso ao restante do seu conteúdo; puzzle_menu lista os puzzles e seu estado no chat.
  • Compatível com Folia: toda leitura e escrita de mundo roda na região dona do puzzle.

Release v0.1 · Documentação

Corpse v0.1​

  • Primeira release.
  • Os cadáveres são renderizados uma vez por espectador, como os displays de entidade do próprio motor, de modo que todos os que estão por perto os veem, com animação de modelo e nameplates atualizando nos backends BetterModel, BTC Mob NPC e MythicMobs NPC.
  • Roda no Folia: todo agendamento passa por um scheduler compatível com Folia, e os drops de itens, orbs de experiência e partículas rodam na região dona do cadáver.
  • O inventário que um cadáver guarda sobrevive a um reinício, uma falha ou um recarregamento. Os cadáveres são armazenados no MySQL quando disponível, caso contrário na pasta do plugin, e restaurados na inicialização.
  • onlyOwnerCanLoot é aplicado, e o saque é associado ao próprio id de entidade do cadáver em vez de qualquer clique com o botão direito em até quatro blocos.
  • Uma definição de cadáver é escolhida a cada morte por mundo e prioridade, e sua duração de vida é resolvida uma vez, nesse cadáver.
  • Os eventos on_corpse_spawn, on_corpse_loot e on_corpse_expire passam pelo pipeline de triggers do motor e publicam o dono, o loot e a posição do cadáver como contexto.
  • displayName, showDisplayName, dropOnInteract, renderArmor, playDeathAnimation e deathAnimationName são todos respeitados, e a maioria das configurações são valores dinâmicos, então podem ser guiadas por placeholders e facts.
  • Um contorno de brilho renderizado no cliente com cor configurável e sons de cadáver enviados por jogador próximo em vez de em todo o mundo.
  • Os facts has_corpse e corpse_count, a audience corpse_owner_audience, corpse_waypoint mostrando distância e direção até o cadáver do próprio jogador, corpse_recovery_objective e corpse_admin_command com os subcomandos list e clear.
  • Uma janela de proteção de saque, depois da qual um cadáver abre para todos.
  • O menu de saque é um menu da extensão GUI em vez de um inventário simples com seu próprio listener de cliques, então herda o roteamento de cliques, o histórico de menus e a projeção de inventário estendido do motor. A extensão GUI é, portanto, obrigatória.

Release v0.1 · Documentação

Custom Biome v0.5​

  • Os biomas personalizados existem imediatamente. Uma definição é registrada no registro ativo assim que é salva, e não apenas depois de reiniciar o servidor. O datapack gerado agora é a camada de persistência e não o único caminho.
  • Corrigido o datapack gerado ser ignorado pelo servidor: seu pack format estava fixo em um valor antigo e ele era gravado em uma pasta que o servidor nunca lê.
  • Corrigido baseBiome não ter efeito algum além de plains. Os biomas agora são construídos a partir do bioma base mantido pelo servidor e codificados com seu próprio codec, então spawns de mobs, features e carvers são herdados em vez de perdidos.
  • Corrigidas as mudanças de bioma abrindo buracos no mundo: a atualização enviava pacotes de descarregamento de chunks, que o servidor nunca seguia com um reenvio. Os clientes agora recebem uma atualização de bioma construída a partir dos dados reais do chunk.
  • Corrigido leave_biome_event que nunca disparava. Os listeners de entrada e de saída sobrescreviam o estado um do outro, então o resultado dependia da ordem de registro.
  • Corrigida a pintura que gravava todo bloco de uma coluna em vez de um por célula 4x4x4, e fazia isso a partir da thread chamadora. As gravações agora são agendadas na região dona de cada chunk.
  • Um bioma que o servidor se recusaria a serializar agora é rejeitado no registro, com o valor problemático indicado. Antes, ele era aceito e depois quebrava o login de todos os jogadores.
  • Sobreposições de bioma por jogador (player_biome_overlay_action): mostre a um jogador um bioma diferente sem tocar no mundo nem afetar ninguém mais.
  • Pintura de regiões (paint_biome_region_action) com snapshots, e restore_biome_action para devolver uma região ao estado original.
  • biome_transition_cinematic: mude o bioma que um jogador vê ao longo de uma cinemática.
  • custom_biome_preset: compartilhe cores e atributos visuais entre biomas, sobrescritos por definição.
  • explore_biome_objective e biome_discovery_fact: quests concluídas visitando biomas.
  • Toda entry de leitura ganhou uma opção source, escolhendo entre o que é mostrado ao jogador e o que o mundo contém.
  • Removidos o /tw biome setcolor, que criava biomas descartáveis que nunca eram persistidos, e o modo de fact HASH, cujo valor não era estável entre reinícios.
  • O jar da extensão caiu de 2,6 MB para 230 KB: ele não inclui mais bibliotecas que o servidor já fornece.

Release v0.5 · Documentação

Enchantment Creator v0.8​

  • levelMode em uma mecânica compara runOnLevel como um nível exato, um mínimo (AT_LEAST) ou um máximo (AT_MOST). Antes, só era possível uma correspondência exata.
  • eventPhase executa as ações de uma mecânica durante o evento Bukkit atual, de modo que cancelar o evento ou alterar o dano realmente surta efeito. Defina como false para interações enfileiradas do Typewriter.
  • clientSideEffects passou a reconhecer o cliente, com uma ação client_particle_effect: o artifact BTC personalizado usa o renderizador baseado em PacketEvents quando disponível, e o artifact público do Paper usa uma alternativa do Bukkit restrita ao jogador.
  • As chaves de registro agora são derivadas de id. O name anterior é mantido como alias legado ao carregar pages e itens existentes, então nada precisa ser recriado.
  • O artifact público deliberadamente não carrega dependência do BTC-CORE nem do BTC Velocity: ele roda no Paper 1.21.x com Java 21, compilado a partir do JDK 25 com bytecode alvo Java 21.

Release v0.8 · Documentação

Numerical Storage v0.9​

  • transactionMode na configuração de transações: INTERNAL mantém o caminho PlaceholderAPI mais comando de console, VAULT passa diretamente pela API de Economy do Vault e ignora amountPlaceholder e os campos de comando.
  • addCommand e removeCommand estavam documentados ao contrário. addCommand conclui um depósito no armazenamento e é verificado antes da mutação persistente; removeCommand conclui um saque.
  • A persistência agora é assíncrona, com travas de mutação por artifact e um cache de curta duração, de modo que depósitos simultâneos não podem mais competir entre si.
  • Os arquivos de armazenamento passam para o esquema JSON versão 2 sob um caminho técnico de artifact. Um arquivo legado baseado no antigo artifactId semântico recebe backup em backups/numericalstorage/ e é migrado no primeiro acesso — faça backup do diretório assets/ do Typewriter antes de atualizar.
  • artifactId é um identificador técnico gerado: deixe-o vazio e o Typewriter o preenche.
  • Os placeholders recebem um argumento de definição explícito (%typewriter_ns_balance_bank%), o que elimina a antiga ambiguidade de separação por sublinhado quando o próprio ID de uma definição contém sublinhados.
  • Chaves opcionais cientes de perfil quando a integração com o Profiles está instalada.

Release v0.9

2026-08-07​

Release v0.9 · Documentação

Quest Codex v2.8​

  • Advancements reais do Minecraft. A nova entry advancement_definition grava advancements de verdade em um datapack pertencente à extensão, de modo que aparecem na tela de advancements vanilla com sua própria aba, árvore, molduras e toasts. parent referencia outra definição, então a árvore é desenhada no editor de nós.
  • grant_advancement concede um advancement ou o retira, e percorre a cadeia de pais para que um filho nunca seja obtido sob um pai não obtido.
  • autoGrant faz um advancement ser obtido no primeiro tick do jogador. Em uma raiz, é isso que dá existência à sua aba antes de qualquer coisa ter sido obtida.
  • Ordem das quests corrigida: uma quest aninhada lê sua ordem da própria subcategoria, as quests sem ordem explícita não colapsam mais juntas, e adicionar uma quest não apaga mais a ordem que ela já tinha.
  • Os marcadores de quests são paginados, o modo de ordenação é por jogador e o rastreamento múltiplo sobrevive a uma reconexão na ordem escolhida pelo jogador.

Release v2.8 · Documentação

GUI v0.11​

  • Tooltips de itens, com uma chave hideVanillaItemStats na entry de configuração do GUI.
  • Um layout paginado pode carregar um indicador de página, por meio do novo papel INDICATOR.
  • Os menus são validados quando o servidor inicia: um slot fora dos limites, um template ausente ou um tipo de botão desconhecido são nomeados no console antes de qualquer jogador abrir o menu.
  • <shift:N> é resolvido sem o CraftEngine, pela fonte Magic Digit incluída.
  • count e repeatY estão documentados como contagens de repetição de slots, e não como tamanhos de pilha.

Release v0.11 · Documentação

Shops v1.3​

  • Uma loja não pode mais deixar um jogador abaixo de zero. Três caminhos independentes o permitiam.
  • Um saldo ilegível não é mais lido como zero, e saldos formatados como 12.5k são interpretados.

2026-08-03​

Release v1.3 · Documentação

Quest Codex v2.7​

  • Adicionados modos de exibição de waypoints: WORLD_DIRECTIONAL projeta marcadores em uma esfera ao redor dos olhos do jogador ao longo da direção verdadeira do destino, TARGET_ANCHORED os coloca no alvo e ADAPTIVE transita suavemente entre os dois. HUD_LOCKED continua sendo o padrão, então as pages existentes não mudam.
  • Adicionados dimensionamento aparente constante e desagrupamento angular para que vários marcadores continuem legíveis quando seus destinos compartilham uma linha de visão.
  • Adicionada a renderização de múltiplos alvos em uma única entry de waypoint, com as novas seleções de objetivo rastreado ALL e ONE_PER_QUEST e um limite maxTargets.
  • Corrigido o rastreamento múltiplo ser ignorado pelos waypoints: os objetivos das quests rastreadas secundárias nunca eram resolvidos, então apenas a quest principal produzia um marcador.
  • Adicionado quest_codex_locator_bar, que renderiza os mesmos alvos resolvidos como pontos da locator bar vanilla no Minecraft 1.21.6+ sem gerar nenhuma entidade.

Release v2.7

2026-08-02​

Release v2.7 · Documentação

Quest Codex v2.6​

  • Adicionada recuperação persistente para diálogos e cinemáticas do Typewriter interrompidos, incluindo o último frame da cinemática. A recuperação agora preserva o snapshot capturado quando o Typewriter emite eventos de encerramento depois que um jogador se desconecta.
  • Adicionado rastreamento múltiplo persistente de quests com um menu de quests rastreadas, placeholders dedicados e uma fixture pública de waypoint com duas quests.
  • Adicionados waypoints apenas de texto no lado do cliente com texto de ícone configurável, displays de bloco centralizados, rotação de beacon centralizada, alinhamento do nível do alvo, interpolação suave, posicionamento perto do alvo e um cone de visibilidade horizontal configurável.
  • Removidas as camadas legadas de waypoint com item display e seta direcional antes de sua primeira implantação pública.

Release v2.6 · Documentação

GUI v0.10​

  • Adicionados os motores de layout Flex e Composite para posicionamento responsivo de slots e camadas de menu compostas.
  • Adicionadas views endereçáveis reutilizáveis com pools de layouts herdados, views padrão, breadcrumbs, tags de view e integração opcional com histórico.
  • Adicionados migração de esquema ciente de views e integração com o QuestCodex, além de metadados de publicação do Maven.
  • Corrigidas as trocas de view para reconstruir os menus sem piscar de fechar/reabrir e tornado o fechamento de inventário compatível com Folia.

Release v0.10 · Documentação

Shops v1.2​

  • Recompilado e validado o Shop Extension público contra o OmniGUI v0.10.
  • Preservados os layouts de loja dinâmicos existentes, o histórico de navegação, o tratamento de preenchimento, as regras de estoque e limite e os tratadores personalizados de botões de loja.
  • Nenhuma migração é necessária a partir do Shop Extension v1.1.

Release v1.2 · Documentação

MythicMobsNPC Extension v0.4.6​

  • Corrigida uma mudança de escala ignorada em um modelo fornecido sem nenhuma animação, do mesmo modo que na extensão BetterModel.
  • As variantes de mobs vanilla (gato, raposa, lobo, aldeão e semelhantes) são informadas uma vez no console em vez de ignoradas silenciosamente: elas pertencem à configuração do MythicMobs, que é dona da identidade do mob e as sobrescreveria a cada respawn.
  • Corrigida uma única entry de dados com falha cancelando todas as demais entries enviadas no mesmo lote, o que podia deixar um NPC sem nenhum dos seus dados configurados aplicados.
  • O efeito de brilho e o equipamento agora são aplicados no modelo, e não apenas no mob. O corpo do mob fica oculto atrás do modelo, então defini-los apenas no mob não deixava nada visível.
  • O equipamento agora informa no console quando o modelo não tem osso de item, em vez de não fazer nada silenciosamente.
  • O fogo é reafirmado a cada segundo para que não se apague sozinho, e agora avisa quando o BetterModel está ocultando o corpo sobre o qual as chamas são desenhadas.
  • Corrigida a nameplate engasgando quando o NPC anda ou segue uma rede de estradas: o text display agora interpola entre as atualizações em vez de se teletransportar em degraus.

BetterModel Extension v1.3​

  • Corrigida a escala do modelo ser ignorada em modelos fornecidos sem nenhuma animação. O BetterModel só recalcula a transformação de um modelo enquanto uma animação está em execução, então uma mudança de escala aplicada em tempo de execução nunca chegava a um modelo estático. A extensão agora força o recálculo por conta própria.
  • A mesma correção se aplica ao deslocamento do modelo, que passava pelo mesmo caminho de código.
  • As entries de dados de entidade agora realmente chegam ao modelo em vez de serem descartadas. Suportados: efeito de brilho, cor do efeito de poção (renderizada como um tom de item), brilho de luz, restrição de billboard, duração de interpolação, translação, escala 3D, tamanho da caixa, equipamento e em chamas.
  • Adicionado bettermodel_bone_appearance, uma versão por osso das configurações de brilho, tom, glint e luminosidade, com o mesmo sistema de criteria de bettermodel_bone_visibility.
  • O equipamento é mapeado para os ossos de item de mão e de cabeça do BetterModel. Os slots de armadura são informados uma vez no console em vez de ignorados silenciosamente, porque o torso e as pernas de um modelo carregam sua própria geometria.
  • Uma escala 3D que não é uniforme agora emite um aviso em vez de usar silenciosamente um único eixo: o BetterModel só suporta escala uniforme.
  • Qualquer entry de dados sem significado em um modelo 3D (poses, variantes de mobs, estado de reprodução...) agora é informada uma vez no console em vez de descartada em silêncio.
  • Brilho, tom, luminosidade, billboard, translação e equipamento agora sobrevivem a um recarregamento do resource pack ou a um respawn em vez de voltar à aparência padrão do modelo.
  • O equipamento agora informa no console quando o modelo não tem osso marcado como ri, li ou ph, em vez de não fazer nada silenciosamente — esse é o motivo habitual de um item não aparecer.
  • O fogo agora é desenhado na entidade de interação do NPC em vez de nos ossos do modelo: o cliente escala a chama conforme a caixa delimitadora da entidade, e uma display entity não tem nenhuma, então as chamas eram renderizadas com tamanho zero.

Nexo Extension v1.0​

  • Adicionados facts para verificar o que o jogador está segurando, carregando no inventário, olhando ou pisando.
  • Adicionadas variáveis que fornecem o ID e as propriedades do item, bloco e móvel alvo.
  • Adicionadas uma ação de dar e uma de remover item, ambas funcionando a partir do ID de item do Nexo.
  • Adicionados eventos de coleta, descarte e consumo de itens.
  • Adicionados eventos de interação e dano para blocos personalizados e móveis, além de um evento de drop de loot.
  • Os eventos agora passam seus dados (ID do bloco, posição, item na mão) para o que for executado em seguida, então um diálogo ou uma ação pode usá-los diretamente.

CraftEngine Extension v1.0​

  • Os objetivos de quest agora funcionam. Eles podem ser anexados a uma quest, salvam o progresso e podem disparar uma sequence ao serem concluídos.
  • Adicionados facts para cooldowns, para itens segurados e carregados e para o bloco ou móvel que o jogador mira.
  • Adicionadas variáveis que fornecem IDs, propriedades de itens e a lista do conteúdo carregado.
  • Adicionadas uma ação de dar e uma de remover item, ambas funcionando a partir do ID de item do CraftEngine.
  • Adicionados eventos de coleta, descarte e consumo de itens.
  • Adicionados eventos para tentativas de colocação e para golpes em móveis.
  • Os eventos agora passam seus dados para o que for executado em seguida.

ItemsAdder Extension v1.0​

  • Os eventos de bloco e de móvel agora leem o ItemsAdder diretamente em vez de adivinhar a partir de eventos vanilla, o que os torna confiáveis e remove um curto atraso que podia perder ou repetir um trigger.
  • Adicionados facts para itens segurados e carregados, usos restantes, durabilidade personalizada, visibilidade do HUD e crescimento de plantações.
  • Adicionadas variáveis que fornecem IDs, propriedades de itens e imagens de fonte.
  • Adicionadas uma ação de dar e uma de remover item, ambas funcionando a partir do ID de item do ItemsAdder.
  • Adicionados eventos de coleta, descarte e consumo de itens.
  • Adicionados eventos de interação, um evento de pré-colocação para móveis e um evento de morte de entidade personalizada.
  • Os eventos agora passam seus dados para o que for executado em seguida.

2026-07-26​

Quest Codex v2.5​

  • Adicionado rastreamento múltiplo persistente de quests por meio da entry quest_codex_tracking_artifact.
  • Adicionados o modo de menu de categoria @tracked e os marcadores dinâmicos TRACKED_QUEST_SLOT.
  • Adicionados /tw codex tracked e o comando interno de GUI codex:tracked.
  • Adicionados placeholders do PlaceholderAPI para contagem de quests rastreadas, limite, quest principal, quests rastreadas indexadas, status, objetivos e prioridades.
  • Documentado o layout do pacote de pages públicas: manifest principal, artifact de rastreamento estático, definições de quests e configurações do GUI.

Release v2.5 · Documentação

GUI v0.9​

  • Adicionada migração automática de esquema das pages públicas para armazenamento inline e campos legados de paginação.
  • Documentado o esquema compacto storagePool / storageId e navigationButtons usado para reduzir os travamentos de publicação do editor do Typewriter.
  • Esclarecido o padrão recomendado de menu referenciado para menus grandes do QuestCodex.

Release v0.9 · Documentação