Гайд Как работать с приватными/внутренними классами в фабрике

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
25 Фев 2024
Сообщения
391
Реакции
5
например у нас есть класс
Gui$HeartType
1760043120999.png


Если нам нужно его где либо использовать, делаем миксин:
1760043169442.png


если нам нужно получить из него что либо например NORMAL:
1760043196490.png

если из него вызвать метод надо какой либо, делаем класс абстрактным(чтобы не добать тело метода):
1760043410314.png


вот пример работы с внутренним классом
Java:
Expand Collapse Copy
package ru.apelsin.injections.render;

import net.minecraft.world.entity.player.Player;
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.CallbackInfoReturnable;
import ru.apelsin.common.QuickImports;
import ru.apelsin.features.impl.render.NoRender;

@Mixin(targets = "net.minecraft.client.gui.Gui$HeartType")
public class GuiHeartTypeMixin implements QuickImports {
    @Final
    @Shadow
    public static GuiHeartTypeMixin NORMAL;

    @Inject(method = "forPlayer", at = @At("HEAD"), cancellable = true)
    private static void forPlayer(Player player, CallbackInfoReturnable<GuiHeartTypeMixin> cir) {
        NoRender noRender = client.getFeatureManager().getNoRender();
        if (noRender.isState()
                && noRender.getHealthEffect().isState()) {
            cir.setReturnValue(NORMAL);
        }
    }
}
 
например у нас есть класс
Gui$HeartType
Посмотреть вложение 317340

Если нам нужно его где либо использовать, делаем миксин:
Посмотреть вложение 317341

если нам нужно получить из него что либо например NORMAL:
Посмотреть вложение 317342
если из него вызвать метод надо какой либо, делаем класс абстрактным(чтобы не добать тело метода):
Посмотреть вложение 317344

вот пример работы с внутренним классом
Java:
Expand Collapse Copy
package ru.apelsin.injections.render;

import net.minecraft.world.entity.player.Player;
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.CallbackInfoReturnable;
import ru.apelsin.common.QuickImports;
import ru.apelsin.features.impl.render.NoRender;

@Mixin(targets = "net.minecraft.client.gui.Gui$HeartType")
public class GuiHeartTypeMixin implements QuickImports {
    @Final
    @Shadow
    public static GuiHeartTypeMixin NORMAL;

    @Inject(method = "forPlayer", at = @At("HEAD"), cancellable = true)
    private static void forPlayer(Player player, CallbackInfoReturnable<GuiHeartTypeMixin> cir) {
        NoRender noRender = client.getFeatureManager().getNoRender();
        if (noRender.isState()
                && noRender.getHealthEffect().isState()) {
            cir.setReturnValue(NORMAL);
        }
    }
}
apelsin im be back?
 
например у нас есть класс
Gui$HeartType
Посмотреть вложение 317340

Если нам нужно его где либо использовать, делаем миксин:
Посмотреть вложение 317341

если нам нужно получить из него что либо например NORMAL:
Посмотреть вложение 317342
если из него вызвать метод надо какой либо, делаем класс абстрактным(чтобы не добать тело метода):
Посмотреть вложение 317344

вот пример работы с внутренним классом
Java:
Expand Collapse Copy
package ru.apelsin.injections.render;

import net.minecraft.world.entity.player.Player;
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.CallbackInfoReturnable;
import ru.apelsin.common.QuickImports;
import ru.apelsin.features.impl.render.NoRender;

@Mixin(targets = "net.minecraft.client.gui.Gui$HeartType")
public class GuiHeartTypeMixin implements QuickImports {
    @Final
    @Shadow
    public static GuiHeartTypeMixin NORMAL;

    @Inject(method = "forPlayer", at = @At("HEAD"), cancellable = true)
    private static void forPlayer(Player player, CallbackInfoReturnable<GuiHeartTypeMixin> cir) {
        NoRender noRender = client.getFeatureManager().getNoRender();
        if (noRender.isState()
                && noRender.getHealthEffect().isState()) {
            cir.setReturnValue(NORMAL);
        }
    }
}
апельсин, ты мне сегодня за миксины объяснять будешь, понял?
 
например у нас есть класс
Gui$HeartType
Посмотреть вложение 317340

Если нам нужно его где либо использовать, делаем миксин:
Посмотреть вложение 317341

если нам нужно получить из него что либо например NORMAL:
Посмотреть вложение 317342
если из него вызвать метод надо какой либо, делаем класс абстрактным(чтобы не добать тело метода):
Посмотреть вложение 317344

вот пример работы с внутренним классом
Java:
Expand Collapse Copy
package ru.apelsin.injections.render;

import net.minecraft.world.entity.player.Player;
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.CallbackInfoReturnable;
import ru.apelsin.common.QuickImports;
import ru.apelsin.features.impl.render.NoRender;

@Mixin(targets = "net.minecraft.client.gui.Gui$HeartType")
public class GuiHeartTypeMixin implements QuickImports {
    @Final
    @Shadow
    public static GuiHeartTypeMixin NORMAL;

    @Inject(method = "forPlayer", at = @At("HEAD"), cancellable = true)
    private static void forPlayer(Player player, CallbackInfoReturnable<GuiHeartTypeMixin> cir) {
        NoRender noRender = client.getFeatureManager().getNoRender();
        if (noRender.isState()
                && noRender.getHealthEffect().isState()) {
            cir.setReturnValue(NORMAL);
        }
    }
}
такой себе гайд, можно было хотя бы комменты добавить, что такое @Inject , @At , хуй поймешь, 5\10
 
Назад
Сверху Снизу