Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

kirill2011s

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

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

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

Вот и код:
Java:
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. Завтра еще скрины кину.
 
Последнее редактирование:
Уже находил точно такую же тулзу на офф форуме. Не исключено что это она и есть.
Метод паршивый - пакеты намного лучше.
 
Уже находил точно такую же тулзу на офф форуме. Не исключено что это она и есть.
Метод паршивый - пакеты намного лучше.
Честно, не копировал, сам писал и такого треда не встречал. Может, пакеты и лучше, но это значительно проще. Правда, строки с русскими символами получаются ну очень длинные.
 
Честно, не копировал, сам писал и такого треда не встречал. Может, пакеты и лучше, но это значительно проще. Правда, строки с русскими символами получаются ну очень длинные.
Не знаю где и почему проще когда можно написать листенер и определенные строки будут просто не отправляться на клиент.
 
Не знаю где и почему проще когда можно написать листенер и определенные строки будут просто не отправляться на клиент.
А через пакеты можно отправлять кастомную максимальную прочность предмета?
 
Не знаю где и почему проще когда можно написать листенер и определенные строки будут просто не отправляться на клиент.
Так ставишь один раз на предмет нужную строку и не паришься.
 
А через пакеты можно отправлять кастомную максимальную прочность предмета?
Насколько я знаю - это клиентсайд.

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


На каждый предмет. А если у тебя их сотни?)
А если потом надо посмотреть скрытую строку?
Код написан нормально, но сам метод - так себе.
Для просмотра получаем ее из lore, дешифруем и все. А по поводу сотни, например: Игрок получает командой супер меч у которого в Лоре моим способом подписано, что он супер. При ударе мечем мы получаем Лоре меча, дешифруем и узнаем, что этот меч особенный и может нанести доп. урон.
 
Для просмотра получаем ее из lore, дешифруем и все. А по поводу сотни, например: Игрок получает командой супер меч у которого в Лоре моим способом подписано, что он супер. При ударе мечем мы получаем Лоре меча, дешифруем и узнаем, что этот меч особенный и может нанести доп. урон.
Но ведь можно использовать стандартные атрибуты для этого :nerd:
 

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

Назад
Верх