Skip to content

Instantly share code, notes, and snippets.

@hube12
Created February 18, 2021 00:19
Show Gist options
  • Save hube12/8fc0806bc045a660ce78d19b93c8bbf9 to your computer and use it in GitHub Desktop.
Save hube12/8fc0806bc045a660ce78d19b93c8bbf9 to your computer and use it in GitHub Desktop.
package com.seedfinding.neil.mixin;
import net.minecraft.client.gui.screen.PresetsScreen;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.List;
@Mixin(PresetsScreen.class)
public class AddPresets {
@Mixin(targets = {"net.minecraft.client.gui.screen.PresetsScreen$SuperflatPreset" })
static class SuperflatPreset {
@Final
@Shadow
public Text name;
}
@Final
@Shadow
private static List<SuperflatPreset> PRESETS; // this is done because net.minecraft.client.gui.screen.PresetsScreen$SuperflatPreset ain't accessible
@Inject(method = "<init>*", at = @At("RETURN"))
public void sortList(CallbackInfo ci) {
System.out.println(PRESETS.size());
System.out.println(PRESETS.get(0).name);
}
}
@hube12
Copy link
Author

hube12 commented Feb 18, 2021

java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
net/minecraft/client/gui/screen/PresetsScreen.handler$zdf000$sortList(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V @29: getfield
Reason:
Type 'net/minecraft/client/gui/screen/PresetsScreen$SuperflatPreset$1817b920e0c843f1995c7fcce2313f62' (current frame, stack[1]) is not assignable to 'net/minecraft/client/gui/screen/PresetsScreen'
Current Frame:
bci: @29
flags: { }
locals: { 'net/minecraft/client/gui/screen/PresetsScreen', 'org/spongepowered/asm/mixin/injection/callback/CallbackInfo' }
stack: { 'java/io/PrintStream', 'net/minecraft/client/gui/screen/PresetsScreen$SuperflatPreset$1817b920e0c843f1995c7fcce2313f62' }
Bytecode:
0000000: b203 49b2 023d b901 5901 00b6 034e b203
0000010: 49b2 023d 03b9 0160 0200 c003 50b4 0353
0000020: b603 56b1

@hube12
Copy link
Author

hube12 commented Feb 18, 2021

@Mixin(PresetsScreen.class)
public class AddPresets {
    @Mixin(targets = {"net.minecraft.client.gui.screen.PresetsScreen$SuperflatPreset"})
    public interface SuperflatPreset {
        @Accessor
        Text getName();
    }

    @Final
    @Shadow
    private static List<?> PRESETS; // this is done because net.minecraft.client.gui.screen.PresetsScreen$SuperflatPreset ain't accessible

    //    private static List<SuperflatPreset> PRESETS; // this is done because net.minecraft.client.gui.screen.PresetsScreen$SuperflatPreset ain't accessible
//
    @Inject(method = "<init>*", at = @At("RETURN"))
    public void sortList(CallbackInfo ci) {
        System.out.println(PRESETS.size());
        System.out.println(((SuperflatPreset) PRESETS.get(0)).getName());
    }

@hube12
Copy link
Author

hube12 commented Feb 18, 2021

Caused by: java.lang.IllegalAccessError: class net.minecraft.client.gui.screen.PresetsScreen$SuperflatPreset cannot access its superinterface com.seedfinding.neil.mixin.AddPresets$SuperflatPreset (net.minecraft.client.gui.screen.PresetsScreen$SuperflatPreset and com.seedfinding.neil.mixin.AddPresets$SuperflatPreset are in unnamed module of loader net.fabricmc.loader.launch.knot.KnotClassLoader @67545b57)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment