我的世界怎么做js?
题主应该是想问如何做Java源代码级别的修改吧,我最近也刚做过几次这样的实验(虽然都不是很成功),就来分享一下经验 首先要明确一点,对于主程序(以Forge为例)是没办法直接修改的,因为主程序启动的时候,会校验MCPE版本号,发现不一致则会直接崩溃。想要修改主程序,要么在版本号不变的情况下进行加mod或者打补丁之类的操作,这会导致程序无法运行;要么就修改version.jar里面的资源,达到“欺骗”程序的目的(实际上还是能查出来的,只是比较麻烦而已)。而大多数的mods都是通过jar包中的资源来实现功能的(例如地图资源、结构体资源等等),因此只要修改了对应的资源,再把资源替换回来,就能达成修改目的。
对于游戏客户端来说要简单一些,因为可以直接修改game文件夹下的文件(这些文件的源码其实也可以在mcppe中直接看到,就是比较慢),但是这样修改不能实现动态加载功能,也就是如果打开mod设置或添加/删除mod的话,游戏会自动重启,所以这种修改方法只能用于临时观看效果或是直接修改成自己想要的样子(如果是这样的话还不如直接修改版本号的资源)。
上面说的都是比较基础的理论知识,下面就来介绍一下实际操作的经验。 我用的是MCPE beta14.13.0.5(forge版)和MCPE 1.17.100.26(基岩版)来测试的,java环境变量等配置不再多说,不懂得话百度一下“javahome”就可以了。因为我的目的是研究forge的运作原理,所以就只加入了forge的jar包,并没有加入其他任何mod的jar包。至于怎么确定已经加入了需要的jar包,有一个最简单的方法,就是启动一次游戏然后查看一下Java的输出信息,如果发现关于forge相关的加载信息(如“Loading forge version...”),就说明forge的jar包已经被加载进来了。
首先来看看forge是如何实现加载功能的(以beta14为例,具体细节可以看看forge的API文档): 最后面两行代码的意思就是,先找到游戏目录下的游戏核心文件夹,再找到叫做“main”的文件,在里面找到一个叫做“Launcher.java”的文件,在这个文件里面加入需要修改的内容并重新生成jar包。(这里其实可以用jarsigner工具对生成的jar包进行签名,使得修改之后的jar包不会导致游戏运行时出现异常,不过这样做的话每次游戏升级都会导致自己的修改失效,有点麻烦,所以我直接删除了原来的“main”文件夹,手动重建了一个新的用来生成jar包)
接着来说一下怎样实现功能上的修改。 这个就根据不同的需求来选择了,如果想保留forge的功能,又想让自己做一点小改动的,可以采用上面的方法,只不过在修改代码之前要先想好,如果游戏更新了该如何处理(还原codebase或者手动删除修改内容)。 如果不想保留forge,想彻底换个游戏的,可以直接删除游戏目录下的所有文件,然后再把需要的mods添加进来即可(注意要把mods的文件名改成游戏的核心文件夹名字,避免冲突)。
以上都只是在修改游戏运行时的表现,如果要修改游戏底层的逻辑(即并不是通过添加/删除mod的方式来实现的逻辑改变),就需要改源码了。对于forge来讲,源码的改动并不是很难(相对于基岩版而言),因为forge的架构是比较容易理解的。如果要改forge的源码,建议从已发布的master分支入手(除非你很有把握自己改动的部分不会被用到以后发布的新版本里)。