建立JAVA專案,各種IDE有各種不同,基本的我們就省下不談了。接著我們要做的事就是要連結我們的插件與Spigot,第一步是讓我們的Main Class (主類別) 繼承 (Extends) JavaPlugin。
第二步加入Plugin.yml註冊我們的插件,這時候你可以發現Main Class 內的名稱由暗灰色轉為白色,當然每個IDE都不一樣別問我你的IDE為啥沒有這種變化。
先行作業完成後下階段進入重點,建立新Class將屬性部份寫入,不過在這裡我們要考慮一下用哪種儲存模式,再這我就寫點簡單的直接做物件存取。
直接作檔案存取很傷硬體設備,目前小弟還沒有能力作的跟線上遊戲一樣,怕造成影響我還會繼續努力改善,不過對於記憶體較少的伺服器而言是一大福音。
屬性一旦加入你的伺服器就別想拋棄它,所以你需要完整的規劃,任意刪減對於你整個伺服器而言就跟讓玩家打掉重練是一樣的,在這裡我們做一個屬性的介面。
你可以看見我們的介面有Serializable接口代表該物件是可以序列化的,序列化的目的是為了讓我們的物件可以做儲存與讀取,在這裡你發現多一個serialVersionUID這部份是指定序列化的版本,如果不做指定的話只要這個Class有變動會導致自行產生新的序列化的版本,於是舊版本與新版本便會產生不相容而拋出錯誤。
Get與Set的建構式,沒錯我們的屬性值還需要能夠讓我們自己,甚至其他想要替插件裝上翅膀的朋友,能夠取得修改屬性值與創造儲存,這一部份一定是免不了的;在這裡我還是要說一下6個值在這裡實在是有點太多了,當然除了建構式又臭又長之外過多也會照成許多不便。
內容裡我們的各種值是a~f,但是編輯建構式時必須要很明確、簡單容易辨識這些值,不然你希望當其他人或自己使用geta就可以知道自己取得劍術屬性嗎?
建立這個物件時你不會想要漏掉其中一個值,不然會造成運算錯誤的冏況,建立新物件時預設將所有屬性設定為0,前面有set的結構式能夠幫你將你所需要設定的變更成你想要的,你一定問為什麼要多此一舉,因為我們不會只有一種取得此物件的方法。
屬性一旦加入你的伺服器就別想拋棄它,所以你需要完整的規劃,任意刪減對於你整個伺服器而言就跟讓玩家打掉重練是一樣的,在這裡我們做一個屬性的介面。
你可以看見我們的介面有Serializable接口代表該物件是可以序列化的,序列化的目的是為了讓我們的物件可以做儲存與讀取,在這裡你發現多一個serialVersionUID這部份是指定序列化的版本,如果不做指定的話只要這個Class有變動會導致自行產生新的序列化的版本,於是舊版本與新版本便會產生不相容而拋出錯誤。
Get與Set的建構式,沒錯我們的屬性值還需要能夠讓我們自己,甚至其他想要替插件裝上翅膀的朋友,能夠取得修改屬性值與創造儲存,這一部份一定是免不了的;在這裡我還是要說一下6個值在這裡實在是有點太多了,當然除了建構式又臭又長之外過多也會照成許多不便。
內容裡我們的各種值是a~f,但是編輯建構式時必須要很明確、簡單容易辨識這些值,不然你希望當其他人或自己使用geta就可以知道自己取得劍術屬性嗎?
建立這個物件時你不會想要漏掉其中一個值,不然會造成運算錯誤的冏況,建立新物件時預設將所有屬性設定為0,前面有set的結構式能夠幫你將你所需要設定的變更成你想要的,你一定問為什麼要多此一舉,因為我們不會只有一種取得此物件的方法。
有創建當然還要能儲存,OutputStream的類別有許多種,當然上網查詢才是王道,儲存的方式有很多方法這只是一種方法而已,以這種儲存的方式就像自製的SQL,只有知道檔案內容有哪些資料你才能讀取。
你一定會問我一定要儲存在插件當下的資料夾裡嗎?當然這是可變更的,個人會將檔案放在PlayerData並且在增加個人以UUID命名的資料夾內,如果沒有寫出很方便的讀取器這個動作是沒必要的。
儲存之後還需要能夠由檔案中讀取出來,有了這些Api是不是對於後面使用的人方便多了,何況你一定不會只建立這幾種屬性,利人利己也有助於後續的開發。
JAVA小弟我也只是略懂皮毛,認証跟考試我都不懂我只知道將收集到的資料收集起來後面可能用的到,就像堆積木一樣找到自己收集的一塊挑一個自己認為最好的放上去而已。
沒有留言:
張貼留言