nageyqma·git
HTTPS https://git.nageyqma.icu/nageyqma/blade-addons-next.git SSH git@git.nageyqma.icu:nageyqma/blade-addons-next.git

HTTPS 链接可直接 git clone;推送代码请使用 SSH。

5.2 KB · 114 行raw
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
package blade.addon.features.dungeon.f7.location;

import blade.addon.utils.Location;
import blade.addon.utils.config.values.Floor7;
import blade.addon.utils.debug.Debug;
import blade.addon.utils.dungeon.Phase;
import blade.addon.utils.events.Events;
import blade.addon.utils.rendering.RenderingEvents;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.rendering.v1.level.LevelRenderContext;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.gizmos.GizmoStyle;
import net.minecraft.gizmos.Gizmos;
import net.minecraft.util.ARGB;
import net.minecraft.world.phys.AABB;

import java.util.ArrayList;

public class PositionMessages {

    static final ArrayList<PositionMessage> positionMessages = new ArrayList<>();

    static PositionMessage SS = new PositionMessage("At SS!", new String[]{"ss"}, new AABB(107, 120, 93, 110, 121, 95), new int[]{0, 1});
    static PositionMessage EE2 = new PositionMessage("At EE2!", new String[]{"ee2", "early enter 2"}, new AABB(57, 109, 130, 59, 110, 132), new int[]{1, 2});
    static PositionMessage HEE2 = new PositionMessage("At High EE2!", new String[]{"high ee2", "highee2", "hee2"}, new AABB(59, 132, 138, 62, 133, 140), new int[]{1, 2});
    static PositionMessage EE3 = new PositionMessage("At EE3!", new String[]{"ee3", "early enter 3", "early entry 3"}, new AABB(1, 109, 103, 3, 110, 106), new int[]{2, 3});
    static PositionMessage CORE = new PositionMessage("At Core!", new String[]{"core"}, new AABB(53, 115, 51, 56, 116, 54), new int[]{2, 3, 4});
    static PositionMessage TUNNEL = new PositionMessage("Inside Goldor Tunnel!", new String[]{"tunnel"}, new AABB(52, 114, 55, 57, 116, 58), new int[]{4, 5});
    static PositionMessage SAFE_2 = new PositionMessage("At 2 Safespot!", new String[]{"2 safespot", "ee2 safespot", "safespot ee2", "s2 safespot", "safespot s2"}, new AABB(46, 109, 121.987, 49, 110, 121.988), new int[]{1, 2});
    static PositionMessage SAFE_3 = new PositionMessage("At 3 Safespot!", new String[]{"3 safespot", "ee3 safespot", "freaky ee3", "freak ee", "safespot s3", "safespot 3"}, new AABB(18, 121, 91, 19, 126, 99), new int[]{2, 3});
    static PositionMessage SPLIT_2 = new PositionMessage("At Split ee2!", new String[]{"split ee2", "splitee2", "mage term"}, new AABB(58, 119, 124, 60, 123, 126), new int[]{1, 2});
    static PositionMessage SAFE_2_HIGH = new PositionMessage("At High 2 Safespot!", new String[]{"2 safespot"}, new AABB(70, 127, 143.7, 57, 133, 146.7), new int[]{1, 2});

    public static void init() {
        ClientTickEvents.END_CLIENT_TICK.register(PositionMessages::tick);
        RenderingEvents.LINE.register(PositionMessages::render);
        Events.ON_LOCATION_CHANGE.register(newLocation -> {
            disableAll();
            return false;
        });

        Events.ON_PHASE_CHANGE.register(() -> {
            if (Phase.inP2()) {
                SS.setSent(false);
            } else if (Phase.inTerminals()) {
                EE2.setSent(false);
                HEE2.setSent(false);
                EE3.setSent(false);
                CORE.setSent(false);
                TUNNEL.setSent(false);
                SAFE_2.setSent(false);
                SAFE_3.setSent(false);
                SPLIT_2.setSent(false);
                SAFE_2_HIGH.setSent(false);
            } else if (Phase.inGoldorTunnel()) {
                EE2.setSent(true);
                HEE2.setSent(true);
                EE3.setSent(true);
                CORE.setSent(true);
                TUNNEL.setSent(true);
                SAFE_2.setSent(true);
                SAFE_3.setSent(true);
                SPLIT_2.setSent(true);
                SAFE_2_HIGH.setSent(true);
            }
            return false;
        });


    }

    public static void tick(Minecraft client) {
        if (!Location.inDungeon() || !Floor7.enablePositionalMessages) return;
        LocalPlayer player = client.player;
        if (player == null) return;

        for (PositionMessage message : positionMessages) {
            message.tick(player);
        }
    }

    public static boolean hasBeenSent(String message) {
        String lowered = message.toLowerCase();
        for (PositionMessage positionMessage : positionMessages) {
            if (positionMessage.hasBeenSent(lowered)) {
                return true;
            }
        }
        return false;
    }

    public static void disableAll() {
        for (PositionMessage positionMessage : positionMessages) {
            positionMessage.setSent(true);
        }
    }

    private static void render(LevelRenderContext context, PoseStack matrixStack, VertexConsumer consumer) {
        if (!Location.inDungeon() || !Debug.renderPositions) return;

        for (PositionMessage positionMessage : positionMessages) {
            AABB box = positionMessage.getBox();
            if (positionMessage.sent()) {
                Gizmos.cuboid(box, GizmoStyle.stroke(ARGB.colorFromFloat(1.0f, 0, 1, 0)));
            } else {
                Gizmos.cuboid(box, GizmoStyle.stroke(ARGB.colorFromFloat(1.0f, 1, 0, 0)));
            }
        }
    }
}