哦哇資訊網

我的世界:解析在Minecraft中如何建立帶有物品欄的方塊

由 HongKongFilm 發表于 遊戲2021-05-27

物品欄(inventory)是遊戲裡玩家用來管理他們所攜帶的物品的,例如那個可以用E鍵開啟的揹包介面。

帶有物品欄的方塊

很多方塊(箱子、工作臺或熔爐等)也有自己的物品欄。所以,如果想在自己開發的模組中開發帶有物品欄的方塊,那麼去了解物品欄背後的機制就是十分重要的啊。

Minecraft物品欄執行機制

顯示層就是展現在我們面前的介面。介面接收滑鼠輸入並處理。這一層只存在於客戶端,在Minecraft中對應的為類稱為GuiContainer。

控制層處理邏輯和資料同步的控制層,這一層向GuiContainer提供需要用到的資料,接收GuiContainer傳遞過來的操作,並保證服務端的資料和客戶端的一致。控制層服務端和客戶端都存在,在Minecraft中對應的是類Container。

資料層用於儲存資料,也就是物品資訊。在Minecraf中對應的是Slot類。

示意圖

看完上面的分層機制,有程式設計經驗的同學會聯想到軟體工程領域裡標準的”MVC“模式。

說說圖上圈圈裡的數字是個啥意思:①傳輸的是來自客戶端的Gui事件,比如玩家點選按鈕等,這些事件需要立刻處理,直接傳送至了服務端。

②傳輸的是需要經過客戶端處理的Gui事件,比如玩家拖拽物品槽中的物品等。

③傳輸的是特定物品槽的變動,比如當玩家點選物品槽時,計算物品槽會減少多少物品,並把這一變化傳輸至物品槽。

④傳輸的是Container和其他物品槽的變動,當相應的事件(比如物品被取走)觸發時,資料就會傳輸至Container端以進行相應的操作(如工作臺扣除相應的物品)。

⑤傳輸的是服務端物品的變化和進度條的變化。

⑥傳輸的是玩家對於物品槽的操作,客戶端會將其同步至服務端。

我的世界:解析在Minecraft中如何建立帶有物品欄的方塊

虛線部分用於傳輸控制,Minecraft已經幫我們做好了,所以只剩下了③、④、和⑤,這三種資料的傳輸是需要我們手動執行的。在未來的文章裡,會做進一步解析。

TAG: 物品傳輸客戶端服務端Minecraft