Spigot插件開(kāi)發(fā)筆記——插件的七個(gè)重要部件

一、導(dǎo)讀

在第一篇文章(Spigot插件開(kāi)發(fā)筆記——第一個(gè)插件與事前準(zhǔn)備)中习勤,我詳細(xì)的講述了編寫(xiě)一個(gè)最簡(jiǎn)單的插件的方法,但其中只講述了方法,沒(méi)有講述概念,為了幫助理解强窖,我將學(xué)習(xí)插件開(kāi)發(fā)以來(lái)的筆記和日志修改成該文章分享出來(lái),本文描述了我在學(xué)習(xí)過(guò)程中對(duì)插件各部件的看法削祈,如有錯(cuò)誤之處還請(qǐng)各位指出翅溺,我會(huì)立刻糾正。

二岩瘦、概述

在我看來(lái)未巫,在插件開(kāi)發(fā)過(guò)程中,不計(jì)外部引入的包與實(shí)例启昧,也不計(jì)自行封裝的工具或方法叙凡,最重要的組成部分有七個(gè):主線程支線程密末,執(zhí)行器握爷,補(bǔ)全器監(jiān)聽(tīng)器严里,存儲(chǔ)器新啼,配置文件
下面我簡(jiǎn)單概述一下這七個(gè)部件刹碾。

主線程 — JavaPlugin

一個(gè)插件可以沒(méi)有其他部件燥撞,但必不可少的兩個(gè)部件之一,即為主線程JavaPlugin迷帜。
這是一個(gè)插件的主體物舒,加載配置、綁定指令戏锹、注冊(cè)監(jiān)聽(tīng)器等等一系列操作都需要在這里進(jìn)行冠胯。
這并不是絕對(duì)的,比如說(shuō)锦针,你也可以在生成執(zhí)行器對(duì)象時(shí)荠察,在執(zhí)行器的構(gòu)造函數(shù)中對(duì)自身進(jìn)行指令綁定,但是不建議把這些東西分布到其他文件中奈搜,因?yàn)槟菢邮植焕诰庉嬇c管理

主線程

支線程 — BukkitRunnable

一些需要延時(shí)進(jìn)行的操作悉盆,比如傳送前搖、定期清理掉落物馋吗、輪播公告等功能焕盟,都需要用到支線程BukkitRunnable
支線程可以在任何地方啟用耗美,除了處理定時(shí)任務(wù)京髓、延時(shí)任務(wù)以外,極少數(shù)處理速度較慢商架,會(huì)造成長(zhǎng)時(shí)間等待的功能堰怨,也建議放到支線程中執(zhí)行,這樣可以指令執(zhí)行所導(dǎo)致的服務(wù)器延遲與卡頓蛇摸。

支線程

執(zhí)行器 — CommandExecutor

我有時(shí)候也叫它解析器备图。
在綁定了一條指令與其對(duì)應(yīng)的執(zhí)行器后,玩家在服務(wù)器中輸入該指令時(shí)赶袄,內(nèi)容便會(huì)全部傳入執(zhí)行器的部件揽涮,交由執(zhí)行器CommandExecutor來(lái)解析與處理。
你可以給多條指令綁定同一個(gè)執(zhí)行器饿肺,以實(shí)現(xiàn)使用不同指令來(lái)實(shí)現(xiàn)同一功能的目的蒋困,但一定要記得,千萬(wàn)不要給一條指令綁定多個(gè)執(zhí)行器敬辣,而且指令頭必須在配置中注冊(cè)雪标。
比如,我想要使插件讀取并識(shí)別/demo test Delamer這條指令溉跃,則必須把指令頭demo寫(xiě)入配置文件plugin.yml中以注冊(cè)該指令村刨,否則服務(wù)端就不知道該把哪條指令交給你來(lái)執(zhí)行了,而指令頭以外的內(nèi)容撰茎,則全部會(huì)被劃分到參數(shù)的范疇嵌牺,交給執(zhí)行器自己去解析處理。

執(zhí)行器-控制臺(tái)

執(zhí)行器-玩家

補(bǔ)全器 — TabCompleter

除了指令頭以外(指令頭在配置文件中注冊(cè)后會(huì)自動(dòng)寫(xiě)入補(bǔ)全器)龄糊,玩家使用指令時(shí)逆粹,可以使用Tab鍵自動(dòng)補(bǔ)全指令或是后續(xù)參數(shù),這便是補(bǔ)全器TabCompleter的用處绎签。
補(bǔ)全器可以很大程度上優(yōu)化插件的使用體驗(yàn)枯饿,這一點(diǎn)在新版中尤為明顯(1.13開(kāi)始補(bǔ)全功能被大幅度優(yōu)化),玩家可以不用手動(dòng)輸入繁瑣冗長(zhǎng)的指令诡必,只需要輸入少許指令的開(kāi)頭奢方,再敲擊Tab鍵,即可自動(dòng)補(bǔ)全后續(xù)指令爸舒,這使得補(bǔ)全器的作用大大提升蟋字。

補(bǔ)全器

監(jiān)聽(tīng)器 — Listener

在游戲過(guò)程中,玩家會(huì)執(zhí)行很多操作扭勉,觸發(fā)各種各樣的事件鹊奖,如上線、下線涂炎、受傷忠聚、放置/破壞方塊设哗、死亡等等,要在玩家觸發(fā)這些事件時(shí)進(jìn)行一系列操作两蟀,就需要用到監(jiān)聽(tīng)器Listener了网梢。
監(jiān)聽(tīng)器在經(jīng)過(guò)注冊(cè)后,會(huì)在玩家觸發(fā)指定事件時(shí)自動(dòng)執(zhí)行你所寫(xiě)下的代碼赂毯,比如战虏,在玩家造成傷害時(shí),向玩家發(fā)送傷害信息党涕,又比如烦感,在玩家破壞鉆石方塊時(shí),如果方塊高度不高于60膛堤,那么就否決掉這個(gè)破壞動(dòng)作手趣。
所有可監(jiān)聽(tīng)的事件在Spigot-API中皆已列出,可以隨時(shí)翻閱骑祟。

監(jiān)聽(tīng)器

存儲(chǔ)器

有些時(shí)候回懦,指令的效果不是實(shí)時(shí)的,而是存儲(chǔ)一些數(shù)據(jù)以便日后使用次企,如:死亡時(shí)記錄坐標(biāo)以便使用back指令回到死亡地點(diǎn)怯晕;使用sethome指令設(shè)置家后,使用home指令回到之前所設(shè)置的家缸棵;標(biāo)記一個(gè)方塊舟茶,使這個(gè)方塊受保護(hù),Op以外的玩家無(wú)法破壞……諸如此類(lèi)的場(chǎng)景堵第,你需要一個(gè)存儲(chǔ)數(shù)據(jù)的手段吧凉。
存儲(chǔ)數(shù)據(jù)的手段相當(dāng)"豐富",數(shù)據(jù)庫(kù)踏志,Redis阀捅,IO流讀取文本文件,或是直接使用游戲內(nèi)部標(biāo)簽與計(jì)分板等等针余,方法過(guò)多饲鄙,所以無(wú)法一一介紹與列舉,就不再贅述了圆雁。


存儲(chǔ)器

配置文件

配置文件實(shí)際上分為兩種忍级,一種是插件必要的組成部分plugin.yml,沒(méi)有這一部分伪朽,插件則不會(huì)被識(shí)別為插件轴咱。另一種,是為了供玩家動(dòng)態(tài)調(diào)整插件內(nèi)使用參數(shù)而使用的配置文件,FileConfiguration朴肺。
前者的必要性毋庸置疑窖剑,在上面所提到的必不可少的兩個(gè)部件之一,很大程度上指的就是plugin.yml這一部分戈稿。但后者的作用也不小苛吱,它可以讓玩家或服主自定義插件內(nèi)使用的數(shù)據(jù)數(shù)值,從而提升插件使用的靈活度器瘪,使插件可以在不需要重新編譯源碼的情況下,適用于更多的玩家绘雁、更多的場(chǎng)景橡疼。

配置文件-必要配置

配置文件-數(shù)據(jù)配置

三、附錄

插件的重要組成部分就介紹到這里了庐舟,這里僅代表個(gè)人的看法與見(jiàn)解欣除,所附的中文名稱也只是依照我對(duì)這個(gè)部件的理解而擅自命名,并非官方解釋?zhuān)膊皇怯h直譯挪略,更多細(xì)節(jié)與權(quán)威說(shuō)法請(qǐng)參考SpigotAPI與更多大佬留下文章進(jìn)行對(duì)照历帚,或者自行嘗試過(guò)實(shí)現(xiàn)以后,自己去理解杠娱,這樣才能看得更加透徹挽牢。
后續(xù)有機(jī)會(huì)的話,會(huì)對(duì)這些部件一一進(jìn)行詳細(xì)介紹與教學(xué)摊求,若有疏漏請(qǐng)大佬指正禽拔,我會(huì)盡快修改。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末室叉,一起剝皮案震驚了整個(gè)濱河市睹栖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茧痕,老刑警劉巖野来,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異踪旷,居然都是意外死亡曼氛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)埃脏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)搪锣,“玉大人,你說(shuō)我怎么就攤上這事彩掐」怪郏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)狗超。 經(jīng)常有香客問(wèn)我弹澎,道長(zhǎng),這世上最難降的妖魔是什么努咐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任苦蒿,我火速辦了婚禮,結(jié)果婚禮上渗稍,老公的妹妹穿的比我還像新娘佩迟。我一直安慰自己,他們只是感情好竿屹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布报强。 她就那樣靜靜地躺著,像睡著了一般拱燃。 火紅的嫁衣襯著肌膚如雪秉溉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天碗誉,我揣著相機(jī)與錄音召嘶,去河邊找鬼。 笑死哮缺,一個(gè)胖子當(dāng)著我的面吹牛弄跌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尝苇,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼碟绑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了茎匠?” 一聲冷哼從身側(cè)響起格仲,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诵冒,沒(méi)想到半個(gè)月后凯肋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汽馋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年侮东,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豹芯。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悄雅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出铁蹈,到底是詐尸還是另有隱情宽闲,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站容诬,受9級(jí)特大地震影響娩梨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜览徒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一狈定、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧习蓬,春花似錦纽什、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至押赊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間包斑,已是汗流浹背流礁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罗丰,地道東北人神帅。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像萌抵,于是被迫代替她去往敵國(guó)和親找御。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355