คู่มือ / เซิร์ฟเวอร์และประสิทธิภาพ
server-icon.png: ข้อกำหนดที่แน่นอน และ Management API ที่ไม่มีใครใช้
64x64, PNG, วางไว้ที่ root ของเซิร์ฟเวอร์ — ผิดข้อใดข้อหนึ่งไอคอนจะไม่ปรากฏขึ้นอย่างเงียบ ๆ พร้อมด้วย JSON-RPC management API ที่มาแทนการอ่านหน้าจอคอนโซล
ไอคอนเซิร์ฟเวอร์เป็นฟีเจอร์เล็ก ๆ ที่ไม่ให้อภัยที่สุดใน Minecraft เพราะทุกโหมดความล้มเหลว ดูเหมือนกันหมด: ไม่มีไอคอน ไม่มีข้อผิดพลาด
สามข้อกำหนดที่ต้องครบทั้งหมด
- ขนาด 64×64 พิกเซลเท่านั้น ไม่ใช่ 63 ไม่ใช่ 128 ตัวเซิร์ฟเวอร์ไม่ย่อขนาดให้
- รูปแบบ PNG ต้องเป็น PNG จริง ๆ ไม่ใช่ไฟล์ JPG ที่เปลี่ยนชื่อ
- ชื่อ
server-icon.pngวางไว้ที่ root ของเซิร์ฟเวอร์ — ข้าง ๆserver.propertiesไม่ใช่ ไว้ในโฟลเดอร์ world
ผิดข้อใดข้อหนึ่ง เซิร์ฟเวอร์จะเริ่มทำงานตามปกติและแสดงไอคอนเริ่มต้น ขนาดผิดหรือ ไฟล์ที่ไม่ใช่ PNG จริงจะบันทึกข้อความหนึ่งบรรทัดตอนเริ่มทำงาน — Couldn't load server icon — แต่ไฟล์ ที่ตั้งชื่อผิดหรือวางผิดที่จะไม่บันทึกอะไรเลย (ถ้าไม่มี server-icon.png เลย เซิร์ฟเวอร์จะ fallback ไปใช้ icon.png ของ world เองถ้ามี)
สิ่งอื่น ๆ ที่ทำให้พังได้เช่นกัน
- PNG แบบ interlaced เอดิเตอร์บางตัวบันทึกเป็น interlaced โดยค่าเริ่มต้น ตัวอ่านของ Minecraft จะปฏิเสธ ส่งออกใหม่แบบ non-interlaced
- ความลึกสี 16-bit บันทึกเป็น 8-bit ต่อช่องสัญญาณ
- โปรไฟล์สี ICC profile ที่ฝังมาบางครั้งทำให้ตัวแยกวิเคราะห์สะดุด ลบ metadata ตอนส่งออก
- ความโปร่งใสใช้ได้ และแสดงผลถูกต้องในรายการเซิร์ฟเวอร์
เซิร์ฟเวอร์อ่านมันแค่ครั้งเดียว
เซิร์ฟเวอร์โหลด server-icon.png ตอนเริ่มทำงานและไม่โหลดอีกเลย การแทนที่ไฟล์บน เซิร์ฟเวอร์ที่กำลังทำงานอยู่จะไม่เปลี่ยนแปลงอะไรจนกว่าจะรีสตาร์ท — ซึ่งเป็นเหตุผลว่าทำไมการทดสอบ เปลี่ยนไอคอนโดยไม่รีสตาร์ทจะทำให้คุณคิดว่ามันไม่ทำงาน หลังรีสตาร์ท ไคลเอนต์จะรับไอคอนใหม่ ในการรีเฟรชรายการเซิร์ฟเวอร์ครั้งถัดไป
Management API
เซิร์ฟเวอร์เวอร์ชันใหม่ ๆ เปิดให้ใช้ส่วนติดต่อจัดการแบบ JSON-RPC ซึ่งเป็น ตัวแทนที่ได้รับการรับรองสำหรับการแยกวิเคราะห์เอาต์พุตคอนโซลหรือการพ่วงปลั๊กอิน
เปิดใช้งานใน server.properties:
management-server-enabled=true
management-server-host=localhost
management-server-port=25585
management-server-tls-enabled=false
TLS เปิด อยู่โดยค่าเริ่มต้นและต้องใช้ keystore (management-server-tls-keystore) ดังนั้น ไม่ชี้ไปที่ keystore หรือ — เฉพาะบน localhost — ปิดมันตามข้างบน ถ้าเปิด TLS และไม่มี keystore management server จะไม่เริ่มทำงาน พอร์ตก็ไม่มีค่าเริ่มต้นเช่นกัน (25585 เป็นแค่ตัวอย่าง)
จากนั้นเปิด WebSocket ไปที่พอร์ตนั้น ส่ง management-server-secret จาก server.properties เป็น Authorization: Bearer <secret> แล้วพูด JSON-RPC:
{ "jsonrpc": "2.0", "id": 1, "method": "minecraft:players" }
เมธอดครอบคลุมรายชื่อผู้เล่น สถานะเซิร์ฟเวอร์ allowlist และ ban list gamerules การตั้งค่า และคู่ save/stop แต่ละเมธอดคืนค่า JSON ที่มีโครงสร้างแทนที่จะเป็นข้อความบรรทัดหนึ่งที่คุณต้อง ใช้ regex
ผูกกับ localhost
ค่าเริ่มต้นคือ localhost และควรคงไว้อย่างนั้น ส่วนติดต่อนี้ ไม่ได้ ตั้งใจให้ หันสู่อินเทอร์เน็ต — ใครก็ตามที่เข้าถึงมันได้พร้อม secret สามารถหยุดเซิร์ฟเวอร์ของคุณได้ และ secret จะปลอดภัยเท่ากับ server.properties ของคุณเท่านั้น ถ้าต้องการเข้าถึงจากระยะไกล ให้เปิดผ่าน SSH tunnel หรือ reverse proxy ที่มีการยืนยันตัวตน ไม่ใช่โดย เปลี่ยน host เป็น 0.0.0.0
ทำไมมันสำคัญ
แดชบอร์ด บอท Discord และตัวตรวจสอบ uptime ในอดีตทำงานโดยอ่าน บันทึกคอนโซลหรือใช้ RCON ซึ่งทั้งสองอย่างเปราะบาง API ที่มีชนิดข้อมูลชัดเจนหมายความว่า วิดเจ็ตนับจำนวนผู้เล่นจะไม่พังเมื่อรูปแบบบรรทัดบันทึกเปลี่ยนไป
แปลงรูปภาพใด ๆ ให้เป็น server-icon.png ที่ถูกต้องและเรียกดูเมธอด JSON-RPC ได้ที่ Server Icon & API Tools