Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

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

Discussion in 'Разработка плагинов для новичков' started by kirill2011s, Apr 27, 2015.

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

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

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

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

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

    Вот и код:
    Code:
    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. Завтра еще скрины кину.
     
    Last edited: Dec 29, 2015
  2. Хостинг MineCraft
    <
  3. ql_Nik_lp

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

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

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

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

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

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

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

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

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

    Trophy Points:
    103
    Так ставишь один раз на предмет нужную строку и не паришься.
     
  8. ql_Nik_lp

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

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

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

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

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

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

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

Share This Page