この記事はMinecraft 1.18以前でModを開発したことがあるが、1.19以降のMixinの設定でbuild.gradle
をみて、戸惑った人向けです
Modを作ったことがない人向けではありません
前提知識
- Mixinを設定してあげることで、新しい要素を追加するだけでなく、元々のMinecraftのコードを改造したような機能も実装できる
- Minecraft ForgeではJava向けビルドツールであるGradleを使って、依存関係やタスクを管理している
問題
Mixinの公式ドキュメントをみると、設定の方法が3ステップで書かれており、1.18以前では、手元のbuild.gradle
をコピペしながら変更するだけで設定できる
しかし1.19以降で同じように進めていこうとすると、第1ステップで手が止まる(第2, 3ステップは今まで通りでいける)
公式ドキュメントには、
buildscript {
repositories {
...
}
dependencies {
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true
// MixinGradle:
classpath 'org.spongepowered:mixingradle:0.7.+'
}
}
...
apply plugin: 'net.minecraftforge.gradle'
apply plugin: 'eclipse'
apply plugin: 'maven-publish'
// MixinGradle:
apply plugin: 'org.spongepowered.mixin'
...
のようにbuild.gradle
のbuildscript
とapply plugin
に追加しろと書かれているが、
Forgeからダウンロードしてきた、MDKのbuild.gradle
をみると、それらしいところはなく、
plugins {
id 'eclipse'
id 'maven-publish'
id 'net.minecraftforge.gradle' version '5.1.+'
}
...
というbuildscript
とapply plugin
の間をとったような数行が書かれているだけである
似ているからといって、plugins
にそれっぽくid 'org.spongepowered.mixin'
やid 'org.spongepowered:mixingradle:0.7.+'
、id 'org.spongepowered:mixingradle' version '0.7.+'
と書いたところでエラーが出るだけで何も動かない
原因
調べたところ、プラグインの書き方は2通りあるらしく、1.18以前はbuildscript
+apply plugin
という古い書き方だが、1.19以降はplugins
という新しい書き方らしい
参考:エキサイトTechBlog -build.gradleのbuildscript、plugins、dependenciesの違いについて-
解決方法
もちろんplugins
のところを丸々buildscript
+apply plugin
に置き換えれば動くが、せっかく新しい書き方が使われているので、そのやり方で書くために調べたところ以下のサイトが参考になった
参考:Stack Overflow -How can the gradle plugin repository be changed?-
参考サイトによると、build.gradle
だけではなくsettings.gradle
も変更する必要があるらしい
plugins {
id 'eclipse'
id 'maven-publish'
id 'net.minecraftforge.gradle' version '5.1.+'
id 'org.spongepowered.mixin' version '0.7.+'
}
...
pluginManagement {
repositories {
gradlePluginPortal()
maven { url = 'https://maven.minecraftforge.net/' }
maven { url = 'https://spongepowered.org/maven/'}
}
resolutionStrategy {
eachPlugin {
if (requested.id.id == 'org.spongepowered.mixin') {
useModule('org.spongepowered:mixingradle:0.7.+')
}
}
}
}
なぜsettings.gradle
の変更が必要かというと、org.spongepowered.mixin
は外部プラグインなので、プラグインを取得してくる場所を指定してあげる必要があるからである
とにかくこれで正しくなったので、Mixinの公式ドキュメントの残りのステップの設定をしたらMixinは使えるようになるはずである