我的世界·1.20.1·forge Mod教程·ep4·方块,方块实体,发电机
## 本次的内容
forge电力
动画纹理
自定义创造物品栏


## 发电机
发电机是一个提供燃料生成Forge能力的方块(FE),方块拥有一个GUI,显示电力水平,有一个物品的slot,可以放入燃料。发电机的前面显示是否在发电的状态。

## block
从Block开始,具有两个属性的方块,FACING和POWERED,当玩家放置方块的时候,FACING属性需要根据玩家面朝的方向进行放置。

当具有燃料的时候,方块实体将负责发电
Forge配备了与能量有关的处理,支持IEnergyStorage的方块可以存储能源。
发电机还具有物品的处理的能力,用于存储物品,只有一个燃料槽
我们使用AdaptedEnergyStorage进行能力的操纵,可以方面限制提取和插入。
Forge的能量系统是一个推送系统,你不需要去提取能量,也不应该这样做。
tickServer方法会在server上的每个Tick被调用,他会做两件事件
- 产生能量。
- 将能量分配给周围的Block
generateEnergy方法根据当前的燃料产生能量,如果没有燃料,则不会产生任何能量,如果有燃料,就更具Generate残生能量,在这类数值是50/tick
generateEnergy方法还负责更新方块的POWERED的属性,如果我们正在产生能量,则周围的方块可以被供电,如果没有发电那么周围的方块不能被供电。
DistributeEnergy方法将能量分配给相邻可以接受的方块,他通过查找支持IEnergyReceiver的功能的方块完成功能,如果他找到了这个方块,就会将能量推送给该方块,如果方块接受了能量,那么就移除自己存储的能量。

## Container
容器和我们之前介绍的类似
不同的是我们现在有两个slot需要向客户端发送能量的状态。第一个发送能量的低16bit,第二个发送能量高的16个bit
这样是因为slot只能传递16为数据,我们需要32位存储能量。
## Screen
在客户端我们需要创建一个GUI界面,显示燃料槽和发电机的状态。能量的显示为一个条,随着发电而填充,这是我们的使用的2个slot的传递数据实现的。
当鼠标悬停在能量条上时,我们还会能量的状态

## charger
charger是一个block,他在将来为我们的机器人充电,现在他还只是一个用于接受能量存储的块
该charger没有用户界面,不要screen 和 container
## block
charger是一个带有实体的方块,并且是半砖,这样我们需要重写getShape的原因,他使用POWERED属性表示是否有电

## the block entity
charger不存放任何的item,但是存储能量,所以使用AdaptedEnergyStorage,不过他仅接受能量,因为在能量变化的时候需要setChange,所以我们需要重写receiveEnergy方法,以便我们调用setChange。发电机我们不需要怎么做,因为发电机修改内部的能量,无论是发电还是分配电的时候,这两种情况都不需要setChange。
在tickSever中,我们检查charger的是否有电,有电就将块的状态修改为POWERED状态。

Data Generation
数据生成和之前类似。
对于发电机,使用了一个6个面都是一样的模型,每个面都有两种状态。
对于charger我们使用两个slab模型,表示充电和未充电,然后使用getVariantBudiler创建方块的状态。