From 7316695f18e75543bf079ef23d8fc4a9560d4558 Mon Sep 17 00:00:00 2001 From: ZzPowerTech Date: Tue, 14 Apr 2026 22:17:32 -0300 Subject: [PATCH 1/2] chore: adicionar .worktrees/ ao .gitignore Co-Authored-By: Claude Sonnet 4.6 --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 0361d7d..2c9087c 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,6 @@ run/ *.log logs/ +# Git Worktrees +.worktrees/ + From 4a5d07d3e4f9f35b904bad2060039c5267495019 Mon Sep 17 00:00:00 2001 From: ZzPowerTech Date: Tue, 14 Apr 2026 22:18:21 -0300 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20reutilizar=20NPCs=20existentes=20ao?= =?UTF-8?q?=20inv=C3=A9s=20de=20recriar=20a=20cada=20rein=C3=ADcio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .../CentralCartTopPlugin.java | 15 +++++---------- .../service/TopNpcManager.java | 9 ++++----- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/main/java/plugin/centralCartTopPlugin/CentralCartTopPlugin.java b/src/main/java/plugin/centralCartTopPlugin/CentralCartTopPlugin.java index dccf3a5..7a75092 100644 --- a/src/main/java/plugin/centralCartTopPlugin/CentralCartTopPlugin.java +++ b/src/main/java/plugin/centralCartTopPlugin/CentralCartTopPlugin.java @@ -100,16 +100,11 @@ public void onDisable() { monthlyUpdateTask.cancel(); } - // Remove NPCs salvos para evitar duplicação em reinícios - if (npcManager != null && npcManager.isCitizensEnabled()) { - try { - npcManager.removeAllNPCs(); - // Salva config para persistir remoção - saveConfig(); - } catch (Exception e) { - getLogger().log(Level.SEVERE, "Erro ao remover NPCs no onDisable", e); - } - } + // Persiste os IDs dos NPCs para que sejam reutilizados no próximo onEnable. + // Os NPCs não são destruídos: o Citizens os salva e os recarrega automaticamente + // entre reinícios do servidor. Destruí-los aqui causaria a criação de novos + // NPCs a cada restart, em vez de reutilizar os existentes. + saveConfig(); getLogger().info("§c[CentralCartTopPlugin] Plugin desabilitado!"); } diff --git a/src/main/java/plugin/centralCartTopPlugin/service/TopNpcManager.java b/src/main/java/plugin/centralCartTopPlugin/service/TopNpcManager.java index 861b3ca..fb5ff31 100644 --- a/src/main/java/plugin/centralCartTopPlugin/service/TopNpcManager.java +++ b/src/main/java/plugin/centralCartTopPlugin/service/TopNpcManager.java @@ -170,11 +170,10 @@ private void updateOrCreateNPC(NPCRegistry registry, TopCustomer customer) { // Atualiza o nome exibido npc.setName(displayName); - // Atualiza a skin do jogador - if (npc.hasTrait(SkinTrait.class)) { - SkinTrait skinTrait = npc.getOrAddTrait(SkinTrait.class); - skinTrait.setSkinName(customer.getName()); - } + // Atualiza a skin — getOrAddTrait garante que a trait existe antes de atualizar, + // sem depender de hasTrait que deixaria NPCs sem trait herdada sem skin atualizada + SkinTrait skinTrait = npc.getOrAddTrait(SkinTrait.class); + skinTrait.setSkinName(customer.getName(), true); // Move o NPC para a nova localização (teleporta) if (npc.isSpawned()) {