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。

2.2 KB · 70 行raw
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
package blade.addon.features.dungeon;

import blade.addon.utils.Location;
import blade.addon.utils.Misc;
import blade.addon.utils.config.values.Dungeons;
import blade.addon.utils.events.Events;
import net.minecraft.network.chat.Component;

import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class AutoRequeue {

    private static final Pattern LEFT_PATTERN = Pattern.compile("has left the party.$");

    private static final HashMap<String, String> playerHashMap = new HashMap<>();


    private static boolean someoneLeft = false;

    public static void init() {
        Events.ON_PARTY_MESSAGE.register((username, message) -> {
            if (playerHashMap.containsKey(username)) {
                if (message.contains("!undt")) {
                    playerHashMap.remove(username);
                    Misc.addChatMessage(Component.literal("§aDowntime removed"));
                }
            } else {
                if (message.contains("!dt")) {
                    playerHashMap.put(username, message);
                    Misc.addChatMessage(Component.literal("§aDowntime added"));
                }
            }
            return false;
        });

        Events.ON_GAME_MESSAGE.register(message -> {
            if (!Location.inDungeon() && !Dungeons.enableAutoRequeue) return false;
            String string = message.getString();
            Matcher matcher = LEFT_PATTERN.matcher(string);
            if (matcher.find()) {
                someoneLeft = true;
            }

            return false;
        });

        Events.ON_RUN_END.register(() -> {
            if (!Dungeons.enableAutoRequeue || someoneLeft) return false;

            if (playerHashMap.isEmpty()) {
                Misc.executeCommand("instancerequeue");
            } else {
                Misc.addChatMessage(Component.literal("Downtime reasons:"));
                playerHashMap.forEach((name, string) -> Misc.addChatMessage((Component.literal(name + "> " + string))));


            }
            return false;
        });

        Events.ON_LOCATION_CHANGE.register(newLocation -> {
            playerHashMap.clear();
            someoneLeft = false;
            return false;
        });
    }
}