我的世界·1.20.1·forge Mod教程·ep4·方塊,方塊實體,發(fā)電機
## 本次的內(nèi)容
forge電力
動畫紋理
自定義創(chuàng)造物品欄


## 發(fā)電機
發(fā)電機是一個提供燃料生成Forge能力的方塊(FE),方塊擁有一個GUI,顯示電力水平,有一個物品的slot,可以放入燃料。發(fā)電機的前面顯示是否在發(fā)電的狀態(tài)。

## block
從Block開始,具有兩個屬性的方塊,F(xiàn)ACING和POWERED,當玩家放置方塊的時候,F(xiàn)ACING屬性需要根據(jù)玩家面朝的方向進行放置。

當具有燃料的時候,方塊實體將負責發(fā)電
Forge配備了與能量有關(guān)的處理,支持IEnergyStorage的方塊可以存儲能源。
發(fā)電機還具有物品的處理的能力,用于存儲物品,只有一個燃料槽
我們使用AdaptedEnergyStorage進行能力的操縱,可以方面限制提取和插入。
Forge的能量系統(tǒng)是一個推送系統(tǒng),你不需要去提取能量,也不應(yīng)該這樣做。
tickServer方法會在server上的每個Tick被調(diào)用,他會做兩件事件
- 產(chǎn)生能量。
- 將能量分配給周圍的Block
generateEnergy方法根據(jù)當前的燃料產(chǎn)生能量,如果沒有燃料,則不會產(chǎn)生任何能量,如果有燃料,就更具Generate殘生能量,在這類數(shù)值是50/tick
generateEnergy方法還負責更新方塊的POWERED的屬性,如果我們正在產(chǎn)生能量,則周圍的方塊可以被供電,如果沒有發(fā)電那么周圍的方塊不能被供電。
DistributeEnergy方法將能量分配給相鄰可以接受的方塊,他通過查找支持IEnergyReceiver的功能的方塊完成功能,如果他找到了這個方塊,就會將能量推送給該方塊,如果方塊接受了能量,那么就移除自己存儲的能量。

## Container
容器和我們之前介紹的類似
不同的是我們現(xiàn)在有兩個slot需要向客戶端發(fā)送能量的狀態(tài)。第一個發(fā)送能量的低16bit,第二個發(fā)送能量高的16個bit
這樣是因為slot只能傳遞16為數(shù)據(jù),我們需要32位存儲能量。
## Screen
在客戶端我們需要創(chuàng)建一個GUI界面,顯示燃料槽和發(fā)電機的狀態(tài)。能量的顯示為一個條,隨著發(fā)電而填充,這是我們的使用的2個slot的傳遞數(shù)據(jù)實現(xiàn)的。
當鼠標懸停在能量條上時,我們還會能量的狀態(tài)

## charger
charger是一個block,他在將來為我們的機器人充電,現(xiàn)在他還只是一個用于接受能量存儲的塊
該charger沒有用戶界面,不要screen 和 container
## block
charger是一個帶有實體的方塊,并且是半磚,這樣我們需要重寫getShape的原因,他使用POWERED屬性表示是否有電

## the block entity
charger不存放任何的item,但是存儲能量,所以使用AdaptedEnergyStorage,不過他僅接受能量,因為在能量變化的時候需要setChange,所以我們需要重寫receiveEnergy方法,以便我們調(diào)用setChange。發(fā)電機我們不需要怎么做,因為發(fā)電機修改內(nèi)部的能量,無論是發(fā)電還是分配電的時候,這兩種情況都不需要setChange。
在tickSever中,我們檢查charger的是否有電,有電就將塊的狀態(tài)修改為POWERED狀態(tài)。

?Data Generation
數(shù)據(jù)生成和之前類似。
對于發(fā)電機,使用了一個6個面都是一樣的模型,每個面都有兩種狀態(tài)。
對于charger我們使用兩個slab模型,表示充電和未充電,然后使用getVariantBudiler創(chuàng)建方塊的狀態(tài)。