Skip to content

fix: reutilizar NPCs existentes ao invés de recriar a cada reinício - #1

Merged
ZzPowerTech merged 2 commits into
mainfrom
fix/npc-reutilizacao-ao-inves-de-recriar
Apr 15, 2026
Merged

fix: reutilizar NPCs existentes ao invés de recriar a cada reinício#1
ZzPowerTech merged 2 commits into
mainfrom
fix/npc-reutilizacao-ao-inves-de-recriar

Conversation

@ZzPowerTech

Copy link
Copy Markdown
Owner

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() chamava npcManager.removeAllNPCs(), que:

  1. Destruía os NPCs via npc.destroy() — removendo-os do save interno do Citizens
  2. Limpava o mapa npcIds em memória
  3. Apagava npcs.saved_ids do config.yml

No próximo onEnable(), loadNpcIds() não encontrava nenhum ID salvo → npcIds.isEmpty() retornava true → o bloco auto_spawn_on_start criava NPCs completamente novos.

Correções

CentralCartTopPlugin.javaonDisable()

  • Removida a chamada npcManager.removeAllNPCs()
  • O Citizens salva e recarrega seus NPCs automaticamente entre reinícios do servidor
  • onDisable() agora apenas cancela a task periódica e persiste o config com os IDs

TopNpcManager.javaupdateOrCreateNPC()

  • Substituído if (npc.hasTrait(SkinTrait.class)) por npc.getOrAddTrait(SkinTrait.class)
  • Adicionado setSkinName(nome, true) com force-refresh para garantir que a skin do novo top doador é atualizada via API Mojang

Comportamento esperado após o fix

  • Reinício do servidor → Citizens recarrega os NPCs existentes → plugin encontra os IDs salvos → apenas spawna/teleporta os NPCs, sem criar novos
  • Virada de mês → createOrUpdateNPCs() reutiliza os NPCs salvos, atualizando apenas nome e skin

Test plan

  • Iniciar servidor com NPCs já configurados — verificar que nenhum NPC novo é criado nos logs
  • Reiniciar servidor — verificar que os mesmos IDs de NPC aparecem nos logs (não novos IDs)
  • Virada de mês simulada via /testschedule — verificar que os NPCs existentes têm nome e skin atualizados, sem duplicatas
  • Verificar npcs.saved_ids no config.yml após restart — IDs devem persistir

🤖 Generated with Claude Code

ZzPowerTech and others added 2 commits April 14, 2026 22:17
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>
Copilot AI review requested due to automatic review settings April 15, 2026 01:18
@ZzPowerTech
ZzPowerTech merged commit dea6705 into main Apr 15, 2026
2 of 4 checks passed
@ZzPowerTech
ZzPowerTech deleted the fix/npc-reutilizacao-ao-inves-de-recriar branch April 15, 2026 01:20

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 o config.yml.
  • Atualiza a lógica de skin do Citizens para sempre garantir SkinTrait e forçar refresh ao atualizar NPC existente.
  • Ajusta .gitignore para 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants