Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
202 commits
Select commit Hold shift + click to select a range
998c54b
fix: gradle build error
Apr 5, 2025
0ce1198
change: copyright info, remove ai panel temporarily
Apr 5, 2025
a1f556f
Update AbstractResourcePackMixin_DownscaleImages.java
Serendisand Apr 5, 2025
1086a19
Update MixinGuiIngame.java
Serendisand Apr 5, 2025
c87cad3
回滚
Serendisand Apr 5, 2025
2d98661
Merge pull request #73 from LengMC/v4
gaoyu06 Apr 5, 2025
4c19b2a
MusicOverlay
Oct 6, 2024
9ec3d26
fix: music visualization
Apr 5, 2025
db3192a
to java (untested)
Apr 8, 2025
ea4dcc1
fix: music visualization(java)
Apr 11, 2025
4f69a25
Merge pull request #76 from FPSMasterTeam/feat/musicvisualization
gaoyu06 Apr 11, 2025
5809f7a
Update README.md
gaoyu06 Apr 11, 2025
d17ea62
Update README.md
gaoyu06 Apr 11, 2025
ccc9789
feat: 添加格挡摇摆功能
May 1, 2025
0b1b3e7
fix: 修复物品渲染错误
May 1, 2025
6cbb86a
Merge remote-tracking branch 'origin/v4' into v4
May 1, 2025
21d75ba
fix: 显示原版多人游戏界面
May 1, 2025
46a4a5c
fix: 龙翅膀不显示
May 1, 2025
dee7605
feat: 推荐服务器
May 2, 2025
8cb1745
fix: 显示推荐服务器的description
May 2, 2025
f7b6ae4
feat: 格挡动画、更好的伤害显示
May 2, 2025
bf18d93
change: make damageindicator better
May 2, 2025
77b9887
feat: 添加对安卓和mac的适配
May 2, 2025
df4a203
Fix 微软登录
vlouboos May 2, 2025
31bab86
Merge remote-tracking branch 'origin/v4' into v4
vlouboos May 2, 2025
b8c7d7b
Fix blend bugs & mapping bugs
vlouboos May 2, 2025
f712763
fix: linux support
gaoyu06 May 2, 2025
bafaf07
fix: multiplayer crash
gaoyu06 May 2, 2025
8d6218d
重写启动动画
vlouboos May 2, 2025
616f070
feat: more lua api
May 2, 2025
f490a29
feat: 双击加入服务器
May 3, 2025
501024f
Fixed Minimized Bobbing
vlouboos May 3, 2025
d2698c4
Fixed 1.7 Animation
vlouboos May 3, 2025
e4d4b7a
Fixed an earlier bug
vlouboos May 7, 2025
b74ee3a
Fixed an earlier bug
vlouboos May 7, 2025
b1973df
新增mod界面的fpsmaster客户端图标
Serendisand May 7, 2025
6728f6d
移除未合并的Pull Request的自动构建
vlouboos May 7, 2025
24f00d2
Unverified Fix
vlouboos May 9, 2025
fb6d568
Update build.gradle.kts
vlouboos May 9, 2025
12fecf0
fix: 修复支持shader的判断逻辑错误
May 17, 2025
4b0e64f
fix: 修复GUIMultiplayer的点击事件bug
May 17, 2025
6a95400
Merge remote-tracking branch 'origin/v4' into v4
May 17, 2025
2ab54b5
feat: new clickgui
May 17, 2025
d9b1f2a
feat: 微调
May 18, 2025
ddf65a9
fix: 音乐卡顿
May 30, 2025
734b770
fix: 优化了微软登录,显示登录进度,修复部分bug
May 30, 2025
a484802
feat: improve clickgui
Jun 12, 2025
f5857ff
Fix Scoreboard & Zoom
vlouboos Jun 12, 2025
3072326
feat: ui improvements
Jun 12, 2025
38edeb0
feat: gui multiplayer color
Jun 12, 2025
344dc8c
Merge pull request #86 from FPSMasterTeam/feat/new-design
gaoyu06 Jun 12, 2025
2259d74
Fixed some bugs
vlouboos Jun 12, 2025
bcc9ef2
fix: clickgui size bug
Jun 12, 2025
c6fe9c0
Add Client Brand Tag
vlouboos Jun 24, 2025
742adbd
fix #91
gaoyu06 Jun 29, 2025
fa94aa4
fix #74
gaoyu06 Jun 29, 2025
cb46566
fix #89
gaoyu06 Jun 29, 2025
18ccfd0
fix #90
gaoyu06 Jun 29, 2025
be58aa4
fix #68
gaoyu06 Jun 29, 2025
6e6d195
fix keyevent trigger problem
gaoyu06 Jun 29, 2025
d9b8923
update readme
Jun 30, 2025
3f37d9d
improve clickgui
Jun 30, 2025
84b0438
feat: New Music UI
Jun 30, 2025
604e208
remove client brand
Jun 30, 2025
8fdf97e
feat&optimize
Jun 30, 2025
444b2bb
feat: lunar block animation
Jul 1, 2025
29ed020
change: made account autologin async
Jul 1, 2025
f475e27
feat: better ExceptionHandler
Jul 1, 2025
7dae348
docs: add code_standards.md and development_tutorial.md
Jul 1, 2025
609481c
docs: add tasks.md
Jul 1, 2025
1e989fe
docs: add development_environment.md
Jul 1, 2025
40e514f
change: some exception handling
Jul 8, 2025
c939f82
fix: fix multiplayer render bug
gaoyu06 Jul 13, 2025
e55c5f1
fix: oldanimation blockswing wouldn't send packets now
gaoyu06 Jul 13, 2025
70565b3
fix: Damage Indicator
gaoyu06 Jul 13, 2025
521a8f5
chore: github action and better readme
gaoyu06 Jul 13, 2025
74ecbda
chore: github action
gaoyu06 Jul 13, 2025
ffd0ee3
chore: github action version name
gaoyu06 Jul 13, 2025
de37ac1
fix: new service api
gaoyu06 Jul 13, 2025
b19d002
change phase to beta
gaoyu06 Jul 13, 2025
3d92de1
remove a useless test file
gaoyu06 Jul 13, 2025
df74a9a
feat: IRC update, player information sync, and more
gaoyu06 Jul 13, 2025
da72d5e
change: github action run time
gaoyu06 Jul 13, 2025
ff1d31c
fix: fix duplicated value in potion display
gaoyu06 Jul 13, 2025
fe6a53a
feat: add onValueChange event
gaoyu06 Jul 14, 2025
42bdaff
fix: TextInputBox doesn't render until being focused
gaoyu06 Jul 14, 2025
7b13257
feat: new motionblur mode
gaoyu06 Jul 14, 2025
beb0a75
lang: update zh_cn and en_us
gaoyu06 Jul 14, 2025
a4dcc91
change: fixed scale is default of now
gaoyu06 Jul 14, 2025
fcd1de0
change: remove old theme system
gaoyu06 Jul 14, 2025
1380afc
optimize imports
gaoyu06 Jul 14, 2025
0f8ac1c
code cleanup
gaoyu06 Jul 14, 2025
6d78cfd
change: remove lua parser code, use dependency instead
gaoyu06 Jul 14, 2025
0698a84
feat: custom titles
gaoyu06 Jul 16, 2025
2ffeaa7
fix: musicplayer searchbox
gaoyu06 Jul 16, 2025
eab29f9
fix: some crash bug(simply remove because we dont use this temporarily)
gaoyu06 Jul 16, 2025
21da804
fix: clickgui position wrong when resizing window
gaoyu06 Jul 16, 2025
652c80a
fix: crash on some device because lua natives are not supported
gaoyu06 Jul 16, 2025
2a4df59
fix: don't allow user open dev gui if is not in dev mode
gaoyu06 Jul 16, 2025
48005cd
fix: compile error
gaoyu06 Jul 16, 2025
9425048
fix: completely fixed gui position
gaoyu06 Jul 16, 2025
c2f0ef4
feat: Language switch support
gaoyu06 Jul 16, 2025
fbfab1a
feat: background theme switch
gaoyu06 Jul 16, 2025
01ff8d6
fix: scroll container roll limit only work when hovered
gaoyu06 Jul 16, 2025
8dad614
feat: clientmate logo(WIP)
gaoyu06 Jul 16, 2025
093243a
fix: fix a render bug
gaoyu06 Jul 16, 2025
b8fa88f
fix: fix the bug of generateRoundImage
gaoyu06 Jul 16, 2025
8757b8e
fix: resize bug
gaoyu06 Jul 16, 2025
b5aa75c
remove: not used resources
gaoyu06 Jul 16, 2025
36101d3
fix: change round image generation
gaoyu06 Jul 16, 2025
9eab292
fix: color setting not render on some devices
gaoyu06 Jul 16, 2025
170bd9b
fix: something wrong...
gaoyu06 Jul 16, 2025
283dc9c
docs: misc
gaoyu06 Jul 16, 2025
235b5f6
feat(setting): Add spacing setting for InterfaceModule
TeAnli Jul 16, 2025
afe03c9
feat(KeyStrokes): fix excessive rounded setting and add spacing setting
TeAnli Jul 16, 2025
2d2986f
feat:add keystroke spacing language
TeAnli Jul 16, 2025
110dc01
Merge pull request #101 from TeAnli/v4
gaoyu06 Jul 17, 2025
177e461
fix: build
gaoyu06 Jul 17, 2025
e068233
Merge remote-tracking branch 'origin/v4' into v4
gaoyu06 Jul 17, 2025
813db86
fix: music player search
gaoyu06 Jul 17, 2025
30295a9
change: add some error messages
gaoyu06 Jul 17, 2025
ba62212
fix: compile bug
gaoyu06 Jul 17, 2025
43492a9
fix: draw client logo before tags that may not be nametag
gaoyu06 Jul 17, 2025
75af840
feat: add clientmate display
gaoyu06 Jul 17, 2025
80b9aa6
add: performance values registry
gaoyu06 Jul 17, 2025
eabd509
feat: clientmates
gaoyu06 Jul 17, 2025
fcc20aa
fix: wrong click through
gaoyu06 Jul 17, 2025
d9f3ab4
fix: a nullptr in reach display
gaoyu06 Jul 17, 2025
0e29668
fix: reachdisplay accuracy problem
gaoyu06 Jul 17, 2025
61b2a64
fix: logo doesn't show if health is not enabled in leveltag
gaoyu06 Jul 17, 2025
2b1d723
Add lyric animation setting and more component spacing (#102)
TeAnli Jul 17, 2025
aee2e98
feat: third person blocking animation
gaoyu06 Jul 18, 2025
34ce88c
feature: AutoGG module (#103)
TeAnli Jul 18, 2025
5ff612a
fix: add some exceptions handling
gaoyu06 Jul 18, 2025
2910799
fix: leveltag health duplicated render
gaoyu06 Jul 18, 2025
8bfb25b
fix: draw health of bots
gaoyu06 Jul 18, 2025
437f91f
fix: auto gg english doesn't work
gaoyu06 Jul 18, 2025
b58634a
feat: add a new style for target display
gaoyu06 Jul 18, 2025
f6307ef
fix: autogg
gaoyu06 Jul 18, 2025
50192e5
feat: add scaling for some components
gaoyu06 Jul 18, 2025
0d4c962
fix: optifine capes doesn't show
gaoyu06 Jul 18, 2025
44f11db
fix: skin changer doesn't update when reload world
gaoyu06 Jul 18, 2025
773e2a5
fix: possible memory leak
gaoyu06 Jul 18, 2025
b2d974a
fix: improve capability of RawInputMod
gaoyu06 Jul 19, 2025
db15dbf
feat: scoreboard support scaling
gaoyu06 Jul 19, 2025
1baaff8
fix: stuck when close client
gaoyu06 Jul 19, 2025
5874d53
feat: add move border limit to components
gaoyu06 Jul 19, 2025
acf15f3
feat: 指哪爆哪
gaoyu06 Jul 19, 2025
c4f2349
fix: duplicated play
gaoyu06 Jul 19, 2025
9e4fa2c
feat: cosmetics
gaoyu06 Jul 19, 2025
ed1fbc6
fix: support scroll to CosmeticScreen
gaoyu06 Jul 19, 2025
44efec6
fix: music skipping
gaoyu06 Jul 19, 2025
030a926
optimize: multi threads
gaoyu06 Jul 19, 2025
7236ea5
optimize: memory problem and shutdown nullptr
gaoyu06 Jul 19, 2025
eb64dff
feat: allow users see capes each other
gaoyu06 Jul 19, 2025
837ca76
fix: a display bug of scoreboard when scaled
gaoyu06 Jul 19, 2025
100892c
feat: support animated cloaks
gaoyu06 Jul 20, 2025
f675164
fix: possible sync bug
gaoyu06 Jul 20, 2025
3c8e565
bug fixes
gaoyu06 Jul 20, 2025
a19a6e6
feat: draw client icon in tab gui
gaoyu06 Jul 20, 2025
8c2304e
feat: chat switch button
gaoyu06 Jul 20, 2025
e1baa0d
change: chat switch button
gaoyu06 Jul 20, 2025
88adc4b
feat: recommended songs loading wouldn't stuck game now
gaoyu06 Jul 20, 2025
09e9ea6
misc: add missing lang
gaoyu06 Jul 20, 2025
14de044
fix: add via support
gaoyu06 Jul 20, 2025
79ace07
fix: a stupid issue
gaoyu06 Jul 20, 2025
7675903
Wavy Cape
vlouboos Jul 20, 2025
ab91712
feat: add wind effect
gaoyu06 Jul 20, 2025
98782b3
optimize: code quality
gaoyu06 Jul 20, 2025
d351c20
fix: memory leak
gaoyu06 Jul 20, 2025
8cd5ff6
fix: minimap thread has fucked shutdown
gaoyu06 Jul 20, 2025
198c61a
fix: hitboxes
gaoyu06 Jul 20, 2025
7e693dc
fix: crash when click clientchat if not logged in
gaoyu06 Jul 21, 2025
35da5a4
fix: load bug when cosmetic load failed
gaoyu06 Jul 21, 2025
f927087
change: crosshair default config
gaoyu06 Jul 21, 2025
a3d71d5
feat: keystrokes font color
gaoyu06 Jul 21, 2025
9b46d3e
fix: music player skipping songs
gaoyu06 Jul 21, 2025
b6fb5a0
feat: new music panel
gaoyu06 Jul 21, 2025
70879bf
feat: add some loading screen to music player
gaoyu06 Jul 21, 2025
035e8c3
fix: lyrics display width bug
gaoyu06 Jul 21, 2025
ff0e6a4
fix: lyrics display width bug (2)
gaoyu06 Jul 21, 2025
759f7d8
Revert "fix: lyrics display width bug (2)"
gaoyu06 Jul 21, 2025
b581495
fix: lyrics display width bug (2)
gaoyu06 Jul 21, 2025
9b7d417
feat: add game lag detection
gaoyu06 Jul 22, 2025
f1a3145
fix: reach display crash
gaoyu06 Jul 22, 2025
4e15450
fix: some render bug
gaoyu06 Jul 22, 2025
e920231
fix: add music login and potion texture dislocation (#106)
TeAnli Jul 22, 2025
729aaf7
Patch command
vlouboos Jul 22, 2025
009be41
Fold message
vlouboos Jul 22, 2025
78e52b3
New item count component and item multiple setting (#108)
TeAnli Jul 25, 2025
5a09a33
fix: music login
gaoyu06 Jul 25, 2025
25e8fcd
fix: music login
gaoyu06 Jul 25, 2025
58fe0e9
fix: delete test code (#109)
TeAnli Jul 25, 2025
3a93c5a
Optimize code
vlouboos Jul 25, 2025
adc0a42
Add delay for auto gg
vlouboos Jul 25, 2025
79085cd
Optimize
vlouboos Jul 25, 2025
157648f
fix: correct wrong name
gaoyu06 Jul 26, 2025
3041286
Merge remote-tracking branch 'origin/v4' into v4
gaoyu06 Jul 26, 2025
f1fd888
fix: hitboxes render bug
gaoyu06 Jul 28, 2025
7847c98
feat: music player volume adjustment
gaoyu06 Jul 29, 2025
9e4299c
optimize: render
gaoyu06 Jul 29, 2025
c1297b4
optimize code
gaoyu06 Jul 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
124 changes: 124 additions & 0 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
name: Java CI with Gradle - Nightly

on:
schedule:
- cron: '0 17 * * *'
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read

steps:
- uses: actions/checkout@v4

- name: Get latest commit hash
id: current
run: |
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT

- name: Get last published commit hash
id: last
run: |
last_sha=$(curl -s "https://service.fpsmaster.top/api/github/latest/commit?branch=${GITHUB_REF}")
echo "sha=$last_sha" >> $GITHUB_OUTPUT

- name: Check if new commit exists
id: check
run: |
if [ "${{ steps.current.outputs.sha }}" = "${{ steps.last.outputs.sha }}" ]; then
echo "No new commit since last build. Skipping."
echo "skip=true" >> $GITHUB_OUTPUT
else
echo "New commit detected. Continuing."
echo "skip=false" >> $GITHUB_OUTPUT
fi

- name: Stop if no new commit
if: steps.check.outputs.skip == 'true'
run: exit 0

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0
with:
gradle-version: '8.6'

- name: Build with Gradle Wrapper
run: |
chmod +x ./v1.8.9/gradlew
cd v1.8.9
./gradlew build

- name: Upload v1.8.9 artifacts
uses: actions/upload-artifact@v4.3.3
with:
name: v1.8.9
path: v1.8.9/build/libs/

- name: Upload artifact
run: |
cd v1.8.9

plain_version=$(awk -F'=' '/^version[[:space:]]*=/ {print $2}' gradle.properties | tr -d '[:space:]')
sha=$(git rev-parse --short=6 HEAD)
date=$(date -u +%Y%m%d)
version="${plain_version}-nightly-${sha}"
filename="fpsmaster-nightly-${date}.zip"

mkdir -p build/libs
cd build/libs

export JAR=$(find . -name "*.jar")
mkdir -p zip
cp "$JAR" zip/fpsmaster.jar
cd zip
zip -r "$filename" *

# 创建存储目录
RESPONSE=$(curl --location --request POST "https://api.kstore.space/api/v1/file/create" \
--header "X-GitHub-Event: workflow_run" \
--header "User-Agent: Apifox/1.0.0 (https://apifox.com)" \
--form "access_token=${{ secrets.OSS }}" \
--form "fileId=0" \
--form "name=action-${{ github.sha }}")

DIR_ID=$(echo "$RESPONSE" | jq -r '.data.id')
echo "DirectoryId: $DIR_ID"

# 上传文件
UPLOAD_RESPONSE=$(curl --location --request POST "https://upload.kstore.space/upload/$DIR_ID?access_token=${{ secrets.OSS }}" \
-F "file=@$filename")

DOWNLOAD_URL=$(echo "$UPLOAD_RESPONSE" | jq -r '.data.downloadUrl')
FILE_ID=$(echo "$UPLOAD_RESPONSE" | jq -r '.data.id')

echo "FileId: $FILE_ID"
echo "URL: $DOWNLOAD_URL"

# 设为直接下载
RESPONSE=$(curl --location --request POST "https://api.kstore.cc/api/v1/file/direct?access_token=${{ secrets.OSS }}" \
--form "fileId=$FILE_ID" \
--form "isDirect=1")

echo "$RESPONSE"

echo "$(date -u +%Y-%m-%dT%H:%M:%SZ)"

# 推送版本信息
curl --get \
--data-urlencode "key=${{ secrets.API_KEY }}" \
--data-urlencode "commit=${{ github.sha }}" \
--data-urlencode "branch=${{ github.ref }}" \
--data-urlencode "version=$version" \
--data-urlencode "date=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--data-urlencode "link=$DOWNLOAD_URL" \
--data-urlencode "release=false" \
"https://service.fpsmaster.top/api/github/push"
15 changes: 8 additions & 7 deletions .github/workflows/gradle.yml → .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
name: Java CI with Gradle

on:
push:
branches: [ "master", "v4" ]
pull_request:
branches: [ "master", "v4" ]
# push:
# branches: [ "master", "v4" ]
workflow_dispatch:

jobs:
build:
Expand Down Expand Up @@ -42,8 +41,10 @@ jobs:
run: |
cd v1.8.9

version=$(awk -F'=' '/^version[[:space:]]*=/ {print $2}' gradle.properties | tr -d '[:space:]')

plain_version=$(awk -F'=' '/^version[[:space:]]*=/ {print $2}' gradle.properties | tr -d '[:space:]')
sha=$(git rev-parse --short=6 HEAD)
version="${plain_version}-${sha}"

mkdir -p build/libs
cd build/libs

Expand Down Expand Up @@ -92,4 +93,4 @@ jobs:
--data-urlencode "date=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--data-urlencode "link=$DOWNLOAD_URL" \
--data-urlencode "release=false" \
"https://service.fpsmaster.top/pushVersion"
"https://service.fpsmaster.top/api/github/push"
55 changes: 10 additions & 45 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,61 +10,26 @@
FPSMaster 是一个免费、强大的 Minecraft PvP 客户端。

## 注意:
本分支是FPSMaster v4的开发分支,目前处于开发阶段,请勿在生产环境中使用。

如果你想参与到开发中,请查看以下注意事项:
1. SDK将逐渐迁移到java,尽量不要增加新的kotlin代码
2. 如果您要添加新的功能,请先在issue中提出,并进行讨论,避免您开发的功能与项目目标不一致
3. 请不要在生产环境中使用,除非你非常熟悉代码,并且知道自己在做什么。
4. 本分支的1.12.2版本代码暂时不会更新,因此使用1.12.2版本会报错是正常现象。
1. 如果您要添加新的功能,请先在issue中提出,并进行讨论,避免您开发的功能与项目目标不一致
2. 请不要在生产环境中使用,除非你非常熟悉代码,并且知道自己在做什么。
3. 本分支的1.12.2版本代码暂时不会更新,因此使用1.12.2版本会报错是正常现象。


### todo:
- [x] 完全迁移到Java
- [ ] 优化代码结构
- [x] 添加固定界面尺寸选项
- [x] 组件尺寸自定义
- [ ] 重构MusicPlayer界面
- [ ] 支持播放无损/VIP音乐
- [ ] 修复音乐可视化
- [ ] 添加脚本插件系统
- [ ] 添加界面自动对齐
- [ ] 添加翻译功能
- [ ] 迁移优化代码
- [ ] 自动更新
- [ ] 多语言界面
- [ ] 重写IRC模块
- [ ] 优化配置文件模块
- [ ] FPSMaster Intelligence
- [ ] HitMarker
- [ ] Waypoint
### 开发
- 查看我们的[代码规范](docs/code_standards.md)了解如何编写符合我们要求的代码。
- 查看我们的[环境配置](docs/development_environment.md)了解如何配置开发环境。
- 查看我们的[开发指南](docs/development_tutorial.md)了解如何使用我们的模块系统、配置系统等,并完成你的需求。
- 查看我们的[任务列表](docs/tasks.md)了解当前的开发计划和进度。


## 开源许可证
本项目采用 GPL-3.0 许可证。详情请参阅 [LICENSE](LICENSE) 文件。

特别声明:由于疏忽,自`c6a5edaac43fdcca8ce487eee430e9fb059a2db1`前所有版本的代码均错误地使用了MIT协议开源,现已更正为GPL-3.0。

## 开发环境配置
1. clone项目
2. Link Gradle Script
3. 将Idea的Gradle jdk版本设置为java17
4. 导入各版本gradle配置文件
5. 执行`gradle genIntelliJRuns`
6. 执行`gradle runClient`(这一步会执行downloadAssets等任务,可能因为网络问题失败)
7. 把生成的Minecraft Client启动配置的运行java版本改为java8(注意,不要改gradle的jdk版本配置)

可能遇到的问题:

- 运行`genIntelliJRuns`之后并没有出现启动配置,此时需要把生成的`.idea/runConfiguration`复制到`v1.8.9/.idea/runConfiguration`
- 生成的启动配置的vmargs参数中`v1.8.9/.gradle/loom-cache/launch.cfg`中的目录路径可能无法启动,需要手动改成绝对路径
- 生成的`v1.8.9/.gradle/loom-cache/launch.cfg`中的目录路径错误,这时需要手动修复
- APPDATA/.gradle/caches/essential-loom/assets/ 目录中的资源无法正常下载,此时可以其他地方复制一份1.8的assets目录过来



查看我们的[开发环境配置指南](docs/development_environment.md)了解如何配置开发环境。

![Alt](https://repobeats.axiom.co/api/embed/e686f6313e4406de4286bf27e0db4a2bf5a31b7f.svg "Repobeats analytics image")
![Alt](https://repobeats.axiom.co/api/embed/7d755c063aa9a34d74edb7045541e8bfe6e09b89.svg "Repobeats analytics image")

## 引用的开源项目:
[eventbus](https://github.com/therealbush/eventbus)
Expand Down
139 changes: 139 additions & 0 deletions docs/code_standards.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
# FPSMaster 代码规范

本文档概述了FPSMaster项目的代码标准和贡献指南。所有贡献者在提交代码时都应遵循这些标准,以确保代码库的一致性和质量。

## 代码风格指南

### 命名规范

1. 方法名、变量名和包名使用**驼峰式命名法(camelCase)**
```java
public void initializeModules() { ... }
private String clientVersion;
```

2. 类名和接口名使用**帕斯卡命名法(PascalCase)**
```java
public class ModuleManager { ... }
public interface EventListener { ... }
```

3. 常量使用**全大写蛇形命名法(UPPER_SNAKE_CASE)**
```java
public static final String CLIENT_VERSION = "v4";
```

### 代码组织

1. 按字母顺序组织导入并删除未使用的导入
2. 将相关方法分组放置
3. 保持方法专注于单一职责
4. 限制方法长度以提高可读性(建议控制在50行以内)
5. 使用适当的访问修饰符(private, protected, public)来加强封装性
6. 字段应放在类顶部,其次是构造函数,然后是方法

### 格式化

1. 使用4个空格缩进(不要用制表符)
2. 左大括号与声明放在同一行
```java
public void method() {
// 代码
}
```
3. 在`if`、`for`、`while`等关键字后使用空格
```java
if (condition) {
// 代码
}
```
4. 在运算符周围使用空格
```java
int a = b + c;
```

### 文档

1. 为所有公共类和方法添加JavaDoc注释
```java
/**
* 初始化模块系统。
* 此方法注册所有模块并设置事件监听器。
*/
public void initializeModules() {
// 实现
}
```
2. 为复杂代码段添加行内注释
3. 保持注释与代码变更同步更新

### 错误处理

1. 使用适当的异常处理
2. 避免空的catch块;至少应记录异常
```java
try {
// 可能抛出异常的代码
} catch (Exception e) {
ClientLogger.error("处理失败: " + e.getMessage());
}
```
3. 提供有意义的错误信息

### 最佳实践

1. 避免使用魔法数字;改用命名常量
2. 尽量减少静态字段和方法的使用
3. 遵循最小权限原则(使用尽可能严格的访问修饰符)
4. 避免代码重复;将通用代码提取为可重用方法
5. 根据任务选择合适的数据结构
6. 实现适当的空值检查以避免NullPointerException

## 测试要求

在提交pull request前,贡献者必须:

1. **测试所有受影响的功能**:确保变更不会破坏现有功能
2. **跨不同Minecraft版本测试**:如适用,验证变更在所有支持的Minecraft版本(1.8.9, 1.12.2等)上都能正常工作
3. **测试边界情况**:考虑并测试边界条件和异常输入
4. **性能测试**:对于性能关键代码,验证变更不会对性能产生负面影响

### 测试清单

- [ ] 测试变更的主要功能
- [ ] 验证变更不会破坏现有功能
- [ ] 在所有适用的Minecraft版本上测试
- [ ] 考虑并测试边界情况
- [ ] 验证性能影响(如适用)
- [ ] 检查测试过程中是否有控制台错误

## Pull Request指南

提交pull request时:

1. **描述你的变更**:清晰说明PR做了什么
2. **引用相关问题**:链接到PR解决的所有相关问题
3. **保持变更专注**:每个PR应只解决一个关注点
4. **遵循代码风格**:确保代码遵循项目的代码风格指南
5. **更新文档**:更新变更影响的所有相关文档

### PR清单

- [ ] 代码遵循项目的代码风格指南
- [ ] 测试所有相关模块
- [ ] 文档已更新(如适用)
- [ ] PR只解决一个关注点
- [ ] PR引用了相关问题

## 贡献流程

1. **Fork仓库**:创建项目的个人fork
2. **创建分支**:在新分支中进行变更
3. **实现变更**:开发功能或修复
4. **测试变更**:确保所有测试通过且变更按预期工作
5. **提交pull request**:从你的分支向主仓库创建PR
6. **处理评审反馈**:根据代码评审要求进行修改

## 结语

遵循这些指南有助于保持FPSMaster项目的代码质量和一致性。感谢您的贡献,感谢您帮助FPSMaster变得更好!
27 changes: 27 additions & 0 deletions docs/development_environment.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# 配置开发环境

## 准备工作
1. Git
2. JDK 1.8
3. JDK 17
4. IntelliJ IDEA Community / Ultimate

## 配置项目

1. clone项目
2. Link Gradle Script
3. 将Idea的Gradle jdk版本设置为java17
4. 导入相应版本gradle配置文件
5. 执行`gradle genIntelliJRuns`
6. 此时并不会出现启动配置,此时需要把生成的`v1.8.9/.idea/runConfiguration`复制到`.idea/runConfiguration`,随后重新打开项目即可识别

### 可能遇到的问题:

- 生成的启动配置的vmargs参数中的目录路径可能无法正确识别,需要手动改为正确路径或绝对路径
- 生成的`v1.8.9/.gradle/loom-cache/launch.cfg`中的目录路径错误,这时需要手动改为正确路径或绝对路径
- `APPDATA/.gradle/caches/essential-loom/assets/` 目录中的资源无法正常下载,此时可以其他地方复制一份1.8的assets目录过来

## 启动项目

直接在IDEA的运行配置中选中Minecraft Client,并且将运行java版本改为jdk 1.8(注意,不要改gradle的jdk版本配置)

Loading
Loading