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;
}
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");
}
}
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);
}
}
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);
}
}
}
}
Aggregations