feat(chunkloader): add native chunk loader module with LuckPerms limits and BlueMap support
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
# Plan: Módulo Nativo de Chunk Loader
|
||||
|
||||
## Arquitetura
|
||||
1. **`ChunkLoader.java` (Record puro)**
|
||||
- `id`, `ownerUuid`, `ownerName`, `world`, `x`, `y`, `z`, `chunkX`, `chunkZ`, `createdAt`.
|
||||
- Métodos utilitários: `chunkCoords()`, `blockCoords()`, etc.
|
||||
|
||||
2. **`ChunkLoaders.java` (Gerenciador e Persistência)**
|
||||
- Gerencia lista em memória sincronizada `List<ChunkLoader>`.
|
||||
- Persistência em `plugins/Canalhandia/chunks.yml` com salvamento assíncrono.
|
||||
- Métodos: `add()`, `remove()`, `byChunk()`, `byOwner()`, `loadAll()`, `unloadAll()`, `playerLimit(Player)`.
|
||||
- Executa `world.addPluginChunkTicket` e `world.removePluginChunkTicket`.
|
||||
|
||||
3. **`Module.java` & `Settings.java`**
|
||||
- Adiciona `CHUNKLOADER("chunkloader", "Âncoras de carregamento contínuo de chunks")` no enum `Module`.
|
||||
- Adiciona configurações em `Settings.java` (limite padrão, material do bloco, raio de partículas).
|
||||
|
||||
4. **`ChunkLoaderListener.java` (Eventos do Mundo)**
|
||||
- `BlockPlaceEvent`: Detecta colocação da Âncora, verifica permissões/limites LuckPerms, registra loader e ticket.
|
||||
- `BlockBreakEvent`: Protege quebra por não-donos, remove ticket e devolve o item customizado.
|
||||
- `BlockExplodeEvent` / `EntityExplodeEvent`: Impede destruição por explosão.
|
||||
- `BlockPistonExtendEvent` / `BlockPistonRetractEvent`: Impede movimentação por pistão.
|
||||
|
||||
5. **`CanalhandiaCommand.java` & `ChunkLoaderCommand.java`**
|
||||
- Subcomandos de `/chunkloader` / `/ancora` e tab-completion completo.
|
||||
|
||||
6. **`BlueMapBridge.java`**
|
||||
- Cria conjunto de marcadores para chunk loaders no mapa web.
|
||||
|
||||
7. **Testes Unitários (`ChunkLoaderTest.java`)**
|
||||
- Validação de regras de permissão, cálculo de limite, serialização em YAML e exclusão de duplicatas na mesma chunk.
|
||||
|
||||
## Riscos & Mitigações
|
||||
- **Risco:** Descarregamento incorreto no shutdown do servidor gerando tickets órfãos.
|
||||
- **Mitigação:** `unloadAll()` limpo em `onDisable()`, e tickets do Paper (`PluginChunkTicket`) são re-validados no `onEnable()`.
|
||||
- **Risco:** Jogador contornar limite colocando em mundos não permitidos ou múltiplas na mesma chunk.
|
||||
- **Mitigação:** Validação estrita de unicidade de chunk (`byChunk(world, cx, cz) != null`) e verificação de limite antes de aceitar o evento.
|
||||
Reference in New Issue
Block a user