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:
additionalLocationscoloca vários baús a partir de uma única entry Dungeon Loot Chest (ignorado em uma dungeon gerada). O Loot Chest Trigger ganhaparticleEffect, 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),spawnParticlee os gatilhosonWaveClearedeonCleared. 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) emessageRepeatDelay. 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 emfalse. - 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...
statsMobScopeescolhe os mobs contados. Uma morte que tira o jogador da run não conta mais comoruns_left. Novo factdungeon_stat; placeholdersdungeon_stat_<key>[_raw],dungeon_total_<key>edungeon_inst_<id>_<key>; snippetscontent.dungeon_stats.duration_formatecontent.dungeon_stats.missing_value. - Ranking: nova entry
dungeon_leaderboard_source(LIFETIMEouCURRENT_RUN,rankBy,values,durationFormat,decimals) para ligar ao camposourcede 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
unlockedLoreelockedLoreagora sãounlockLoreelockLore. Páginas antigas continuam sendo lidas; a chave nova vence se as duas estiverem presentes. - Quebra de API para addons:
DungeonArtifactData,DungeonStatsePlayerDungeonStatspassaram para o pacotebtcrenaud.dungeons.core, eDungeonArtifactEntry.getPlayerStatseupdatemudaram de assinatura. Um addon compilado contra o Dungeon 1.1.x precisa ser recompilado.
GUI v0.20
- Devolver o loot:
dropOnCloseem um layout simples devolve, ao fechar o menu, o que o jogador não pegou ou o que colocou ali.closeDeliveryescolheGIVE_OR_DROP(padrão: no inventário, o excedente aos pés) ouDROP. Desativado por padrão. - Itens aleatórios:
rollPerSlotsorteia um item aleatório para cada slot repetido em vez de um só para todos, e o novoliveItemo 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
sourceemgui_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.
MythicMobs v0.12
- Mobs visíveis apenas para alguns jogadores:
spawn_mythicmobs_mobemythic_spawnertêm um novo campovisibilityCriteria. 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). UmvisibilityGroupagora é acompanhado ao vivo em vez de ficar fixo no spawn. collidable(spawn_mythicmobs_mob,mythic_spawner, padrãotrue):falseremove colisão e empurrões para todos.- Abandono:
spawn_mythicmobs_mobtem novos camposabandonRangeeabandonDelay. O mob é removido quando nenhum jogador autorizado permanece ao alcance durante o atraso (abandonRange0= desativado). O editor web preenche as novas durações com 1 segundo: confiraabandonDelay. despawn_mythicmobs_mob: novo camposcope,ALL(padrão, como antes) ouVISIBLE_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(aliastwvisible): adicione-a às skills sem dano (poção, arremesso...), no targeter (conditions=[ - twvisible true ]) ou comoTargetCondition, para que ignorem os jogadores que não veem o mob. A extensão executa/mm reloaduma 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.
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.
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.
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.
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.
2026-10-12
Dungeon v1.1.1
- Paper 26.x,
WORLD_PER_RUN: uma run podia falhar comThe 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 reloade 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) ouAUTO. - 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 paraSHARED_WORLD_SLOTSe copiados paraWORLD_PER_RUN.
MythicMobs NPC v5.0
- NPCs em dungeons: com
tickingdesativado, 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
tickingativado ou desativado, e novamente após cada respawn. - Play Animation:
forceagora interrompe as outras animações iniciadas pela ação nesse NPC; umaspeedde 0 ou menos toca em velocidade normal. - MythicMob Skill Objective:
skillNameagora funciona por meio da mecânica do MythicMobstypewriterSkill{name=..}(aliastwskill), adicionada à habilidade e seguida de/mm reload. O progresso é armazenado emfact, 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.
MMOItems v2.4
- Advanced Tooltip Config:
overrideDefaultLoreagora é 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,overrideDefaultLoreeenableComparisonTagsativados,paginationKeybindSWAP_OFFHAND,comparisonKeybindSNEAK,statsStartOnPage2, símbolos e indicadores padrão).
Shops v1.11
perPlayeragora 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.defaultRefreshTickse orefreshTicksdo item redesenham uma loja aberta quando o estoque exibido muda (somente estoques finitos;0na loja significa nenhuma verificação automática).- O
guiSlotdo 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. sellAllEnableddesativado agora recusa a ação de vender tudo comcannotSellMessage.- 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(antesj).
GUI v0.19
audioDefaultsdegui_settingsagora 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
showDefaultButtonsestiver ativado (o padrão): uma por direção sem entrada embuttons, 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; definashowDefaultButtonscomo false para mantê-los como estavam. - Novo campo
defaultStepnos layouts roláveis e nova listascrollArrowsemgui_settings(direction, item, name, x, y) para alterar as setas padrão. - Novo
textsemgui_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.
Quest Codex v2.15
- A permissão
typewriter.codex.openagora é 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).
Vote System v0.9
- Vote Config agora é lido:
cooldownSecondsacima de 0 permite que um jogador vote novamente após esse número de segundos (as contagens são cumulativas), edebugregistra 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 votesão snippets editáveis (content.vote.). - Cores MiniMessage: a mensagem de encerramento, o novo
blockedMessagee 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
triggersemodifiersde 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 oclosedMessage(após a data final) ou o novoblockedMessage(antes do fim da espera) e dispara os novosrefusedTriggers. Cada recusa é registrada no log quandodebugestá ativado. - Novos placeholders
vote_has_voted_<id>evote_closed_<id>(1ou0), evote_remaining_<id>(segundos até a data final,0sem data).
Discord v0.13
- Os
triggersde 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ão1) no Webhook Fact Event: uma proteção contra loops entre dois disparos detriggerspara o mesmo jogador;0a desativa.
Custom Biome v0.9
- Explore Biome Objective agora funciona:
biomeserequireAllsão lidos quando um jogador entra em um bioma, e o novo campotriggersexecuta 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 biomee o textounknowndos 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).
Numerical Storage v0.14
optionalButtonsdo menu e de cada submenu agora são desenhados: itens somente de exibição em seusslotsque substituem o que o layout colocar no mesmo slot.profileModeagora 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 onoActiveProfileMessageeditável (emadminMessages) 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/removerespondem a um valor inválido ou a um artifact ausente com mensagens editáveis.
Puzzle v0.6
isSharedagora compartilha a progressão de um grupo (o grupo dofactdo 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,onCompletee 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 puzzlesã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.allowPullcontinua 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
codefora dos dígitos agora registra um aviso no console em vez de ignorar em silêncio todos os toques.
Corpse v0.6
- Filtro de mundos:
allowedWorldseexcludedWorldsemcorpse_settingsescolhem 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, eINSTANT_RESPAWNfaz 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),interactionCooldownMilliseunknownWorldLabel. Uma definição também pode ser escolhida com a chave de dimensão, e o cabeçalho de/corpses listé editável./corpses listeclearvalem para todo o servidor. NovooutOfReachMessageopcional (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;
keepInventoryekeepLevelsão respeitados (sem corpo comkeepInventory), 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.
MythicMobs v0.11
mythic_spawner.groupagora é 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.displayeadvancedQuest.completed.
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 (
radiuslimitado a 8) em vez do bloco para o qual o jogador olha. - Agricultural Harvest: novos campos
particle,particleCount,sound,soundVolumeesoundPitch. - O que um jogador digita em
/enchantcreator give(o nome do encantamento) é exibido como digitado nas respostas, nunca interpretado como formataçã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 (0quando nenhum temporizador está ativo). - Mais duas mensagens editáveis:
textdisplay.inventory.blocked(inventário bloqueado durante um diálogo) etextdisplay.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.formate os snippetstextdisplay.option.*(mesma exibição padrão). audioProfileremovido detextdisplay_spoken: o campo nunca era lido.- Somente Paper: o Folia não é suportado.
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_CLICKeALLagora também disparam. Um clique dispara o diálogo uma única vez, nunca duas, e/tw reloadnão quebra mais os cliques com umNoClassDefFoundError. - 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
tickingdesativado, 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.
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 reloadnão deixa mais vazar um listener que retém o classloader anterior da extensão.
2026-09-19
GUI v0.18
- O aviso de sobreposição de slots agora cita
gape lembra que ele é um passo, e não um espaçamento:gap: 1significa 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).
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
gapera um espaçamento (passogap + 1). Desde a 0.3.0, eles usam a fórmula do motor GUI, em quegapé um passo:count: 3, direction: right, gap: 1a 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: 1passa a sergap: 2. A semântica de passo é mantida. - Os marcadores indexados agora redefinem
gapjunto comcounterepeatY, de modo que a validação de menus não informa mais uma repetição órfã neles. - Compilado contra o GUI v0.18.
2026-09-14
GUI v0.17
- Um
gapigual a0não empilha mais todas as cópias repetidas na célula de origem. O editor web serializa umgapintocado como0: umQUEST_SLOTcomcount: 7edirection: rightproduzia sete marcadores na mesma posição e um aviso "Slot overlap" que você nunca escreveu.gapagora é forçado a pelo menos1, comocounterepeatY. - 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.
Shops v1.10
- Escambo: preços pagos em itens. O novo
priceMode: ITEMSvende um artigo em troca de um ou vários itens em vez de moeda.itemPriceno item lista o custo (item mais quantidade por unidade comprada);defaultItemPricena loja cobre todo artigoITEMSque não declare nenhum. A lista do artigo substitui a da loja, nunca é somada a ela. - Um artigo
ITEMSsem 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 placeholdersbuy_price/sell_pricemostram um traço. - "Buy max" funciona em artigos de escambo. Um artigo
ITEMSnão pode ser revendido por moeda: seu preço de venda é zero. - Recompilado contra o GUI v0.17.
2026-09-09
Puzzle v0.5
- Corrigido:
NoClassDefFoundErroremPuzzleRenderersapó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.
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.
Discord v0.12
- Recompilado contra o motor Typewriter
0.9.0-beta-177. - Nenhuma mudança de comportamento.
Companion v0.10
- Recompilado contra o motor Typewriter
0.9.0-beta-177. - Nenhuma mudança de comportamento.
Corpse v0.5
- Recompilado contra o motor Typewriter
0.9.0-beta-177. - Nenhuma mudança de comportamento.
Custom Biome v0.8
- Recompilado contra o motor Typewriter
0.9.0-beta-177. - Nenhuma mudança de comportamento.
InputTracker v0.5
- Recompilado contra o motor Typewriter
0.9.0-beta-177. - Nenhuma mudança de comportamento.
Numerical Storage v0.13
- Recompilado contra o motor Typewriter
0.9.0-beta-177. - Nenhuma mudança de comportamento.
Puzzle v0.4
- Recompilado contra o motor Typewriter
0.9.0-beta-177. - Nenhuma mudança de comportamento.
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.
Vote System v0.8
- Recompilado contra o motor Typewriter
0.9.0-beta-177. - Nenhuma mudança de comportamento.
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.
MMO Inventory v0.7
- Recompilado contra o motor Typewriter
0.9.0-beta-177. - Nenhuma mudança de comportamento.
MythicMobs v0.10
- Recompilado contra o motor Typewriter
0.9.0-beta-177. - Nenhuma mudança de comportamento.
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.
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.
Tracking v0.11
- Recompilado contra o motor Typewriter
0.9.0-beta-177. - Nenhuma mudança de comportamento.
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.
Discord v0.11
- Recompilado contra o motor Typewriter
0.9.0-beta-176. - Nenhuma mudança de comportamento.
Companion v0.9
- Recompilado contra o motor Typewriter
0.9.0-beta-176. - Nenhuma mudança de comportamento.
Corpse v0.4
- Recompilado contra o motor Typewriter
0.9.0-beta-176. - A nameplate do cadáver agora usa o
CustomNamePropertydo motor. - Compilado contra o GUI v0.15.
Custom Biome v0.7
- Recompilado contra o motor Typewriter
0.9.0-beta-176. - Nenhuma mudança de comportamento.
InputTracker v0.4
- Recompilado contra o motor Typewriter
0.9.0-beta-176. - Nenhuma mudança de comportamento.
Numerical Storage v0.12
- Recompilado contra o motor Typewriter
0.9.0-beta-176. - Nenhuma mudança de comportamento.
Puzzle v0.3
- Recompilado contra o motor Typewriter
0.9.0-beta-176. - Nenhuma mudança de comportamento.
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.
Vote System v0.7
- Recompilado contra o motor Typewriter
0.9.0-beta-176. - Mudança incompatível: campo de
vote_actionrenomeado.optionfoi substituído poroptionIndex, um número simples iniciado em 0. Selecione novamente a opção em todovote_actionexistente. - Mudança incompatível: campo de
vote_messagedividido.messagefoi substituído pornotVotedMessageealreadyVotedMessage; deixe o segundo vazio para não enviar mensagem aos jogadores que já votaram. vote_dataagora usavote_storagecomo padrão deartifactId: defina um nome fixo para manter as cédulas entre recarregamentos.- Novas entries
vote_config(comdebugecooldownSeconds),vote_factevote_cast_eventaparecem no editor.
Dialog Menu v0.7
- Recompilado contra o motor Typewriter
0.9.0-beta-176. - Nenhuma mudança de comportamento.
Enchantment Creator v0.9
- Recompilado contra o motor Typewriter
0.9.0-beta-176. - Nenhuma mudança de comportamento.
MMO Inventory v0.6
- Recompilado contra o motor Typewriter
0.9.0-beta-176. - Nenhuma mudança de comportamento.
MythicMobs v0.9
- Recompilado contra o motor Typewriter
0.9.0-beta-176. - Nenhuma mudança de comportamento.
GUI v0.15
- Recompilado contra o motor Typewriter
0.9.0-beta-176. - Nenhuma mudança de comportamento.
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.
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.
Tracking v0.10
- Recompilado contra o motor Typewriter
0.9.0-beta-176. - Nenhuma mudança de comportamento.
2026-08-29
GUI v0.14
- Rankings de facts. A nova definição
gui_leaderboardclassifica jogadores, mundos ou grupos do Typewriter por um ou mais valores de fact, renderizada pelo novo layoutleaderboardem qualquer pool deopen_gui. As linhas aceitam{rank},{name},{score},{group},{world}e{score_<fact_id>}. - O novo artifact
gui_leaderboard_populationmantém os últimos valores conhecidos de jogadores offline, de modo que um ranking classifica mais do que apenas quem está conectado. - O novo
dropOnCloseem 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
temporaryque nunca eram limpos e o shift + clique direito em um item de cursor correspondente que retirava em vez de depositar. - Um
viewPermission/clickPermissionem 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
leaderboarde informa uma área de posições fora do inventário.
Quest Codex v2.11
- Recompilado contra o GUI v0.14.
Shops v1.7
- Recompilado contra o GUI v0.14.
Corpse v0.3
- Recompilado contra o GUI v0.14.
Numerical Storage v0.11
- Recompilado contra o GUI v0.14.
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.opencontinua 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.
2026-08-16
Discord v0.10
- Webhooks de facts. O novo
webhook_fact_eventpublica uma mudança de fact em qualquer destinowebhook_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
NoClassDefFoundErrorna thread do servidor. - A release pública agora inclui o JDA 6.5.0 e suas dependências de execução.
2026-08-21
GUI v0.13
- Itens de slot ao vivo.
itemProviderreconstró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 —autoRefreshTicksredesenhava 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
0nã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
buttonTypecostumava 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.
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 decategory_menupara uma entryopen_guireferenciada, 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.
Puzzle v0.2
- Novo
activationRadiusem todo puzzle, padrão16blocos. 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.0desativa 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,
timeLimitelifespansão armados na chegada em vez de na entrada na audience.
Custom Biome v0.6
- Mudança incompatível:
biome_audiencefoi 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) ebiome_region_audience(este jogador está dentro dessa região, mundo incluído). As pages que usambiome_audiencedevem 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.
ignoreYtransforma 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.
Shops v1.5
- Recompilado contra o OmniGUI v0.13.
GuiSlotganhou um parâmetroitemProviderde tempo de renderização, o que alterou o construtor ao qual seus chamadores se ligam, então o JAR da v1.4 lançavaNoSuchMethodErrorassim 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.
Numerical Storage v0.10
- Recompilado contra o OmniGUI v0.13, pela mesma mudança de assinatura de
GuiSlot: o JAR da v0.9 lançavaNoSuchMethodErrorquando 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.
Corpse v0.2
- Recompilado contra o OmniGUI v0.13, pela mesma mudança de assinatura de
GuiSlot: o JAR da v0.1 lançavaNoSuchMethodErrorquando 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.
2026-08-12
GUI v0.12
- Menus estendidos.
extendToPlayerInventoryemopen_guitransforma 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
_extendedativa 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. DynamicMarkerstransforma 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/repeatYsão definidos sem umadirectione acusa erro em uma desconhecida. - Documentado que
gapé um passo (1 = adjacente) e querepeatYrepete no eixo perpendicular adirection. - 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.
Shops v1.4
- Modo aba.
baseMenuIdtorna uma loja uma aba de um menu compartilhado: seu pool de layouts e suas views se mesclam por baixo do chassi, comviews,defaultViewIde 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
defaultNameFormatedefaultLoreFormat. 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.
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_rootperdia 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.
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.
DiscordClientServicesaiu 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_definitiondeclara 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_definitionpor 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, embackup/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_manifestdescreve 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.
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 triggersonStart/onComplete/onFail/onTimeout/onLifespanExpire. isSharedtroca um puzzle de progresso privado para um único tabuleiro que o grupo inteiro avança em conjunto.puzzle_chainexecuta vários puzzles em ordem e dispara quando a sequência é resolvida;resetOnFaildecide se um erro devolve o jogador ao início.puzzle_artifactpersiste o estado dos puzzles, então um reinício no meio de uma tentativa não apaga o progresso.puzzle_solved_factepuzzle_active_factexpõem o progresso ao restante do seu conteúdo;puzzle_menulista os puzzles e seu estado no chat.- Compatível com Folia: toda leitura e escrita de mundo roda na região dona do puzzle.
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_looteon_corpse_expirepassam 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,playDeathAnimationedeathAnimationNamesã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_corpseecorpse_count, a audiencecorpse_owner_audience,corpse_waypointmostrando distância e direção até o cadáver do próprio jogador,corpse_recovery_objectiveecorpse_admin_commandcom os subcomandoslisteclear. - 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.
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
baseBiomenã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_eventque 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, erestore_biome_actionpara 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_objectiveebiome_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 factHASH, 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.
Enchantment Creator v0.8
levelModeem uma mecânica compararunOnLevelcomo um nível exato, um mínimo (AT_LEAST) ou um máximo (AT_MOST). Antes, só era possível uma correspondência exata.eventPhaseexecuta 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.clientSideEffectspassou a reconhecer o cliente, com uma açãoclient_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. Onameanterior é 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.
Numerical Storage v0.9
transactionModena configuração de transações:INTERNALmantém o caminho PlaceholderAPI mais comando de console,VAULTpassa diretamente pela API de Economy do Vault e ignoraamountPlaceholdere os campos de comando.addCommanderemoveCommandestavam documentados ao contrário.addCommandconclui um depósito no armazenamento e é verificado antes da mutação persistente;removeCommandconclui 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
artifactIdsemântico recebe backup embackups/numericalstorage/e é migrado no primeiro acesso — faça backup do diretórioassets/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.
2026-08-07
Quest Codex v2.8
- Advancements reais do Minecraft. A nova entry
advancement_definitiongrava 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.parentreferencia outra definição, então a árvore é desenhada no editor de nós. grant_advancementconcede um advancement ou o retira, e percorre a cadeia de pais para que um filho nunca seja obtido sob um pai não obtido.autoGrantfaz 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.
GUI v0.11
- Tooltips de itens, com uma chave
hideVanillaItemStatsna 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.counterepeatYestão documentados como contagens de repetição de slots, e não como tamanhos de pilha.
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.5ksão interpretados.
2026-08-03
Quest Codex v2.7
- Adicionados modos de exibição de waypoints:
WORLD_DIRECTIONALprojeta marcadores em uma esfera ao redor dos olhos do jogador ao longo da direção verdadeira do destino,TARGET_ANCHOREDos coloca no alvo eADAPTIVEtransita suavemente entre os dois.HUD_LOCKEDcontinua 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
ALLeONE_PER_QUESTe um limitemaxTargets. - 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.
2026-08-02
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.
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.
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.
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 debettermodel_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,liouph, 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
@trackede os marcadores dinâmicosTRACKED_QUEST_SLOT. - Adicionados
/tw codex trackede o comando interno de GUIcodex: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.
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/storageIdenavigationButtonsusado para reduzir os travamentos de publicação do editor do Typewriter. - Esclarecido o padrão recomendado de menu referenciado para menus grandes do QuestCodex.