fix: reutilizar NPCs existentes ao invés de recriar a cada reinício - #1
Merged
Merged
Conversation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Problema: onDisable() destruía os NPCs via npc.destroy() e apagava os IDs salvos do config.yml. No próximo onEnable(), o plugin não encontrava IDs → npcIds.isEmpty() retornava true → auto_spawn_on_start criava NPCs completamente novos, perdendo os existentes. Correção em CentralCartTopPlugin.java: - Removida a chamada npcManager.removeAllNPCs() do onDisable() - O Citizens persiste seus NPCs automaticamente entre reinícios - onDisable() agora apenas cancela a task e salva o config com os IDs Correção em TopNpcManager.java: - Substituído o bloco if (npc.hasTrait(SkinTrait.class)) por npc.getOrAddTrait(SkinTrait.class) com setSkinName(nome, true) - Garante que a skin é sempre atualizada, com force-refresh da API Mojang Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Corrige a duplicação de NPCs em reinícios/reloads ao parar de destruí-los no onDisable() e, em paralelo, garante atualização de skin do NPC via Citizens ao atualizar o top.
Changes:
- Remove a destruição/remoção de NPCs no
onDisable()e passa a apenas persistir oconfig.yml. - Atualiza a lógica de skin do Citizens para sempre garantir
SkinTraite forçar refresh ao atualizar NPC existente. - Ajusta
.gitignorepara ignorar diretório de worktrees.
Reviewed changes
Copilot reviewed 2 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| src/main/java/plugin/centralCartTopPlugin/CentralCartTopPlugin.java | Evita apagar NPCs no disable e persiste config para reutilizar IDs no próximo enable. |
| src/main/java/plugin/centralCartTopPlugin/service/TopNpcManager.java | Garante SkinTrait ao atualizar NPC e força refresh da skin ao trocar o top. |
| .gitignore | Ignora .worktrees/ (worktrees). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problema
A cada reinício do servidor (ou reload do plugin), novos NPCs eram criados do zero em vez de reutilizar os existentes.
Causa raiz: o
onDisable()chamavanpcManager.removeAllNPCs(), que:npc.destroy()— removendo-os do save interno do CitizensnpcIdsem memórianpcs.saved_idsdoconfig.ymlNo próximo
onEnable(),loadNpcIds()não encontrava nenhum ID salvo →npcIds.isEmpty()retornavatrue→ o blocoauto_spawn_on_startcriava NPCs completamente novos.Correções
CentralCartTopPlugin.java—onDisable()npcManager.removeAllNPCs()onDisable()agora apenas cancela a task periódica e persiste o config com os IDsTopNpcManager.java—updateOrCreateNPC()if (npc.hasTrait(SkinTrait.class))pornpc.getOrAddTrait(SkinTrait.class)setSkinName(nome, true)com force-refresh para garantir que a skin do novo top doador é atualizada via API MojangComportamento esperado após o fix
createOrUpdateNPCs()reutiliza os NPCs salvos, atualizando apenas nome e skinTest plan
/testschedule— verificar que os NPCs existentes têm nome e skin atualizados, sem duplicatasnpcs.saved_idsnoconfig.ymlapós restart — IDs devem persistir🤖 Generated with Claude Code