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

Стартап Храним не видимые для игроков данные

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

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

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

    Баллы:
    103
    Честно говоря, не знаю почему, но я написал небольшой класс который может преобразовывать строки в строки состоящие только из цветовых кодов. Таким образом, эти строки не будут видеть игроки.
    - Для чего это можно использовать?
    - Например:
    Раньше, чтобы запомнить, что предмет какой-то особенный, нам нужно было добавлять какую-нибудь строку, которая говорила, что этот предмет особенный. Игроки видят это строку. А используя мою разработку, можно скрыть это строку от глаз игроков. Думаю, еще применения сами придумаете.

    Так вот, как этим пользоваться:
    1. Внизу будет приложен код, создаете класс вставляете, ну, это понятно.
    2. Для использования есть 2 статических метода:
    String parseColorCodes(String codes, char colorSymbol) - расшифровывает строку из цветовых кодов.
    codes - это строка которую надо расшифровать
    colorSymbol - это символ стоящий перед цветовым кодом(обычно это §)

    String stringToColorCodes(String string, char colorSymbol)
    string - это строка которую надо зашифровать
    colorSymbol - это символ стоящий перед цветовым кодом(обычно это §)

    Вот и код:
    Код:
    import java.util.ArrayList;
    import java.util.List;
    
    public class ColorCodesParser {
    
       private static final String SYMBOL_SPLITTER = "l";
    
       // Преобразование строки из кодов цветов в обычную строку
       public static String parseColorCodes(String codes, char colorSymbol) {
          char[] chars = codes.toCharArray();
          codes = "";
    
          for (char sub : chars) {
             if (sub == colorSymbol)
                continue;
             codes += sub;
          }
    
          String[] split = codes.split(SYMBOL_SPLITTER);
          List<Byte> bytesList = new ArrayList<>();
    
          for (String str : split)
          bytesList.add(new Long(Long.parseLong(str, 16)).byteValue());
    
          byte[] bytes = new byte[bytesList.size()];
          for (int i = 0; i < bytes.length; i++)
          bytes[i] = bytesList.get(i);
    
          return new String(bytes);
       }
    
       // Преобразование обычной строки в строку из цветовых кодов
       public static String stringToColorCodes(String string, char colorSymbol) {
          String out = "";
    
          for (byte sub : string.getBytes())
          out += insertColorCodes(Integer.toHexString((int) sub), colorSymbol) + String.valueOf(colorSymbol) + SYMBOL_SPLITTER;
    
          return out;
       }
    
       // Вставка перед каждым символом символа обозначающего то, что символ это цветовой код
       private static String insertColorCodes(String string, char colorSymbol) {
          String out = "";
          for (char sub : string.toCharArray())
          out += String.valueOf(colorSymbol) + sub;
          return out;
       }
    
    /** * Цвета кодирующие другие символы: * 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f * Иначе говоря, hex * Цвет кодирующий разделитель символов: * l * Пробел - специальный символ кодирующий только пробел * **/}
    

    Вот и все. Жду ваших коментариев.

    P.S. Завтра еще скрины кину.
     
    Последнее редактирование: 29 дек 2015
  2. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Уже находил точно такую же тулзу на офф форуме. Не исключено что это она и есть.
    Метод паршивый - пакеты намного лучше.
     
  3. Автор темы
    kirill2011s

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

    Баллы:
    103
    Честно, не копировал, сам писал и такого треда не встречал. Может, пакеты и лучше, но это значительно проще. Правда, строки с русскими символами получаются ну очень длинные.
     
  4. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Не знаю где и почему проще когда можно написать листенер и определенные строки будут просто не отправляться на клиент.
     
  5. CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    А через пакеты можно отправлять кастомную максимальную прочность предмета?
     
  6. Автор темы
    kirill2011s

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

    Баллы:
    103
    Так ставишь один раз на предмет нужную строку и не паришься.
     
  7. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Насколько я знаю - это клиентсайд.

    На каждый предмет. А если у тебя их сотни?)
    А если потом надо посмотреть скрытую строку?
    Код написан нормально, но сам метод - так себе.
     
  8. Автор темы
    kirill2011s

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

    Баллы:
    103
    Для просмотра получаем ее из lore, дешифруем и все. А по поводу сотни, например: Игрок получает командой супер меч у которого в Лоре моим способом подписано, что он супер. При ударе мечем мы получаем Лоре меча, дешифруем и узнаем, что этот меч особенный и может нанести доп. урон.
     
  9. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Но ведь можно использовать стандартные атрибуты для этого :nerd:
     

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