Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос SeeInvisible

  • Автор темы Автор темы RokBolL
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
29 Ноя 2023
Сообщения
57
Реакции
0
Java:
Expand Collapse Copy
package ru.mytheria.main.module.render;

import meteordevelopment.orbit.EventHandler;
import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.text.Text;
import ru.mytheria.api.module.Category;
import ru.mytheria.api.module.Module;
import ru.mytheria.api.module.settings.Setting;
import ru.mytheria.api.module.settings.impl.SliderSetting;
import ru.mytheria.api.events.impl.EntityColorEvent;
import ru.mytheria.api.util.color.ColorUtil;

import java.util.List;

public class SeeInvisible extends Module {

    private final SliderSetting alphaSetting = new SliderSetting(
            Text.of("Альфа"),
            Text.of("Прозрачность для невидимых сущностей"),
            () -> true
    ).set(0.1F, 1F, 0.01F).set(0.5f);

    public SeeInvisible() {
        super(Text.of("SeeInvisible"), Category.RENDER);
        addSettings(alphaSetting);
    }

    @EventHandler
    public void onEntityColor(EntityColorEvent e) {
        if (e.getEntity() instanceof LivingEntity livingEntity) {

            if (livingEntity.hasStatusEffect(StatusEffects.INVISIBILITY)) {
                float alphaValue = alphaSetting.getValue();
                int opacityPercent = (int) (alphaValue * 100);
                e.setColor(ColorUtil.applyOpacity(e.getColor(), opacityPercent));
                e.setCancelled(true);
            }
        }
    }

    @Override
    public List<Setting> getSettingLayers() {
        return super.getSettingLayers();
    }
}
не подскажите какой mixin надо ? И вообще откуда брать методы для внедрения
 
можешь дать фул mixin для примера? А то чет не получается
миксин:
Expand Collapse Copy
@Mixin(LivingEntityRenderer.class)
public abstract class LivingEntityRendererMixin implements IMinecraft {
    @Shadow @Nullable protected abstract RenderLayer getRenderLayer(LivingEntityRenderState state, boolean showBody, boolean translucent, boolean showOutline);

    @Redirect(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/LivingEntityRenderer;getRenderLayer(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;ZZZ)Lnet/minecraft/client/render/RenderLayer;"))
    private RenderLayer renderHook(LivingEntityRenderer instance, LivingEntityRenderState state, boolean showBody, boolean translucent, boolean showOutline) {
        if (!translucent && state.width == 0.6F) {
            EventEntityColor event = new EventEntityColor(-1);
            EventBus.getInstance().post(event);
            if (event.isCancelled()) translucent = true;
        }
        return this.getRenderLayer(state, showBody, translucent, showOutline);
    }

    @Redirect(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/model/EntityModel;render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;III)V"))
    private void renderModelHook(EntityModel<?> instance, MatrixStack matrixStack, VertexConsumer vertexConsumer, int i, int j, int l, @Local(ordinal = 0, argsOnly = true) LivingEntityRenderState renderState) {
        EventEntityColor event = new  EventEntityColor(l);
        if (renderState.invisibleToPlayer) EventBus.getInstance().post(event);
        instance.render(matrixStack, vertexConsumer, i, j, event.getColor());
    }}
 
миксин:
Expand Collapse Copy
@Mixin(LivingEntityRenderer.class)
public abstract class LivingEntityRendererMixin implements IMinecraft {
    @Shadow @Nullable protected abstract RenderLayer getRenderLayer(LivingEntityRenderState state, boolean showBody, boolean translucent, boolean showOutline);

    @Redirect(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/LivingEntityRenderer;getRenderLayer(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;ZZZ)Lnet/minecraft/client/render/RenderLayer;"))
    private RenderLayer renderHook(LivingEntityRenderer instance, LivingEntityRenderState state, boolean showBody, boolean translucent, boolean showOutline) {
        if (!translucent && state.width == 0.6F) {
            EventEntityColor event = new EventEntityColor(-1);
            EventBus.getInstance().post(event);
            if (event.isCancelled()) translucent = true;
        }
        return this.getRenderLayer(state, showBody, translucent, showOutline);
    }

    @Redirect(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/model/EntityModel;render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;III)V"))
    private void renderModelHook(EntityModel<?> instance, MatrixStack matrixStack, VertexConsumer vertexConsumer, int i, int j, int l, @Local(ordinal = 0, argsOnly = true) LivingEntityRenderState renderState) {
        EventEntityColor event = new  EventEntityColor(l);
        if (renderState.invisibleToPlayer) EventBus.getInstance().post(event);
        instance.render(matrixStack, vertexConsumer, i, j, event.getColor());
    }}
спасибо большое
 
Назад
Сверху Снизу