Bukkit~插件編寫教程[1]:一切的起源helloworld

上回書說道開發(fā)環(huán)境的搭建哆键,那么我們已經(jīng)擁有工具啦~
現(xiàn)在要做的就是編寫第一個(gè)插件症革,實(shí)現(xiàn)最最簡(jiǎn)單的功能QvQ此衅。

一個(gè)Bukkit插件基本構(gòu)成

一個(gè)完整功能bukkit插件是由三大文件組成的:
1.1误褪、plugin.yml——記錄插件以及命令信息春叫;
1.2肩钠、config.yml——加載插件配置文件供用戶更改泣港;
1.3、class文件——emmm价匠,這個(gè)就是用來實(shí)現(xiàn)功能的当纱;
其中1.3項(xiàng)又分為:
2.1、主類
2.2踩窖、功能類
2.3坡氯、命令類
2.4、監(jiān)聽器類
看似很復(fù)雜對(duì)吧qwq洋腮,但注意箫柳,要被bukkit所能讀取的插件,也就是最簡(jiǎn)單的插件啥供,只要包含plugin.yml悯恍,主類就行,那么我們這節(jié)的主題是helloworld伙狐,就從最簡(jiǎn)單的開始叭~

創(chuàng)建Eclispe工程

如圖呢是Eclipse去掉welcome頁(yè)面的樣子qwq:


18.png

編寫插件呢我們只要?jiǎng)?chuàng)建一個(gè)普通的java工程文件就行啦


19.png

20.png

然后next涮毫,注意不要直接finish,因?yàn)槲覀儗懙氖莃ukkit插件贷屎,所以要用bukkit的庫(kù)罢防,即添加依賴
21.png

22.png

然后這里我們選擇教材中的api(可能名字不一樣不要介意qwq)


23.png
然后再finish
24.png

這樣就會(huì)發(fā)現(xiàn)左側(cè)工程欄內(nèi)出現(xiàn)了剛剛創(chuàng)建好的工程~
然后呢,咱們先緩一步豫尽,說說java
眾所周知java是面向?qū)ο缶幊陶Z(yǔ)言篙梢,所以其每一個(gè)程序,哪怕只有一個(gè)main方法美旧,他也必須放在一個(gè)類里渤滞,所以,創(chuàng)建一個(gè)java程序的步驟如下:
新建工程文件->創(chuàng)建一個(gè)包->創(chuàng)建一個(gè)類->在類中寫代碼->編譯導(dǎo)出
那么我們目前完成了第一項(xiàng)榴嗅,現(xiàn)在直接跳過第二項(xiàng)妄呕!直接創(chuàng)建類。
為什喵嗽测,這就是集成開發(fā)環(huán)境的妙處之一了呀~
25.png

按照箭頭走就行qwq~


26.png
org.bukkit.plugin.java.JavaPlugin

這里說一下包名绪励,在java中,包的作用是用來存放類唠粥,并且防止沖突的疏魏,什喵叫沖突呢,就拿bukkit為例晤愧,我編寫了一個(gè)插件大莫,用我的域名休雌,你編寫了一個(gè)插件也用我的域名纳账,那么我倆的插件加載到同一個(gè)服務(wù)端時(shí)就(可能)引發(fā)沖突,使bukkit
在用到這個(gè)插件時(shí)無所適從孙技,因?yàn)闆]有指定相關(guān)的import代碼胚宦。
(所以各位行行好不要用我的域名QwQ,萬一哪天真碰上了呢qwq)
咱們繼續(xù)回到包忍饰,為了解決這種沖突問題卡辰,業(yè)內(nèi)有一條不成文的規(guī)矩蛆橡,在包名前面加上自己的域名反過來,比如我的域名“dayflowers.work”赋元,把他反過來就變成了“work.dayflowers”忘蟹,就像圖片中第一行那樣紙。
哎不是說你沒有域名就不能寫们陆,你可以隨便編一個(gè)寒瓦,比如“pig.sheep”,反正編譯器不會(huì)報(bào)錯(cuò)就行~

開始敲代碼

好噠在一切都創(chuàng)建好之后坪仇,就可以finish啦,會(huì)出現(xiàn)如下界面


27.png

可以看見右側(cè)代碼框里出現(xiàn)了幾行代碼垃你,這是IDE(集成開發(fā)環(huán)境椅文,以下全以此簡(jiǎn)稱)自動(dòng)為我們添加的,那么就要提到Superclass那行里的東西惜颇,學(xué)過java都知道有一個(gè)父類和子類的概念皆刺,子類繼承父類的屬性。
根據(jù)最后一個(gè)單詞我們可以大體上猜出意思凌摄,JavaPlugin羡蛾,用java寫的插件,這是所有bukkit插件的父類锨亏,具有訪問服務(wù)端的權(quán)限痴怨,并且可以被bukkit加載


28.png

參考dalao的插件(BedWars、ViaVersion):
29.png

30.png

主類均以繼承JavaPlugin開始(請(qǐng)不要被代碼嚇到器予,人家是大佬qwq)浪藻。
因此我們得出結(jié)論,bukkit是由繼承JavaPlugin的方式來聲明一個(gè)主類的
既然這樣我們效法他們乾翔,做出了一個(gè)主類

package work.dayflowers;
import org.bukkit.plugin.java.JavaPlugin;
public class main extends JavaPlugin {}

但是這樣子的一個(gè)插件沒有辦法被bukkit加載爱葵,除了前面所說的plugin.yml這樣的信息存儲(chǔ)文件,還缺少兩個(gè)方法用于bukkit初始化和卸載插件反浓,這兩個(gè)方法是:


31.png

他們的描述是“當(dāng)這個(gè)插件被關(guān)閉時(shí)調(diào)用.”和“啟用此插件時(shí)調(diào)用.”萌丈,因此這兩個(gè)插件被用于加載和卸載,注意這也是唯一兩個(gè)必不可少的方法雷则,換而言之辆雾,一個(gè)合格的插件(至少)必須要有onEnable()和onDisable()方法qwq
但是在我們的父類JavaPlugin里邊已經(jīng)有了這個(gè)方法,我們只要重寫這倆方法就行巧婶,為了IDE能夠檢查我們的錯(cuò)誤乾颁,在方法前面加上注解@Override(不知道喵是注解的去看Java的書或者問度娘QwQ)
像醬紫:

@Override
public void onEnable() {}
@Override
public void onDisable() {}

把這四行代碼寫進(jìn)類中涂乌,最后代碼部分成型:

package work.dayflowers;

import org.bukkit.plugin.java.JavaPlugin;

public class main extends JavaPlugin {
    @Override
    public void onEnable() {}
    @Override
    public void onDisable() {}
}
32.png

那么代碼部分到這里就暫時(shí)告一段落~

插件的身份標(biāo)識(shí)——plugin.yml

那么前面我們說到在Project name一欄里填寫的只是工程名字,那么怎樣聲明插件名稱以及其他的一些東西呢英岭。
bukkit為我們提供的一個(gè)辦法是用yml配置文件湾盒,在API幫助文檔下有一個(gè)這樣的表格:


33.png

其中紅框內(nèi)的鍵為必須(emmm,至于鍵是什喵玩意兒大家可以去了解一下YAML語(yǔ)法诅妹,懶得去了解的小伙伴可以接著往下看罚勾,慢慢就能明白qwq),他們是醬紫使用的:

main: work.dayflowers.main
name: Hello
version: 0.1.0

看見了嘛吭狡,每一個(gè)鍵對(duì)應(yīng)開頭冒號(hào)前的字母尖殃,右邊的內(nèi)容成為鍵值,這樣的一行語(yǔ)句稱為鍵值對(duì)划煮。一個(gè)最最基礎(chǔ)的配置文件就由三個(gè)鍵值對(duì)構(gòu)成送丰。
奧對(duì)了在此要強(qiáng)調(diào)一下,YAML語(yǔ)法及其特別以及非常的嚴(yán)格弛秋,每一個(gè)空格都可能成為報(bào)錯(cuò)的理由器躏。YAML的縮進(jìn)為2個(gè)空格,而且鍵冒號(hào)后面必須跟著一個(gè)空格蟹略,否則就會(huì)報(bào)錯(cuò)(敲黑板劃重點(diǎn)了昂)登失,像醬紫

name:Hello //錯(cuò)誤
name: Hello //正確

那么YAML的縮進(jìn)我們以后講到config.yml的時(shí)候在細(xì)說。
還有一點(diǎn)挖炬,YAML里不能有中文(非要用中文的方法有揽浙,可是我不會(huì)qwq)。

現(xiàn)在我們回到上面那三行鍵值對(duì)意敛,一個(gè)個(gè)講馅巷,第一個(gè)main,也是最最重要的空闲,前文我們說過在plugin中不能有main方法令杈,只能有一個(gè)主類和兩個(gè)用于加載和卸載的方法,那么bukkit怎么知道哪一個(gè)是他的主類呢qwq碴倾?
注意一下逗噩,前面說過bukkit的插件是用繼承的方式來聲明的主類,但這只是一個(gè)身份標(biāo)識(shí)跌榔,并不能夠被bukkit正確的找到异雁,因此需要main這個(gè)鍵來引導(dǎo)。
聰明的童鞋能夠發(fā)現(xiàn)main的鍵值是一串包名僧须,和前面我們創(chuàng)建的包一模一樣纲刀,只是末尾多了個(gè)main。


34.png

bukkit會(huì)根據(jù)包名尋找到你的主類(至于他怎么尋找的我也不知道呀qwq)担平,因此最后一個(gè)句點(diǎn)后面的內(nèi)容必須是一個(gè)類示绊,換而言之就是你的包名加上你的主類構(gòu)成這樣的一個(gè)鍵值(不要手賤加上分號(hào)锭部,不然會(huì)報(bào)錯(cuò)qwq)

那么name這個(gè)鍵就很好理解啦,除了不能用中文之外都行面褐,代表你的插件名稱拌禾,會(huì)在服務(wù)端讀取插件相關(guān)信息時(shí)顯示

version,更簡(jiǎn)單了展哭,隨便寫湃窍,代表版本號(hào)。

前面那張表格里還有非常多的鍵匪傍,用作不同的功能用來宣傳插件(說白了就是裝b)……qwq您市,我們這里略過不講,那張表格位于幫助文檔的“org.bukkit.plugin.PluginDescriptionFile”包下役衡。

解釋完一通茵休,我們可以把他正式添加進(jìn)剛才的插件中辣(≧▽≦)/
這里按照?qǐng)D片來就行:

35.png

36.png

然后會(huì)出現(xiàn)一個(gè)空白頁(yè)面(如果有一個(gè)奇怪的窗口彈出來說一堆奇怪的話,不要管他就行手蝎,直接cancel):


37.png

吧剛才的東西復(fù)制進(jìn)去泽篮,然后需改main的鍵值,改成“你的包名.你的主類”柑船,然后保存。
那么這個(gè)插件已經(jīng)可以被服務(wù)端讀取辣~但是說好的helloworld呢泼各!

helloworld

回到主類鞍时,在主類的任意一個(gè)方法里有很多很多方法可供調(diào)用,其中值得一提的是這個(gè):


38.png

由于這個(gè)方法不在bukkit包中扣蜻,所以我們只要記住它所附帶的一個(gè)方法:

getLogger().info("helloworld");

info這個(gè)方法的作用是向服務(wù)端輸出一條信息逆巍。
那么把他添加進(jìn)主類的onEnable方法中,最后成型的插件:


39.png

40.png

這些統(tǒng)統(tǒng)做完了以后莽使,我們把他編譯輸出锐极,跟著紅框走:


41.png
42.png
43.png
44.png
45.png

最后可能會(huì)有一個(gè)窗口彈出來,單擊OK就行芳肌,finish以后呢會(huì)發(fā)現(xiàn)輸出目錄下多了一個(gè)jar文件(如果IDE報(bào)錯(cuò)的話就看看有沒有劃紅線的語(yǔ)句灵再,跟著上文修改一遍qwq):


46.png

測(cè)試

然后我們進(jìn)入教材,有一個(gè)Server文件夾亿笤,單擊進(jìn)去翎迁,先把服務(wù)端開起來run一遍,等加載好以后把他關(guān)掉净薛,會(huì)出現(xiàn)一大堆文件:


47.png

我們進(jìn)入plugins文件夾下汪榔,吧剛才的jar文件拖進(jìn)去,再次開啟服務(wù)器:


48.png

怎么樣吶~ 484滿滿的成就感~

P.S.至于這個(gè)服務(wù)端在已經(jīng)包括在教材里了肃拜,至于教材在哪兒痴腌,我還是再發(fā)一遍qwq 鏈接

學(xué)完本節(jié)你應(yīng)該知道

1雌团、最基本的bukkit插件由主類、plugin.yml組成士聪;
2锦援、bukkit插件由繼承(extends)的方式聲明,并在plugin.yml配置文件的main鍵里引導(dǎo)戚嗅;
3雨涛、主類必須重寫onEnable(),onDisable()方法
4、getLogger().info("");用于向服務(wù)端輸出一條信息.

練習(xí)

再新建一個(gè)工程懦胞,編寫一個(gè)可以運(yùn)行的插件替久,并在插件被卸載時(shí)發(fā)送一條信息(P.S. 查看卸載信息可以先把插件在服務(wù)端中載入,然后在服務(wù)端使用reload命令)

好啦那么本節(jié)先到這里
下次我們開始制作有具體功能的插件qwq

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末躏尉,一起剝皮案震驚了整個(gè)濱河市蚯根,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胀糜,老刑警劉巖颅拦,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異教藻,居然都是意外死亡距帅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門括堤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碌秸,“玉大人,你說我怎么就攤上這事悄窃〖サ纾” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵轧抗,是天一觀的道長(zhǎng)恩敌。 經(jīng)常有香客問我,道長(zhǎng)横媚,這世上最難降的妖魔是什么纠炮? 我笑而不...
    開封第一講書人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮分唾,結(jié)果婚禮上抗碰,老公的妹妹穿的比我還像新娘。我一直安慰自己绽乔,他們只是感情好弧蝇,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般看疗。 火紅的嫁衣襯著肌膚如雪沙峻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評(píng)論 1 308
  • 那天两芳,我揣著相機(jī)與錄音摔寨,去河邊找鬼。 笑死怖辆,一個(gè)胖子當(dāng)著我的面吹牛是复,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播竖螃,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼淑廊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了特咆?” 一聲冷哼從身側(cè)響起季惩,我...
    開封第一講書人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腻格,沒想到半個(gè)月后画拾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菜职,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年青抛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酬核。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡脂凶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出愁茁,到底是詐尸還是另有隱情,我是刑警寧澤亭病,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布鹅很,位于F島的核電站,受9級(jí)特大地震影響罪帖,放射性物質(zhì)發(fā)生泄漏促煮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一整袁、第九天 我趴在偏房一處隱蔽的房頂上張望菠齿。 院中可真熱鬧,春花似錦坐昙、人聲如沸绳匀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)疾棵。三九已至戈钢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間是尔,已是汗流浹背殉了。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拟枚,地道東北人薪铜。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像恩溅,于是被迫代替她去往敵國(guó)和親隔箍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 印象·城市·成都第04期 文/聲行漫步 文末有福利、免費(fèi)聽本篇文章音頻的方法每窖。 樹正溝的棧道修得深幽而隱蔽帮掉,倚托山...
    蜜蜂讀書閱讀 347評(píng)論 0 0
  • 想寫書評(píng)很久了,一直苦于不會(huì)窒典,今兒搜羅了網(wǎng)上的方法進(jìn)行學(xué)習(xí)整理蟆炊,準(zhǔn)備牛刀小試,希望整理的內(nèi)容對(duì)各位也有幫助瀑志。 ...
    金沙閱讀 6,278評(píng)論 2 34
  • 關(guān)于年齡涩搓,關(guān)于奮斗,在外漂白了多年劈猪,經(jīng)歷了婚姻的失敗昧甘,回到了小縣城,想重新開始战得。 會(huì)去看一些書充边,也會(huì)去想著努力工作...
    閱覽星辰閱讀 223評(píng)論 0 0
  • 大學(xué)自己一個(gè)人吃飯上課去圖書館,真的蠻孤單的常侦,突然想找個(gè)人分擔(dān)孤單的心情浇冰,周圍人都成群結(jié)伴的時(shí)候真的就覺得自己很凄...
    婧萱只水眠閱讀 169評(píng)論 0 1
  • 12月14日下午2點(diǎn)30分,在四川師范大學(xué)音樂學(xué)院101音樂廳聋亡,舉行了2018級(jí)碩士鍵盤樂發(fā)展史課程考核音...
    繪舞凝嵐閱讀 242評(píng)論 0 1