第四章:使用Proxy代理让客户端服务端分工合作。
<基于1.8 Forge的Minecraft mod制作经验分享>
别被那个Proxy代理吓到,很简单的。
我们先讨论为什么要用Proxy代理:
像打开新的UI这种操作,比如打开一个背包,每个玩家都有各自的背包,这个操作仅仅应该发生在客户端,服务端通常是不做图形上的操作的。而像发送一个消息广播之类的事件,则应该在服务端处理,客户端只负责接收。因此,我们有了区分当前运行的是客户端还是服务端的需求,以分别处理不同的事件。诚然,我们可以粗暴的每次用if来判定,但这样效率无疑是很低的。所以Proxy就派上用场了。
接下来讨论什么是Proxy,它是怎么解决上述问题的:
Proxy的含义就是双面代理,通过为不同的运行端实例化不同的类,来使得不同端执行不同操作。这两个面、即两个类,通常分别叫做ClientProxy和CommonProxy,这个实例通常这么申明:public static CommonProxy proxy,并且ClientProxy必须继承自CommonProxy,这样才能用clientProxy初始化proxy实例。但这里有个疑问,就是ClientProxy里的方法是否需要Override并且super父类CommonProxy的方法。不过现在貌似没遇到过问题,那就先往后走吧。
好,现在上代码,看看实际中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,快来一起做啊!!!好吧我承认我写那么认真就是为了如果有一天我弃坑了,能有好心人把斗罗大坑填上。之前在贴吧里面遇到了一个曾经挖过这个坑的前辈,感慨良多啊
第四章:使用Proxy代理让客户端服务端分工合作。的更多相关文章
- nginx&http 第四章 ngx http代理 && 转载
Nginx访问上游服务器的流程大致分以下几个阶段:启动upstream.连接上游服务器.向上游发送请求.接收上游响应(包头/包体).结束请求. upstream相关的两个重要数据结构ngx_http_ ...
- nginx&http 第四章 ngx http代理 upstream流程图
- 第四章 SSL和Proxy高级选项
在前一章,我们已经学习了HTTP消息如何通过Burp Proxy进行拦截和处理,本章我们将继续学习HTTPS协议消息的拦截和处理. HTTPS协议是为了数据传输安全的需要,在HTTP原有的基础上,加入 ...
- 第四章SignalR自托管主机
第四章SignalR自托管主机 SignalR服务器通常在IIS的Asp.Net应用程序上承载,但它也可以使用自托管库来作为自托管的主机来运行(就像控制台应用程序或Windows服务那样)与Signa ...
- (转)iOS Wow体验 - 第四章 - 为应用的上下文环境而设计
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第四章译文精选,其余章节将陆续放出.上一篇:Wow ...
- JAVA: httpclient 详细说明——第四章;
httpclient 具体解释--第一章. httpclient 具体解释--第二章: httpclient 具体解释--第三章: httpclient 具体解释--第四章: httpclient 具 ...
- 豌豆夹Redis解决方式Codis源代码剖析:Proxy代理
豌豆夹Redis解决方式Codis源代码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描写叙述: Codis is a proxy b ...
- 豌豆夹Redis解决方案Codis源码剖析:Proxy代理
豌豆夹Redis解决方案Codis源码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描述: Codis is a proxy base ...
- Python--Redis实战:第四章:数据安全与性能保障:第7节:非事务型流水线
之前章节首次介绍multi和exec的时候讨论过它们的”事务“性质:被multi和exec包裹的命令在执行时不会被其他客户端打扰.而使用事务的其中一个好处就是底层的客户端会通过使用流水线来提高事务执行 ...
随机推荐
- Android之声音管理器《AudioManager》的使用以及音量控制
以下为网上下载然后拼接-- Android声音管理AudioManager使用 手机都有声音模式,声音.静音还有震动,甚至震动加声音兼备,这些都是手机的基本功能.在Android手机中,我们同样可以通 ...
- 141 Linked List Cycle(判断链表是否有环Medium)
题目意思:链表有环,返回true,否则返回false 思路:两个指针,一快一慢,能相遇则有环,为空了没环 ps:很多链表的题目:都可以采用这种思路 /** * Definition for singl ...
- 使用wrapper将java程序注册程windows服务后不生效
使用wrapper将java程序注册程windows服务后不生效 使用add.bat或test***.bat测试通过了, 然后使用install***.bat注册后cmd显示注册成功. 但是程序到了运 ...
- window.showModalDialog以及window.open用法简介
.可以通过window.returnValue向打开对话框的窗口返回信息,当然也可以是对象.例如:------------------------------parent.htm<script& ...
- C语言基础学习基本数据类型-浮点型
float和double 加了小数点的数都是浮点数.C语言有两种书写浮点数的方式,一种是使用常用的标准小数点表示法,如下: 0.00056 8.0 1.23 第二种表示浮点值叫做E表示法.下面是一些例 ...
- 关于Chrome(谷歌浏览器)对docume,准确获取网页客户区的宽高、滚动条宽高、滚动条Left和Top
对于document.compatMode,很多朋友可能都根我一样很少接触,知道他的存在却不清楚他的用途.今天在ext中看到 document.compatMode的使用,感觉这个对于我们开发兼容性的 ...
- 快速排序(Quick Sort)的C语言实现
快速排序(Quick Sort)的基本思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对着两部分记录继续进行排序,以达到整个序列有序,具体步骤 ...
- Linux——搭建PHP开发环境第二步:PHP
原文链接:http://www.2cto.com/os/201511/450258.html ##### PHP 编译安装 #### [root@localhost ~]# yum install l ...
- memcpy函数的使用方法
c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中. 1.函数原型 void *memcpy(void * ...
- zoj 1010 Area【线段相交问题】
链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1010 http://acm.hust.edu.cn/vjudge/ ...