Show HN: Pumpkin, um servidor moderno de Minecraft escrito em Rust
(github.com/Snowiiii)- Pumpkin é um servidor de Minecraft feito inteiramente em Rust, com o objetivo de oferecer uma experiência de servidor rápida, eficiente e personalizável, ao mesmo tempo em que segue as mecânicas centrais do jogo
- O objetivo é oferecer desempenho baseado em multithreading, compatibilidade com as versões mais recentes de servidores Minecraft Java e Bedrock, aderência às mecânicas Vanilla do jogo, prevenção de vulnerabilidades de segurança conhecidas, alta capacidade de configuração e uma base para desenvolvimento de plugins
- O escopo de funcionalidades é dividido nas áreas de protocolo, mundo, jogador, entidades, servidor e proxy, incluindo Server Status/Ping, Encryption, Packet Compression, Java/Bedrock, World Loading/Saving, Lighting, Entity Spawning, Inventory, RCON, Permissions, Bungeecord, Velocity, entre outros
- Atualmente está em desenvolvimento ativo antes da versão 1.0.0; Advancements e Villagers aparecem como incompletos, enquanto Mobs, Animals e Non-Living Entities aparecem como W.I.P
- A execução segue a documentação de Quick Start, e o projeto oferece caminhos para uso, participação da comunidade, patrocínio e contribuição por meio da documentação, Discord, GitHub Sponsors e CONTRIBUTING.md
Objetivo e status do Pumpkin
- Pumpkin é um servidor de Minecraft escrito exclusivamente em Rust
- Busca oferecer uma experiência rápida, eficiente e personalizável, seguindo as mecânicas centrais de jogo do Minecraft
- O projeto está atualmente em estado de heavy development
- O trabalho necessário antes do lançamento da versão 1.0.0 pode ser conferido na issue relacionada
Objetivos de design
- Performance: tem como objetivo aumentar velocidade e eficiência usando multithreading
- Compatibility: oferece suporte às versões mais recentes de servidores Minecraft Java e Bedrock e segue as mecânicas Vanilla do jogo
- Security: prioriza a prevenção de exploits de segurança conhecidos
- Flexibility: oferece alta capacidade de configuração para desativar recursos desnecessários
- Extensibility: fornece uma base para o desenvolvimento de plugins
Escopo de funcionalidades implementadas
-
Configuração
- Oferece suporte a configuração baseada em TOML
-
Protocolo
- Tracking: Protocol
- Server Status/Ping, Encryption, Packet Compression e suporte a Java/Bedrock estão marcados como concluídos
-
Mundo
- Tracking: World
- Oferece suporte a Player Tab-list, Scoreboard, World Loading, World Time, World Borders, World Saving, Lighting, Entity Spawning e Bossbar
- Chunk Loading e Chunk Saving estão marcados nas formas Vanilla, Linear e Pump
- Inclui itens como Chunk Generation, Redstone e Liquid Physics
-
Jogador
- Tracking: Player
- Skins, Teleport, Movement, Animation, Inventory, Experience, Hunger, Off Hand e Eating estão marcados como concluídos
- Combat está vinculado como um item de acompanhamento separado
- Advancements aparece como incompleto
Entidades, servidor e proxy
-
Entities
- Entidades Non-Living incluem Minecart, Eggs etc. e aparecem como W.I.P
- Entity Effects, Players, Boss e Entity Saving estão marcados como concluídos
- Mobs e Animals aparecem como W.I.P
- Entity AI está vinculado como um item de acompanhamento separado
- Villagers aparece como incompleto
-
Server
-
Proxy
- Bungeecord e Velocity estão marcados como concluídos
Execução, documentação e comunidade
- O método de execução pode ser consultado no guia Quick Start
- A documentação é disponibilizada em pumpkinmc.org
- Contribuições são bem-vindas, com orientação para consultar o CONTRIBUTING.md
- Há um servidor no Discord para atualizações, eventos e conexão entre membros
- É possível patrocinar o projeto pelo GitHub Sponsors
1 comentários
Comentários no Hacker News
https://dayssincelastrustmcserver.com/
Considerando o tamanho do jogo, criar um servidor de Minecraft em qualquer linguagem não é uma tarefa fácil, então é surpreendente que já existam 7 só em Rust
A diferença de desempenho nos benchmarks é bem impressionante, mas parece que faltam geração e salvamento de mundo, e ambas são operações caras
A geração de chunks, em especial, pode derrubar completamente um VPS fraco. Os benchmarks provavelmente foram medidos em estado ocioso, então fico curioso para ver a comparação quando esses recursos forem incluídos e usados de fato
Também não vejo suporte a quebrar/colocar blocos; nesse caso, o servidor provavelmente precisaria recalcular iluminação e atualizar chunks
Por fim, fico curioso se há planos para adicionar recursos avançados como placares, equipes e parsing de command blocks. A Mojang já disponibilizou o Brigadier como open source para isso
Espero que amadureça a ponto de facilitar a operação de servidores até em hardware modesto
Colocar e quebrar blocos já é suportado, mas iluminação ainda não, então por enquanto tudo aparece escuro. Está em desenvolvimento
Também quero incluir recursos como placares e equipes, e já existe uma API que pode ser usada para comandos de forma parecida com o Brigadier
Quero permitir que jogadores hospedem servidores mesmo em hardware modesto, e algum dia pretendo testar o Pumpkin em algo como um Raspberry Pi
Como o tempo de residência fica salvo nos chunks, se depois você quiser aplicar uma lógica de geração de chunks atualizada, também pode regenerar apenas os chunks que ainda não foram visitados
Reimplementar servidores de Minecraft é bem interessante, e é bom ver cada nova implementação que aparece. Também há implementações de servidor com propósitos específicos, como o MCHPRS para compilação rápida de redstone para Minecraft técnico
Fico curioso se há benchmarks. Quanto ele é mais rápido que um servidor vanilla?
Servidores de Minecraft passam a usar recursos de forma extrema conforme o número de jogadores cresce, e muitas vezes têm TPS ruim mesmo rodando em servidores muito potentes
https://snowiiii.github.io/Pumpkin/about/benchmarks.html
Recentemente desenvolvi o Pumpkin. É um servidor de Minecraft eficiente e rápido, escrito completamente do zero em Rust; seria ótimo se vocês dessem uma olhada
É parecido com dizer que um baralho de Uno não é um substituto drop-in para um baralho de Hearts: ambos são apenas jogos de cartas, mas os dois não são baralhos de Uno
Ou será que isso quer dizer que o Pumpkin se comporta de forma diferente do vanilla fora da parte de rede, a ponto de talvez não ser possível abrir no Pumpkin um mundo criado no vanilla?
Eu já conhecia este projeto há algum tempo e também estava no Discord. Hoje deletei minha conta do Discord por causa da minha saúde mental
Fico feliz em ver que o pessoal do Hacker News parece gostar bastante do projeto. 140 upvotes me parece bem decente
Pelo que lembro, acho que havia outro servidor escrito em Rust, mas não sei ao certo
Da última vez que vi, era realmente um software em alfa inicial, mas o ritmo de desenvolvimento era bom. Não sei como está agora, e lembro que foi por volta da época em que o autor tinha ido fazer provas
Terminei minhas provas na semana passada e agora estou de férias, então os commits também voltaram ao ritmo normal
Fico curioso se a abordagem é fragmentar a thread principal por região, como no Paper Folia, por exemplo, ou se é só separar entidades não-bloco em threads próprias
Estou apenas esperando o Minecraft ser suficientemente submetido a engenharia reversa para que várias implementações de servidores e clientes simplesmente se tornem compatíveis, como se fosse um protocolo próprio
Vou experimentar. O desempenho do jar de servidor vanilla puro é ruim demais. É algo que eu gostaria que a Mojang melhorasse
Pelo que sei, a geração de novos chunks é pelo menos multithread
Também gostaria que houvesse suporte oficial a controles básicos para servidores SMP. Bastaria algo como regiões definidas por coordenadas de dois vértices e permissões básicas, como colocar, quebrar e interagir
Um arquivo de configuração simples bastaria, e solicitações ou atualizações poderiam ser gerenciadas por outras ferramentas. Um utilitário simples de linha de comando dentro do jogo para operadores também seria aceitável
Quero algo que permita não depender sempre de uma whitelist fechada. Sei que há plugins no Paper/Waterfall etc., mas há vantagens em manter o vanilla puro
Venho mantendo um servidor vivo há muito tempo
Quero tornar tudo o que você listou configurável por arquivo de configuração, então é bem provável que você goste
Se tiver problemas, consulte https://snowiiii.github.io/Pumpkin/troubleshooting/common_is... ou peça ajuda no Discord
Faz 0 dias desde que saiu um novo servidor de Minecraft escrito em Rust
https://dayssincelastrustmcserver.com/
Dos 7 no total, os 3 primeiros morreram, e os 3 mais recentes são todos projetos de 2024, incluindo o Pumpkin. Os projetos de 2024 todos deixam claras suas diferenças em relação ao Valence, que é mais próximo de um framework focado em modularidade
Os 3 mais recentes parecem ser concorrentes saudáveis e amistosos entre si
É uma boa referência para quem quer aprender como fazer algo assim na BEAM: https://github.com/thecodeboss/minecraft
O que modern quer dizer aqui?
Minecraft foi criado em 2011 e, segundo a Wikipedia, a última versão da edição “classic” saiu em 2017. Então qualquer coisa depois de 2017 não seria antiquada
Reescrever algo em si não tem problema, mas apresentar “modern” como valor é algo bastante vago, e se é objetivamente melhor também costuma ser discutível
Também queremos usar recursos modernos, como multithreading e Rust. Vejo Rust como uma linguagem moderna, projetada para corrigir os erros de linguagens antigas
Por exemplo, é bem provável que SQLite não seja chamado de modern, mas todo mundo gosta dele, então não importa