Фильтрация ников

Версия Minecraft
1.16.5
API
Forge
Зделал фильтрацию ников от привилегей а она просто скипаетса и виводит в else


Java:
@SubscribeEvent
    public static void onLivingUpdate(LivingEvent.LivingUpdateEvent event) {

        if (event.getEntityLiving() instanceof PlayerEntity) {
            PlayerEntity player = (PlayerEntity) event.getEntityLiving();
            String input = player.getDisplayName().getString();
            Pattern pattern = Pattern.compile("§c\\? §f(.*?) §r");
            Matcher matcher = pattern.matcher(input);
            Pattern pattern2 = Pattern.compile("\\? Герцог (.*?) §");
            Matcher matcher2 = pattern2.matcher(input);
            Pattern pattern3 = Pattern.compile("\\? Барон (.*?) §");
            Matcher matcher3 = pattern3.matcher(input);
            Pattern pattern4 = Pattern.compile("\\? Элита (.*?) §");
            Matcher matcher4 = pattern4.matcher(input);
            Pattern pattern5 = Pattern.compile("\\? Принц (.*?) §");
            Matcher matcher5 = pattern5.matcher(input);
            Pattern pattern6 = Pattern.compile("\\? Аспид (.*?) §");
            Matcher matcher6 = pattern6.matcher(input);
            Pattern pattern7 = Pattern.compile("\\? Титан (.*?) §");
            Matcher matcher7 = pattern7.matcher(input);


            if (matcher.find()) {
                String nickname = matcher.group(1);
                System.out.println(nickname);
            }

            else if (matcher2.find()) {
                String nickname = matcher2.group(1);
                System.out.println(nickname);
            }

            else if (matcher3.find()) {
                String nickname = matcher3.group(1);
                System.out.println(nickname);
            }

            else if (matcher4.find()) {
                String nickname = matcher4.group(1);
                System.out.println(nickname);
            }

            else if (matcher5.find()) {
                String nickname = matcher5.group(1);
                System.out.println(nickname);
            }

            else if (matcher6.find()) {
                String nickname = matcher6.group(1);
                System.out.println(nickname);
            }

            else if (matcher7.find()) {
                String nickname = matcher7.group(1);
                System.out.println(nickname);
            }
            else {System.out.println(input)}

        } else if (event.getEntityLiving() instanceof MobEntity) {
            MobEntity mob = (MobEntity) event.getEntityLiving();
            System.out.println();

        }

    }
 

will0376

Токсичная личность
2,079
55
585
Смотрю ты пытаешься учиться яве - похвально.
Как вариант - заведи лист из String'ов, которые у тебя REGEX. И начни перебирать через for уже его - это избавит от геморроя с созданием матчеров.
А по поводу твоего изначального факапа - ставь брекпоиты и смотри что у тебя там в ифах происходит.
 

will0376

Токсичная личность
2,079
55
585
Можете писать по проще как для чайников
Нет, писать ЗА тебя код я не стану. Моё дело побыть токсиком, и может быть направить человека.
Если сложно понять что я написал выше - можешь попробовать скормить тот текст со своим кодом боту ChatGPT и попросить разобрать что написано.
Его хорошо использовать для разбора текстов и т.п. что-бы понятнее было. Но не стоит пытаться заставить его написать код за тебя - бесполезное дело, напишет хрень а ты и не поймёшь.
 
175
14
25
Погуглиб бы хоть.... Обратился к AI.... Чтобы хотябы не писать такой спагети код....

Java:
@SubscribeEvent
public static void onLivingUpdate(LivingEvent.LivingUpdateEvent event) {
    if (event.getEntityLiving() instanceof PlayerEntity) {
        PlayerEntity player = (PlayerEntity) event.getEntityLiving();
        String input = player.getDisplayName().getString();
        String[] patterns = {"§c\\? §f(.*?) §r", "\\? Герцог (.*?) §", "\\? Барон (.*?) §", "\\? Элита (.*?) §", "\\? Принц (.*?) §", "\\? Аспид (.*?) §", "\\? Титан (.*?) §"};

        for (String pattern : patterns) {
            Matcher matcher = Pattern.compile(pattern).matcher(input);
            if (matcher.find()) {
                System.out.println(matcher.group(1));
                return;
            }
        }
        System.out.println(input);
    } else if (event.getEntityLiving() instanceof MobEntity) {
        System.out.println();
    }
}
 
1701508831110.pngпроблема та же что ничего не фильтруеца
Погуглиб бы хоть.... Обратился к AI.... Чтобы хотябы не писать такой спагети код....

Java:
@SubscribeEvent
public static void onLivingUpdate(LivingEvent.LivingUpdateEvent event) {
    if (event.getEntityLiving() instanceof PlayerEntity) {
        PlayerEntity player = (PlayerEntity) event.getEntityLiving();
        String input = player.getDisplayName().getString();
        String[] patterns = {"§c\\? §f(.*?) §r", "\\? Герцог (.*?) §", "\\? Барон (.*?) §", "\\? Элита (.*?) §", "\\? Принц (.*?) §", "\\? Аспид (.*?) §", "\\? Титан (.*?) §"};

        for (String pattern : patterns) {
            Matcher matcher = Pattern.compile(pattern).matcher(input);
            if (matcher.find()) {
                System.out.println(matcher.group(1));
                return;
            }
        }
        System.out.println(input);
    } else if (event.getEntityLiving() instanceof MobEntity) {
        System.out.println();
    }
}
 
346
25
94
По пунктам:
1) Проверьте регистрацию события.
2) Используйте логгер из Log4J вместо sOut.
3) Компилировать паттерн каждый апдейт - дорого, кешируйте.
4) Событие стоит перенести на PlayerTickEvent, не забыть проверить фазу.
 
1,371
112
241
очередной супер гений, который пишет мега чит-мод для крупного анархического сервера FunTime
Да это и так ясно.
займись нормальными делами и прекрати заниматься ерундой
Так клёво же, +актив форуму)))
Почему не будет?
Ты пишешь мод с серверной частью -> сервер должен установить твой мод. Уж не говоря о Forge.
 
Сверху