物品栏(inventory)是游戏里玩家用来管理他们所携带的物品的,例如那个可以用E键打开的背包界面。
很多方块(箱子、工作台或熔炉等)也有自己的物品栏。所以,如果想在自己开发的模组中开发带有物品栏的方块,那么去了解物品栏背后的机制就是十分重要的啊。
Minecraft物品栏运行机制
显示层就是展现在我们面前的界面。界面接收鼠标输入并处理。这一层只存在于客户端,在Minecraft中对应的为类称为GuiContainer。
控制层处理逻辑和数据同步的控制层,这一层向GuiContainer提供需要用到的数据,接收GuiContainer传递过来的操作,并保证服务端的数据和客户端的一致。控制层服务端和客户端都存在,在Minecraft中对应的是类Container。
数据层用于存储数据,也就是物品信息。在Minecraf中对应的是Slot类。
看完上面的分层机制,有编程经验的同学会联想到软件工程领域里标准的”MVC“模式。
说说图上圈圈里的数字是个啥意思:①传输的是来自客户端的Gui事件,比如玩家点击按钮等,这些事件需要立刻处理,直接发送至了服务端。
②传输的是需要经过客户端处理的Gui事件,比如玩家拖拽物品槽中的物品等。
③传输的是特定物品槽的变动,比如当玩家点击物品槽时,计算物品槽会减少多少物品,并把这一变化传输至物品槽。
④传输的是Container和其他物品槽的变动,当相应的事件(比如物品被取走)触发时,数据就会传输至Container端以进行相应的操作(如工作台扣除相应的物品)。
⑤传输的是服务端物品的变化和进度条的变化。
⑥传输的是玩家对于物品槽的操作,客户端会将其同步至服务端。
虚线部分用于传输控制,Minecraft已经帮我们做好了,所以只剩下了③、④、和⑤,这三种数据的传输是需要我们手动执行的。在未来的文章里,会做进一步解析。