การเขียนปลั๊กอินมายคราฟ

สวัสดีครับผม Chun Rapeepat นะครับ นี่ก็เป็นบล็อกแรกของผม พอดีอยากลองเขียนบล็อกมานานละ แต่ไม่ได้ลองสักที ก็ถือว่าเป็นโอกาศดีมาลองเขียนในหัวข้อ ที่ชาวแอดมินเซิฟหลายๆคนคงอยากลองศึกษาดู นั้นก็คือ การเขียนปลักอินมายคราฟ ในบทความนี้เราจะมาดูวิธีการเริ่มต้นไปจนเขียนเป็นกันเลย ถ้ามีอะไรพิดพลาดก็ขอโทษ ณ ที่นี้ด้วยนะครับ
เกรินนำนิดนึง ผมก็พึ่งจะเริ่มศึกษาการเขียนปลักอินมายคราฟอย่างจริงจังเมื่อเดือนที่แล้วเอง จนตอนนี้ก็เขียนเป็นในระดับนึง วันนี้เลยอยากมาแชร์ประสบการณ์ว่ากว่าจะเขียนเป็นได้ ต้องเข้าใจอะไรตรงไหนบ้าง และขอบอกไว้ก่อนเลย อย่ารีบข้ามขั้นตอนเด็ดขาด !! ไม่งั้นอย่าหาว่าไม่เตือน 55

1. เข้าใจหลักการเขียนโปรแกรม

ขั้นแรกนั้นเราควรเข้าใจใน Syntax ของการเขียนโปรแกรมก่อน หรือถ้าใครเคยเขียนโปรแกรมมาแล้ว เคยทำโปรเจคอะไรมาบ้างแล้วก็ข้ามขั้นตอนนี้ไปได้เลย. ในการเขียนปลักอินนั้นจะใช้ภาษา Java ในการเขียน โปรแกรมที่ใช้เขียนหลักๆก็จะเป็นพวก IntelliJ, Eclipe, Netbean IDE บลาๆๆ.. แล้วแต่ใครจะใช้ ส่วนสิ่งที่ต้องทำความเข้าใจมาก่อนเลยคือ If else, for loop, Array, method, class, หรือการเขียนโปรแกรม แบบ OOP ซึ่งขั้นตอนแรกนี้สำคัญมาก อาจจะใช้เวลาถึง 1 เดือนเลย แต่ก็หัดเขียนไปสนุกๆละกัน เพราะเวลาชีวิตเรา มันก็มีอีกเยอะ 555 วิธีการศึกษาลองค้น “Basic Java Tutorial‘ ใน YouTube เยอะมาก
Workshop ด้านล่างนี้ให้ทุกคนลองเขียนเองกันดูก่อนว่าทำได้ไหม (ห้ามเปิด Google ดูโค้ด) ถ้าใครยังไม่มีเป็นก็ไปศึกษา Java Basic มาใหม่นะ EIEI
  1. ลองเขียนโปรแกรม บวกเลขง่ายๆด้วย Java (ง่ายมาก)
  2. โปรแกรม TO DO LIST โดยเก็บข้อมูล TODO ในตัวแปร Array (ปานกลาง)
  3. เขียนโปรแกรมเพื่อหาจำนวนเฉพาะ (ยากนิดนึง)

2. มาเริ่มเขียนปลักอินแรกกันเลยดีกว่า

การเขียนปลักอินนั้นบอกเลยไม่ได้ยากอย่างที่คิด เพราะว่า Spigot/Bukkit ได้ทำ Function ต่างๆให้เป็นภาษาที่คนอ่านได้ยกตัวอย่างเช่น จะเซ็ตค่าเลือดผู้เล่นก็แค่ player.setHealth() เห็นไหมว่ามันสามารถอ่านได้เป็นภาษาคนนี่หละ สำหรับการเริ่มต้นนั้นสิ่งที่ต้องทำเป็นประจำเลยคือ Add Bukkit/Spigot libs => extends JavaPlugin => plugin.yml (สำคัญมากเพราะลืมตัวนี้ปลักอินไม่โหลดทันที) พวกเบื้องต้นพวกนี้มีให้ดูกันเกลื่อน YouTube ไปหมด ลองไปค้นหาดูได้ ซึ่งผมก็ได้สอนไว้ใน YouTube Channel NoobProgramming (คลิกเข้าไปดูได้เลย (sub ด้วย *-*)) ซึ่งเวลาเขียนโค้ดอ่ะผมแนะนำว่าเวลาพิมพ์แล้วกด . มันจะขึ้น autocomplete มาให้แนะนำให้ลองอ่านดูว่ามีอะไรน่าส่วนใจบ้างเช่น get ค่า หรือ set ค่าต่างๆ
ตัวอย่างเวลาขึ้น autocomplete ให้ไปอ่านบ้างเผื่อได้อะไรใหม่ๆ
เรื่องการเขียนปลักอินพวกนี้ผมจะไม่แนะนำมาก ที่ต้องรู้ส่วนมากก็จะมีแค่ onEnable, onDisable, onCommand, EventListener ต่างๆซึ่งเยอะมาก (เอาง่ายๆว่าสอนไม่หมดต้องหาข้อมูลเอง) ผมแนะนำเว็บไซค์ spigotmc.org กดที่เมนู Forum เลือก Board ไปที่ Spigot Plugin Development เป็นเว็บที่ไว้ถามปัญหาเวลาเขียนแล้วเออเร่อ หรือว่า อยากจะเขียนปลักอิน แต่ยังไม่มีแนวทางก็ไปโพสถามได้เช่น “How can I set player’s head by command” เป็นต้น แต่ต้องสื่อสารเป็นภาษา English นะครับ ปล. ลองค้นหาเองก่อนที่จะถาม (อันนี้สำคัญมาก) สิ่งที่ควรจะเข้าใจส่วนมากเลยจะเป็นตามหัวข้อนี้เลยครับ ลองไปดูมาให้หมด
  1. onEnable, onDisable, onCommand — ไปดูว่าพวกนี้มันทำงานตอนไหน
  2. Listener Event (e.g. PlayerMoveEvent, PlayerJoinEvent ….) เยอะมากๆ
  3. ArrayList, HashMap — 1 ตัวแปรเก็บค่าได้หลายค่า
  4. Player Inventory and Inventory Event
  5. นอกเหนือจากนี้ลองหาคลิปเองดูแต่หลักๆก็ประมาณนี้หละมั้ง
ในขั้นตอนที่ 2 นี้ผมแนะนำให้ดูคลิปที่คนอื่นสอนแล้วลองทำตาม พอทำตามเสร็จแล้วก็ลองดัดแปลงในรูปแบบของตัวเองดูนะครับ แนะนำว่าอย่าพึ่งรีบไปหาอ่านตาม documents เลย มันจะยิ่งโครต งง (หมายถึงสำหรับใครที่ มือใหม่นะครับ)

3. เป็น Plugin Developer เต็มตัว

สำหรับในขั้นตอนที่ 2 ถึงมันจะดูเยอะ แต่มันยังไม่ค่อยได้ใช้ความรู้ภาษา Java สักเท่าไร ส่วนมากจะใช้ไปกับการจำชื่อ method ของทาง Bukkit/Spigot ที่เขียนมาให้สักมากกว่า กับ Java เล็กน้อยเช่น if else, for loop, array hashmap พวกนี้ แต่การที่เราจะสร้างปลักอินอะไรที่มันใหญ่กว่านั้น เทพกว่านั้น เราต้องมีความรู้มากขึ้นไปอีก ลองอ่าน List ด้านล่างแล้วลองศึกษาดูได้เลยครับ (สำหรับคนที่มั่นใจว่าผ่านขั้นตอนแรกกับ 2 มาแล้วนะ ถึงจะเริ่มศึกษาข้อนี้ได้)
การเขียนเชื่อมต่อ Mysql Database ส่วนตัวผมเคยเขียนเว็บมาก่อน เลยต้องใช้งาน mysql เป็นส่วนมากอยู่แล้วทำให้ศึกษาได้ไม่ยาก สิ่งที่ต้องไปศึกษามาก่อนเลยคือ ภาษา SQL แล้วก็รู้จักกับ PHPMyAdmin จุดประสงค์หลักๆของการเขียนติดต่อ Database เลยคือ มันสามารถที่จะ เขียนติดต่อกับเว็บไซค์ได้ เขียนปลักอินเชื่อมเว็บ ยกตัวอย่างเช่น ผมอยากจะเขียนปลักอิน PlayerRanking ผมก็เขียนปลักอินเก็บสถานะการฆ่าต่างๆไว้ใน Database จากนั้นผมก็เขียนเว็บ เพื่อดึงข้อมูลใน Database มาแสดงหน้าเว็บ พูดง่ายๆคือใช้ Database เป็นตัวกลางนั้นเอง น่าสนุกดีไหมหละ 5555
การเขียนเชื่อมต่อ API ด้านนอก — อันนี้เป็นเรื่องที่น่าสนใจอีกอย่างเลย ซึ่งล่าสุดผมพึ่งเขียนปลักอินเติมเงินตัดบัตร Truemoney ผ่านเกมอัตโตมัติโดยใช้ API ของทาง tmpay นั้นเอง นั้นหละข้อดี คือเราสามารถเชื่อมปลักอินของเรา กับอะไรต่างๆด้านนอกได้ ความรู้ที่ควรจะมีคือ การเขียน HTTP POST/GET Request เพื่อรับส่งค่าต่างๆ โดยการจะสื่อสารผ่าน ระบบอื่นนั้น จะสื่อสารกันด้วยภาษา JSON
การเขียน Minigame — หลายคนถามผมมามากว่า เขียนปลักอิน Minigame เป็นไหมบอกได้เลยว่า “ไม่เป็น” 555 แต่ผมก็กำลังศึกษาอยู่นะ เขียนเป็นแค่ระบบง่ายๆเท่านั้น แต่พอจะมาเกรินนำได้ว่า มันก็การเอาความรู้เดิมๆมายำกันเท่านั้นหละ ลองคิดดูว่าปลักอิน MInigame อันนึงต้อเขียนส่วนไหนบ้าง ผมขอยกตัวอย่าง Murder Minigame ละกันนะ หลายๆคนคงรู้จักกันดี ใครไม่รู้จักลองค้นหากันดูใน YouTube อันดับแรกเลยคือระบบ Areana คือ 1เซิฟ ต้องเปิดได้หลายเกม โดยใช้ world เป็นตัวแยก ดังนั้นเราเลยต้องทำระบบ Game แบบแยก World นั้นเอง (Arena) แล้วในแต่ละ Arena ก็จะมีระบบ Timer เป็นของตัวเองก็จะแยกเป็น Waiting for player, InGame, End (จากนั้นก็เขียนระบบให้ผู้ชนะได้ของอะไรก็ว่าไป) ซึ่งในเกมก็ใช้ scoreboard ในการแสดงข้อมูลต่างๆนั้นเอง แล้วที่เหลือก็เป็นพวกระบบ Item พูดง่ายๆ Mingame ก็คือการเขียนระบบ Item, Timer โดยแยกไว้ในแต่ละ Arena นั้นเอง มันคือการยำความรู้ที่มีมาทั้งหมดนั้นหละ -..-
จบไปแล้วนะสำหรับบทความนี้ ถ้ามีข้อสงสัย หรือว่าบทความหน้าอยากให้เขียนอะไรพิม comment บอกผมมาได้เลย ว่างๆจากการทำโปรเจค ผมจะมาเขียนลงไว้ให้อ่านกัน วันนี้ไปละครับ บาย สามารถ @ Facebook มาถามผมได้นะ Chun Rapeepat