Simple Animated Guns 枪械属性修改
本文最后更新于:2024年10月26日 晚上
Simple Animated Guns 模组枪械属性修改简易教程
环境:Windows11、Java"17.0.11" 2024-04-16 LTS 64-Bit、PCL2 或其他启动器
工具:Vscode
省略我半小时的翻看源代码的心路历程,我们直入正题吧… 本文并不复杂,只要不是纯小白,都可一战
在此之前你需要准备的是:
- 原 mod 项目
- 一个能用的编辑器,如 Vscode、Sublime
- Java17 环境
Clone 或下载原作者项目
原作者项目地址:Simple-Animated-Guns
由于没有官方修改枪械属性的相关教程,所以我的思路是通过开源的源工程文件进行代码审计,修改好属性后将其编译成一个我们的自定义版本。本文仅供学习参考。
赞美原作者!!!Fabric 的枪械 mod 真的很少!
进行以下的步骤前,请先确认你操作的分支是否为你需要的分支:
比如我玩的 BetterMC 是 1.20.1 的,所以我就选择了对应的版本。然后我们需要把原作者的项目搞到本地来,因为我们要进行修改嘛。这里不论是 Git clone 还是下载成压缩包都是需要一定 “本事” 的,有能力的可以自行下载到本地,我这里直接提供蓝奏云的下载链接在文末,请自行下载需要的版本分支项目。
准备好编辑器
我推荐使用微软的 vsocde 作为编辑器,这个编辑器在微软商店就能下载到:
当然你也可以使用你习惯的编辑器,Sublime Text 啥的都可以。如果你的 Vscode 是英文的不习惯,可以自行搜索 Vscode 汉化,或者参考下面的文章:
准备好 Java 环境
如果你下载好了项目文件,请将其解压。然后咱们来检查目录中是否存在 build.gradle
文件,如果没有请重新下载,不出意外是有的。项目目录应该如下:
请使用我们准备好的 Vscode 将其打开,不出意外你会得到:
可以看到这里要求的 Java 版本。请按要求切换本地 Java 版本环境,也就是转到系统环境变量进行调整。如果你忘记本地 Java 版本,请使用命令行执行查看版本命令,查看本地 Java 版本的命令是:
Win+R 就可以打开运行,然后输入 cmd 就可以打开一个命令行了。
上述命令需要你配置好 Java 环境变量。如果出现版本号且版本对得上,就说明你的 Java 环境是 ok 的;如果你从未安装过 Java 只是在使用启动器时有所耳闻,可以参考下面的文章来安装并配置 Java 环境变量(文末我会提供 Java17 版本 123 云盘链接,蓝奏云限制 100m 大小没办法)。
环境变量的作用就是能让你在命令行内直接使用 java 命令,而不是必须得在 java.exe 目录下才能使用 java 命令
如果你使用我提供的 Java17 安装包,也请看一看上面的这篇文章,直接跳到 1-2安装
步骤即可,或者自行搜索可信的教程文章也是可以的。
上述文章在环境变量配置中,关键字符串如下(分号是变量值最后如果没有分号才需要加)
如果你的 PATH 变量不是文章中的样式,而是和我一样是列表,那就简单得多了直接点右边的新建就可以:
好了,如果不出意外你已经可以通过 cmd(Win+R 输入 cmd 即可)执行 java 命令了。如果你忘记 Java 在哪,可以使用下面的命令
解析 - Simple Animated Guns 枪械属性
请使用我们准备好的 Vscode 编辑器打开项目
如果你安装时选择了将 Vscode 添加到右键菜单,则可以直接在项目目录空白处直接右键将其作为项目打开:
你的右键菜单可能和我不一样,因为我嫌它安装时给我的字太长了不好看,所以改成了 Open as Project
如果你没有,那么你可以直接打开 Vscode,在左上角点击文件 -> 打开文件夹,然后找到项目文件夹就好了
打开后,你会得到一个相对简洁的界面:
鼠标左键点击箭头指向的图标就可以看到我们的工程项目文件目录了。
Ok,我们先来看看总览性的东西吧。
我们找到:src\main\resources\assets\anim_guns\lang\en_us.json
的这个 en_us.json 文件
这个就是作者定义的全部相关东西了。值得一提的是,在原地址的 default 分支,也就是 1.18.2v1-test-arms-weaponmods 分支中,几乎相同的位置下是存在官方汉化的:
不过版本更迭,现在 1.20.1 并没有这份官方汉化 json 文件了,我个人简单翻译了一下,在 1.20.1 版本的同目录下创建了一份 zh_cn.json 文件,以供大家参考。
个人力量有限,出错在所难免,如遇到请见谅。
有了这份总览,心中总算也是踏实许多。
接下来我们找到:src\main\java\net\elidhan\anim_guns\item\ModItems.java
下面就是我找到 GunItem.java 中的构造函数后进行对照再为大家进行注释解释后的代码了,我这里仅用第一个枪械做例子。
因为其他的枪械是大差不差的,除了开火模式全自动半自动的差别、装填方式、持枪方式、可装备的附件类型外,基本差不多?。
属性值一览
1.20.1 版本分支构造函数如下:
主要还是看构造函数中的参数要求,实现部分的赋值倒是可以忽略。
下面这个是 1.20.1 版本分支的枪械属性注册
下面这个则是 1.18.2v1-test-arms-weaponmods 版本分支的
当然旧版本会少对应的属性参数,而新版本的 1.20.1 则是增加了持枪动作类型和枪口等附件的支持的。
构造函数解析
GunItem 构造函数的具体参数要求如下:
上面的构造函数参数类型要求请千万做到心中明确。
如果你学过 Java 或者其他编程语言,这部分你可以跳过,但是也请稍微留意一下参数类型要求。否则修改一时爽,编译()
好了,收回删除线伏笔,这些枪械可能存在的差异,如:全自动半自动的、装填方式、持枪方式等。我也给大家进行注释解释了,就在:src\main\java\net\elidhan\anim_guns\item\GunItem.java
的 826 行开始:
这些都是枚举类型的,大家可以自行对应理解。而可装备的附件类型其实就在枪械的上面,或者说,在 json 文件中也能知道,好像就 3 种?:
zh_cn.json63 行处:
实践 - 属性修改
Ok,现在大家都有了基本认识,我们来简单修改一个 amr_classic 狙击枪的伤害值吧。
我们找到:src\main\java\net\elidhan\anim_guns\item\ModItems.java
的 689 行开始
我们简单修改原伤害值 40 为 50
Ok,这里我们的修改完成后,我们基本上就要进行编译了。不过在编译之前,我们先来添加一下国内镜像的仓库源,以防等会编译过程中可能出现的下载慢的情况。
我们打开 build.gradle
文件
添加一个阿里云的 maven 地址:
好的,我们做完修改之后,点击左上角的文件 -> 全部保存。将我们做的修改保存下来,不然是不会生效的。
实践 - 编译
别关闭 Vscode 哦,我们直接在打开项目的 Vscode 上点击它上方导航栏的终端选项,新建一个终端用来运行我们要执行的命令:
由于项目自带 gradlew 和 gradlew.bat,所以我们可以不用安装 gradle,我们直接使用它们来编译,执行命令为:
如果出现绿字 BUILD SUCCESSFUL in 基本上是没问题的:
编译后的文件在:Simple-Animated-Guns-1.20.1\build\libs 中
不出意外的话,使用上面这个不带 sources 的 jar 包就可以了。
实践 - 替换 jar 包测试
打开 PCL2,将 jar 包替换(请备份原文件)
这里我将原来我正常使用的 jar 包剪切出去,放在了编译后的目录下统一管理,接下来将我们编译的 jar 放回进行测试:
替换之后,可以看到 PCL2 可以搜到我们替换的 jar 包
接下来就是进游戏测试了:
可以看到 Damage 伤害变成了我们修改后的 50,成功!
我会把我的这一份项目源码也上传蓝奏云供大家参考。
本来到这里也该结束了,但是再稍微提一嘴准星的问题吧。
因为我是玩的 BetterMC1.20.1,玩过的朋友可能知道,它这个整合包的准星不是传统派的十字,而是十字左右套了个左右括号包裹起来,我是很难习惯,所以我就把它改回了传统的十字准星,这个改法在 BetterMC 的 MC 百科词条下的评论区我发了办法,感兴趣的可以看看:BetterMC 修改准星 489 楼评论
相关链接
勘误 & 补充
2024 年 7 月 18 日 21:54 勘误,补上原作者全版本源码链接。
2024 年 7 月 19 日 11:43 补充,在属性值部分补充关于构造函数的参数要求。
可能遇到的问题
- 编译的时候显示:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
请检查是否开启了系统代理。关闭后再尝试编译。
- 编译时报错: 不兼容的类型:从 double 转换到 float 可能会有损失 & 错误:找不到符号 & 构造器 (FabricItemSettings,String,String,double,int,int,Item,int,float [],float [],int,LoadingType,< 空值 >,SoundEvent,SoundEvent,SoundEvent,SoundEvent,< 空值 >,int,boolean,boolean,int,int,int,FiringType,ArmType,AttachType [])
请检查属性值是否符合参数要求,如:9.5 默认为 double 类型,而构造函数要求为 float。请改为 9.5f 或 9.5F