Search in sources :

Example 1 with DeserializationException

use of com.glisco.numismaticoverhaul.villagers.exceptions.DeserializationException in project numismatic-overhaul by wisp-forest.

the class VillagerJsonHelper method getItemStackFromJson.

public static ItemStack getItemStackFromJson(JsonObject json) {
    if (!json.has("item"))
        throw new DeserializationException("ItemStack missing item ID " + json);
    Item item = getItemFromID(json.get("item").getAsString());
    int count = json.has("count") ? json.get("count").getAsInt() : 1;
    ItemStack stack = new ItemStack(item, count);
    if (json.has("tag")) {
        String toParse = json.get("tag").getAsJsonObject().toString();
        CompoundTag stackTag = null;
        try {
            stackTag = new StringNbtReader(new StringReader(toParse)).parseCompoundTag();
        } catch (CommandSyntaxException e) {
            VillagerTradesHandler.addLoadingException(new DeserializationException("Tag parsing error: " + e.getMessage()));
        }
        if (stackTag != null)
            stack.setTag(stackTag);
    }
    return stack;
}
Also used : Item(net.minecraft.item.Item) StringNbtReader(net.minecraft.nbt.StringNbtReader) StringReader(com.mojang.brigadier.StringReader) ItemStack(net.minecraft.item.ItemStack) DeserializationException(com.glisco.numismaticoverhaul.villagers.exceptions.DeserializationException) CompoundTag(net.minecraft.nbt.CompoundTag) CommandSyntaxException(com.mojang.brigadier.exceptions.CommandSyntaxException)

Example 2 with DeserializationException

use of com.glisco.numismaticoverhaul.villagers.exceptions.DeserializationException in project numismatic-overhaul by wisp-forest.

the class TradeJsonAdapter method loadDefaultStats.

protected void loadDefaultStats(JsonObject jsonObject, boolean verifyPrice) {
    this.max_uses = VillagerJsonHelper.int_getOrDefault(jsonObject, "max_uses", 12);
    this.villager_experience = VillagerJsonHelper.int_getOrDefault(jsonObject, "villager_experience", 5);
    this.price_multiplier = VillagerJsonHelper.float_getOrDefault(jsonObject, "price_multiplier", 0.05f);
    if (verifyPrice) {
        if (!jsonObject.has("price"))
            throw new DeserializationException("Missing price");
        VillagerJsonHelper.assertInt(jsonObject, "price");
        if (jsonObject.get("price").getAsInt() == 0)
            throw new DeserializationException("Price must not be zero");
    }
}
Also used : DeserializationException(com.glisco.numismaticoverhaul.villagers.exceptions.DeserializationException)

Example 3 with DeserializationException

use of com.glisco.numismaticoverhaul.villagers.exceptions.DeserializationException in project numismatic-overhaul by wisp-forest.

the class VillagerTradesHandler method loadProfession.

public static void loadProfession(Identifier fileId, JsonObject jsonRoot) {
    // Clear context
    DeserializationContext.clear();
    String fileName = "§a" + fileId.getNamespace() + "§f:§6" + fileId.getPath();
    Identifier professionId = Identifier.tryParse(jsonRoot.get("profession").getAsString());
    // Push path to context
    DeserializationContext.setFile(fileName);
    // Push profession to context
    DeserializationContext.setProfession(professionId.getPath());
    try {
        if (professionId.getPath().equals("wandering_trader")) {
            deserializeTrades(jsonRoot, NumismaticVillagerTradesRegistry::registerWanderingTraderTrade);
        } else {
            VillagerProfession profession = Registry.VILLAGER_PROFESSION.get(professionId);
            deserializeTrades(jsonRoot, (integer, factory) -> NumismaticVillagerTradesRegistry.registerVillagerTrade(profession, integer, factory));
        }
    } catch (DeserializationException e) {
        addLoadingException(e);
    }
}
Also used : NumismaticVillagerTradesRegistry(com.glisco.numismaticoverhaul.villagers.data.NumismaticVillagerTradesRegistry) Identifier(net.minecraft.util.Identifier) VillagerProfession(net.minecraft.village.VillagerProfession) DeserializationException(com.glisco.numismaticoverhaul.villagers.exceptions.DeserializationException)

Example 4 with DeserializationException

use of com.glisco.numismaticoverhaul.villagers.exceptions.DeserializationException in project numismatic-overhaul by wisp-forest.

the class VillagerTradesHandler method deserializeTrades.

private static void deserializeTrades(@NotNull JsonObject jsonRoot, BiConsumer<Integer, TradeOffers.Factory> tradeConsumer) {
    if (!jsonRoot.get("trades").isJsonObject())
        throw new DeserializationException(jsonRoot.get("trades") + " is not a JsonObject");
    // Iterate villager levels
    for (Map.Entry<String, JsonElement> entry : jsonRoot.get("trades").getAsJsonObject().entrySet()) {
        int level = professionKeys.get(entry.getKey());
        if (!entry.getValue().isJsonArray())
            throw new DeserializationException(entry.getValue() + " is not a JsonArray");
        JsonArray tradesArray = entry.getValue().getAsJsonArray();
        // Iterate trades in that level
        for (JsonElement tradeElement : tradesArray) {
            if (!tradeElement.isJsonObject()) {
                addLoadingException(new DeserializationException(tradeElement + " is not a JsonObject"));
                continue;
            }
            JsonObject trade = tradeElement.getAsJsonObject();
            // Push trade to context
            DeserializationContext.setTrade(trade);
            DeserializationContext.setLevel(level);
            if (!trade.has("type")) {
                throw new DeserializationException("Type missing");
            }
            TradeJsonAdapter adapter = tradeTypesRegistry.get(Identifier.tryParse(trade.get("type").getAsString()));
            if (adapter == null) {
                throw new DeserializationException("Unknown trade type " + trade.get("type").getAsString());
            }
            // Register trade
            try {
                tradeConsumer.accept(level, adapter.deserialize(trade));
            } catch (DeserializationException e) {
                addLoadingException(e);
            }
        }
    }
}
Also used : HashMap(java.util.HashMap) Map(java.util.Map) DeserializationException(com.glisco.numismaticoverhaul.villagers.exceptions.DeserializationException)

Aggregations

DeserializationException (com.glisco.numismaticoverhaul.villagers.exceptions.DeserializationException)4 NumismaticVillagerTradesRegistry (com.glisco.numismaticoverhaul.villagers.data.NumismaticVillagerTradesRegistry)1 StringReader (com.mojang.brigadier.StringReader)1 CommandSyntaxException (com.mojang.brigadier.exceptions.CommandSyntaxException)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 Item (net.minecraft.item.Item)1 ItemStack (net.minecraft.item.ItemStack)1 CompoundTag (net.minecraft.nbt.CompoundTag)1 StringNbtReader (net.minecraft.nbt.StringNbtReader)1 Identifier (net.minecraft.util.Identifier)1 VillagerProfession (net.minecraft.village.VillagerProfession)1