4 pontos por GN⁺ 2024-10-16 | 1 comentários | Compartilhar no WhatsApp
  • 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

    • Inclui itens como Plugins, Query, RCON, Inventories, Particles, Chat, Commands, Permissions e Translations
  • 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

 
GN⁺ 2024-10-16
Comentários no Hacker News
  • https://dayssincelastrustmcserver.com/

    • Como alguém que mexia bastante com mods de Minecraft há 10 anos, fico feliz em ver que a comunidade ainda é ativa a ponto de criar esse tipo de piada interna
      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

    • Mesmo olhando diretamente, os benchmarks são bem impressionantes
      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
    • Faz sentido implementar a geração de chunks por último, ou até nem implementar. Se você quer um servidor de Minecraft de alto desempenho, de qualquer forma precisa pré-gerar todos os chunks
      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

  • 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

    • Legal. Fico curioso para saber como o multithreading funciona. Quero entender se só as partes fáceis foram separadas ou se o trabalho real relacionado ao mundo também foi paralelizado
    • Está escrito “O que o Pumpkin não fará: ser um substituto drop-in para o vanilla ou outros servidores”, mas, se não é um substituto drop-in, fico pensando se é correto chamá-lo de servidor de Minecraft
      É 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

    • Fico muito feliz que tanta gente esteja gostando do projeto. Ainda é um projeto em andamento, mas estamos trabalhando bastante nele
      Terminei minhas provas na semana passada e agora estou de férias, então os commits também voltaram ao ritmo normal
    • Talvez seja o Cuberite, escrito em C
  • 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

    • O protocolo de rede do Bedrock é documentado: https://github.com/Mojang/bedrock-protocol-docs
    • Isso já aconteceu. O protocolo inteiro foi submetido a engenharia reversa, há ferramentas que desofuscam o código automaticamente, e já existe até uma reimplementação completa do Minecraft com suporte a servidor
  • 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

  • Faz 0 dias desde que saiu um novo servidor de Minecraft escrito em Rust
    https://dayssincelastrustmcserver.com/

    • É um site engraçado, mas um pouco injusto. Desses, o único sobre o qual dá para dizer “isso já existe” é praticamente só o Valence
      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
      released stars last_update
      feather 19aug 2,614 2 years ago
      mchprs 20jun 1,632 last month
      graphite 22jun 160 2 years ago
      valence 22sep 2,731 3 days ago
      hyperion 24mar 361 today
      pumpkin 24jul 965 today
      ferrumc 24sep 673 today
    • É bem engraçado que uma boa parte deles seja “é um servidor de Minecraft? Não. É um framework para você criar sua própria reimplementação de servidor de Minecraft”
    • O Pumpkin já está nessa lista
    • Ver isso me fez pensar se Rust é mesmo a ferramenta certa para esse trabalho. Na verdade, Elixir/Erlang pareceu uma ferramenta perfeita, e alguém já fez isso
      É uma boa referência para quem quer aprender como fazer algo assim na BEAM: https://github.com/thecodeboss/minecraft
    • Achei que seria legal existir um servidor de Minecraft feito com Bevy, e isso também já existia: https://github.com/valence-rs/valence
  • O que modern quer dizer aqui?

    • Hoje em dia, “modern” parece ser usado como um adjetivo bem solto para significar “reescreveu $thing [em Rust]”
      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
    • Quer dizer que foi escrito do zero e que, ao contrário do código do servidor vanilla de Minecraft, tem uma base limpa
      Também queremos usar recursos modernos, como multithreading e Rust. Vejo Rust como uma linguagem moderna, projetada para corrigir os erros de linguagens antigas
    • Em software, modern quase sempre só quer dizer que foi escrito nos últimos anos. Como adjetivo para descrever software, não é muito útil
      Por exemplo, é bem provável que SQLite não seja chamado de modern, mas todo mundo gosta dele, então não importa