第四章:使用Proxy代理讓客戶端服務端分工合作。

<基於1.8 Forge的Minecraft mod製作經驗分享>

別被那個Proxy代理嚇到,很簡單的。

  1. 我們先討論爲什麼要用Proxy代理:

    像打開新的UI這種操作,比如打開一個揹包,每個玩家都有各自的揹包,這個操作僅僅應該發生在客戶端,服務端通常是不做圖形上的操作的。而像發送一個消息廣播之類的事件,則應該在服務端處理,客戶端只負責接收。因此,我們有了區分當前運行的是客戶端還是服務端的需求,以分別處理不同的事件。誠然,我們可以粗暴的每次用if來判定,但這樣效率無疑是很低的。所以Proxy就派上用場了。

  2. 接下來討論什麼是Proxy,它是怎麼解決上述問題的:

    Proxy的含義就是雙面代理,通過爲不同的運行端實例化不同的類,來使得不同端執行不同操作。這兩個面、即兩個類,通常分別叫做ClientProxy和CommonProxy,這個實例通常這麼申明:public static CommonProxy proxy,並且ClientProxy必須繼承自CommonProxy,這樣才能用clientProxy初始化proxy實例。但這裏有個疑問,就是ClientProxy裏的方法是否需要Override並且super父類CommonProxy的方法。不過現在貌似沒遇到過問題,那就先往後走吧。

  3. 好,現在上代碼,看看實際中Proxy的用法:
    @SidedProxy(clientSide = "com.zhengxiaoyao0716.douromod.ClientProxy", serverSide = "com.zhengxiaoyao0716.douromod.CommonProxy")
    public static CommonProxy proxy;

    上面代碼的含義:@SideProxy註釋是用來標識代理器的,對下面的proxy實例加上了這個標識後,Forge開始時就會自動根據clientSide、serverSide指定的類(是的,要寫上完整的包路徑)來爲其做不同的初始化。所以請注意:1、proxy不可爲final(否則你讓人家怎麼初始化)2、不需要再手動將其初始化。

接下來的使用就很簡單了,你可以把proxy當成一個接口,放心大膽的在其上調用方法,執行時會自動調用ClientProxy或CommonProxy類裏面的方法。也不知道我說明白沒有

老規矩Github:https://github.com/zhengxiaoyao0716/DouroMod,快來一起做啊!!!好吧我承認我寫那麼認真就是爲了如果有一天我棄坑了,能有好心人把鬥羅大坑填上。之前在貼吧裏面遇到了一個曾經挖過這個坑的前輩,感慨良多啊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章