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

NBTToJson

Discussion in 'Модификации клиента' started by sashabelii, Sep 25, 2014.

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

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

    Trophy Points:
    123
    Имя в Minecraft:
    sashabelii
    Доброго.

    Нужно хранить данные о ItemStack'е в Json. Среди ванильных классов нашел JsonToNBT. Хорошо, десериализатор есть.
    Code:
        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;
            }
        }
    Но проблемы это не решает. До сих пор сыпятся ошибки предвидения тех или иных типов. На сколько я понимаю, нужен адекватный сериализатор. Мб кто-нибудь уже писал?
     
    Last edited: Sep 25, 2014
  2. Хостинг MineCraft
    <
  3. DragoSFire

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

    Trophy Points:
    123
    Skype:
    dragosfire2012
    Имя в Minecraft:
    DragoSFire
  4. saharin94

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

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

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

    Trophy Points:
    123
    Имя в Minecraft:
    sashabelii
    Там Scala, которую я плохо понимаю, ибо не работал с ней. Судя из названия классов, там только десериализатор для разных случаев, который я уже использую:
    Code:
        def deserialize(json: JsonElement, tpe: Type, ctx: JsonDeserializationContext): NBTBase =
          JsonToNBT.func_150315_a(json.toString.replaceAll("\"", ""))
    
    Заметил внутренний класс JsonItemStack, который достает из всего ItemStack'а(если я правильно понял) лишь имя предмета:
    Code:
      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:
     

Share This Page