我是如何開發一款支援IDEA、PyCharm、Android Sutdio 等JB全家桶的摸魚外掛的

风的姿态發表於2024-09-25

公眾號「古時的風箏」,專注於後端技術,尤其是 Java 及周邊生態。

個人部落格:www.moonkite.cn

大家好,我是風箏

前些天做了一款支援 Jetbrains 大部分 IDE 的摸魚外掛- 一款IDE摸魚外掛,沒想到出乎意料的沒什麼人用,當初說 VsCode 裡面的養寵物的外掛時,一大堆人問 IDEA 裡有沒有、PyCharm 裡有沒有,那些人呢,上哪兒去了。

沒人用就沒人用吧,反正也不是什麼正經東西。

今天就來說說這個外掛是怎麼開發的。原始碼已經放到 GitHub 上了 https://github.com/huzhicheng/moon-drak-factory

背景說明

之前是看到 VsCode 上有一個小外掛,叫做 VsCode Pets ,就是在左下角小視窗養寵物的一個外掛。

感覺很有意思,就發了一篇文章推薦了一下,沒想到感興趣的人特別多,就出現了開頭說的那個場景,有人沒 IDEA 版的有沒有、PyCharm 版的有沒有。

我一看,呦呵,需求還挺廣泛,一搜 Jetbrains 外掛商店,有是有一個,但是稍微有些簡陋。

一看這功能,也不是很複雜,我就說做一個吧。正好 VsCode Pets 是開源的,程式碼雖然不能複用,但是裡面的素材可以直接拿過來用。

開發過程

首先說,Jetbrains 外掛開發我是不會的,即便現在開發完了,也只是瞭解了原理。

Jetbrains 外掛開發有兩種方式,一種是用 Kotlin,另外一種使用 Java,Kotlin 是目前推薦的方式,但是很顯然,我是不會的,所以就選擇使用 Java 了。

在 IDEA 中,新建專案的時候就有一個是 IDE Plugin 型別的,專門用來做外掛開發的。

最開始我打算照著官方文件來做的,但是我一看官方文件的內容著實有點多。轉頭一想,我只是要做個外掛,而不是學怎麼做外掛,所以說就直接開始做了。

之所以有這個底氣是以為有 Cursor,這個IDE註冊後有15天的免費試用期,我當時已經用過幾天了,發現它它使用的 claude-3.5-sonnet模型寫程式碼非常厲害,基本上直接執行只需要微調就可以了,所以我就想趁著試用期結束做一個出來,也實地驗證一下 Cursor 是不是值得買。

我這個外掛做了一個週末,外加好幾個晚上,基本上每個晚上都到 12點吧,完完整整加起來怎麼也得有40個小時,這可是一週的工作時間啊,結果還沒人用,可惜了。

核心邏輯

這個外掛的核心功能有兩個:

1、 在小視窗(預設左下角)建立一個皮膚,然後在皮膚上控制 gif 圖片的切換和移動,附帶著增加元素、切換背景、自定義背景、清除皮膚這些功能;

2、實現打擾程式設計模式,就是在一堆 gif 圖片中隨機選中一張,然後顯示在 IDE 的一個隨機位置,執行3秒內的一個隨機時間後消失;

所以這樣看來,困難的地方在於如何在左下角建立一個皮膚,並且給皮膚加上操作按鈕,相對來說,控制 gif 圖片的移動、切換這就是比較簡單的了。

之所以困難,是因為我完全不知道外掛開發的規則,顯然這些規則都是明確規定好的,只要照著做就好了,但是熟悉這些規則最大的問題就是需要時間,而我又不想花這個時間。

這時候看出 AI 的核心價值了,可以迅速補齊你的短板,提高你的開發效率。而不是完完全全替你寫程式碼。看到有些人發的一些短影片說「一點兒程式設計基礎都沒有,純靠AI做了一個xxxxxx產品」。這純粹就是胡說八道,忽悠忽悠外行還可以,一點程式設計基礎都沒有的人不可能完全靠 AI 做一個產品出來。

幾個關鍵要素

Gradle 型別的專案

基本上用 IDEA 建立好專案後就可以開發了,專案預設是 Gradle 型別的。你只要關心 build.gradle.kts這個配置檔案就可以了,其他的不用管。在這裡面配置包名、版本號和版本支援資訊。

如果你功能簡單的話,甚至完全不需要引用外部依賴,如果有的話,也是在這個檔案中新增。我這個外掛唯一引用的外部依賴就是 Gson,因為有一些配置內容要讀取和儲存使用的 JSON 格式。

dependencies {
  implementation("com.google.code.gson:gson:2.8.9")
}

plugin.xml

resouces/META-INF/plugin.xml這個檔案相當於一個規約宣告檔案,你要在什麼地方建立 ToolWindow ,在什麼地方建立選單,以及一些初始載入的服務類,都在這個檔案中定義。

下面就是定義左邊小視窗的配置,還有兩個初始載入服務類,就跟 Spring 裡依賴注入的服務差不多,外掛一啟動,這兩個服務類就被例項化好了。

<extensions defaultExtensionNs="com.intellij">
	<toolWindow id="DarkFactory" secondary="true" icon="/icons/pluginIcon.png" anchor="left"
				factoryClass="com.moonkite.moonpets.MoonPetsToolWindowFactory"/>
	
	<projectService serviceImplementation="com.moonkite.moonpets.PetService"/>
	<projectService serviceImplementation="com.moonkite.moonpets.config.MoonPetsState"/>
</extensions>

下面是在 Tools選單項中加入黑工廠:打擾模式這個選單項。

  <actions>
    <action id="ShowPet" class="com.moonkite.moonpets.ShowPetAction" text="黑工廠:打擾模式" description="開啟打擾模式後,會隨機在IDE中出現動畫元素">
      <add-to-group group-id="ToolsMenu" anchor="last"/>
    </action>
</actions>

剩下的部分就是在具體的 Java 類中實現邏輯了。

另外這裡面還可以定義外掛支援的版本範圍,下面這個外掛支援的版本區間,從 2022.2 到 2024.2 這個範圍內都可以。

<idea-version since-build="222" until-build="242.*" />

還有一個 <description>,就是安裝外掛時顯示的介紹資訊。如果你之後有釋出外掛的計劃,這地方要注意一下,描述的第一行不能是中文,必須是英文,要不然稽核不透過。

素材

AI 省去不少寫程式碼的時間,但是素材它沒辦法搞定啊。

我開始打算直接把 VsCode pets 中的素材照搬過來,命名規則就是從那裡過來的,因為這樣最省事了。

後來感覺一堆動物比較單調,就想加一點其他的。這才有了拳皇背景和幾個拳皇人物。我找了差不多完整的拳皇97素材圖。背景還好說,直接就能用,但是人物不行,人物動作太多了,為了延續寵物運動的邏輯,所以要統一命名規則,然後就開始在一堆素材中挑幾個動作圖,包括走、跑、跳、攻擊招數,挑好後改名,然後寫到預設配置檔案中。

因為太麻煩了,所以現在只有5個人物,分別為八神庵、草薙京、不知火舞、坂崎良、布魯·瑪麗,剩下嫌麻煩還沒加。

本來還想弄點超級瑪麗、魂鬥羅之類的,後來想想還是算了。

就這麼說吧,搞素材這事兒可比寫程式碼難受多了,就跟程式設計師不願意寫文件一個道理,懂的都懂。

最後

雖然說沒什麼用,但是開發過程還是很好玩兒的,尤其是有了 AI 的幫助,讓之前很多不能做,或者做起來要花很多時間的產品能夠很快的被做出來。

不是有人說嗎,之後各個應用商店的提交量應該會變大,因為開發一款產品變得簡單了。

還是要說一下,各位摸魚的時候可以下載體驗一下這個「黑工廠」外掛。 外掛商店直接搜 『Dark Factory』就可以了。

原始碼在 https://github.com/huzhicheng/moon-drak-factory

還可以看看風箏往期文章

我做了一款網頁 AI 效率外掛

為什麼我每天都記筆記,主要是因為我用的這個筆記軟體太強大了,強烈建議你也用起來

「差生文具多系列」最好看的程式設計字型

我患上了空指標後遺症

一千個微服務之死

搭建靜態網站竟然有這麼多方案,而且還如此簡單

被人說 Lambda 程式碼像屎山,那是沒用下面這三個方法

相關文章