Show HN: Pumpkin, máy chủ Minecraft hiện đại được viết bằng Rust
(github.com/Snowiiii)- 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
- Pumpkin là má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
-
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
Ý kiến trên Hacker News
https://dayssincelastrustmcserver.com/
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 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.
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ệ.
https://snowiiii.github.io/Pumpkin/about/benchmarks.html
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ử.
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.
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.
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.
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.
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/
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
Đâ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
Ở đây modern nghĩa là gì?
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
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ũ
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