4 điểm bởi GN⁺ 2024-10-16 | 1 bình luận | Chia sẻ qua WhatsApp
  • Pumpkin là một máy chủ Minecraft được xây dựng hoàn toàn bằng Rust, hướng tới việc mang lại trải nghiệm máy chủ nhanh, hiệu quả và có thể tùy biến, đồng thời tuân theo các cơ chế cốt lõi của trò chơi
  • Mục tiêu của dự án là hiệu năng dựa trên đa luồng, tương thích với các phiên bản máy chủ Minecraft Java và Bedrock mới nhất, tuân thủ cơ chế chơi Vanilla, ngăn chặn các lỗ hổng bảo mật đã biết, khả năng cấu hình cao và cung cấp nền tảng cho phát triển plugin
  • Phạm vi tính năng được chia thành các mảng giao thức, thế giới, người chơi, thực thể, máy chủ và proxy; bao gồm Server Status/Ping, Encryption, Packet Compression, Java/Bedrock, World Loading/Saving, Lighting, Entity Spawning, Inventory, RCON, Permissions, Bungeecord, Velocity, v.v.
  • Hiện tại dự án đang trong giai đoạn phát triển tích cực trước 1.0.0; Advancements và Villagers được đánh dấu là chưa hoàn thành, còn Mobs, Animals và Non-Living Entities được đánh dấu là W.I.P
  • Việc chạy máy chủ làm theo tài liệu Quick Start, đồng thời dự án cung cấp các kênh sử dụng, tham gia cộng đồng, tài trợ và đóng góp thông qua tài liệu, Discord, GitHub Sponsors và CONTRIBUTING.md

Mục đích và trạng thái của Pumpkin

  • Pumpkinmáy chủ Minecraft được viết hoàn toàn bằng Rust
  • Dự án hướng tới việc cung cấp trải nghiệm nhanh, hiệu quả và có thể tùy biến, đồng thời tuân theo các cơ chế gameplay cốt lõi của Minecraft
  • Hiện tại dự án đang ở trạng thái heavy development
    • Có thể xem các công việc cần hoàn thành trước khi phát hành 1.0.0 tại issue liên quan

Mục tiêu thiết kế

  • Performance: Hướng tới tăng tốc độ và hiệu quả bằng cách tận dụng đa luồng
  • Compatibility: Hỗ trợ các phiên bản máy chủ Minecraft Java và Bedrock mới nhất và tuân theo cơ chế chơi Vanilla
  • Security: Ưu tiên ngăn chặn các khai thác bảo mật đã biết
  • Flexibility: Cung cấp khả năng cấu hình cao để có thể vô hiệu hóa các tính năng không cần thiết
  • Extensibility: Cung cấp nền tảng cho phát triển plugin

Phạm vi tính năng đã triển khai

  • Cấu hình

    • Hỗ trợ cấu hình dựa trên TOML
  • Giao thức

    • Tracking: Protocol
    • Đã hỗ trợ Server Status/Ping, Encryption, Packet Compression, Java/Bedrock
  • Thế giới

    • Tracking: World
    • Hỗ trợ Player Tab-list, Scoreboard, World Loading, World Time, World Borders, World Saving, Lighting, Entity Spawning, Bossbar
    • Chunk Loading và Chunk Saving được đánh dấu hỗ trợ các dạng Vanilla, Linear, Pump
    • Bao gồm các mục Chunk Generation, Redstone, Liquid Physics
  • Người chơi

    • Tracking: Player
    • Skins, Teleport, Movement, Animation, Inventory, Experience, Hunger, Off Hand, Eating đã được đánh dấu hoàn thành
    • Combat được liên kết như một hạng mục theo dõi riêng
    • Advancements được đánh dấu là chưa hoàn thành

Thực thể · máy chủ · proxy

  • Entities

    • Các thực thể Non-Living bao gồm Minecart, Eggs, v.v. và được đánh dấu là W.I.P
    • Entity Effects, Players, Boss, Entity Saving đã được đánh dấu hoàn thành
    • Mobs và Animals được đánh dấu là W.I.P
    • Entity AI được liên kết như một hạng mục theo dõi riêng
    • Villagers được đánh dấu là chưa hoàn thành
  • Server

    • Bao gồm các mục Plugins, Query, RCON, Inventories, Particles, Chat, Commands, Permissions, Translations
  • Proxy

    • Bungeecord và Velocity đã được đánh dấu hỗ trợ

Chạy, tài liệu, cộng đồng

  • Có thể xem cách chạy trong hướng dẫn Quick Start
  • Tài liệu được cung cấp tại pumpkinmc.org
  • Dự án hoan nghênh đóng góp và hướng dẫn tham khảo CONTRIBUTING.md
  • Dự án cung cấp máy chủ Discord để cập nhật, tổ chức sự kiện và kết nối thành viên
  • Có thể tài trợ cho dự án qua GitHub Sponsors

1 bình luận

 
GN⁺ 2024-10-16
Ý kiến trên Hacker News
  • https://dayssincelastrustmcserver.com/

    • Với tư cách là người từng mod Minecraft rất nhiều 10 năm trước, thật vui khi thấy cộng đồng vẫn sôi nổi đến mức còn có những trò đùa nội bộ như thế này.
      Xét đến quy mô của trò chơi, việc tạo một server Minecraft bằng bất kỳ ngôn ngữ nào cũng không dễ, nên thật đáng ngạc nhiên khi riêng Rust đã có tới 7 cái.
  • Trên benchmark, chênh lệch hiệu năng khá ấn tượng, nhưng có vẻ còn thiếu tính năng tạo và lưu world, mà cả hai đều là các tác vụ tốn kém.
    Đặc biệt, việc tạo chunk có thể khiến một VPS yếu sụp hẳn. Benchmark chắc được đo ở trạng thái nhàn rỗi, nên tôi tò mò so sánh sẽ ra sao khi các tính năng đó được thêm vào và dùng thực tế.
    Cũng không thấy hỗ trợ phá/đặt block; trong trường hợp này server có lẽ sẽ cần tính lại ánh sáng và cập nhật chunk.
    Cuối cùng, tôi cũng tò mò liệu có kế hoạch thêm các tính năng nâng cao như scoreboard, team, phân tích cú pháp command block không. Mojang đã open-source Brigadier cho mảng này.
    Hy vọng nó sẽ trưởng thành đến mức giúp việc vận hành server trên phần cứng cấu hình thấp cũng trở nên dễ dàng.

    • Tự xem benchmark cũng thấy khá ấn tượng.
      Đặt và phá block đã được hỗ trợ, nhưng ánh sáng thì chưa, nên hiện tại mọi thứ đều trông tối. Tính năng này đang được làm.
      Cũng muốn thêm các tính năng như scoreboard, team, và hiện đã có API có thể dùng tương tự Brigadier cho lệnh.
      Tôi muốn giúp người chơi có thể host server ngay cả trên phần cứng cấu hình thấp, và một ngày nào đó định thử nghiệm Pumpkin trên những thứ như Raspberry Pi.
    • Việc tạo chunk để làm cuối cùng, hoặc thậm chí không làm, cũng hợp lý. Nếu muốn một server Minecraft hiệu năng tốt thì dù sao cũng phải tạo sẵn toàn bộ chunk.
      Vì chunk có lưu thời gian cư trú, nên nếu sau này muốn áp dụng logic tạo chunk đã cập nhật, cũng có thể chỉ tạo lại những chunk chưa từng được ghé thăm.
      Việc tái triển khai server Minecraft khá thú vị, và mỗi lần có implementation mới xuất hiện đều rất đáng xem. Cũng có các implementation server cho mục đích cụ thể như MCHPRS để biên dịch redstone nhanh cho technical Minecraft.
  • Không biết có benchmark không. Nhanh hơn server vanilla bao nhiêu?
    Server Minecraft dùng tài nguyên tăng cực mạnh khi số người chơi tăng, và nhiều khi dù chạy server rất mạnh TPS vẫn tệ.

  • Gần đây tôi đã phát triển Pumpkin. Đây là một server Minecraft hiệu quả và nhanh, được viết hoàn toàn từ đầu bằng Rust, mong mọi người xem thử.

    • Hay đấy. Tò mò multithreading hoạt động thế nào. Muốn biết chỉ tách những phần dễ, hay cả các công việc thực sự liên quan đến world cũng được song song hóa.
    • Có ghi “Những gì Pumpkin sẽ không làm: trở thành một bản thay thế drop-in cho vanilla hoặc các server khác”, nhưng nếu không phải là bản thay thế drop-in thì có lẽ khó gọi là server Minecraft?
      Một bộ bài Uno không phải là bản thay thế drop-in cho bộ bài Hearts, nhưng cả hai chỉ đều là game bài, chứ không phải cả hai đều là bộ bài Uno.
      Hay ý là Pumpkin hoạt động khác vanilla ở những phần ngoài mạng, nên có thể không mở được world tạo bằng vanilla trong Pumpkin?
  • Tôi đã biết dự án này từ trước và cũng từng ở trong Discord. Hiện tôi đã xóa tài khoản Discord vì sức khỏe tinh thần.
    Rất vui khi có vẻ Hacker News khá thích dự án này. 140 upvote thì tôi thấy khá ổn.
    Theo trí nhớ thì hình như còn có một server khác viết bằng Rust, nhưng tôi không chắc.
    Lần cuối tôi xem thì nó đúng là phần mềm alpha rất sớm, nhưng tốc độ phát triển tốt. Giờ trạng thái thế nào thì không rõ; tôi nhớ là lúc đó tác giả đang đi thi.

    • Thật sự rất vui vì nhiều người thích dự án. Nó vẫn là dự án đang phát triển, nhưng chúng tôi đang làm rất chăm chỉ.
      Tuần trước tôi đã thi xong và giờ đang nghỉ, nên số commit cũng đã trở lại như bình thường.
    • Có thể là Cuberite viết bằng C.
  • Không biết có phải main thread được sharding theo khu vực, chẳng hạn như Paper Folia, không. Hay chỉ là tách riêng non-block entity sang thread khác?

  • Tôi đang chờ đến lúc Minecraft được reverse-engineer đủ nhiều để nhiều implementation server và client cứ thế tương thích với nhau như một giao thức riêng.

    • Giao thức mạng của Bedrock đã được tài liệu hóa: https://github.com/Mojang/bedrock-protocol-docs
    • Nó đã như vậy rồi. Toàn bộ giao thức đã được reverse-engineer, có cả công cụ tự động khử obfuscation mã, và đã có bản tái triển khai hoàn chỉnh của Minecraft hỗ trợ cả server.
  • Tôi sẽ thử dùng. Hiệu năng của jar server vanilla thuần quá tệ. Đây là điểm tôi mong Mojang cải thiện.
    Theo tôi biết, việc tạo chunk mới ít nhất đã là multithread.
    Tôi cũng mong có hỗ trợ chính thức cho các điều khiển cơ bản của server SMP. Chỉ cần vùng được xác định bằng tọa độ hai đỉnh, cùng các quyền cơ bản như đặt, phá, tương tác là đủ.
    Một file cấu hình đơn giản là được, còn request hay update có thể quản lý bằng công cụ khác. Một tiện ích dòng lệnh đơn giản trong game cho operator cũng ổn.
    Tôi chỉ muốn không phải lúc nào cũng dùng whitelist đóng. Tôi biết Paper/Waterfall v.v. có plugin, nhưng việc giữ vanilla thuần có lợi thế riêng.
    Tôi đã duy trì server sống trong thời gian dài.

    • Chỉ cần lưu ý là nó chưa hoàn thiện và còn thiếu nhiều tính năng.
      Những thứ bạn liệt kê đều là các thứ tôi muốn cho cấu hình qua file cấu hình, nên có khả năng bạn sẽ thích.
      Nếu có vấn đề, hãy xem https://snowiiii.github.io/Pumpkin/troubleshooting/common_is... hoặc nhờ trợ giúp trên Discord.
  • Đã 0 ngày kể từ khi có một server Minecraft mới viết bằng Rust
    https://dayssincelastrustmcserver.com/

    • Trang này buồn cười, nhưng hơi bất công. Trong số đó, thứ có thể nói là “đã có rồi mà” thực ra gần như chỉ có Valence
      Trong tổng số 7 cái, 3 cái đầu đã chết, còn 3 cái mới nhất, gồm cả Pumpkin, đều là dự án năm 2024. Các dự án năm 2024 đều nêu rõ điểm khác biệt với Valence, vốn gần giống một framework tập trung vào tính mô-đun
      3 cái mới nhất trông như những đối thủ cạnh tranh lành mạnh và thân thiện với nhau
      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
    • Khá buồn cười là nhiều cái trong số này lại thuộc kiểu “Đây có phải server Minecraft không? Không. Nó là framework để bạn tạo bản viết lại server Minecraft của riêng mình”
    • Pumpkin đã có trong danh sách đó rồi
    • Nhìn chuyện này khiến tôi tự hỏi Rust có thật sự là công cụ phù hợp cho việc này không. Ngược lại, Elixir/Erlang có vẻ như công cụ hoàn hảo, và thực tế đã có người làm rồi
      Đây là tài liệu tham khảo tốt cho ai muốn học cách làm những thứ như vậy trên BEAM: https://github.com/thecodeboss/minecraft
    • Tôi từng nghĩ nếu có server Minecraft làm bằng Bevy thì sẽ rất hay, và hóa ra cái đó cũng đã có rồi: https://github.com/valence-rs/valence
  • Ở đây modern nghĩa là gì?

    • Dạo này “modern” có vẻ được dùng như một tính từ khá lỏng lẻo, mang nghĩa “viết lại $thing bằng [Rust]”
      Minecraft được tạo ra năm 2011, và theo Wikipedia, phiên bản cuối cùng của edition ‘classic’ ra mắt năm 2017. Vậy nên mọi thứ sau năm 2017 đều không phải đồ cũ
      Bản thân việc viết lại một thứ gì đó thì ổn, nhưng đưa “modern” ra như một giá trị thì khá lỏng lẻo, và việc nó có khách quan tốt hơn hay không cũng thường gây tranh cãi
    • Nghĩa là nó được viết từ đầu và có nền tảng sạch sẽ, khác với code server Minecraft vanilla
      Cũng muốn dùng các tính năng hiện đại như đa luồng hoặc Rust. Tôi xem Rust là một ngôn ngữ hiện đại được thiết kế để sửa những sai lầm của các ngôn ngữ cũ
    • Trong phần mềm, modern hầu như luôn chỉ có nghĩa là được viết trong vài năm gần đây. Là tính từ để mô tả phần mềm thì không hữu ích lắm
      Ví dụ SQLite nhiều khả năng sẽ không được gọi là modern, nhưng ai cũng thích nó nên cũng chẳng sao