前言
我们的匠魂3中文社区现在蒸蒸日上哦,重铸匠魂2荣光,我辈义不容辞
笔者在此会从提供一些设计思路,开发技术和写法优化
由衷希望各位开发者将模组开源至github
技术篇
反混淆
由于mc本身源码经过混淆,我们需要看一些原版实现的时候肯可能会发生以下类似的状况(图仅作举例):
好消息是,1.14后mojang公布了一份混淆对照表,我们可以从工作区的build/createSrgToMcp找到这份
这样,遇到被混淆过的m_xxxxx_就可以对照阅读了
当然,也有一些自动反混淆的小软件,需要的人可以自行查找。
开权限
在我们需要进行一些特殊实现的时候,可能会遇到以下情况:
有的时候,我们可以通过绕一大圈用一个很奇异搞笑的方式实现我们要的效果,但forge给我们提供了一个解决这个问题的方法:
build.gradle里有一行默认被注释掉的accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
我们启用他
在src/main/resources/META-INF里创建一个accesstransformer.cfg的文件
以etshtinker为例:
public-f 可以将private类转为public并去掉final,重新构建后我们就可以自由使用这部分的权限;
自写钩子
以下是etsh的星流之刃实现方法:
骑士史莱姆没有在匠魂3里提供leftclick(左键点击)和leftblock(左击方块),和onentityswing(挥动物品,虽然这个是写在物品里的)
那么要实现这些功能就需要自己造轮子。anyway,别人造的轮子没有自己的好用
首先我们需要写一个继承了匠魂强化的类:
然后在类里写上事件监听器
另外,由于在mc中左键空气和左键方块是不会向服务端发包的,所以我们需要自己手动向服务端发包。
具体实现方法可以参考乙硫醇的匠魂词条库/植物魔法
现在,写一个继承我们自定义类的强化,我们就可以调用自己写的钩子了。
笔者的话
匠魂附属的开发并不需要很多的代码基础,勤看多看其他模组的实现方法就能用以己用。
多看看,自己写的东西会越来越好的。
设计篇
本篇属笔者的主观意愿,不认同也无妨
强度控制
遗憾的,以匠魂3现在的整体强度而言(回旋镖,巨剑,流体枪)
对强度控制的重要性已经无限接近于0
但不妨我们把强度分为几个阶段
2级材料(落地) 3级材料(小炉子) 4级材料(大炉子) 高贵的四级材料(中期) 更高贵的四级材料(中后期) 更更高贵的四级材料 (末期) 更更更更高贵的四级材料(旅途的终点)
1级材料?只存在于落地五分钟内的东西何必较我混沌徒费口沫
每个阶段是什么强度取决于作者的考虑
笔者建议更高贵的四级材料”可以接受十只坚守者洗澡,末期材料可考虑抗/kill(最后防线),旅途的终点扛循环/kill也不是不可取(无尽套装)
材料比例
其实85%以上的材料应该是四级材料,剩下大概是10%的三级材料和5%的二级材料
匠魂的材料分级还是太单调了,四级材料与四级材料的区别不比一级材料小
一级材料?但石头就是二级材料了。
发展线路
介于mc本身是一个很自由的游戏,提供给玩家很多的选择性是好的
笔者并不赞同死锁阶段的线性
如拥有“钻石”挖掘等级,那么最好让玩家能获得的不少于两个的材料体系,三个以上更好
材料设计
设计一个材料时,我一般会从以下几个方面考虑
这个材料酷吗?
这个材料实用吗?
这个材料是否同类过多?
这个材料好玩吗?
我编写他的过程开心吗?
这个材料是否过于耦合了?
and so on
事实上,材料设计中减法是比加法重要的(参考诸神匠心)
很多不必要的部分都是砍掉更好的(如 blue skies)
遏制滥用
以现在匠魂的环境(1.19)而言,减伤被严重滥用了
这种时候我们可以展开想象力,做出差异化
防御并不局限于减伤
复活(最后防线),格挡(经验防护),闪避,回复血量和额外血上限/黄心都是可行的
实在不行上对数盾
被严重滥用的不止减伤,还有真群攻和粒子(乙硫醇的匠魂词条库)
实际上数值的膨胀有害程度是很低的,整合包作者可以操纵科比js进行调控
改改面板,删删特性,轻而易举
多模组环境下很容易稀释掉膨胀的数值
相比之下表现形式的滥用严重得多
工匠联合写了巨量内置cd判断,乙硫醇的匠魂词条库写了巨量的真群攻和粒子
本来我们用薙刀(工匠匠心),然后有了能量剑和流体枪(乙硫醇的匠魂词条库),之后是三叉戟大荒星陨(工匠联合)。
按照这个趋势,下个匠魂的武器大概是尾兽卫星螺旋手里剑
这样的设计对社区无害,但容易造成玩家审美疲劳和阈值拉高
但归根到底,粒子和ui是过犹不及的东西
一大片UI糊在屏幕上和一大片粒子堆叠会对玩家造成真实的精神伤害。
描述部分
答应我,不要这么干好吗
匠魂特性的描述最好是简单易懂的,复杂的效果可以分多特性描述或缩减
具体的数值不一定需要写在纸面上
若匠魂3的强度很低,那么具体的数值就很需要考虑
但目前匠魂3的强度,少100点伤害都是没感觉
不要过耦合,不要小作文
开发部分
善用重构
工匠联合的制作者独爱流萤曾发表过以下言论
“我现在完全不知道我写的是什么,很懂类和方法的命名都是111,12这样”
well,命名规范是一部分,项目的维护性毫无疑问是越来越差的。
开发者的技术肯定是越来越高的,早期不成熟的东西后续都有可能成为阻力
笔者简易每次更新新内容前都看看有没有可重构的部分,重构是一种一次偷懒需要更多补救的东西
当然,我们可以每一次大更新都重写一次模组,如果不嫌累的话。
git的使用
idea自带的git可以帮助我们很好的上传源码,但idea经常抽风,容易出现无法上传的现象
所以笔者在此推荐使用GitHub桌面端进行开源
正在开发的你会开源的对吧?对吧?
规划版本号
version这一块是我们的版本号,不能填中文
规划好版本号是很重要的,否则可能出现像某整合包一样版本号像明日方舟关卡名的惨案 虽然他们好像改了
group这一栏可以填你的mcmod地址 当然填4399也是没问题的
注册表相关
来源暮色森林
实际上,我们有更优雅的方法:
答应我,不要再手动写了好吗。
后文
以上,开发匠魂附属最关键的是充足的激情和想象力。
由衷希望本教程能给予你们启发
感谢牢萤、EtSH、晓月、dddddsj、皇家马达博士、爬行中的苦力怕、gjhi和csdy,还有所有匠魂3玩家与社区作者