切換
舊版
前往
大廳
主題

【Forge】熔(隆)爐(乳)教戰守則。Part 02

格子@懷念光牧的社畜 | 2015-03-15 18:30:55 | 巴幣 508 | 人氣 262

前言:
        晚上好(哈欠),今天去漆油漆超累(攤)。
        上篇講說要完成BlockFirst.class的內容才來做TileEntity。
        覺得麻煩(各種反悔),所以咱們還是讓這個方塊繼續Error光溜溜吧!

第1章:
        簡單來講我們上次並沒有很確切的讓大家理解TileEntity到底有甚麼作用。
        所以這次我們著重在配合TileEntity的部分。
        
        首先請打開各位的BlockFirst.class,我們來加入TileEntity。

        在createNewTileEntity()的函數裏頭,我們回傳給它的是一個null。
        這個代表說方塊並不會被正確的使用TileEntity。
        所以我們建立一個這個Block專屬的TileEntity。
        姑且就先命名為TileBlockFirst.class,並且新增Package資料夾TileEntity在org.mocstudio底
        下。

        接著就要在createNewTileEntity()回傳它。

        
        那麼接下來我們就要思考這個方塊的作用是要幹嘛。
        這邊姑且我就先亂做吧。XD"

        假設這個方塊(準熔爐)的GUI會順便顯示它的世界位置。
        基於該方塊可能在千千萬萬種世界,
        所以我們來使用TileEntity來存儲它的座標資訊。
        十分湊巧的,我們的createNewTileEntity()就會給予一個world參數,
        那麼就直接拿來用吧!(我絕對不會說這是故意的XD")


        系統會給我們一個錯誤,原因是剛剛自動建立的TileBlockFirst.class並沒有要求World參
        數。
        所以請打開你的TileBlockFirst.class,幫她加入一個要求World參數的建構子吧!


        
        寫到這邊,可能很多人還是不太懂這樣到底可以幹嘛XD"
        沒關係,我理解。
        
        我來做個小小的、小小的,效果呈現。

第2章:不可以性騷擾方塊!
        這邊我就做個功能。方便各位觀察效果。
        如果這個方塊放下去之後,對著它點右鍵。
        方塊會進行全伺服器廣播你正在戳她,還會說出你在哪個世界戳她。(有點害羞的感覺)

        請打開你的BlockFirst.class檔案。
        讓我們覆寫方塊被戳到的函數吧。

        老樣子要確認開頭的Override跟綠色三角形噢!

        那麼這邊return true的意思是,代表這個方塊可以被右鍵戳戳。
        如果return false的話,會戳失敗XD"

        伺服端會在方塊被戳下去的時候,系統會去抓取該位置的方塊,是否有註冊TileEntity,
        然後調用TileEntity裏頭的資料出來大喊它在哪裡被性騷擾。
        我們首先要檢查的是,處理的部分是不是伺服端。
        這邊有一個簡單的東西可以讓我們來檢查。

        if判斷式裡面的意思是。如果世界沒有被"遙控"(?)。
        我知道這個說法還蠻奇妙的。我們來看看Java Doc裡面寫了甚麼。
        "This is set to true for client worlds, and false for server worlds."
        如果這個參數被設定為真則為客戶端世界,否則為伺服端世界。

        意思就是,嗯...   就是那個意思。(燦笑)

        那麼檢查完伺服端之後,接下來就要檢查,這個XYZ座標被戳到的方塊有沒有TileEntity。
        還有,當檢查到有TileEntity的話,那麼這個TileEntity是否是這個方塊專屬的TileEntity?
        (饒舌,眼神死。)


        那麼這樣就檢查完囉!(歡呼)
        不過我們還要讓進行資料的調用ˊ口ˋ。
        在此之前,我們先加入伺服器廣播的函數吧。

        其中""的位置,就是給我們放訊息的String。
        但是我們還得處理一個小小的東西。

        回到你的TileBlockFirst.class吧!


        我在第8行宣告了一個靜態的World變數。
        然後在剛剛的建構子裡面,把這個World變數進行初始化。
        簡單來講就是把剛剛拿到的參數,放到自己身上。

        由於為了保護world參數不會被外面的奇怪東西肛肛好。
        所以我是宣告成private的私有欄位。

        但是礙於之後我們還需要存取world參數,所以就再度寫了一個getWorldName()函數,
        來安全的回傳world的名字。
        
        很複雜聽不懂沒關係,照著打就對了。(大燦笑)

        搞定之後呢,再度回去BlockFirst.class檔,我們來把訊息加上去。

        這裡要注意強制轉型的問題。
        因為你直接從world裏頭獲得的TileEntity它是TileEntity(?),
        所以裡面並沒有定義我們剛剛寫的getWorldName(),
        這個時候要把它強制轉型成正確的TileBlockFirst(),才能夠正確的調用正確的函數噢!

        那麼我們做了這麼多。
        終於可以稍微的小小測試一下了。(終於,謝天謝地。ˊ口ˋ)
        打開你的遊戲並且拿起你的Error方塊先生吧!


        接著小心翼翼的把它放到地板。以免它突然亂叫(?)。


        勇敢地用你的右(手)鍵性騷擾它吧!


        lolllllllllllllllllllllllllllllllllllllllllllllllll(大笑)。

        PS:這是單人世界,然後世界命名是ModTest。
        同場加映:


        為什麼會這樣呢?我們下回分曉。
        原來如此簡單的寫法,卻有一個致命的細節沒有注意到!


最後:
        這次的教學,恩,對,就是那樣。(#)
        最近過得超充實的,其實。每天固定發一篇心得教學綜合文真的還蠻刺激的。
        本來只是玩票性質的,想說PO點教學,賺一下存在感。
        不然老實說巴哈版潛水潛了快兩年(其實三年)吧。

        感覺起來都沒有歸屬感。又不能在場歪留言。
        因為我一定會留一些一定會被警察杯杯抓走的東西ˊ口ˋ。

        好啦言歸正傳。
        Saber大好,麥姊各種我可以! (巴

        我是格子,
        我們下次再見XD"

創作回應

RinStrike
:3
2015-03-15 19:11:40
格子@懷念光牧的社畜
這是某種留名運動嗎XD?
還是你是來ㄘ通知的ˋ口ˊ? (踹

話說你的勇造怎麼....
2015-03-15 19:16:12
RinStrike
換惹:3##
2015-03-15 19:50:33
格子@懷念光牧的社畜
你是誰XDDDDDDDDDDDDDDDDDDDDDDD ?
2015-03-15 19:53:19
RinStrike
換勇造拉XD
2015-03-15 20:02:28
格子@懷念光牧的社畜
XDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD'
一個瞬間想說你哪位ˊ口ˋ
2015-03-15 20:47:15
那...管子呢?
2015-03-18 09:28:35
格子@懷念光牧的社畜
啥XDddddddddddddddd?
2015-03-18 09:51:30

相關創作

更多創作