baka-4n
Mixin代码如下,fabric:20w15a build.4



报错





2021.12 数据,可能有更多内容Mixin代码如下,fabric:20w15a build.4


package io.github.elementera.mixin;

import io.github.elementera.common.gui.*;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(TitleScreen.class)
public class ElementMixin extends Screen {


   @Inject(at = @At("HEAD"), method = "init()V")
   private void init(CallbackInfo info) {
   System.out.println("authors");
   this.addButton(new ButtonWidget(this.width / 2 - 60, this.height / 2+ 99, 74, 20, I18n.translate("elementera.ElementEra"), (action) -> {
   MinecraftClient.getInstance().openScreen(new Authors(this));
   System.out.println("Element Era Mod authors");
   }));
   }


   protected ElementMixin(Text title) {
   super(title);
   }
}


报错


org.spongepowered.asm.mixin.transformer.throwables.IllegalClassLoadError: Illegal classload request for io.github.elementera.mixin.ElementMixin. Mixin is defined in elementera.mixins.json and cannot be referenced directly
    at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:330)
    at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:191)
    at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:178)
    at org.spongepowered.asm.mixin.transformer.FabricMixinTransformerProxy.transformClassBytes(FabricMixinTransformerProxy.java:23)
    at net.fabricmc.loader.launch.knot.KnotClassDelegate.loadClassData(KnotClassDelegate.java:174)
    at net.fabricmc.loader.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:143)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    at net.minecraft.client.MinecraftClient.<init>(MinecraftClient.java:542)
    at net.minecraft.client.main.Main.main(Main.java:166)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at net.fabricmc.loader.game.MinecraftGameProvider.launch(MinecraftGameProvider.java:192)
    at net.fabricmc.loader.launch.knot.Knot.init(Knot.java:140)
    at net.fabricmc.loader.launch.knot.KnotClient.main(KnotClient.java:26)
    at net.fabricmc.devlaunchinjector.Main.main(Main.java:86)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------


-- Head --
Thread: Render thread
Stacktrace:
    at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:330)
    at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:191)
    at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:178)
    at org.spongepowered.asm.mixin.transformer.FabricMixinTransformerProxy.transformClassBytes(FabricMixinTransformerProxy.java:23)
    at net.fabricmc.loader.launch.knot.KnotClassDelegate.loadClassData(KnotClassDelegate.java:174)
    at net.fabricmc.loader.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:143)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    at net.minecraft.client.MinecraftClient.<init>(MinecraftClient.java:542)


-- Initialization --
Details:
Stacktrace:
    at net.minecraft.client.main.Main.main(Main.java:166)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at net.fabricmc.loader.game.MinecraftGameProvider.launch(MinecraftGameProvider.java:192)
    at net.fabricmc.loader.launch.knot.Knot.init(Knot.java:140)
    at net.fabricmc.loader.launch.knot.KnotClient.main(KnotClient.java:26)
    at net.fabricmc.devlaunchinjector.Main.main(Main.java:86)


-- System Details --
Details:
    Minecraft Version: 20w15a
    Minecraft Version ID: 20w15a
    Operating System: Windows 10 (amd64) version 10.0
    Java Version: 1.8.0_241, Oracle Corporation
    Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
    Memory: 584988136 bytes (557 MB) / 912785408 bytes (870 MB) up to 1884815360 bytes (1797 MB)
    CPUs: 12
    JVM Flags: 0 total;
    Fabric Mods:
  elementera: Element Era Mod 1.0.0
  fabric: Fabric API 0.5.10+build.320-1.16
  fabric-api-base: Fabric API Base 0.1.3+12a8474c88
  fabric-biomes-v1: Fabric Biomes (v1) 0.2.1+b7d52fa588
  fabric-blockrenderlayer-v1: Fabric BlockRenderLayer Registration (v1) 1.1.4+c6a8ea8988
  fabric-commands-v0: Fabric Commands (v0) 0.1.4+a2a96bf988
  fabric-containers-v0: Fabric Containers (v0) 0.1.7+d249f7b688
  fabric-content-registries-v0: Fabric Content Registries (v0) 0.1.5+88afe60788
  fabric-crash-report-info-v1: Fabric Crash Report Info (v1) 0.1.2+b7f9825d88
  fabric-dimensions-v1: fabric-dimensions-v1 0.3.3+a2a96bf988
  fabric-events-interaction-v0: Fabric Events Interaction (v0) 0.3.0+04b9979488
  fabric-events-lifecycle-v0: Fabric Events Lifecycle (v0) 0.1.2+1a47cd7888
  fabric-item-groups-v0: Fabric Item Groups (v0) 0.1.10+d249f7b688
  fabric-keybindings-v0: Fabric Key Bindings (v0) 0.1.1+dfdb52d688
  fabric-loot-tables-v1: Fabric Loot Tables (v1) 0.1.6+2f56dff288
  fabric-mining-levels-v0: Fabric Mining Levels (v0) 0.1.2+5b8a535a88
  fabric-models-v0: Fabric Models (v0) 0.1.0+dfdb52d688
  fabric-networking-blockentity-v0: Fabric Networking Block Entity (v0) 0.2.5+b50ffc7b88
  fabric-networking-v0: Fabric Networking (v0) 0.1.9+1a47cd7888
  fabric-object-builders-v0: Fabric Object Builders (v0) 0.2.3+c808269f88
  fabric-particles-v1: fabric-particles-v1 0.1.2+12a8474c88
  fabric-registry-sync-v0: Fabric Registry Sync (v0) 0.2.9+372d827d88
  fabric-renderer-api-v1: Fabric Renderer API (v1) 0.2.12+12a8474c88
  fabric-renderer-indigo: Fabric Renderer - Indigo 0.2.28+c808269f88
  fabric-renderer-registries-v1: Fabric Renderer Registries (v1) 2.0.1+5a0f9a6088
  fabric-rendering-data-attachment-v1: Fabric Rendering Data Attachment (v1) 0.1.3+b7f9825d88
  fabric-rendering-fluids-v1: Fabric Rendering Fluids (v1) 0.1.7+12a8474c88
  fabric-rendering-v0: Fabric Rendering (v0) 1.1.0+5341049088
  fabric-rendering-v1: Fabric Rendering (v1) 0.1.1+1a47cd7888
  fabric-resource-loader-v0: Fabric Resource Loader (v0) 0.1.13+94c7834a88
  fabric-tag-extensions-v0: Fabric Tag Extensions (v0) 0.2.3+9cd8d66088
  fabric-textures-v0: Fabric Textures (v0) 1.0.4+821cdba788
  fabricloader: Fabric Loader 0.8.2+build.194
  minecraft: Minecraft 1.16-alpha.20.15.a
    Launched Version: Fabric
    Backend library: LWJGL version 3.2.2 build 10
    Backend API: GeForce GTX 1060/PCIe/SSE2 GL version 4.6.0 NVIDIA 445.75, NVIDIA Corporation
    GL Caps: Using framebuffer using OpenGL 3.0
    Using VBOs: Yes
    Is Modded: Definitely; Client brand changed to 'fabric'
    Type: Client (map_client.txt)
    CPU: 12x Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz
#@!@# Game crashed! Crash report saved to: #@!@# D:\Temp\桌面\elementera_fabric\run\.\crash-reports\crash-2020-04-15_09.53.18-client.txt


Process finished with exit code -1



海螺螺
构造方法只能注入 RETURN
以及看你的报错似乎还有更多问题,比如两个 mixin 配置互相引用

gooding300
本帖最后由 gooding300 于 2020-4-15 11:01 编辑

因为构造方法无论如何都要在最前面调用父类的构造方法,如果父类是默认构造方法,编译时会帮你自动补全,所以无法注入到构造方法的HEAD位置。
父类是默认构造方法的话,补全的字节码如下,以父类为Object作为例子:
  1. ALOAD 0 // this
  2. INVOKESPECIAL java/lang/Object.<init> ()V // Object 的无参构造方法
复制代码