CoreModTutor
  • 源代码仓库(求star)
  • 目录
  • 0 绪论
  • 1 简介
    • CoreMod
    • Minecraft混淆方式
  • 2 Java虚拟机
    • ClassLoader类加载器
    • ByteCode字节码
  • 3 原版 CoreMod
    • 直接修改class文件
    • JavaAgent
    • LaunchWrapper
    • ModLauncher
  • 4 FML CoreMod
    • 1.3.2-1.5.2
    • 1.6.1-1.12.2
    • 1.13.2-1.15.2
  • 5 Mixin
    • 配置
    • 引导
    • 注入
    • 修改
    • 定位
    • 融合
    • 扩展
    • 调试
  • 6 ASM
  • 附录
    • 附录A 相关工具下载
    • 附录B 常见Java字节码指令表
    • 附录C 参考资料
Powered by GitBook
On this page
  • 配置build.gradle
  • 配置json文件
  • 配置IDE
  • Eclipse
  • IntelliJ IDEA

Was this helpful?

  1. 5 Mixin

配置

Previous5 MixinNext引导

Last updated 5 years ago

Was this helpful?

由于Mixin-0.7.11还不支持使用Forge 1.13+的ModLauncher引导,所以本教程以Forge 1.12.2-14.23.5.2838为例。

配置build.gradle

  • 在buildscript中添加Sponge的Maven仓库,并应用插件。

    buildscript {
      repositories {
          jcenter()
          maven { url = "https://files.minecraftforge.net/maven" }
          maven { url = "https://repo.spongepowered.org/maven" }
      }
      dependencies {
          classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
          classpath 'org.spongepowered:mixingradle:0.6-SNAPSHOT'
      }
    }
    apply plugin: 'net.minecraftforge.gradle.forge'
    apply plugin: 'org.spongepowered.mixin'
  • 在repositories中添加Sponge的Maven仓库。

    repositories {
      maven { url = "https://repo.spongepowered.org/maven" }
    }
  • 在dependencies中添加对Mixin的依赖,并排除Minecraft中已存在的库。

    dependencies {
      provided('org.spongepowered:mixin:0.7.11-SNAPSHOT') {
          exclude module: 'guava'
          exclude module: 'commons-io'
          exclude module: 'gson'
      }
    }
  • 由于Forge并不引用Mixin,并且无法保证玩家添加的模组一定会包含Mixin,所以需要在模组打包时把Mixin一并打包进模组jar包中。 在jar中把引用的Mixin打包进去。由于Mixin需要用Tweaker引导(参见),所以还需要添加TweakClass

    jar {
      from configurations.provided.asFileTree.files.collect {
          zipTree(it)
      }
    
      manifest.attributes([
          "TweakClass": "com.example.ExampleTweaker"
      ])
    }
  • MixinGradle添加了一个新的闭包:mixin,其所有可配置项参考。 一个最基本配置如下:(Mixin 混淆映射文件建议以mixins.<modid>.refmap.json的形式命名)

    mixin {
      add sourceSets.main, "mixins.example.refmap.json"
    }

    需要说明的是,正是因为有了这个文件,我们在编写代码时基本不需要过多地考虑混淆的问题,无论是在开发环境还是生产环境中,我们只需要按照mcp name写就可以了

  • 配置完成后即可开始构建Forge开发环境。

配置json文件

  • 在src/main/resources文件夹中新建一个json文件,推荐命名为mixins.<modid>.json

    • package: Mixin注入类所在的父包,这个包将会被添加到LaunchClassLoader的transformerExceptions中去;

    • mixins: 客户端和服务端都运行的Mixin注入类(填写相对于package属性的全类名,下同);

    • client: 仅在客户端运行的Mixin注入类;

    • server: 仅在服务端运行的Mixin注入类;

    • refmap: 指定Mixin的混淆映射json文件名(需要与MixinGradle中设置的一致);

    • priority: 指定配置文件被载入的优先级,默认为1000;

    • required: 决定是否确保所有Mixin注入类都能找到目标类,如果设置为true,一旦未能找到,那么就会抛出异常并终止游戏运行;

    • minVersion: 指定所使用的Mixin功能出现的最低版本,如果运行中的Mixin版本低于该版本,那么就会忽略高版本Mixin中的功能;

    • setSourceFile: 决定是否让注入类覆盖目标类的 source file 属性,如果设置为true,我们大概能在打印调用堆栈时看到

        at net.minecraft.client.gui.GuiMainMenu.func_73863_a(MixinGuiMainMenu.java:514)

      而不是原先的

        at net.minecraft.client.gui.GuiMainMenu.func_73863_a(GuiMainMenu.java:514)
  • 一个最基本的配置文件如下:

    {
    "package": "com.example.mixins",
    "mixins": [],
    "client": [],
    "server": []
    }

配置IDE

  • 在构建Forge开发环境之后配置IDE。配置完成后,可以在编写Mixin注解时自动检查注解的合法性。

Eclipse

  1. 在Mixin项目下运行 ./gradlew build 命令来编译生成Mixin的jar包

  2. 打开项目属性,并定位到 Java 编译器 -> 注解处理 -> 工厂路径

  3. 勾选 启用特定于项目的设置 复选框

  4. 单击 添加外部JAR... 按钮,并选择刚刚编译生成好的带 -processor 后缀的jar包(应该位于Mixin-master/build/libs文件夹内)

  5. 定位到 Java 编译器 -> 注解处理

  6. 勾选 启用特定于项目的设置 复选框

  7. 勾选 启用注解处理 复选框

  8. 单击 新建... 按钮

    • 设置 键 为 reobfSrgFile

    • 设置 值 为 mcp-srg.srg 文件的完整路径(对于Forge 1.12.2-14.23.5.2838 以及在不修改默认 mappings 的情况下,此文件应该位于 %GRADLE_USER_HOME%\caches\minecraft\de\oceanlabs\mcp\mcp_snapshot\20171003\1.12.2\srgs 文件夹内)

  9. 单击 应用并关闭 按钮即可

IntelliJ IDEA

配置文件中的所有可配置项参考。

在中的相关属性解释:

plugin: 指定Mixin插件类名,这个类需要实现 接口,这个插件允许程序在运行时修改Mixin配置(参考);

下载项目源代码仓库

安装由开发的插件即可。

MixinGradle
引导Mixin
这里
这里
Wiki
IMixinConfigPlugin
扩展
Mixin
DemonWav
Minecraft Development for IntelliJ IDEA