MatrixMarket - Documentacao
Referencia completa de instalacao, configuracao e API
Sumario
- Instalacao
- Configuracao (config.yml)
- Mensagens (messages.yml)
- Comandos
- Permissoes
- Mecanicas de Jogo
- Economias e Provedores
- Banco de Dados
- API para Desenvolvedores
- Arquitetura Interna
- Compatibilidade de Versoes
- Solucao de Problemas
- Changelog
[ANCHOR=instalacao]1. Instalacao[/ANCHOR]
Requisitos
- Java 8 ou superior (recomendado Java 17+ para servidores modernos)
- Paper ou Spigot nas versoes 1.8 ate 1.21+
- (Opcional) Vault com um plugin de economia compativel (EssentialsX, CMI, etc.)
- (Opcional) PlayerPoints
Passos
- Baixe o arquivo MatrixMarket-1.0.0.jar na aba Releases do repositorio
- Mova o .jar para a pasta plugins/ do seu servidor
- Reinicie o servidor completamente (nao use reload de servidor)
- Os arquivos de configuracao serao gerados automaticamente em plugins/MatrixMarket/
- Edite o config.yml conforme suas necessidades
- Use /mercado reload para aplicar as alteracoes sem reiniciar
Estrutura de Arquivos Gerada
Code (Text):
plugins/
MatrixMarket/
config.yml <- Configuracoes principais
messages.yml <- Todas as mensagens do plugin
data/
market.db <- Banco de dados SQLite (se configurado)
[ANCHOR=configuracao]2. Configuracao (config.yml)[/ANCHOR]
Abaixo esta o arquivo de configuracao completo com todos os campos documentados.
Code (YAML):
# Habilita ou desabilita o mercado globalmente
habilitado
: true
# Modo de exibicao do mercado
# false = tela de categorias (padrao)
# true = lista unica com scroll por todos os itens
modo-scroller
: false
# Tempo padrao maximo de expiracao dos anuncios (em horas)
# 0 = sem expiracao automatica
tempo-expiracao
: 48
# Limite de anuncios ativos por jogador
# Pode ser sobrescrito pela permissao matrixmarket.sell_limit.<N>
limite-vendas
: 10
# Preco minimo permitido por anuncio
preco-minimo
: 1.0
# Preco maximo permitido por anuncio
# 0 = sem limite maximo
preco-maximo
: 0.0
# --- Destaques ---
# Maximo de anuncios destacados simultaneamente
limite-destaques
: 2
# Custo para destacar um anuncio (na moeda padrao)
custo-destaque
: 1000.0
# Duracao do destaque em horas
duracao-destaque
: 24
# --- Taxa sobre vendas ---
taxa:
habilitado
: false
percentual
: 5.0
# porcentagem descontada do valor recebido pelo vendedor
# --- Anuncio no chat ao criar uma venda ---
anuncio:
habilitado
: true
# true = somente jogadores com matrixmarket.announce recebem a mensagem
somente-permissao
: false
# --- Comportamento do correio ---
correio
:
# Entregar dinheiro de vendas via correio
valores
: true
# Devolver itens de anuncios expirados via correio
itens-expirados
: true
# --- Blacklist de materiais ---
# Materiais desta lista nao podem ser vendidos
# Use os nomes exatos em maiusculas (ex: DIAMOND_SWORD)
blacklist
:
- BEDROCK
- BARRIER
- COMMAND_BLOCK
# --- Banco de dados ---
database
:
# SQLITE (sem configuracao adicional) ou MYSQL
type
: SQLITE
host
: localhost
port
: 3306
database
: matrixmarket
username
: root
password
:
""
# --- Provedores de economia ---
economies
:
# Provedor padrao usado em novas vendas
default
: money
providers:
money:
provider
: Money
# identificador interno (Vault)
display
:
"Dinheiro"
# nome exibido nos menus
abbreviated
:
"coins"
# abreviacao nos tooltips
allow-offline
: true
# permitir transacoes com jogador offline
permission
: matrixmarket.provider.money
points:
provider
: PlayerPoints
display
:
"Pontos"
abbreviated
:
"pts"
allow-offline
: true
permission
: matrixmarket.provider.points
[ANCHOR=mensagens]3. Mensagens (messages.yml)[/ANCHOR]
O arquivo
messages.yml controla todas as mensagens enviadas ao jogador. Suporta codigos de cor com
& e variaveis dinamicas entre
{}.
Variaveis Disponiveis
| Variavel |
Descricao |
| {player} |
Nome do jogador |
| {item} |
Nome do item |
| {price} |
Valor formatado do anuncio |
| {seller} |
Nome do vendedor |
| {buyer} |
Nome do comprador |
| {economy} |
Nome da economia usada |
| {limit} |
Limite de anuncios do jogador |
[ANCHOR=comandos]4. Comandos[/ANCHOR]
Todos os comandos possuem os aliases
/market e
/mk alem de
/mercado.
/mercado
Abre o menu principal do mercado com todas as categorias disponiveis.
- Permissao: matrixmarket.use
/mercado vender
Inicia o processo de criacao de anuncio com o item segurado na mao. O plugin ira solicitar o preco via chat e guiar o jogador pelas opcoes de configuracao do anuncio.
- Permissao: matrixmarket.sell
- O item nao pode estar na blacklist
- O jogador nao pode estar banido do mercado
- O limite de anuncios ativos nao pode ter sido atingido
/mercado vendas
Abre o menu com todos os anuncios ativos criados pelo proprio jogador. Permite cancelar anuncios e pagar por destaques.
- Permissao: matrixmarket.use
/mercado pessoal
Lista os anuncios direcionados exclusivamente ao jogador por outros vendedores.
- Permissao: matrixmarket.use
/mercado ban <jogador>
Bane um jogador de criar e comprar no mercado. O jogador banido ainda pode acessar o correio para resgatar itens pendentes.
- Permissao: matrixmarket.ban
- Funciona com jogadores offline
/mercado unban <jogador>
Remove o banimento de um jogador, restaurando seu acesso ao mercado.
- Permissao: matrixmarket.ban
/mercado reload
Recarrega o
config.yml e o
messages.yml sem reiniciar o servidor. Anuncios ativos em memoria nao sao afetados.
- Permissao: matrixmarket.reload
[ANCHOR=permissoes]5. Permissoes[/ANCHOR]
| Permissao |
Descricao |
Padrao |
| matrixmarket.use |
Abrir o mercado e acessar menus |
true |
| matrixmarket.sell |
Criar anuncios de venda |
true |
| matrixmarket.admin |
Acesso total administrativo |
op |
| matrixmarket.reload |
Recarregar arquivos de configuracao |
op |
| matrixmarket.ban |
Banir e desbanir jogadores |
op |
| matrixmarket.announce |
Receber mensagens de novas vendas no chat |
true |
| matrixmarket.sponsor |
Destacar vendas sem custo |
false |
| matrixmarket.buy.sponsor |
Pagar para destacar um anuncio |
true |
| matrixmarket.staff.collect |
Remover qualquer item do mercado via Shift+Click |
op |
| matrixmarket.provider.money |
Usar economia Money (Vault) |
true |
| matrixmarket.provider.points |
Usar economia PlayerPoints |
true |
| matrixmarket.sell_limit.<N> |
Limite de anuncios ativos para o grupo (substitua N pelo numero) |
— |
Limite de Vendas por Permissao
O sistema de limite de vendas e dinamico. Ao inves de um valor fixo, voce pode atribuir permissoes diferentes para grupos diferentes:
Code (Text):
matrixmarket.sell_limit.5 <- VIP basico: 5 anuncios
matrixmarket.sell_limit.20 <- VIP Plus: 20 anuncios
matrixmarket.sell_limit.50 <- Staff: 50 anuncios
O plugin verifica todas as permissoes do jogador e aplica o maior valor encontrado. O campo
limite-vendas do
config.yml funciona como valor padrao para quem nao possui nenhuma permissao de limite.
[ANCHOR=mecanicas]6. Mecanicas de Jogo[/ANCHOR]
Fluxo de Criacao de Anuncio
- O jogador segura o item e usa /mercado vender
- O plugin verifica: habilitado, banimento, blacklist, limite de anuncios
- O jogador digita o preco no chat (deve respeitar preco-minimo e preco-maximo)
- Um menu e aberto para configurar: duracao, moeda e destinatario (todos ou especifico)
- O jogador confirma; o item e removido do inventario e o anuncio e salvo no banco
- Uma mensagem de anuncio e enviada no chat (se habilitado)
Fluxo de Compra
- O jogador abre o mercado e navega pelas categorias
- Clica no item para ver detalhes: vendedor, preco, economia, tempo restante
- Confirma a compra
- O plugin verifica saldo; debita do comprador
- O item vai direto ao inventario do comprador, ou ao correio se estiver cheio
- O valor (menos a taxa, se habilitada) vai ao correio do vendedor
Sistema de Correio
O correio funciona como uma caixa de entrada persistente. Ele e utilizado em tres situacoes:
- Venda concluida: o dinheiro vai ao correio do vendedor
- Inventario cheio: o item comprado vai ao correio do comprador
- Anuncio expirado: o item retorna ao correio do vendedor
O correio e acessivel pelo menu principal do mercado. Cada entrada pode ser coletada individualmente. Administradores com
matrixmarket.staff.collect podem coletar entradas de outros jogadores usando Shift+Click.
Sistema de Destaques
- Acesse "Minhas Vendas" e clique com o botao direito no anuncio desejado
- O custo e debitado imediatamente na moeda padrao configurada
- O item aparece na aba de destaques pelo tempo configurado em duracao-destaque
- Maximo de limite-destaques anuncios em destaque simultaneamente por jogador
- Jogadores com matrixmarket.sponsor destacam sem pagar
Venda Pessoal
Ao criar um anuncio, o vendedor pode direciona-lo a um jogador especifico pelo nome. Esse anuncio:
- Nao aparece na listagem geral do mercado
- So e visivel ao destinatario em /mercado pessoal
- Expira normalmente caso nao seja comprado
[ANCHOR=economia]7. Economias e Provedores[/ANCHOR]
O MatrixMarket suporta multiplos provedores de economia simultaneamente. Cada anuncio registra qual economia foi usada na criacao e a compra ocorre sempre nessa mesma moeda.
Vault (Money)
Requer o plugin
Vault instalado e ativo, alem de um plugin de economia compativel (EssentialsX, CMI, iConomy, etc.).
Code (YAML):
economies:
providers:
money:
provider
: Money
display
:
"Dinheiro"
abbreviated
:
"coins"
allow-offline
: true
permission
: matrixmarket.provider.money
PlayerPoints
Requer o plugin
PlayerPoints instalado e ativo.
Code (YAML):
economies:
providers:
points:
provider
: PlayerPoints
display
:
"Pontos"
abbreviated
:
"pts"
allow-offline
: true
permission
: matrixmarket.provider.points
Adicionando Provedores Customizados
Novos provedores podem ser adicionados via API estendendo a classe base de provedor e registrando-os no
EconomyManager. Consulte a secao de API para detalhes.
[ANCHOR=banco]8. Banco de Dados[/ANCHOR]
SQLite (Padrao)
Nenhuma configuracao adicional e necessaria. O arquivo
market.db e criado automaticamente em
plugins/MatrixMarket/data/.
Code (YAML):
database:
type
: SQLITE
MySQL
Recomendado para servidores com alto volume de transacoes ou que usam banco de dados compartilhado entre instancias. Utiliza
HikariCP para pool de conexoes.
Code (YAML):
database:
type
: MYSQL
host
: localhost
port
: 3306
database
: matrixmarket
username
: seu_usuario
password
: sua_senha
O plugin cria as tabelas necessarias automaticamente na primeira inicializacao. O usuario do banco deve ter permissoes
CREATE,
SELECT,
INSERT,
UPDATE e
DELETE.
[ANCHOR=api]9. API para Desenvolvedores[/ANCHOR]
O MatrixMarket expoe uma API publica para que outros plugins possam interagir com o mercado programaticamente.
Dependencia (build.gradle)
Code (Groovy):
repositories
{
maven
{ url
'https://jitpack.io'
}
}
dependencies
{
compileOnly
'com.github.m4trixdev:MatrixMarket:1.0.0'
}
Acessando os Servicos
Code (Java):
Main plugin
=
(Main
) Bukkit.
getPluginManager
(
).
getPlugin
(
"MatrixMarket"
)
;
MarketManager market
= plugin.
getMarketManager
(
)
;
MailManager mail
= plugin.
getMailManager
(
)
;
EconomyManager economy
= plugin.
getEconomyManager
(
)
;
MarketManager
Code (Java):
// Listar todos os anuncios ativos
List
<MarketItem
> itens
= market.
getAllActive
(
)
;
// Anuncios de um jogador especifico
List
<MarketItem
> meus
= market.
getBySeller
(player.
getUniqueId
(
)
)
;
// Anuncios filtrados por categoria
List
<MarketItem
> espadas
= market.
getByCategory
(
"espadas"
)
;
// Anuncios pessoais direcionados a um jogador
List
<MarketItem
> pessoais
= market.
getPersonalFor
(player.
getName
(
)
)
;
// Cancelar um anuncio pelo ID
market.
cancelListing
(player, itemId
)
;
// Executar uma compra
market.
buyItem
(player, itemId
)
;
MailManager
Code (Java):
// Enviar dinheiro ao correio de um jogador
mail.
addMoney
(player.
getUniqueId
(
),
500.0,
"Espada de Diamante"
)
;
// Enviar item ao correio de um jogador
mail.
addItem
(player.
getUniqueId
(
), itemStack
)
;
// Verificar se um jogador tem entradas no correio
boolean temCorreio
= mail.
hasEntries
(player.
getUniqueId
(
)
)
;
// Coletar uma entrada especifica
boolean sucesso
= mail.
collectEntry
(player, entryId
)
;
[ANCHOR=arquitetura]10. Arquitetura Interna[/ANCHOR]
Code (Text):
Main
├── ConfigManager -> Carregamento e validacao do config.yml
├── MessagesManager -> Mensagens e substituicao de variaveis
├── MenusConfig -> Configuracao visual dos menus de inventario
├── DatabaseManager -> Gerenciamento do banco de dados (SQLite/MySQL)
│ └── BaseSQLStorage -> Implementacao base SQL
│ ├── SQLiteStorage -> Driver SQLite
│ └── HikariStorage -> Driver MySQL com pool HikariCP
├── EconomyManager -> Registro e gerenciamento de provedores de economia
│ ├── VaultProvider -> Integracao com Vault
│ └── PlayerPointsProvider -> Integracao com PlayerPoints
├── CategoryManager -> Classificacao automatica de itens por categoria
├── MarketManager -> Logica central: criar, comprar, cancelar anuncios
├── MailManager -> Sistema de correio (dinheiro e itens)
├── PlayerManager -> Dados dos jogadores (limite de vendas, banimentos)
└── SoundManager -> Efeitos sonoros dos menus
Listeners de Eventos
- MenuClickListener — Gerencia todos os cliques nos menus de inventario
- ChatInputListener — Captura entrada de texto no chat (preco, destinatario)
Modelos de Dados
| Modelo |
Descricao |
| MarketItem |
Representa um anuncio ativo no mercado |
| SellSession |
Estado temporario de uma venda em andamento |
| MailEntry |
Entrada no correio (dinheiro ou item) |
| PlayerData |
Dados persistentes do jogador (banimento, limites) |
| Category |
Categoria de item com icone e lista de materiais |
[ANCHOR=compatibilidade]11. Compatibilidade de Versoes[/ANCHOR]
O plugin detecta automaticamente a versao do servidor e adapta seu comportamento internamente, sem necessidade de configuracao adicional.
| Versao |
Materiais |
Action Bar / Title |
Cabecas Customizadas |
| 1.8 – 1.12 (Legacy) |
Nomes antigos + data values |
Via NMS reflection |
Via GameProfile reflection |
| 1.13 – 1.17 |
Nomes modernos |
Via BungeeCord API |
Via GameProfile reflection |
| 1.18.1+ |
Nomes modernos |
Via BungeeCord API |
Via PlayerProfile API |
Limitacoes Conhecidas
- Dados sao carregados em memoria na inicializacao; uma queda abrupta do servidor pode perder anuncios recentes nao persistidos
- Versoes legadas (1.8–1.12) usam WOOL com data values — alguns materiais de menu podem ter aparencia diferente do esperado
- Cabecas de jogador com texturas customizadas requerem acesso a internet no servidor para carregar corretamente
- PlayerPoints so funciona se o plugin estiver instalado e ativo no momento da inicializacao
[ANCHOR=problemas]12. Solucao de Problemas[/ANCHOR]
O mercado nao abre
- Verifique se habilitado: true esta no config.yml
- Confirme que o jogador tem a permissao matrixmarket.use
- Revise os logs do servidor na inicializacao para erros de carregamento
Banco de dados nao conecta
- Para MySQL: confira host, porta, usuario e senha
- Verifique se o banco de dados existe e se o usuario tem as permissoes necessarias
- Para SQLite: verifique se o servidor tem permissao de escrita em plugins/MatrixMarket/data/
Economia nao funciona
- Certifique-se de que Vault e um plugin de economia compativel estao instalados e ativos
- Para PlayerPoints, confirme que o plugin esta ativo
- Use /mercado reload apos alterar as economias no config
- Verifique nos logs se o provedor foi registrado com sucesso na inicializacao
Configuracao nao recarrega corretamente
- Valide a sintaxe YAML do config.yml em um validador online (ex: yaml-online-parser.appspot.com)
- Certifique-se de que o arquivo esta salvo em codificacao UTF-8
- Cheque os logs do servidor imediatamente apos o reload por erros de parsing
Itens nao aparecem nas categorias corretas
- Use o nome exato do material em maiusculas (ex: DIAMOND_SWORD, OAK_LOG)
- Revise os materiais configurados em cada categoria no config.yml
- Use /mercado reload apos qualquer alteracao nas categorias
[ANCHOR=changelog]13. Changelog[/ANCHOR]
v1.0.0 - Lancamento Inicial
- Sistema completo de anuncios com criacao, compra e cancelamento
- Categorias configuraveis com classificacao automatica por material
- Sistema de destaques com custo e duracao configuraveis
- Correio integrado para entrega de dinheiro e itens
- Suporte a multiplas economias simultaneas (Vault + PlayerPoints)
- Filtro por categoria e paginacao em todos os menus
- Venda pessoal direcionada a jogador especifico
- Sistema de banimento de jogadores
- Limite de vendas dinamico por permissao (sell_limit.<N>)
- Expiracao automatica com devolucao via correio
- Banco de dados SQLite e MySQL com HikariCP
- Taxa percentual configuravel sobre vendas
- Compatibilidade com versoes 1.8 a 1.21+