
ItemRacing 插件开发小记

前言
前阵子有段时间迷上了 BlockRacing, 这是一个红蓝两队收集方块竞速的小游戏. 这个小游戏的创意真的很棒, 但在游玩过程中, 我发现它的一些机制有些不太符合我的想法:
- 只有红蓝两个队伍, 不允许只有
个队伍或者多于 个队伍. - 方块库需要靠玩家手动维护, 且有些方块的收集难度评定不合理.
- 普通模式太坐牢, 而疾速模式不够 “疾速”, 如果能由玩家自由选择 buff 效果 和开局物品就更好了.
- 中途加入的玩家需要管理员用
debug
命令加入, 且还要玩家退出重进才能生效, 有点麻烦. - 部分玩家遇到掉线后物品栏被清空的 bug, 非常影响游戏体验.
- 很多东西被硬编码了, 比如可 Roll 次数、初始定位次数和传送次数等等.
因此, 我原计划是 fork 原来的 BlockRacing 项目进行修改, 但是…
- 我不会 Java, 更不会 Bukkit API.
- BR项目中队伍是硬编码 的, 光是要解决第一个队伍问题, 就需要重构整个项目.
总之, 直接改代码是不可能的, 想解决上述问题, 我需要自己搓一份代码.
这可能吗?
正好, 我的程序设计实践课大作业的选题之一是 “做一个自己喜欢的小游戏”, 且 “最好能有 AI 元素”, 我寻思说不定我真能让 AI 帮我搓一份插件出来呢? 在试探了一下 Gemini 2.5 Pro 后, 我发现这个想法是完全 feasible 的, Gemini 2.5 Pro 是真的手把手教学啊, 从新建项目到如何打包, 从提供思路到代码实现, 它全部都能很好地完成, 只要我把我的想法给它, 告诉它 “我准备好了”, 它马上就能搞定我的需求.
展开图片
于是, 我就决定开发ItemRacing这样的BR-like小游戏插件.
本篇文章相当于整个开发过程的记录.
0. 准备工作
工欲善其事, 必先利其器.
按照 Gemini
的流程, IDE 要使用 IntelliJ IDEA
(vscode
应该也行, 但我不会配置, 而且可能挺麻烦, 不如就用 IDEA
), 当然我是买不起 IntelliJ IDEA
的, 所以需要白嫖 学生认证, 但这一步又遇到了些问题, 我的学校邮箱被拉黑了, 无法使用教育邮箱认证, 不过我已经通过了 GitHub 学生认证, 只要把 GitHub 绑定的学校邮箱删掉, 就能用 GitHub 认证 IDEA 了.
下载安装 IDEA 后, 先装一个主题插件, 再按 Gemini 要求的装个 Minecraft Development
插件, 准备工作就算完成了.
这些看起来像废话, 所以算第 0
步.
1. 确定开发计划
我的设想大概有这些的:
- 服主可自由设置队伍数量、队伍名称、队伍颜色.
- 手动维护方块库感觉太蠢, 直接改成在生存可获取的所有物品里随机分配就行了, 且只要初始的 增益物品和 buff 给到位, 就可以扔掉难度机制 (buff + 抢夺Ⅲ 加持下, 不会速通的萌新也能
25 min
内解放末地). - 轮换次数、初始随机传送和定位次数、每个物品得分、传送和定位消耗等全部交由服主设置, 大大提高了玩家的自由度.
- …
在我把需求告诉 Gemini 后, Gemini 马上列出了初步的开发计划:
展开图片
想法和计划都确定了, 就可以开始 Ctrl CV
了.
2. Gemini 搭框架, 我是躺赢狗 (多图预警)
接着就是最重要也是最耗时的一步: 抄 Gemini 的代码.
虽然我不会写Java, 但只是读个代码逻辑的话, 我还是会的.
在这一步遇到了不少问题:
- Gemini 生成的代码并非完美无瑕, 经常把代码粘贴进编译器后就出现一堆警告, 需要我手动把警告信息复制给它, 让它修复. (主要还是因为
Bukkit API
弃用的方法太多了.)
展开图片
- 我经常在它生成完代码后调整需求.
展开图片
- 需求的变动意味着要重构一堆文件.
展开图片
- 时不时就要停下来思考具体解决方案.
展开图片
- 由于是包含几十个文件的工程, 很容易就遗漏部分文件的同步.
展开图片
- 一些很难从代码层面发现的 bug.
展开图片
- 在后期, 随着对话轮数的不断增加, Gemini 开始答非所问, 于是我开始自己完成最后的收官工作. (读了这么多 AI 的代码还不会写的话就有点过分了.)
展开图片
- 另外, 我也是在超高强度的使用 Gemini 2.5 Pro 后才知道它是有使用限制的…
3. 自己动手, 丰衣足食
到了后期, Gemini 罢工了, 那就只能我自己来写代码了. 这个时候写代码就比从头开始写容易太多了:
- Gemini 已经把整个插件的大致框架都搭建好了.
- 通过读 Gemini 提供的代码, 就算原本不会 Java 、 Bukkit API 、 paper 插件的架构 现在也该知道怎么写了.
我只需要实现亿些细节:
- 提示信息和计分板样式、音效之类的零碎工作.
- 重构和实现部分重要函数: 参考 BlockRacing 实现了随机传送, 但 IR 不会像 BR 一样把人传送到海里; 实现了 Gemini 写不出来的 随机生成物品列表与物品完成的判定; 等等…
- 依照自己想法修改或添加功能: 比如队伍聊天、游戏重启、游戏开始后再加入队伍等等…
- 修一堆 bug: 如计分板的 Rotate 模式展示间隔不对、命令无法自动补全等等…
- …
然后, 还需要反复打包测试各个功能, 确保插件的运行符合预期. (每次测试都能发现 bug 实在是太难绷了, 感觉根本修不完 QAQ …)
然后, 还要请大家挤出宝贵的时间陪我玩这个辣鸡插件 QwQ.
4. 小结
项目概况
整个项目含
以下是 WakaTime 的统计, 只统计了第一周的 IDEA 打开时间:
展开图片
一点感想
接着谈谈我的一点随想吧.
这是我这个编程萌新第一次使用 Java、 第一次体验完整开发的过程. 如果放在几年前, 我能在一周之内, 从 Java 零基础到搓出一个ItemRacing插件, 那我就得赶紧从梦里醒来了. 而今, 在 AI 的加持下, 我真正做到了 “不会编程” 也能搓出一个项目, 如果后期Gemini没有罢工, 或者我一开始就选择了比Gemini更强力的工具(肯定是有的), 那做到 “一行代码都不写” 就实现一个功能复杂的插件恐非不可能之事. 一方面有 AI 这样的得力助手强势加持开发, 毫无疑问会大大简化不少繁琐复杂的工作, 另一方面 AI 如此大幅降低开发的门槛, 我这样码力低下的菜狗恐怕得做好随时被淘汰的觉悟了 QAQ .
接着聊聊这个项目.
我自己认为, 这个项目算是挺成功的, 抛开代码质量不谈 (因为我也看不出代码质量如何), 至少插件在经过Gemini的框架构建以及我的修修补补后, 是能够正常工作的, 游戏内容也完全符合我的预期.
当然, 对于资深开发者来说, 用 taboolib
这样的轮子或许能轻松搞定这些功能, 这样的游戏插件完全不值一提. 但对我而言, 此次开发的收获, 远远不止一个能运行的插件. (这意味着我的黑历史要++了)
尽管这个项目不管是技术上还是创意上都没有任何惊天动地的创新, 但它是我的第一个大作业, 也是第一个较为完整的作品项目, 所以我决定将它开源, 或许真有人喜欢这个小游戏插件呢?
项目地址: https://github.com/Coast23/ItemRacing
Anyway, 如果你喜欢这个项目, 欢迎 Star⭐ 或者 Fork, 也欢迎大家呼朋唤友来帮忙找bug玩. 如果发现了BUG(包有的), 请提交Issue, 我会尽我所能修复.
- 标题: ItemRacing 插件开发小记
- 作者: Coast23
- 创建于 : 2025-07-06 19:11:00
- 更新于 : 2025-07-09 14:18:59
- 链接: https://coast23.github.io/2025/07/06/ItemRacing-插件开发小记/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。