fix: corrigir broadcast de blog e geração de NPCs (x-store-domain + merge de config) - #2
Merged
Merged
Conversation
…erge de config) A API CentralCart é multi-tenant: toda chamada exige o header x-store-domain. Ele estava vazio em produção porque o plugin só fazia saveDefaultConfig(), que não mescla chaves novas em config.yml já existentes — então api.store_domain (e a seção blog) nunca apareciam. Resultado: o blog batia 404 "Store not found" e a busca de top doadores falhava antes de criar qualquer NPC. Causa raiz: - onEnable: mergeConfigDefaults() (copyDefaults) mescla chaves novas, preservando os valores já definidos pelo usuário - CentralCartApiService: envia x-store-domain e loga o corpo do erro (antes só o código) - BlogPostService: aborta cedo com erro claro quando o domínio não está configurado Robustez do blog: - BlogPostCheckTask: seeding na 1a execução e anúncio de todos os posts novos (não só o último); título sanitizado; fallback de layout se notification.lines faltar Refatoração: - novos DateTimeUtil e BlogNotifier; helpers em PluginUtils (remove duplicação entre task e comando de teste) - build.gradle: copyJar sem nome de jar fixo; versão 1.1.0 -> 1.2.0 Docs: - adiciona CLAUDE.md (inclui gotcha de build: JDK 21 vs Gradle 8.8/JDK 25 global) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Qodana Community for JVM6 new problems were found
View the detailed Qodana reportTo be able to view the detailed Qodana report, you can either:
To get - name: 'Qodana Scan'
uses: JetBrains/qodana-action@v2025.2.3
with:
upload-result: trueContact Qodana teamContact us at qodana-support@jetbrains.com
|
…es e NPE em setExecutor) - registerCommands: helper registerCommand() com null-check em getCommand() elimina os 10 avisos de NPE em setExecutor e loga se um comando faltar no plugin.yml - BlogPostCheckTask / BlogNotifier: remove condições 'x == null' sempre falsas (getString com default e getStringList nunca retornam null no Bukkit) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Owner
Author
|
Qodana — 12 dos 18 avisos resolvidos no commit
Os 6 avisos restantes ( 🤖 Addressed by Claude Code |
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.
Resumo
Os dois bugs reportados — NPCs não sendo gerados e posts do blog não chegando como broadcast — tinham a mesma causa raiz: a API da CentralCart é multi-tenant e exige o header
x-store-domainem toda chamada, mas ele estava chegando vazio em produção.Evidência do servidor:
O
api.store_domainestava vazio porque o plugin só faziasaveDefaultConfig(), que não mescla chaves novas em umconfig.ymljá existente. Comostore_domaine a seçãoblog:foram adicionados depois que o plugin já rodava, essas chaves nunca apareceram no servidor.O que mudou
Causa raiz (corrige blog + NPCs)
CentralCartTopPlugin#mergeConfigDefaults()—copyDefaults(true)mescla chaves novas em configs antigos, preservando os valores do usuário.CentralCartApiService— passa a enviarx-store-domainna busca de top doadores e a logar o corpo do erro (antes só o código HTTP, diagnóstico cego).BlogPostService— aborta cedo com erro explícito quando o domínio não está configurado (em vez de bater 404 três vezes).Robustez do blog
BlogPostCheckTask— seeding na 1ª execução (não spamma posts antigos) e anúncio de todos os posts novos, não só o último. Título sanitizado (remove#do markdown e evita quebra do MiniMessage); fallback de layout senotification.linesfaltar.Refatoração
DateTimeUtileBlogNotifier; helpers emPluginUtils. A task automática e o/testblogpostagora compartilham o mesmo caminho de broadcast (remove duplicação).build.gradle—copyJarsem nome de jar hardcoded (quebrava a cada bump); versão1.1.0 → 1.2.0.Docs
CLAUDE.md, incluindo o gotcha de build: oorg.gradle.java.homeglobal aponta para JDK 25, que quebra o Gradle 8.8 — buildar com-Dorg.gradle.java.home="C:\Program Files\Java\jdk-21".O código agora expõe a chave, mas o valor precisa ser preenchido:
1.2.0e reiniciar o servidor (o merge de config roda no boot e adicionaapi.store_domain+ seçãoblogaoconfig.yml).config.yml:api.store_domain: "loja.austv.net"(e confirmar oapi.token)./centralcartreload, depois validar com/testblogposte/spawntopnpcs.Notas para o revisor
/spawntopnpcsainda falhar, o console agora mostra o corpo exato do erro ([Top] ... HTTP xxx — body: ...).compileJavaejarpassam;plugin.ymlexpande para1.2.0.🤖 Generated with Claude Code