MW_TD day1

MW_TD day1

搞编译用了好久,最后发现必须要gradle指令编译才能输出正常的jar,不然会出现NoSuchMethod错误(代码混淆的问题)。

(好麻烦啊这下每次编译都需要拖文件了

也得学一下别人的包、类的命名和安排

读源码时间!

ModularWarfare.java

mod的基础设置和一些比较重要的map(子弹类型,枪类型,弹药类型……)

以及读取内容包

哇居然还有设置解压密码的功能,好高级

应该是用了一个叫zip4j的包

有密码的zip包不能在服务器上使用,如果在客户端就用PROTECTOR进行一个applyPassword。

具体的操作是从5.135.103.173这个网站上请求password然后进行解码,

不过我挺好奇这个是怎么防止窃取的。

所以要是需要密码保护还需要去联系作者把自己的包进行一个注册是吧,好麻烦

大半部分都是加载内容包,还没包括对内容包具体内容的解析。

哪像我,主类里全是功能性方法(

然后用一个preInit函数注册所有的物品,方块之类的

具体的加载内容包在ContentTypes.registerTypes()里面

然后是onInitialization里面的一个操作:直接new一个ServerTickHandler的实例,用来注册里面onServerTick的监听器(因为这个监听器不是static的),绝了。不过还是没搞太懂,因为上面一点的 注册监听器都用了事件总线的注册。总之之后再看一下。

有一个判定项目:如果mod文件的文件名不带modularwarfare的话就会加载出错,因为这个是mod里面写死的关键字。

所以final前缀是什么效果来着(

等一下,@EventHandler和@SubscribeEvent有什么区别啊?然后还多出来一个Mod.EventHandler,更看不懂了

然后是注册了4个指令,感觉比插件要麻烦得多。

接着是注册了所有的item,居然真的没有材料这一栏。

Type和Item类

首先是common.type里的一些基础类。

仔细看了下baseItem这个类,发现本来就有一个叫maxStackSize的变量。nm我服了,明明就有为什么还要在AmmoType里还是写死成最大4个啊!给你改了哼

baseType里出现了一个叫transient的关键字。大概的含义是这个变量不会被写入到本地持久化,而是直接写到虚拟机的内存里,可以用来防止密码之类的敏感信息被中途劫持。

BaseItem里有一些用于生成tooltip的功能性方法,先试一试把颜色都改成全境风。

ContentTypes里包含了所有物品类型的加载,以后可以考虑新增一种“材料”类型的物品。

然后是common.guns里面的有关枪械的Type和Item

AmmoType就是弹夹的设定。把一些诡异的设定修正了。

ItemAmmo里有一个叫factory的函数变量,目测是用来快速新建ItemAmmo实例。好高级的写法?

学到一个新端Item类的方法,onUpdate(),表示物品被拿在手上时触发。传参有手持的item,world,entity还有俩不知道是啥的玩意。

草,仔细读了一下,发现这个支持多子弹其实是假的,他只会看第一个subAmmo,然后硬写进去。s大概是个还没做完的功能吧

然后是物品手持物品右键,用上了发包这个玩意。如果手持弹药的子弹不为空,则发一个GunReload的包(实际上这个包整合了枪械装弹和弹夹装弹的功能)。剩下的细读之后再说。

然后是添加tooltip,没啥好说的,翻译一下改成全境风格。

AttachmentEnum描述了所有可用的配件位置,以后可以考虑加更多的。如果配件的类型没找到就返回瞄具类。

AttachmentType配件类型描述。只有三个种类分别是握把,枪管和瞄具。最大堆叠默认为1。嘶难道还能不为1?那就可以不用专门做材料类的物品了。

三种配件也有各自的属性修改器,不过之后的话估计得加更多。

ItemAttachment比较简单,在构建器里加了个设置最大堆叠。

BulletProperty里有一行意义不明的注释,估计是某个没做完的功能的吧。还定义了子弹的药水影响。

BulletType和ItemBullet没啥好说的。

然后是重头戏GunType和ItemGun。

GunType里面好多属性,一个一个翻译吧。

属性完了有两个不太理解的方法,跟一个叫punched的属性有关,之后再看看usage吧

大致就这些了。不过reload居然不在itemGun里,之后再读一下其他的。

posted @ 2022-09-05 21:17  国土战略局特工  阅读(35)  评论(0)    收藏  举报