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

NBTToJson

Тема в разделе "Модификации клиента", создана пользователем sashabelii, 25 сен 2014.

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

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

    Баллы:
    123
    Имя в Minecraft:
    sashabelii
    Доброго.

    Нужно хранить данные о ItemStack'е в Json. Среди ванильных классов нашел JsonToNBT. Хорошо, десериализатор есть.
    Код:
        private Gson json = new GsonBuilder().registerTypeAdapter(NBTBase.class, new NBTTypeAdapter()).setPrettyPrinting().create();
    
    ...
    
        private class NBTTypeAdapter implements JsonDeserializer<NBTBase> { // JsonSerializer<NBTBase>
    
            //TODO: NBTToJson
    
            /*
            @Override
            public JsonElement serialize(NBTBase src, Type typeOfSrc, JsonSerializationContext context) {
                return null;
            }
            */
    
            @Override
            public NBTBase deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
                try {
                    return JsonToNBT.func_150315_a(json.getAsString());
                } catch (NBTException e) { e.printStackTrace(); }
                return null;
            }
        }
    Но проблемы это не решает. До сих пор сыпятся ошибки предвидения тех или иных типов. На сколько я понимаю, нужен адекватный сериализатор. Мб кто-нибудь уже писал?
     
    Последнее редактирование: 25 сен 2014
  2. Хостинг MineCraft
    <
  3. DragoSFire

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

    Баллы:
    123
    Skype:
    dragosfire2012
    Имя в Minecraft:
    DragoSFire
  4. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    Можно посмотреть, как в плагине ShoppingCartReloaded это реализовано.
     
  5. Автор темы
    sashabelii

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

    Баллы:
    123
    Имя в Minecraft:
    sashabelii
    Там Scala, которую я плохо понимаю, ибо не работал с ней. Судя из названия классов, там только десериализатор для разных случаев, который я уже использую:
    Код:
        def deserialize(json: JsonElement, tpe: Type, ctx: JsonDeserializationContext): NBTBase =
          JsonToNBT.func_150315_a(json.toString.replaceAll("\"", ""))
    
    Заметил внутренний класс JsonItemStack, который достает из всего ItemStack'а(если я правильно понял) лишь имя предмета:
    Код:
      object JsonItemStackDeserializer
       extends JsonDeserializer[IJsonItemStack]{
    
        def deserialize(json: JsonElement, tpe: Type, ctx: JsonDeserializationContext): IJsonItemStack =
          json match{
            case prim: JsonPrimitive =>
              val str = prim.getAsString
              if(Aliases.items.contains(str))
                Aliases.items(str)
              else
                new JsonItemStack(str, false, 1, 0, null)
            case _ =>
              withoutShortcuts.fromJson(json, tpe)
          }
      }
    
    [DOUBLEPOST=1411656971,1411656864][/DOUBLEPOST]
    Опять же - Scala. Попробую разобраться :coffee:
     

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