O mapmanager é um plugin Spigot avançado e de alta performance, desenhado para ser o núcleo da gestão de mundos na RealmMC. Ele funciona como um módulo do Controller, sendo responsável por carregar, descarregar, resetar e gerir mapas (instâncias) de forma dinâmica.
Este plugin substitui a necessidade de plugins como o Multiverse Core, integrando-se diretamente com o controller para aplicar regras, gerir perfis de mapas via MongoDB e disparar eventos para outros plugins de minigame.
- Gestão de Perfis (MongoDB): Os mapas não são pastas, são "Perfis" guardados no MongoDB. Um perfil define o
.schem, as regras de jogo, ogameModee o nome do mundo. - Carregamento por Schematic (FAWE): Utiliza FastAsyncWorldEdit (FAWE) para colar schematics em mundos void (
VoidChunkGenerator), garantindo um ambiente limpo. - Regras por Mundo: Aplica regras de jogo (PvP, quebrar blocos, fome, dano) de forma contextual, com base no perfil do mundo em que o jogador se encontra.
- Gestão de Instâncias: Permite carregar e descarregar mapas sob demanda (ex:
/map spawn arena1), ideal para minigames ou arenas. - Criação In-Game: Permite a criação de novos perfis de mapa (
/map createprofile) e o salvamento de seleções do FAWE (/map save) diretamente do jogo. - Servidor Web de Download: Inicia um servidor web (na porta
8100) para servir ficheiros.schem, permitindo o download fácil (/map download). - Integração BlueMap: Inicia e para automaticamente as renderizações do BlueMap quando os mundos são criados ou apagados.
- API de Eventos: Dispara
MapProfileLoadEventeMapProfileUnloadEventpara que outros plugins possam reagir quando um mapa está pronto ou é descarregado.
Para o mapmanager funcionar corretamente, o servidor Spigot deve ter os seguintes plugins instalados:
- Controller (Obrigatório)
- FastAsyncWorldEdit (Obrigatório)
- BlueMap (Opcional, mas recomendado para renderização)
O mapmanager é configurado através de Propriedades de Sistema Java no startup do servidor.
-
-Dmap.type(Obrigatório): Define o tipo de servidor, usado para carregar o mapa principal.- Ex:
-Dmap.type=login(para o lobby de login) - Ex:
-Dmap.type=build(para o servidor de build) - Ex:
-Dmap.type=bw-solo-{map}(para um servidor de minigame)
- Ex:
-
-Dmap.webserver(Opcional): Se definido comotrue, inicia um servidor web na porta8100para o comando/map download.- IMPORTANTE: Apenas um servidor (ex:
build-1) deve ter esta flag. - Ex:
-Dmap.webserver=true
- IMPORTANTE: Apenas um servidor (ex:
Exemplo de Comando de Arranque (Servidor build-1):
java -Dfile.encoding=UTF-8 ... -Dcontroller.serverId=build-1 -Dmap.type=build -Dmap.webserver=true -DMONGO_URI=... -jar server.jarTodos os mapas são definidos como documentos na coleção mapmanager da base de dados controller.
Exemplo:
db.mapmanager.insertOne({
_id: "build-default",
mapType: "build",
worldName: "build-world",
schematicFile: "build-default.schem",
blueMapId: "build",
spawnPoint: "0.5, 65, 0.5, 0, 0",
pasteLocation: "0, 64, 0",
activeInType: true,
deleteOnUnload: false,
forceGameMode: "CREATIVE",
disablePvp: true,
disableBlockBreak: false,
disableBlockPlace: false,
disableHunger: true,
disableItemDrop: false,
disableWeather: true,
disableDaylightCycle: true,
disableInteractions: false,
disableEntityDamage: true,
noMonsterSpawning: true,
grantedPermissions: []
});Os arquivos .schem ficam localizados em:
plugins/mapmanager/
Comandos como /map save e /map upload gerem automaticamente estes arquivos.
Permissão necessária:
mapmanager.manager
/map list [tipo]/map info [id_perfil]/map spawn [id | jogador | id:jogador] [id]/map setspawn/map reset [id_perfil]/map reload/map visualizar
/map createprofile <id> <tipo> <nome_mundo>/map save <id_perfil>/map upload <id_perfil> <url>/map download <id_perfil>/map toggle <tipo> <id_perfil>/map gamemode <id_perfil> <gamemode>/map rule <id_perfil> <regra> <true|false>/map delete <id_perfil>
/map worldcreate <nome>/map worldinfo [nome_mundo]/map worldtp <nome> [usuário]/map worlddelete <nome>
O MapManager fornece eventos Bukkit para integração com minigames e automações.
Disparado após o schematic ser colado com sucesso.
@EventHandler
public void onMapReady(MapProfileLoadEvent event) {
MapProfile profile = event.getProfile();
World world = event.getWorld();
if (profile.getMapType().equals("bedwars")) {
MinigameManager.setupArena(world, profile);
}
}Disparado antes do mundo ser descarregado.
@EventHandler
public void onMapUnload(MapProfileUnloadEvent event) {
MapProfile profile = event.getProfile();
if (profile.getMapType().equals("bedwars")) {
MinigameManager.endGame(profile.getWorldName());
}
}RealmMC-MapManager/
├── src/main/java/br/com/realmmc/mapmanager/
│ ├── MapManager.java
│ ├── MapService.java
│ ├── MapRepository.java
│ ├── commands/
│ └── listener/
├── plugin.yml
Este projeto é de uso exclusivo da RealmMC. Todos os direitos reservados.
Desenvolvido por Lucas Corrêa.