Show HN: Pumpkin เซิร์ฟเวอร์ Minecraft สมัยใหม่ที่เขียนด้วย Rust
(github.com/Snowiiii)- Pumpkin คือเซิร์ฟเวอร์ Minecraft ที่สร้างด้วย Rust ล้วน ๆ โดยมีเป้าหมายเพื่อมอบประสบการณ์เซิร์ฟเวอร์ที่รวดเร็ว มีประสิทธิภาพ และปรับแต่งได้ พร้อมทั้งยึดตามกลไกหลักของเกม
- เป้าหมายคือ ประสิทธิภาพจากมัลติเธรดดิ้ง, ความเข้ากันได้กับเวอร์ชันเซิร์ฟเวอร์ Minecraft รุ่นล่าสุดทั้ง Java และ Bedrock, การยึดตามกลไกเกมแบบ Vanilla, การป้องกันช่องโหว่ด้านความปลอดภัยที่เป็นที่รู้จัก, ความสามารถในการตั้งค่าสูง และการวางรากฐานสำหรับการพัฒนาปลั๊กอิน
- ขอบเขตฟีเจอร์แบ่งเป็นส่วน โปรโตคอล, เวิลด์, ผู้เล่น, เอนทิตี, เซิร์ฟเวอร์ และพร็อกซี โดยรวมถึง Server Status/Ping, Encryption, Packet Compression, Java/Bedrock, World Loading/Saving, Lighting, Entity Spawning, Inventory, RCON, Permissions, Bungeecord, Velocity ฯลฯ
- ปัจจุบันอยู่ใน ช่วงพัฒนาอย่างแข็งขันก่อน 1.0.0 โดย Advancements และ Villagers ถูกระบุว่ายังไม่เสร็จ ส่วน Mobs, Animals, Non-Living Entities ถูกระบุเป็น W.I.P
- การรันให้ทำตามเอกสาร Quick Start และมีช่องทางสำหรับการใช้งาน การมีส่วนร่วมกับชุมชน การสนับสนุน และการร่วมพัฒนาผ่านเอกสาร, Discord, GitHub Sponsors และ CONTRIBUTING.md
วัตถุประสงค์และสถานะของ Pumpkin
- Pumpkin คือ เซิร์ฟเวอร์ Minecraft ที่เขียนด้วย Rust ล้วน ๆ
- มุ่งมอบประสบการณ์ที่รวดเร็ว มีประสิทธิภาพ และปรับแต่งได้ พร้อมยึดตาม กลไกเกมหลัก ของ Minecraft
- โปรเจกต์ปัจจุบันอยู่ในสถานะ heavy development
- งานที่จำเป็นก่อนรีลีส 1.0.0 สามารถดูได้จาก issue ที่เกี่ยวข้อง
เป้าหมายด้านการออกแบบ
- Performance: มุ่งเพิ่มความเร็วและประสิทธิภาพด้วยการใช้มัลติเธรดดิ้ง
- Compatibility: รองรับเวอร์ชันเซิร์ฟเวอร์ Minecraft รุ่นล่าสุดทั้ง Java และ Bedrock และยึดตามกลไกเกมแบบ Vanilla
- Security: ให้ความสำคัญกับการป้องกันช่องโหว่ exploit ด้านความปลอดภัยที่เป็นที่รู้จัก
- Flexibility: ให้ความสามารถในการตั้งค่าสูง เพื่อปิดฟีเจอร์ที่ไม่จำเป็นได้
- Extensibility: วางรากฐานสำหรับการพัฒนาปลั๊กอิน
ขอบเขตฟีเจอร์ที่นำมาใช้แล้ว
-
การตั้งค่า
- รองรับการตั้งค่าบนพื้นฐาน TOML
-
โปรโตคอล
- Tracking: Protocol
- Server Status/Ping, Encryption, Packet Compression และการรองรับ Java/Bedrock ถูกทำเครื่องหมายว่าเสร็จแล้ว
-
เวิลด์
- Tracking: World
- รองรับ Player Tab-list, Scoreboard, World Loading, World Time, World Borders, World Saving, Lighting, Entity Spawning และ Bossbar
- Chunk Loading และ Chunk Saving ถูกทำเครื่องหมายว่าเสร็จในรูปแบบ Vanilla, Linear และ Pump
- รวมรายการ Chunk Generation, Redstone และ Liquid Physics
-
ผู้เล่น
- Tracking: Player
- Skins, Teleport, Movement, Animation, Inventory, Experience, Hunger, Off Hand และ Eating ถูกทำเครื่องหมายว่าเสร็จแล้ว
- Combat ถูกเชื่อมเป็นรายการติดตามแยกต่างหาก
- Advancements ถูกระบุว่ายังไม่เสร็จ
เอนทิตี·เซิร์ฟเวอร์·พร็อกซี
-
Entities
- เอนทิตี Non-Living รวมถึง Minecart, Eggs เป็นต้น และถูกระบุเป็น W.I.P
- Entity Effects, Players, Boss และ Entity Saving ถูกทำเครื่องหมายว่าเสร็จแล้ว
- Mobs และ Animals ถูกระบุเป็น W.I.P
- Entity AI ถูกเชื่อมเป็นรายการติดตามแยกต่างหาก
- Villagers ถูกระบุว่ายังไม่เสร็จ
-
Server
-
Proxy
- Bungeecord และ Velocity ถูกทำเครื่องหมายว่าเสร็จแล้ว
การรัน เอกสาร และชุมชน
- วิธีรันสามารถดูได้จากคู่มือ Quick Start
- เอกสารมีให้ที่ pumpkinmc.org
- ยินดีรับการมีส่วนร่วม และแนะนำให้อ้างอิง CONTRIBUTING.md
- มี เซิร์ฟเวอร์ Discord สำหรับอัปเดต อีเวนต์ และการเชื่อมต่อกับสมาชิก
- สามารถสนับสนุนโปรเจกต์ได้ผ่าน GitHub Sponsors
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
https://dayssincelastrustmcserver.com/
ถ้าคิดถึงขนาดของเกมแล้ว การทำเซิร์ฟเวอร์ Minecraft ด้วยภาษาใดก็ตามไม่ใช่เรื่องง่ายเลย แต่น่าทึ่งที่แค่ Rust ก็มีถึง 7 ตัวแล้ว
ดูจากเบนช์มาร์กแล้ว ความต่างด้านประสิทธิภาพ ค่อนข้างน่าประทับใจ แต่ดูเหมือนว่ายังไม่มีฟังก์ชันสร้างและบันทึกโลก ซึ่งทั้งสองอย่างนี้เป็นงานที่มีต้นทุนสูง
โดยเฉพาะการสร้างชังก์สามารถทำให้ VPS ที่สเปกอ่อน ๆ ล่มได้เลย เบนช์มาร์กน่าจะวัดตอนระบบว่างอยู่ เลยอยากรู้ว่าพอใส่ฟีเจอร์เหล่านั้นแล้วใช้งานจริงจะเทียบกันเป็นอย่างไร
ยังไม่เห็นการรองรับการทำลาย/วางบล็อกด้วย ซึ่งกรณีนี้ฝั่งเซิร์ฟเวอร์น่าจะต้องคำนวณแสงใหม่และอัปเดตชังก์
สุดท้ายก็สงสัยว่ามีแผนจะเพิ่มฟีเจอร์ขั้นสูงอย่าง scoreboard, team, การ parse command block ด้วยไหม Mojang เปิดโอเพนซอร์ส Brigadier ไว้สำหรับด้านนี้แล้ว
หวังว่าจะโตพอจนทำให้การรันเซิร์ฟเวอร์บนฮาร์ดแวร์สเปกต่ำง่ายขึ้น
การวางและทำลายบล็อก รองรับแล้ว แต่ยังไม่รองรับแสง ตอนนี้เลยมองเห็นทุกอย่างมืดไปหมด กำลังทำอยู่
ฟีเจอร์อย่าง scoreboard, team ก็อยากใส่ และมี API ที่ใช้กับคำสั่งได้คล้าย Brigadier อยู่แล้ว
อยากทำให้ผู้เล่นโฮสต์เซิร์ฟเวอร์ได้แม้บนฮาร์ดแวร์สเปกต่ำ และสักวันหนึ่งตั้งใจจะทดสอบ Pumpkin บนอุปกรณ์อย่าง Raspberry Pi
ในชังก์มีการบันทึกเวลาที่อยู่อาศัยไว้ ดังนั้นถ้าภายหลังอยากใช้ลอจิกการสร้างชังก์ที่อัปเดตแล้ว ก็อาจสร้างใหม่เฉพาะชังก์ที่ยังไม่เคยมีคนเข้าไปเท่านั้นได้
การทำ Minecraft server reimplementation ค่อนข้างน่าสนใจ และทุกครั้งที่มี implementation ใหม่ออกมาก็ดูน่าดีใจ ยังมี server implementation สำหรับวัตถุประสงค์เฉพาะอย่าง MCHPRS เพื่อคอมไพล์เรดสโตนเร็ว ๆ สำหรับสายเทคนิค Minecraft ด้วย
สงสัยว่ามีเบนช์มาร์กไหม เร็วกว่า เซิร์ฟเวอร์ vanilla แค่ไหน?
เซิร์ฟเวอร์ Minecraft ใช้ทรัพยากรเพิ่มขึ้นอย่างสุดโต่งเมื่อจำนวนผู้เล่นมากขึ้น และบ่อยครั้งถึงจะรันบนเซิร์ฟเวอร์แรงมาก TPS ก็ยังแย่
https://snowiiii.github.io/Pumpkin/about/benchmarks.html
เพิ่งพัฒนา Pumpkin เป็นเซิร์ฟเวอร์ Minecraft ที่มีประสิทธิภาพและรวดเร็ว เขียนใหม่ทั้งหมดด้วย Rust ลองดูได้เลย
คล้ายกับเด็ค Uno ไม่ใช่ drop-in replacement ของเด็ค Hearts แต่ทั้งคู่ก็เป็นแค่เกมไพ่ ไม่ใช่ว่าทั้งคู่เป็นเด็ค Uno
หรือหมายความว่า Pumpkin ทำงานต่างจาก vanilla ในส่วนอื่นนอกจากเครือข่าย จนอาจเปิดโลกที่สร้างด้วย vanilla ใน Pumpkin ไม่ได้หรือเปล่า
รู้จักโปรเจกต์นี้มานานแล้วและเคยอยู่ใน Discord ด้วย ตอนนี้ลบบัญชี Discord ไปแล้วเพื่อสุขภาพจิต
ดีใจที่ดูเหมือน Hacker News จะชอบโปรเจกต์นี้พอสมควร 140 upvote ถือว่าค่อนข้างดี
จำได้เหมือนมีเซิร์ฟเวอร์อีกตัวที่เขียนด้วย Rust แต่ไม่แน่ใจนัก
ครั้งสุดท้ายที่ดูยังเป็น ซอฟต์แวร์ early alpha มาก ๆ แต่ความเร็วในการพัฒนาดี ตอนนี้ไม่รู้ว่าสถานะเป็นอย่างไร และจำได้ว่าเป็นช่วงที่ผู้เขียนไปสอบ
สัปดาห์ที่แล้วสอบเสร็จแล้ว ตอนนี้เป็นช่วงปิดเทอม เลยกลับมาคอมมิตได้ตามปกติอีกครั้ง
สงสัยว่าเป็นวิธี shard main thread ตามภูมิภาคหรือเปล่า เช่นแบบ Paper Folia หรือแค่แยก เอนทิตีที่ไม่ใช่บล็อก ไปไว้คนละเธรดเท่านั้น
กำลังรอให้ Minecraft ถูก reverse engineer มากพอ จนกลายเป็นเหมือน โปรโตคอลของตัวเอง ที่ implementation ของเซิร์ฟเวอร์และไคลเอนต์หลายตัวเข้ากันได้เฉย ๆ
จะลองใช้ดู ประสิทธิภาพของ jar เซิร์ฟเวอร์ vanilla ล้วน ๆ แย่มาก เป็นจุดที่อยากให้ Mojang ปรับปรุง
เท่าที่รู้ การสร้างชังก์ใหม่อย่างน้อยก็เป็นแบบมัลติเธรด
อยากให้มีการรองรับอย่างเป็นทางการสำหรับการควบคุมพื้นฐานของเซิร์ฟเวอร์ SMP ด้วย แค่พื้นที่ที่กำหนดด้วยพิกัดมุมสองจุด กับสิทธิ์พื้นฐานอย่างการวาง·ทำลาย·โต้ตอบก็พอ
ใช้ไฟล์ config ง่าย ๆ ก็ได้ ส่วนคำขอหรือการอัปเดตให้เครื่องมืออื่นจัดการได้ ยูทิลิตี command line ในเกมแบบง่าย ๆ สำหรับผู้ดูแลก็โอเค
แค่อยากได้ระดับที่ไม่ต้องใช้แต่ closed whitelist ตลอดเวลา รู้ว่า Paper/Waterfall ฯลฯ มีปลั๊กอิน แต่การคงความเป็น vanilla ล้วน ๆ ก็มีข้อดีของมัน
เปิดเซิร์ฟเวอร์ให้รอดมานานแล้ว
สิ่งที่ยกมาทั้งหมดอยากทำให้ตั้งค่าได้ผ่านไฟล์ config จึงน่าจะถูกใจ
ถ้ามีปัญหา ดู https://snowiiii.github.io/Pumpkin/troubleshooting/common_is... หรือขอความช่วยเหลือใน Discord ได้
ผ่านมา 0 วันแล้วนับตั้งแต่มี Minecraft server ตัวใหม่ที่เขียนด้วย Rust ออกมา
https://dayssincelastrustmcserver.com/
จากทั้งหมด 7 ตัว ตัวแรก ๆ 3 ตัวเลิกพัฒนาไปแล้ว และ 3 ตัวล่าสุดรวมถึง Pumpkin ล้วนเป็นโปรเจกต์ปี 2024 โปรเจกต์ปี 2024 ทั้งหมดระบุจุดต่างจาก Valence ซึ่งใกล้เคียงกับเฟรมเวิร์กที่เน้น modularity มากกว่าอย่างชัดเจน
3 ตัวล่าสุดดูเหมือนเป็นคู่แข่งที่เป็นมิตรต่อกันและมีการแข่งขันที่ดี
เป็นแหล่งอ้างอิงที่ดีสำหรับคนที่อยากเรียนรู้ว่าทำของแบบนี้บน BEAM อย่างไร: https://github.com/thecodeboss/minecraft
ในที่นี้ modern หมายถึงอะไร?
Minecraft ถูกสร้างขึ้นในปี 2011 และตาม Wikipedia เวอร์ชันสุดท้ายของเอดิชัน ‘classic’ ออกมาในปี 2017 ดังนั้นอะไรที่หลังปี 2017 ก็ถือว่าไม่เชยทั้งหมด
การเขียนอะไรสักอย่างใหม่โดยตัวมันเองไม่ใช่เรื่องผิด แต่การยก “modern” มาเป็นคุณค่าออกจะหลวมมาก และบ่อยครั้งก็ยังถกเถียงได้ว่ามันดีกว่าอย่างเป็นกลางจริงหรือไม่
ก็อยากใช้ฟีเจอร์สมัยใหม่อย่าง multithreading หรือ Rust ด้วย มองว่า Rust เป็นภาษาสมัยใหม่ที่ออกแบบมาเพื่อแก้ข้อผิดพลาดของภาษาเก่า ๆ
เช่น SQLite อาจจะไม่ถูกเรียกว่า modern แต่ทุกคนก็ชอบมันอยู่ดี จึงไม่เป็นไร