1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Изменить аргумент один раз

Тема в разделе "Разработка плагинов для новичков", создана пользователем Kurumi, 12 сен 2019.

  1. Автор темы
    Kurumi

    Kurumi Активный участник Пользователь

    Баллы:
    76
    Всем привет
    Нужно заменять в плагине один аргумент в command preprocess event только один раз.
    То есть, если команда, например, такая
    Код:
    /tell 228 228!
    нужно заменить только первый аргумент на ник игрока, а второй не трогать
    Как это можно сделать?
     
  2. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    String#replaceFirst
     
  3. Автор темы
    Kurumi

    Kurumi Активный участник Пользователь

    Баллы:
    76
    Я тоже так думал, но 228 меняется на ник игрока в обоих аргументах
     
  4. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    args[0] = args[0].replace("228", "user");
    String str = String.join(" ", args);
     
  5. Автор темы
    Kurumi

    Kurumi Активный участник Пользователь

    Баллы:
    76
    А если мне нетзвестно, какой именно аргумент будет именем игрока?
     
  6. MurlikMurlik

    MurlikMurlik Активный участник Пользователь

    Баллы:
    96
    Дак ожидай, что именно определенный аргумент будет принимать только игрока. Если тебе нужно что бы игрока принимал любой, то делай итерацию по онлайн игрокам что бы отыскать похожего.
     
  7. Автор темы
    Kurumi

    Kurumi Активный участник Пользователь

    Баллы:
    76
    Ты реплейсишь тот же самый арг[0]
     
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Так, а что тебе тогда надо то?
     
  9. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Нате.
    Код:
            for(int i = 0; i<args.length;i++) {
                if(isUser(args[i])) {
                    args[i] = "user";
                    break;
                }
            }
     
  10. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    То пишет что ему только первый, то теперь сам не знает что хочет. Определись сперва.
     
  11. Автор темы
    Kurumi

    Kurumi Активный участник Пользователь

    Баллы:
    76
    Окей, объясню подробнее.
    Игрок пишет любую известеую нам команду(например, /pay 1 100). Вместо "1" мне нужно подставлять имя игрока из мапы. Все работало с методом replaceFirst(), но до того, как я ввёл /pay 1 1.
    Обе однёрки заменились на ник игрока.
    Это мне и нужно исправить.
    Так как я делаю подобную замену под любую команду, я нн могу знать заранее в каком именно месте буднт стоять число, олицетворяющее ник игрока
     
  12. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Теперь понял. /pay userlist:1 100 /pay 50 userlist:2
     
  13. Автор темы
    Kurumi

    Kurumi Активный участник Пользователь

    Баллы:
    76
    Не допёр
     
  14. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну вот некий userlist:* и будет отличительной строкой. Так ты его и перехватишь в нужном месте.
    Иначе только вести список команд, где порядок отличается.
     

Поделиться этой страницей