อยากให้ผู้เล่นไม่ทิ้งของตอนตาย คำตอบคือกฎเกมที่ชื่อ keepInventory และบนเซิร์ฟเวอร์ Minecraft ของ uniz.host คุณกดเปิดมันได้จากหน้าเว็บโดยไม่ต้องพิมพ์คำสั่งเอง ที่สำคัญกว่านั้นคือมันมีผลทันที ไม่ต้องรีสตาร์ท ต่างจากการ์ดตั้งค่าเซิร์ฟเวอร์และการ์ดม็อด ที่ต้องรอรีสตาร์ทครั้งถัดไปเสมอ
เปิด keepInventory ทีละขั้น
เปิดเซิร์ฟเวอร์ให้ขึ้นสถานะกำลังทำงานก่อน
การ์ดกฎเกมจะแสดงสวิตช์ก็ต่อเมื่อเซิร์ฟเวอร์อยู่ในสถานะกำลังทำงานเท่านั้น ถ้าเซิร์ฟยังปิดอยู่ คุณจะเห็นแค่ข้อความ "เปิดเซิร์ฟเวอร์เพื่อแก้กฎเกม" แทนตัวควบคุมทั้งแผง กดเปิดเซิร์ฟแล้วรอจนสถานะขึ้นว่ากำลังทำงานก่อน แล้วค่อยไปต่อ
เข้าแท็บตั้งค่าแล้วเลื่อนหาการ์ดกฎเกม
ที่หน้าเซิร์ฟเวอร์ (/dashboard/servers/<id>) เลือกแท็บ "ตั้งค่า" การ์ดที่ต้องการชื่อ "กฎเกม (Gamerules)" อยู่ในแท็บเดียวกับการ์ด "การตั้งค่าเซิร์ฟเวอร์ (server.properties)" และการ์ด "รีเซ็ตโลก"
พอการ์ดโหลดขึ้นมา ระบบจะไปถามค่าจริงของกฎทั้งสิบข้อจากโลกที่กำลังรันอยู่ ก่อนหน้านั้นสวิตช์จะแสดงค่าตั้งต้นของรายการไปก่อนหนึ่งอึดใจ แล้วค่อยเปลี่ยนเป็นค่าจริงเมื่ออ่านสำเร็จ
สลับสวิตช์ของกฎที่ต้องการ
สำหรับ keepInventory ให้มองหาแถวที่เขียนว่า "เก็บของเมื่อตาย" แล้วสลับสวิตช์ให้เปิด ไม่มีปุ่มบันทึกและไม่ต้องกดยืนยัน แต่ละแถวส่งคำสั่งของตัวเองแยกกันทันทีที่คุณกด
ถ้าเป็นช่องตัวเลขอย่าง "% ผู้เล่นที่ต้องนอนเพื่อข้ามคืน" หรือ "ความเร็ว random tick" ค่าจะถูกส่งตอนที่คุณคลิกออกจากช่องนั้น ไม่ใช่ทุกตัวอักษรที่พิมพ์ และค่าที่เกินช่วงจะถูกดึงกลับเข้าช่วงให้อัตโนมัติก่อนส่ง
กลับไปตรวจในเกมได้ทันทีโดยไม่ต้องรีสตาร์ท
สลับเสร็จก็สลับหน้าจอกลับเข้าเกมได้เลย ไม่ต้องออกจากเซิร์ฟ ไม่ต้องกดรีสตาร์ท ผู้เล่นที่ออนไลน์อยู่ตอนนั้นก็ไม่โดนเตะ ใต้การ์ดมีข้อความกำกับไว้ว่า "เปลี่ยนแล้วมีผลทันที ไม่ต้องรีสตาร์ท" ซึ่งเป็นคำสัญญาที่ตรงกับสิ่งที่ระบบทำจริง
ถ้าสวิตช์เด้งกลับที่เดิมพร้อมข้อความแจ้งเตือน แปลว่าคำสั่งไม่ผ่าน ไม่ใช่ว่าเปลี่ยนแล้วแต่หน้าเว็บไม่อัปเดต — อ่านหัวข้อกฎที่เซิร์ฟเวอร์ตอบไม่ได้ด้านล่าง
กฎสิบข้อที่เปิดให้ปรับ และค่าตั้งต้นของแต่ละข้อ
รายการนี้เป็นรายการที่เราคัดมา ไม่ใช่กฎเกมทั้งหมดที่ Minecraft มี ชื่อในคอลัมน์กลางคือข้อความที่คุณเห็นบนการ์ดจริง ๆ
| กฎ | ชื่อบนการ์ด | ชนิด | ค่าตั้งต้นในรายการของเรา |
|---|
keepInventory | เก็บของเมื่อตาย | สวิตช์ | ปิด |
mobGriefing | มอนสเตอร์ทำลายสิ่งของ | สวิตช์ | เปิด |
doDaylightCycle | วงจรกลางวัน-กลางคืน | สวิตช์ | เปิด |
doWeatherCycle | วงจรสภาพอากาศ | สวิตช์ | เปิด |
doMobSpawning | การเกิดของมอนสเตอร์ | สวิตช์ | เปิด |
doFireTick | ไฟลุกลาม | สวิตช์ | เปิด |
doInsomnia | แฟนทอม (นอนไม่พอ) | สวิตช์ | เปิด |
commandBlockOutput | ข้อความจากคอมมานด์บล็อก | สวิตช์ | เปิด |
playersSleepingPercentage | % ผู้เล่นที่ต้องนอนเพื่อข้ามคืน | ตัวเลข 0–100 | 100 |
randomTickSpeed | ความเร็ว random tick | ตัวเลข 0–4096 | 3 |
อ่านคอลัมน์สุดท้ายให้ตรงความหมาย มันคือค่าที่การ์ดตั้งต้นแสดงก่อนอ่านค่าจริงจากโลกของคุณสำเร็จ ไม่ใช่คำรับประกันว่าโลกของคุณตั้งไว้เท่านั้น โลกที่ผ่านมือคนอื่นมาก่อน หรือผ่านม็อดที่ตั้งค่าเอง อาจมีค่าต่างออกไป และตัวเลขที่การ์ดแสดงหลังโหลดเสร็จคือค่าที่อ่านมาจากโลกจริง
ชื่อกฎในคอลัมน์แรกคือชื่อเดียวกับที่ใช้ในคำสั่งของเกม ตัวพิมพ์เล็กพิมพ์ใหญ่มีผล
ทำไมกฎเกมมีผลทันที แต่การ์ดอื่นต้องรีสตาร์ท
ความต่างอยู่ที่ปลายทางของค่า
การ์ด "การตั้งค่าเซิร์ฟเวอร์ (server.properties)" เขียนค่าลงที่แม่แบบของเซิร์ฟเวอร์ ซึ่งเซิร์ฟจะอ่านตอนบูตเท่านั้น ข้อความใต้การ์ดนั้นจึงเขียนไว้ตรง ๆ ว่า "บันทึกแล้วอัปเดตการตั้งค่าของเซิร์ฟเวอร์นี้ทันที แต่จะไม่รบกวนเซิร์ฟเวอร์ขณะที่กำลังทำงานอยู่ กด รีสตาร์ท (ปุ่มด้านบน) เพื่อให้การเปลี่ยนแปลงมีผล" การ์ดม็อดก็เดินกติกาเดียวกัน และถ้าคุณบันทึกตอนเซิร์ฟรันอยู่ จะมีแถบขึ้นเตือนว่า "การเปลี่ยนแปลงม็อดหรือการตั้งค่าจะมีผลหลังรีสตาร์ทครั้งถัดไป"
กฎเกมไม่เดินทางเส้นนั้น มันถูกส่งเป็นคำสั่ง gamerule <ชื่อกฎ> <ค่า> เข้าไปที่เซิร์ฟเวอร์ที่กำลังรันอยู่ผ่านช่อง RCON ซึ่งเป็นช่องเดียวกับที่แท็บคอนโซลใช้ พูดง่าย ๆ คือเรากำลังพิมพ์คำสั่งให้คุณ เซิร์ฟเวอร์รับคำสั่งนั้นในวินาทีนั้นและเปลี่ยนกติกาของโลกทันที ไม่มีการรอบูตรอบใหม่ เพราะไม่มีอะไรต้องบูต
ผลพลอยได้ที่คนมักไม่ทันคิดคือกฎเกมเป็นสิ่งเดียวในหน้าตั้งค่าที่คุณต้องเปิดเซิร์ฟเวอร์ก่อนถึงจะแก้ได้ ที่เหลือแก้ตอนเซิร์ฟปิดอยู่ได้หมด
ค่าของกฎเกมไม่ได้อยู่ในฐานข้อมูลของเรา
กฎเกมทั้งสิบข้อนี้ไม่มีช่องเก็บในฐานข้อมูลของ uniz.host เลย ค่าจริงอยู่ในไฟล์ level.dat ของโลกคุณ ซึ่งเป็นไฟล์ของ Minecraft เอง เราไม่ได้เก็บสำเนาไว้ที่ไหนอีก และทุกครั้งที่เปิดการ์ดเราก็ไปถามค่าจากโลกใหม่ทุกครั้ง
จากตรงนี้มีสองผลตามมาที่ควรรู้ไว้ก่อนจะไปเจอเอง
หนึ่ง กู้แบ็คอัพเก่า = ได้กฎเกมของแบ็คอัพนั้นกลับมาด้วย แบ็คอัพของเราเก็บทั้งโฟลเดอร์ข้อมูลของเซิร์ฟเวอร์ ซึ่งรวม level.dat และการกู้คืนคือการคลายไฟล์ทั้งชุดกลับลงไปทับ ฉะนั้นถ้าคุณเปิด keepInventory ไปเมื่อวาน แล้ววันนี้กู้แบ็คอัพของอาทิตย์ที่แล้วเพราะโลกพัง กฎที่เพิ่งเปิดจะหายไปพร้อมกัน ให้ไล่เปิดใหม่หลังกู้เสร็จ
สอง รีเซ็ตโลก = กฎเกมเริ่มใหม่หมด การรีเซ็ตโลกลบโฟลเดอร์โลกทิ้งแล้วให้เซิร์ฟเวอร์สร้างใหม่ ซึ่งแปลว่า level.dat เป็นไฟล์ใหม่เอี่ยม กฎเกมจึงกลับไปเป็นค่าที่เซิร์ฟเวอร์สร้างให้เอง ไม่ใช่ค่าที่คุณเคยตั้งไว้ในโลกเก่า ส่วนม็อด ปลั๊กอิน และไฟล์ตั้งค่าอื่นยังอยู่ครบ เพราะการรีเซ็ตแตะเฉพาะโฟลเดอร์โลกเท่านั้น
สิทธิ์ที่ต้องมีคือ "การตั้งค่า" ไม่ใช่ "คอนโซล"
จุดนี้สวนความรู้สึกคนส่วนใหญ่ กลไกเบื้องหลังคือคำสั่งคอนโซล แต่สิทธิ์ที่ระบบเรียกร้องคือสิทธิ์ "การตั้งค่า" ทั้งตอนอ่านค่าและตอนเขียนค่า เหตุผลคือเราถือว่านี่เป็นหน้าตั้งค่าที่บังเอิญวิ่งผ่าน RCON ไม่ใช่การเปิดคอนโซลให้คนนอก
เวลาแบ่งสิทธิ์ให้สมาชิกทีมจึงต้องคิดสองชั้น
- ให้สิทธิ์ "การตั้งค่า" = เปลี่ยนกฎเกมได้ (และแก้การ์ดตั้งค่าอื่นได้ด้วย)
- ให้สิทธิ์ "คอนโซล" อย่างเดียว = พิมพ์คำสั่งในแท็บคอนโซลได้ แต่แตะการ์ดกฎเกมไม่ได้
สมาชิกที่ไม่มีสิทธิ์ "การตั้งค่า" ยังเห็นการ์ดอยู่ แต่ทุกตัวควบคุมกดไม่ได้ และระบบจะไม่ไปอ่านค่าจริงจากเซิร์ฟเวอร์มาให้เขาด้วยซ้ำ สิ่งที่เขาเห็นจึงเป็นค่าตั้งต้นของรายการ ไม่ใช่ค่าของโลกจริง — ถ้าคุณกำลังให้เพื่อนช่วยดูค่าให้ ต้องให้สิทธิ์เขาก่อน ไม่งั้นเลขที่เขาอ่านให้ฟังจะไม่ตรง
กฎที่เซิร์ฟเวอร์ตอบไม่ได้ เราจะไม่เดาค่าให้
เซิร์ฟเวอร์แต่ละเวอร์ชันรู้จักกฎไม่เท่ากัน รายการสิบข้อของเราเป็นรายการเดียวใช้กับทุกเวอร์ชัน จึงมีโอกาสที่เซิร์ฟเวอร์เก่าจะไม่รู้จักบางข้อ
เวลาอ่านค่า ถ้าเซิร์ฟเวอร์ตอบกลับมาเป็นคำปฏิเสธ ตอบว่าง หรือตอบด้วยค่าที่ไม่ใช่ตัวเลขทั้งที่กฎนั้นเป็นตัวเลข ระบบจะตัดกฎข้อนั้นออกจากคำตอบ แทนที่จะยัดค่าเริ่มต้นลงไปแทน เหตุผลตรงไปตรงมา การแสดงเลขที่โลกคุณไม่ได้ใช้จริงคือการโกหกลูกค้า แย่กว่าการไม่แสดงอะไรเลย และถ้าอ่านไม่ได้เลยสักข้อ ระบบจะแจ้งว่าติดต่อเซิร์ฟเวอร์ไม่ได้ ไม่ใช่แสดงการ์ดเปล่า ๆ ให้เข้าใจผิดว่าโลกนี้ไม่มีกฎอะไรเลย
เวลาเขียนค่าใช้กติกาเดียวกัน ถ้าเซิร์ฟเวอร์ปฏิเสธคำสั่งเพราะไม่รู้จักกฎนั้น เราไม่ตอบว่าสำเร็จ สวิตช์จะเด้งกลับพร้อมข้อความ "เปลี่ยนกฎเกมไม่สำเร็จ" เพราะการเชื่อมต่อสำเร็จกับคำสั่งสำเร็จเป็นคนละเรื่องกัน
ข้อควรระวังที่ตามมาจากดีไซน์นี้คือ ถ้าคุณเห็นค่าตั้งต้นค้างอยู่ในแถวใดแถวหนึ่งทั้งที่แถวอื่นเปลี่ยนไปแล้ว ให้สงสัยไว้ก่อนว่าเซิร์ฟเวอร์เวอร์ชันนั้นอาจไม่รู้จักกฎข้อนั้น ทางตรวจที่เร็วที่สุดคือพิมพ์คำสั่งอ่านกฎนั้นดูเองในแท็บคอนโซล แล้วดูว่าเซิร์ฟเวอร์ตอบว่าอะไร
เซิร์ฟเวอร์แบบไหนใช้การ์ดนี้ได้
ใช้ได้กับเซิร์ฟเวอร์ Minecraft ฝั่ง Java ทุกชนิดที่เราเปิดขาย ตั้งแต่ Vanilla, ตระกูล Paper (Paper / Purpur / Leaf / Folia), Spigot, Bukkit, Fabric, Quilt, Forge, NeoForge, ตัวลูกผสมอย่าง Mohist และ Arclight ไปจนถึงเซิร์ฟที่ติดตั้งจากม็อดแพ็ก
ที่ใช้ไม่ได้มีสองกลุ่ม
| กลุ่ม | สาเหตุ |
|---|
| Minecraft ฉบับ Bedrock | ซอฟต์แวร์ Bedrock ไม่มี RCON ให้ส่งคำสั่งแบบนี้ตั้งแต่แรก คอนโซลของมันเดินคนละทาง การ์ดนี้จึงไม่ขึ้น และ API ก็ปฏิเสธคำขอ |
| เซิร์ฟเวอร์ชนิด PUMPKIN | เป็นซอฟต์แวร์คนละสายกับตัวอื่นทั้งหมด เรายังไม่ได้ยืนยันรูปแบบคำตอบของมัน จึงกันออกไว้ก่อนแทนที่จะเดา |
เกมอื่นบน uniz.host เช่น Palworld ไม่มีระบบกฎเกมแบบนี้อยู่แล้ว การตั้งค่าของแต่ละเกมมีการ์ดของตัวเองแยกต่างหาก
อ่านต่อ
- — ภาพรวมของการเปิดเซิร์ฟ ตั้งแต่ทำเองจนถึงเปิดกับเรา
- — แท็บไหนอยู่ตรงไหน และการ์ดแต่ละใบอ่านยังไง
- — เมื่อเซิร์ฟเปิดไม่ติดเพราะเวอร์ชัน Java ไม่ตรง
- — สเปกและราคาของเซิร์ฟเวอร์ Minecraft