Sou estudante de Ciência da Computação (UNA Sete Lagoas) e Técnico em Informática, e estou em busca de oportunidade como Desenvolvedor Júnior (Back-end, Front-end ou Full Stack).
Aprendo construindo: desenvolvo projetos próprios, como e-commerces, um jogo 2D e plugins para servidores de Minecraft, e publico tudo aqui. Minha experiência anterior me deu disciplina, responsabilidade e trabalho em equipe, e hoje levo isso para o código.
Plugin que personaliza a bigorna tradicional do Minecraft com novas funções para diversificar servidores. Publicado no Modrinth, com 54 downloads e compatível com Paper, Spigot e Bukkit (Minecraft 1.20.x e 1.21.x).
Principais recursos
- 🖱️ Menu totalmente configurável por YAML
- ✏️ Renomear itens e editar descrição pelo chat
- ✨ Menu de encantamentos (compra, adição e remoção)
- ⚡ Upgrade automático usando os livros do inventário
- ⚒️ Forja com a mesma função da bigorna tradicional
- 🔐 Permissões separadas por função e suporte opcional a Vault (economia)
- 🎨 Suporte a MiniMessage e códigos
&
Tecnologias: Java 21 · Paper API · YAML · Maven/Gradle · Vault
Plugin de dungeons com progressão de encantamentos, menus interativos e economia integrada. O jogador entra na dungeon, derrota mobs, desbloqueia encantamentos e os evolui com dinheiro e itens.
O que o plugin faz
- 🧙 5 encantamentos, cada um com nível, chance de ativação e efeito próprio
- 🔓 Requisitos de desbloqueio: quantidade de kills na dungeon e nível mínimo de varinha
- 💰 Evolução paga com dinheiro (via Vault) e/ou itens, com compra de +1, +5, +10 ou até o nível máximo
- 🖱️ Menus interativos que mostram em verde ou vermelho o que o jogador consegue pagar
- 👥 Instâncias por jogador: cada jogador vê apenas os próprios mobs na mesma área, usando PacketEvents
- 🛠️ Painel administrativo, modo desempenho por jogador e dados salvos em banco SQL
| Encantamento | O que faz |
|---|---|
| Tóxico | Dano em área com chance de ativação; raio e dano crescem por nível |
| Wither | Atinge vários alvos por ativação; a quantidade cresce por nível |
| Caixa | Sorteia um ganho (%) e entrega recompensas por comando |
| Tsunami | Elimina todos os mobs da região de uma vez |
| Custom | Sem fórmula fixa: cada nível é uma lista de comandos definida pelo admin |
Destaques técnicos
- Menus, mensagens e encantamentos configuráveis em YAML, recarregados sem reiniciar o servidor
- Ao atualizar o plugin, chaves novas entram nos arquivos do admin sem apagar o que ele já alterou
- Fórmulas de progressão parametrizadas, com limite máximo e precisão de 4 casas decimais
- O raio dos efeitos nunca ultrapassa o tamanho real da área da dungeon
- Sem Vault ou PacketEvents o plugin avisa e continua funcionando; se o banco falhar, ele se desativa com segurança
Tecnologias: Java · Paper/Bukkit API · PacketEvents · Vault · YAML · SQL (JDBC)
Fórmula de chance de ativação (usada por vários encantamentos, valores vindos do encantamentos.yml)
public double calcularChanceGenerica(String prefixo, int nivel) {
if (nivel <= 0) return 0.0;
double base = getDouble(prefixo + ".chance-base", 0.0);
double porNivel = getDouble(prefixo + ".chance-por-nivel", 0.0);
double maxima = getDouble(prefixo + ".chance-maxima", 100.0);
double chance = base + (porNivel * (nivel - 1));
chance = Math.max(0.0, Math.min(100.0, Math.min(chance, maxima)));
return arredondar4Casas(chance);
}Atualização de configuração sem perder o que o admin editou
for (String chave : configPadrao.getKeys(true)) {
if (!config.contains(chave) && !configPadrao.isConfigurationSection(chave)) {
config.set(chave, configPadrao.get(chave));
alterado = true;
}
}
if (alterado) {
salvar();
}Ver mais trechos
Encantamento Tsunami (trecho resumido)
public static int aplicar(MensagensManager mensagens, Area area, Player player, String regionName) {
List<LivingEntity> mobs = area.getMobsInRegion(regionName);
int eliminados = 0;
for (LivingEntity mob : mobs) {
// Folga grande sobre a vida atual para garantir a morte
area.applyEnchantDamage(mob, mob.getHealth() + 9999.0, player);
eliminados++;
}
if (eliminados > 0) {
player.getWorld().playSound(player.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1.0f, 0.6f);
player.sendMessage(mensagens.get("encantamentos.tsunami-ativado", "quantidade", eliminados));
}
return eliminados;
}Limite de alcance pelo tamanho da dungeon
public double clampAlcanceAreaMaxima(double alcanceDesejado, DatabaseManager.RegionBounds bounds) {
if (bounds == null) {
return alcanceDesejado;
}
double largura = Math.abs(bounds.getMaxX() - bounds.getMinX());
double altura = Math.abs(bounds.getMaxY() - bounds.getMinY());
double comprimento = Math.abs(bounds.getMaxZ() - bounds.getMinZ());
double maiorDimensao = Math.max(largura, Math.max(altura, comprimento));
double limiteAbsoluto = maiorDimensao * (getAlcanceLimitePercentual() / 100.0);
return Math.min(alcanceDesejado, limiteAbsoluto);
}Loja virtual de semijoias com visual de boutique, feita do zero, com fluxo completo de compra e área do cliente.
- 🛍️ Mostruário com filtro por categoria e botão de adicionar à sacola com notificação instantânea
- 🛒 Carrinho gerenciado por hook próprio (
useCart) e página de checkout - 👤 Área do cliente: login, cadastro e página Meus pedidos
- 📦 Cada pedido mostra status, produtos, total, forma de pagamento (Pix, cartão ou boleto), endereço de entrega e rastreio
- 💬 Mensagens entre cliente e loja dentro de cada pedido
- 🎨 Design system próprio (paleta champagne/cacau, Cormorant Garamond + Inter) e layout responsivo
- 🧭 Rotas baseadas em arquivos com TanStack Router
ℹ️ Projeto de portfólio: pedidos e usuários são dados simulados guardados no navegador, e não há pagamento real.
Tecnologias: React · TypeScript · TanStack Router · Tailwind CSS · Sonner · Lucide
Filtro por categoria e adição à sacola
const [activeCategory, setActiveCategory] = useState<Category>("Todos");
const { add } = useCart();
const visibleProducts =
activeCategory === "Todos"
? products
: products.filter((p) => p.category === activeCategory);
// ...
<button
onClick={() => {
add(p.id);
toast.success(`${p.name} adicionada à sacola`);
}}
>
+ Adicionar à sacola
</button>Ver mais trechos
Status de pedidos com tipagem forte (trecho resumido)
const STATUS_LABEL: Record<OrderStatus, { label: string; cls: string }> = {
pago: { label: "Pago", cls: "bg-emerald-100 text-emerald-700" },
preparacao: { label: "Em preparação", cls: "bg-indigo-100 text-indigo-700" },
enviado: { label: "Enviado", cls: "bg-sky-100 text-sky-700" },
entregue: { label: "Entregue", cls: "bg-emerald-100 text-emerald-700" },
// ...
};
function StatusPill({ status }: { status: OrderStatus }) {
const s = STATUS_LABEL[status];
return (
<span className={`text-[10px] uppercase tracking-wider px-2 py-0.5 rounded-full ${s.cls}`}>
{s.label}
</span>
);
}Rota "Meus pedidos" com TanStack Router
export const Route = createFileRoute("/meus-pedidos")({
head: () => ({ meta: [{ title: "Meus Pedidos — Dona Flor Semi Joias" }] }),
component: MeusPedidosPage,
});E-commerce de games para um servidor de Minecraft, do front-end ao back-end.
- 🏪 Páginas de loja, carrinho (com contador em tempo real), suporte e perfil
- 🔐 Login com sessão e painel administrativo restrito por perfil (admin)
- 📡 Indicador de jogadores online e informações do servidor na página inicial
- 💳 Rodapé com formas de pagamento e contatos
- 🎨 Interface temática de Minecraft, com identidade visual própria
Tecnologias: PHP · HTML5 · CSS3 · JavaScript · Font Awesome
Contador do carrinho em tempo real (JavaScript)
function atualizarContadorCarrinho() {
let carrinho = JSON.parse(localStorage.getItem('carrinho')) || [];
let total = carrinho.reduce((soma, item) => soma + (item.qtd || 1), 0);
document.getElementById('carrinho-contador').textContent = total;
}
document.addEventListener('DOMContentLoaded', atualizarContadorCarrinho);Ver mais trechos
Menu que muda conforme o perfil do usuário (PHP, trecho simplificado)
<?php if (isset($_SESSION["logado"]) && $_SESSION["logado"] === true): ?>
<li><a href="frontend/paginas/MeuPerfil.html">Meu Perfil</a></li>
<?php endif; ?>
<?php if (isset($_SESSION["logado"]) && $_SESSION["logado"] === true
&& $_SESSION["usuario_role"] === "admin"): ?>
<li><a href="...">Admin</a></li>
<?php endif; ?>Jogo 2D feito para praticar lógica de programação e orientação a objetos. Tecnologias: Java · [preencher]
- 🎓 Bacharelado em Ciência da Computação, UNA Sete Lagoas (previsão: Dez/2028)
- 💻 Técnico em Informática, E. E. Doutor Arthur Bernardes (2023)
- 🛡️ Defesa Cibernética, Cisco (2025)
- 🎮 Game Designer e Desenvolvedor Unreal, EBAC (2026)






