物品欄(inventory)是遊戲裏玩家用來管理他們所攜帶的物品的,例如那個可以用E鍵打開的揹包界面。
很多方塊(箱子、工作台或熔爐等)也有自己的物品欄。所以,如果想在自己開發的模組中開發帶有物品欄的方塊,那麼去了解物品欄背後的機制就是十分重要的啊。
Minecraft物品欄運行機制
顯示層就是展現在我們面前的界面。界面接收鼠標輸入並處理。這一層只存在於客户端,在Minecraft中對應的為類稱為GuiContainer。
控制層處理邏輯和數據同步的控制層,這一層向GuiContainer提供需要用到的數據,接收GuiContainer傳遞過來的操作,並保證服務端的數據和客户端的一致。控制層服務端和客户端都存在,在Minecraft中對應的是類Container。
數據層用於存儲數據,也就是物品信息。在Minecraf中對應的是Slot類。
看完上面的分層機制,有編程經驗的同學會聯想到軟件工程領域裏標準的”MVC“模式。
説説圖上圈圈裏的數字是個啥意思:①傳輸的是來自客户端的Gui事件,比如玩家點擊按鈕等,這些事件需要立刻處理,直接發送至了服務端。
②傳輸的是需要經過客户端處理的Gui事件,比如玩家拖拽物品槽中的物品等。
③傳輸的是特定物品槽的變動,比如當玩家點擊物品槽時,計算物品槽會減少多少物品,並把這一變化傳輸至物品槽。
④傳輸的是Container和其他物品槽的變動,當相應的事件(比如物品被取走)觸發時,數據就會傳輸至Container端以進行相應的操作(如工作台扣除相應的物品)。
⑤傳輸的是服務端物品的變化和進度條的變化。
⑥傳輸的是玩家對於物品槽的操作,客户端會將其同步至服務端。
虛線部分用於傳輸控制,Minecraft已經幫我們做好了,所以只剩下了③、④、和⑤,這三種數據的傳輸是需要我們手動執行的。在未來的文章裏,會做進一步解析。