4 คะแนน โดย GN⁺ 2024-10-16 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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

เป้าหมายด้านการออกแบบ

  • 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

    • รวมรายการ Plugins, Query, RCON, Inventories, Particles, Chat, Commands, Permissions และ Translations
  • Proxy

    • Bungeecord และ Velocity ถูกทำเครื่องหมายว่าเสร็จแล้ว

การรัน เอกสาร และชุมชน

  • วิธีรันสามารถดูได้จากคู่มือ Quick Start
  • เอกสารมีให้ที่ pumpkinmc.org
  • ยินดีรับการมีส่วนร่วม และแนะนำให้อ้างอิง CONTRIBUTING.md
  • มี เซิร์ฟเวอร์ Discord สำหรับอัปเดต อีเวนต์ และการเชื่อมต่อกับสมาชิก
  • สามารถสนับสนุนโปรเจกต์ได้ผ่าน GitHub Sponsors

1 ความคิดเห็น

 
GN⁺ 2024-10-16
ความคิดเห็นจาก Hacker News
  • https://dayssincelastrustmcserver.com/

    • ในฐานะคนที่เคยทำม็อด Minecraft เยอะเมื่อ 10 ปีก่อน เห็นแล้วดีใจที่ชุมชนยังคึกคักพอจนมี มุกวงใน แบบนี้อยู่
      ถ้าคิดถึงขนาดของเกมแล้ว การทำเซิร์ฟเวอร์ Minecraft ด้วยภาษาใดก็ตามไม่ใช่เรื่องง่ายเลย แต่น่าทึ่งที่แค่ Rust ก็มีถึง 7 ตัวแล้ว
  • ดูจากเบนช์มาร์กแล้ว ความต่างด้านประสิทธิภาพ ค่อนข้างน่าประทับใจ แต่ดูเหมือนว่ายังไม่มีฟังก์ชันสร้างและบันทึกโลก ซึ่งทั้งสองอย่างนี้เป็นงานที่มีต้นทุนสูง
    โดยเฉพาะการสร้างชังก์สามารถทำให้ VPS ที่สเปกอ่อน ๆ ล่มได้เลย เบนช์มาร์กน่าจะวัดตอนระบบว่างอยู่ เลยอยากรู้ว่าพอใส่ฟีเจอร์เหล่านั้นแล้วใช้งานจริงจะเทียบกันเป็นอย่างไร
    ยังไม่เห็นการรองรับการทำลาย/วางบล็อกด้วย ซึ่งกรณีนี้ฝั่งเซิร์ฟเวอร์น่าจะต้องคำนวณแสงใหม่และอัปเดตชังก์
    สุดท้ายก็สงสัยว่ามีแผนจะเพิ่มฟีเจอร์ขั้นสูงอย่าง scoreboard, team, การ parse command block ด้วยไหม Mojang เปิดโอเพนซอร์ส Brigadier ไว้สำหรับด้านนี้แล้ว
    หวังว่าจะโตพอจนทำให้การรันเซิร์ฟเวอร์บนฮาร์ดแวร์สเปกต่ำง่ายขึ้น

    • ดูเบนช์มาร์กด้วยตัวเองก็ค่อนข้างน่าประทับใจจริง ๆ
      การวางและทำลายบล็อก รองรับแล้ว แต่ยังไม่รองรับแสง ตอนนี้เลยมองเห็นทุกอย่างมืดไปหมด กำลังทำอยู่
      ฟีเจอร์อย่าง scoreboard, team ก็อยากใส่ และมี API ที่ใช้กับคำสั่งได้คล้าย Brigadier อยู่แล้ว
      อยากทำให้ผู้เล่นโฮสต์เซิร์ฟเวอร์ได้แม้บนฮาร์ดแวร์สเปกต่ำ และสักวันหนึ่งตั้งใจจะทดสอบ Pumpkin บนอุปกรณ์อย่าง Raspberry Pi
    • การสร้างชังก์ จะสมเหตุสมผลถ้าทำไว้ท้ายสุด หรือไม่ทำเลยก็ได้ ถ้าต้องการเซิร์ฟเวอร์ Minecraft ที่ประสิทธิภาพดี ยังไงก็ต้องสร้างชังก์ทั้งหมดล่วงหน้าอยู่แล้ว
      ในชังก์มีการบันทึกเวลาที่อยู่อาศัยไว้ ดังนั้นถ้าภายหลังอยากใช้ลอจิกการสร้างชังก์ที่อัปเดตแล้ว ก็อาจสร้างใหม่เฉพาะชังก์ที่ยังไม่เคยมีคนเข้าไปเท่านั้นได้
      การทำ Minecraft server reimplementation ค่อนข้างน่าสนใจ และทุกครั้งที่มี implementation ใหม่ออกมาก็ดูน่าดีใจ ยังมี server implementation สำหรับวัตถุประสงค์เฉพาะอย่าง MCHPRS เพื่อคอมไพล์เรดสโตนเร็ว ๆ สำหรับสายเทคนิค Minecraft ด้วย
  • สงสัยว่ามีเบนช์มาร์กไหม เร็วกว่า เซิร์ฟเวอร์ vanilla แค่ไหน?
    เซิร์ฟเวอร์ Minecraft ใช้ทรัพยากรเพิ่มขึ้นอย่างสุดโต่งเมื่อจำนวนผู้เล่นมากขึ้น และบ่อยครั้งถึงจะรันบนเซิร์ฟเวอร์แรงมาก TPS ก็ยังแย่

  • เพิ่งพัฒนา Pumpkin เป็นเซิร์ฟเวอร์ Minecraft ที่มีประสิทธิภาพและรวดเร็ว เขียนใหม่ทั้งหมดด้วย Rust ลองดูได้เลย

    • เจ๋งดี สงสัยว่า มัลติเธรดดิ้ง ทำงานอย่างไร แค่แยกส่วนที่ง่าย ๆ ออกไป หรือ parallelize งานจริงที่เกี่ยวกับโลกด้วย
    • เห็นเขียนว่า “สิ่งที่ Pumpkin จะไม่ทำ: เป็น drop-in replacement ของ vanilla หรือเซิร์ฟเวอร์อื่น” ถ้าไม่ใช่ drop-in replacement ก็รู้สึกว่าเรียกว่าเซิร์ฟเวอร์ Minecraft ได้ยากไหม
      คล้ายกับเด็ค Uno ไม่ใช่ drop-in replacement ของเด็ค Hearts แต่ทั้งคู่ก็เป็นแค่เกมไพ่ ไม่ใช่ว่าทั้งคู่เป็นเด็ค Uno
      หรือหมายความว่า Pumpkin ทำงานต่างจาก vanilla ในส่วนอื่นนอกจากเครือข่าย จนอาจเปิดโลกที่สร้างด้วย vanilla ใน Pumpkin ไม่ได้หรือเปล่า
  • รู้จักโปรเจกต์นี้มานานแล้วและเคยอยู่ใน Discord ด้วย ตอนนี้ลบบัญชี Discord ไปแล้วเพื่อสุขภาพจิต
    ดีใจที่ดูเหมือน Hacker News จะชอบโปรเจกต์นี้พอสมควร 140 upvote ถือว่าค่อนข้างดี
    จำได้เหมือนมีเซิร์ฟเวอร์อีกตัวที่เขียนด้วย Rust แต่ไม่แน่ใจนัก
    ครั้งสุดท้ายที่ดูยังเป็น ซอฟต์แวร์ early alpha มาก ๆ แต่ความเร็วในการพัฒนาดี ตอนนี้ไม่รู้ว่าสถานะเป็นอย่างไร และจำได้ว่าเป็นช่วงที่ผู้เขียนไปสอบ

    • ดีใจมากที่หลายคนชอบโปรเจกต์นี้ ยังเป็น โปรเจกต์ที่กำลังพัฒนา อยู่ แต่กำลังตั้งใจทำเต็มที่
      สัปดาห์ที่แล้วสอบเสร็จแล้ว ตอนนี้เป็นช่วงปิดเทอม เลยกลับมาคอมมิตได้ตามปกติอีกครั้ง
    • อาจเป็น Cuberite ที่เขียนด้วย C ก็ได้
  • สงสัยว่าเป็นวิธี shard main thread ตามภูมิภาคหรือเปล่า เช่นแบบ Paper Folia หรือแค่แยก เอนทิตีที่ไม่ใช่บล็อก ไปไว้คนละเธรดเท่านั้น

  • กำลังรอให้ Minecraft ถูก reverse engineer มากพอ จนกลายเป็นเหมือน โปรโตคอลของตัวเอง ที่ implementation ของเซิร์ฟเวอร์และไคลเอนต์หลายตัวเข้ากันได้เฉย ๆ

    • โปรโตคอลเครือข่ายของ Bedrock มีเอกสารแล้ว: https://github.com/Mojang/bedrock-protocol-docs
    • เป็นแบบนั้นแล้ว โปรโตคอลทั้งหมดถูก reverse engineer แล้ว มีเครื่องมือที่ deobfuscate โค้ดอัตโนมัติด้วย และก็มี การ reimplementation แบบสมบูรณ์ ของ Minecraft ที่รองรับถึงเซิร์ฟเวอร์แล้ว
  • จะลองใช้ดู ประสิทธิภาพของ 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/

    • เป็นเว็บขำ ๆ แต่ก็ออกจะไม่แฟร์นิดหน่อย ในบรรดารายการนั้น ที่พอพูดได้ว่า “ก็มีอยู่แล้วนี่” จริง ๆ แล้วแทบจะมีแค่ Valence เท่านั้น
      จากทั้งหมด 7 ตัว ตัวแรก ๆ 3 ตัวเลิกพัฒนาไปแล้ว และ 3 ตัวล่าสุดรวมถึง Pumpkin ล้วนเป็นโปรเจกต์ปี 2024 โปรเจกต์ปี 2024 ทั้งหมดระบุจุดต่างจาก Valence ซึ่งใกล้เคียงกับเฟรมเวิร์กที่เน้น modularity มากกว่าอย่างชัดเจน
      3 ตัวล่าสุดดูเหมือนเป็นคู่แข่งที่เป็นมิตรต่อกันและมีการแข่งขันที่ดี
      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
    • ที่ตลกคือ หลายตัวในนี้ค่อนข้างเป็นแนว “เป็น Minecraft server ไหม? ไม่ใช่ เป็น เฟรมเวิร์กสำหรับสร้าง Minecraft server ที่เขียนใหม่ของตัวเอง”
    • Pumpkin อยู่ในลิสต์นั้นอยู่แล้ว
    • พอเห็นแบบนี้ก็ทำให้คิดว่า Rust เป็นเครื่องมือที่เหมาะกับงานนี้จริงหรือเปล่า กลับรู้สึกว่า Elixir/Erlang น่าจะเป็นเครื่องมือที่สมบูรณ์แบบมากกว่า และจริง ๆ ก็มีคนทำไว้แล้ว
      เป็นแหล่งอ้างอิงที่ดีสำหรับคนที่อยากเรียนรู้ว่าทำของแบบนี้บน BEAM อย่างไร: https://github.com/thecodeboss/minecraft
    • เคยคิดว่าถ้ามี Minecraft server ที่ทำด้วย Bevy ก็คงเท่ดี แต่ก็มีอยู่แล้วเหมือนกัน: https://github.com/valence-rs/valence
  • ในที่นี้ modern หมายถึงอะไร?

    • ช่วงนี้ “modern” ดูเหมือนถูกใช้เป็นคำคุณศัพท์แบบหลวม ๆ ที่หมายถึง “เขียน $thing ใหม่ [ด้วย Rust]”
      Minecraft ถูกสร้างขึ้นในปี 2011 และตาม Wikipedia เวอร์ชันสุดท้ายของเอดิชัน ‘classic’ ออกมาในปี 2017 ดังนั้นอะไรที่หลังปี 2017 ก็ถือว่าไม่เชยทั้งหมด
      การเขียนอะไรสักอย่างใหม่โดยตัวมันเองไม่ใช่เรื่องผิด แต่การยก “modern” มาเป็นคุณค่าออกจะหลวมมาก และบ่อยครั้งก็ยังถกเถียงได้ว่ามันดีกว่าอย่างเป็นกลางจริงหรือไม่
    • หมายถึงเขียนขึ้นตั้งแต่ต้น และต่างจากโค้ด Minecraft server แบบ vanilla ตรงที่มี ฐานรากที่สะอาด
      ก็อยากใช้ฟีเจอร์สมัยใหม่อย่าง multithreading หรือ Rust ด้วย มองว่า Rust เป็นภาษาสมัยใหม่ที่ออกแบบมาเพื่อแก้ข้อผิดพลาดของภาษาเก่า ๆ
    • ในซอฟต์แวร์ modern แทบจะหมายถึงแค่ว่าเขียนขึ้นในช่วงไม่กี่ปีมานี้เท่านั้น มันไม่ค่อยมีประโยชน์ในฐานะคำคุณศัพท์สำหรับอธิบายซอฟต์แวร์
      เช่น SQLite อาจจะไม่ถูกเรียกว่า modern แต่ทุกคนก็ชอบมันอยู่ดี จึงไม่เป็นไร