Вопрос Помогите с JumpCircles(Fabric 1.20.4/Expensive 4.0)

Забаненный
Забаненный
Статус
Оффлайн
Регистрация
5 Мар 2024
Сообщения
69
Реакции
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вроде бы ивенты вхуканы правильно, весь код выглядит в целом нормально и должен работать, но происходит какой то пиздец и оно не работает, помогите пж
Java:
Expand Collapse Copy
package ru.expensive.implement.features.modules.render;

import net.minecraft.entity.Entity;
import net.minecraft.util.math.Vec3d;
import ru.expensive.api.event.EventHandler;
import ru.expensive.api.feature.module.Module;
import ru.expensive.api.feature.module.ModuleCategory;
import ru.expensive.api.feature.module.setting.implement.ColorSetting;
import ru.expensive.api.system.shape.implement.Image;
import ru.expensive.common.QuickImports;
import ru.expensive.implement.events.player.EventPlayerJump;
import ru.expensive.implement.events.render.WorldRenderEvent;
import ru.expensive.api.system.shape.ShapeProperties;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class JumpCirclesModule extends Module {
    private final List<JumpCircle> circles = new ArrayList<>();
    private static ColorSetting color = new ColorSetting("Circles color", "Change jump circles color")
            .presets(0x80FFFFFF, 0x80FF0000
            );

    public JumpCirclesModule() {
        super("JumpCircles", ModuleCategory.RENDER);
        setup(color);
    }

    @EventHandler
    private void onJump(EventPlayerJump e) {
        if (mc.player != null && mc.world != null) {
            Vec3d pos = interpolatePosition(mc.player).add(0, 0.01, 0);
            circles.add(new JumpCircle(pos, System.currentTimeMillis()));
        }
    }

    @EventHandler
    private void onRenderEvent(WorldRenderEvent e) {
        if (circles.isEmpty()) return;

        long now = System.currentTimeMillis();

        Iterator<JumpCircle> iterator = circles.iterator();
        while (iterator.hasNext()) {
            JumpCircle circle = iterator.next();

            float life = (now - circle.startTime) / 1000f;
            if (life >= 5f) {
                iterator.remove();
                continue;
            }

            float radius = easeOutBack(life / 5f) * 2.5f;

            Image image = QuickImports.image.setMatrixStack(e.getStack());
            image.setTexture("images/render/circle.png").render(
                    ShapeProperties.create(
                                    e.getStack().peek().getPositionMatrix(),
                                    circle.pos.x - radius / 2,
                                    circle.pos.y,
                                    radius,
                                    radius)
                            .color(color.getColor())
                            .bloom(true)
                            .build()
            );
        }
    }

    private Vec3d interpolatePosition(Entity entity) {
        float tickDelta = mc.getTickDelta();
        double dx = entity.getX() - entity.lastRenderX;
        double dy = entity.getY() - entity.lastRenderY;
        double dz = entity.getZ() - entity.lastRenderZ;
        return new Vec3d(entity.lastRenderX + dx * tickDelta,
                entity.lastRenderY + dy * tickDelta,
                entity.lastRenderZ + dz * tickDelta);
    }

    private static float easeOutBack(float value) {
        double c1 = 1.70158, c3 = c1 + 1;
        return (float) (1 + c3 * Math.pow(value - 1, 3) + c1 * Math.pow(value - 1, 2));
    }

    private static class JumpCircle {
        final Vec3d pos;
        final long startTime;

        JumpCircle(Vec3d pos, long startTime) {
            this.pos = pos;
            this.startTime = startTime;
        }
    }
}
и вот ещё как я хукаю джамп эвент

Java:
Expand Collapse Copy
@Mixin(PlayerEntity.class)
public class PlayerEntityMixin {
    @Inject(method = "jump", at = @At("HEAD"))
    private void onJump(CallbackInfo ci) {
        EventManager.callEvent(new EventPlayerJump());
    }
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вроде бы ивенты вхуканы правильно, весь код выглядит в целом нормально и должен работать, но происходит какой то пиздец и оно не работает, помогите пж
Java:
Expand Collapse Copy
package ru.expensive.implement.features.modules.render;

import net.minecraft.entity.Entity;
import net.minecraft.util.math.Vec3d;
import ru.expensive.api.event.EventHandler;
import ru.expensive.api.feature.module.Module;
import ru.expensive.api.feature.module.ModuleCategory;
import ru.expensive.api.feature.module.setting.implement.ColorSetting;
import ru.expensive.api.system.shape.implement.Image;
import ru.expensive.common.QuickImports;
import ru.expensive.implement.events.player.EventPlayerJump;
import ru.expensive.implement.events.render.WorldRenderEvent;
import ru.expensive.api.system.shape.ShapeProperties;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class JumpCirclesModule extends Module {
    private final List<JumpCircle> circles = new ArrayList<>();
    private static ColorSetting color = new ColorSetting("Circles color", "Change jump circles color")
            .presets(0x80FFFFFF, 0x80FF0000
            );

    public JumpCirclesModule() {
        super("JumpCircles", ModuleCategory.RENDER);
        setup(color);
    }

    @EventHandler
    private void onJump(EventPlayerJump e) {
        if (mc.player != null && mc.world != null) {
            Vec3d pos = interpolatePosition(mc.player).add(0, 0.01, 0);
            circles.add(new JumpCircle(pos, System.currentTimeMillis()));
        }
    }

    @EventHandler
    private void onRenderEvent(WorldRenderEvent e) {
        if (circles.isEmpty()) return;

        long now = System.currentTimeMillis();

        Iterator<JumpCircle> iterator = circles.iterator();
        while (iterator.hasNext()) {
            JumpCircle circle = iterator.next();

            float life = (now - circle.startTime) / 1000f;
            if (life >= 5f) {
                iterator.remove();
                continue;
            }

            float radius = easeOutBack(life / 5f) * 2.5f;

            Image image = QuickImports.image.setMatrixStack(e.getStack());
            image.setTexture("images/render/circle.png").render(
                    ShapeProperties.create(
                                    e.getStack().peek().getPositionMatrix(),
                                    circle.pos.x - radius / 2,
                                    circle.pos.y,
                                    radius,
                                    radius)
                            .color(color.getColor())
                            .bloom(true)
                            .build()
            );
        }
    }

    private Vec3d interpolatePosition(Entity entity) {
        float tickDelta = mc.getTickDelta();
        double dx = entity.getX() - entity.lastRenderX;
        double dy = entity.getY() - entity.lastRenderY;
        double dz = entity.getZ() - entity.lastRenderZ;
        return new Vec3d(entity.lastRenderX + dx * tickDelta,
                entity.lastRenderY + dy * tickDelta,
                entity.lastRenderZ + dz * tickDelta);
    }

    private static float easeOutBack(float value) {
        double c1 = 1.70158, c3 = c1 + 1;
        return (float) (1 + c3 * Math.pow(value - 1, 3) + c1 * Math.pow(value - 1, 2));
    }

    private static class JumpCircle {
        final Vec3d pos;
        final long startTime;

        JumpCircle(Vec3d pos, long startTime) {
            this.pos = pos;
            this.startTime = startTime;
        }
    }
}
и вот ещё как я хукаю джамп эвент

Java:
Expand Collapse Copy
@Mixin(PlayerEntity.class)
public class PlayerEntityMixin {
    @Inject(method = "jump", at = @At("HEAD"))
    private void onJump(CallbackInfo ci) {
        EventManager.callEvent(new EventPlayerJump());
    }
/up
 
Назад
Сверху Снизу