たくさんの自由帳
Androidのお話
たくさんの自由帳
投稿日 : | 0 日前
文字数(だいたい) : 7947
目次
本題
環境
Minecraft 1.17
読まなくていい Java有償化の話
Oracle JDK 有償化の話の続き 2021/10/06 追記
Java 16 を入れる
追記:2021/07/28 JAVA_HOMEの設定
IDEAを入れる
テンプレートをクローン
そううまく行かない
Could not merge JARs! Deleting source JARs - please re-run the command and move on.
You are using an outdated version of Java (8). Java 16 or higher is required
プロジェクトの設定
IDEAの設定
1.17 Fabric
MOD情報の変更
Javaのパッケージ名修正
ExampleMod.kt のファイル名修正
MOD情報の修正
よくわからんけど Mixin も修正
起動してみる
アイテムを追加してみる
テクスチャ
おまけ クリックまな板みたいにクリックしたら増えるように
ソースを読めるようにする
配布可能ファイルを生成する
エンドユーザー向けの説明とか
ソースコード
追記:2021/07/28 1.17.1への対応
終わりに
どうもこんにちは。
ハジラブ -Making*Lovers-(Making*Lovers フルHDリマスター付き)予約しました。月末が楽しみですね。
TwitterでForgeより快適と聞いて。
しかもKotlinでModdingができる!!!
| なまえ | あたい |
|---|---|
| IDE | Intellij IDEA 2021.1.2 Community Edition |
| Windows | 10 Pro (そういえば発表会があるんだっけ?いい加減設定がコンパネと散らばってんのどうにかしてほしい) |
| Minecraft | 1.17 (1.7.10と空目しないで) |
| Java | 16(後述) |
| 言語 | Kotlin |
調べた感じ、Extra UtilitiesにあったDark Glassがバニラに逆輸入?されたみたい。TTの監視で使えそう。
技術的な話をするとJava 16以上が必要です。JDKの有償化よくわからんけどAdoptOpenJDKの方なら多分大丈夫。
ついにJavaのModdingでも型推論が(使っていいのかはよくわからん)(というかRecordも使えるようになったのかええやん)(てかそもそも今回はKotlin使うから別に)
多分間違ってる気がするのでチラシの裏的な感覚で
どうやら、Java 17からOracle JDKが無償提供されるようになりました。再び無償化。
まーたややこしくして何がしたいんや...
というわけでJava 17以降はOracle JDK使っても大丈夫になりました。でも今の所オラクル以外のJDKでやって行けてるのでそのまま行こうと思います。
AdoptOpenJDKを入れます。
Adoptium
Eclipse Adoptium provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure.
https://adoptium.net/
OpenJDK 16 (Latest)と、HotSpotのラジオボタンを選んでLatest releaseを押してダウンロードしましょう。インストールはまあ適当に進めてください。(画像ない)
一応Java 16がインストールできたか確認するために、コマンドプロンプトとかで、javac -versionを叩きます。javac 16.0.1が帰ってくればおk
javac -versionjavac 16.0.1なんか久しぶりにやったらまだJava8使ってんのかよって言われたので直します。
環境変数の設定開いて、システム環境変数の中からJAVA_HOMEを選んで、AdoptOpenJDKのパスを設定します。
入れておいてください。Community Editionでいいです
IDEAのスタート画面から、Get from VCSを押して、いかのURLを指定してCloneします。
プロジェクトを信頼するか聞かれるのでTrust projectを押してください。
gradle.propertiesを開いて、loom_versionを0.8にします
右上のFileからProject Structureを選択して、Project SDKを16に、Project language levelも16にします。
適用したら、このボタンを探して押します。
ボタンが見つからない場合はIDEAの右上にある?Gradleを押して、Syncボタンを押してもいいです。
これで終わればいいんですが、これでも同じエラーで進めないときがあります。
右上のFileからSettingsを選択して、Build,Execution,Deploymentを押し、Build Toolsを押し、Gradleへ進み、Gradle JVMを16にしてみてください。できたらさっきみたいにボタンを押します。
うまく行けば処理が進みます。私の環境では10分ちょっとかかった。Gradle Buildが終わったら一旦IDEAを閉じます。その後もう一度起動するとマイクラのクライアントが起動できるようになります。
早速再生ボタンみたいなやつを押して起動してみましょう。
(私だったら)起動直後設定へ進みBGMを0にします。うるさいし
gradle.propertiesを開いて、以下の内容を変えます
| なまえ | あたい |
|---|---|
| maven_group | 自分の持ってるドメインを逆から。持ってないならGithub Pagesとか他とかぶらない文字列 |
| archives_base_name | MODのID(小文字) |
私ならこんな感じ?
#Fabric api
fabric_version=0.34.10+1.17
loom_version=0.8-SNAPSHOT
# Mod Properties
mod_version = 1.0.0
maven_group = io.github.takusan23
archives_base_name = clickmanaitaまた、fabric_version等は、以下のサイトから更新があるか確認できるので見てみるといいと思います。
IDEAのProject(ファイルが表示されてるところ)からnet.fabricmc.exampleを選択状態にして、Shift押しながらF6を押します。
押したらRename Packageを選び、ドメイン名(逆から)+MOD名小文字 を入力します
続いてresourcesの方も修正します。同じようにassets.modidを選択状態にして、Shift押しながらF6を押します。
そしたら先程入力したMODのIDを入力すればいいです。
なんか残ってるnet.fabricmcってのは多分消して大丈夫です。
こうなっていればおk
味気ないのでMOD名.ktとでもしておきましょう。名前変更は先程と同じです。
resourcesの中にあるfabric.mod.jsonを開きます。
開いたら、modid、entrypoints.mainの部分を最低限書き換えておけばいいと思います。
"id": "clickmanaita",ドメイン(逆から).MODのID.ExampleMod.ktだったファイル名Kt::init
クラス名+Kt、Ktを付けないとダメっぽい。
"entrypoints": {
"main": [
"io.github.takusan23.clickmanaita.ClickManaitaKt::init"
]
},あとアイコンのところのmodidもさっき変えちゃったので直しといてください。
その他は各自好きなように。以下例
{
"schemaVersion": 1,
"id": "clickmanaita",
"version": "${version}",
"name": "ClickManaita",
"description": "CheatMod",
"authors": [
"takusan_23"
],
"contact": {
"homepage": "https://www.curseforge.com/minecraft/mc-mods/clickmanaita",
"sources": "https://github.com/takusan23/ClickManaita2"
},
"license": "Apache-2.0 License",
"icon": "assets/clickmanaita/icon.png",
"environment": "*",
"entrypoints": {
"main": [
"io.github.takusan23.clickmanaita.ClickManaitaKt::init"
]
},
"mixins": [
"modid.mixins.json"
],
"depends": {
"fabricloader": ">=0.8.7",
"fabric": "*",
"fabric-language-kotlin": "*",
"minecraft": "1.17.x"
},
"suggests": {
"flamingo": "*"
}
}resources内のmodid.mixins.jsonを開いて、packageの部分を直します。これなんなの?ドメイン.MODのID.mixin
{
"required": true,
"package": "io.github.takusan23.clickmanaita.mixin",
"compatibilityLevel": "JAVA_8",
"mixins": [
],
"client": [
"ExampleMixin"
],
"injectors": {
"defaultRequire": 1
}
}これで起動するはず。多分
この通りにやってみる
まずアイテムクラス(Kotlinだしobjectでもいいわ)を作ります。
object ClickManaitaItem {
/** 特になんの機能もないアイテム */
val CLICKMANAITA_WOOD = Item(FabricItemSettings().group(ItemGroup.TOOLS))
}そしたらExampleModKtだったファイルを開いて、init関数内でアイテムを登録します。
@Suppress("unused")
fun init() {
// This code runs as soon as Minecraft is in a mod-load-ready state.
// However, some things (like resources) may still be uninitialized.
// Proceed with mild caution.
// アイテム追加。clickmanaita_woodのところはアイテムID
Registry.register(Registry.ITEM, Identifier("clickmanaita", "clickmanaita_wood"), ClickManaitaItem.CLICKMANAITA_WOOD)
}そしたら起動してみましょう。
画面のようにアイテムが追加できていれば成功。
画像ファイルを用意します。用意できたら、resources/assets/MODのID/textures/item/アイテムID.pngって感じで置きます。
そしたら今度は、resources/assets/MODのID/models/item/アイテムID.jsonって感じでJSONファイルを作成します。
中身はこうです。
{
"parent": "item/generated",
"textures": {
"layer0": "clickmanaita:item/clickmanaita_wood"
}
}modのID:item/アイテムのIDって感じですね。このテキスチャ指定まじでややこしいからやめてほしい。
というかJSONは人間が書くもんじゃないだろ。本当に
成功してました。失敗してたらまじでつらい
そのためにはItemクラスを継承する必要があります。のでClickManaitaBaseItemみたいなクラスを作成します。
/**
* 右クリックしたらアイテムが増えるアイテムを追加する
*
* @param settings クリエタブとか
* @param dropSize 増える数
* */
class ClickManaitaBaseItem(settings: Settings?, private val dropSize: Int = 2) : Item(settings) {
}そしたらuseOnBlockメソッドをオーバーライドします。多分これがブロックを右クリックしたときに呼ばれる関数です。
/**
* ブロックを右クリックしたときに呼ばれる関数
* */
override fun useOnBlock(context: ItemUsageContext?): ActionResult {
val world = context?.world
val state = world?.getBlockState(context.blockPos)
val copyBlock = state?.block
repeat(dropSize) {
copyBlock?.afterBreak(world, context.player, context.blockPos, state, null, context.stack)
}
return ActionResult.SUCCESS
}そしたらItem()の部分をClickManaitaBaseItem()に書き換えて実行してみると
object ClickManaitaItem {
/** 右クリックしたらアイテムが増える */
val CLICKMANAITA_WOOD = ClickManaitaBaseItem(settings = FabricItemSettings().group(ItemGroup.TOOLS), dropSize = 2)
}増えます。まだチェストの中身とかは増えないのでまだまだって感じですかね。
Minecraftのソースを読めるようにします。IDEAには逆コンパイラーが搭載されているのでなくても最悪いいですが、検索機能が使えないのでソースを生成しといたほうがいいと思います。
IDEAのGradleを押して、Tasks > fabric > genSources をダブルクリックすることで生成されます。
その後、適当にBlockクラスとかを参照した際に、上に出てくるChoose Sources...を押して、なんとか-sources.jarを選択することで生成したソースを読むことができるようになります。
Shift+Ctrl+Fの検索機能も開放されました。
IDEA右上のGradleから、Tasks>buildへ進みbuildを選択することで配布可能なJarファイルを生成します。
成功すると、build/libs/に生成したファイルが有るはずです。(dev、sources、sources-dev じゃない方)
あとはこのJarファイルをCurseForgeとかで公開すればいいんじゃない?
このModはFabric導入後、modsフォルダに以下のファイルをダウンロードして放り込んでおく必要があります。
Fabric Language Kotlin
Fabric language module for Kotlin 58.2M Downloads | Mods
クローンしたあとブランチ名「1.17-fabric」をチェックアウトしてください。一発でビルド通らないと思う。
git使ってる場合はコミットするなりブランチ作るなりして現状の環境壊れても大丈夫な状態にしてください。
使ってなければどっかにバックアップしておけばいいのでは
以下一例 (なんかコードブロックの言語にproperties指定したらシンタックスハイライト動いててちょっと感動)
kotlin.code.style=official
org.gradle.jvmargs=-Xmx1G
# Fabric Properties
# Check these on https://modmuss50.me/fabric.html
minecraft_version=1.17.1
yarn_mappings=1.17.1+build.31
loader_version=0.11.6
#Fabric api
fabric_version=0.37.1+1.17
loom_version=0.8-SNAPSHOT
# Mod Properties
mod_version = 1.0.0
maven_group = io.github.takusan23
archives_base_name = clickmanaita
# Kotlin
kotlin_version=1.5.0
fabric_kotlin_version=1.6.0+kotlin.1.5.0これで後はMinecraft Clientを起動するだけで1.17.1へ対応できました。
マイナーアップデートなのでクラスの変更とか無いけど大型アップデートならそううまく行かないと思う。
いつもAndroidで書いてるKotlinでModdingできるので快適。Fabricへ移植したいから会社辞めたい。
そういえば私のマイクラ全盛期はナポアンのマイクラが最新Ver追いかけてたけどあのサイトどうなってんの?