/*
* Copyright (C) 2022-2024 NotEnoughUpdates contributors
*
* This file is part of NotEnoughUpdates.
*
* NotEnoughUpdates is free software: you can redistribute it
* and/or modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation, either
* version 3 of the License, or (at your option) any later version.
*
* NotEnoughUpdates is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with NotEnoughUpdates. If not, see .
*/
package io.github.moulberry.notenoughupdates.util;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
import io.github.moulberry.notenoughupdates.autosubscribe.NEUAutoSubscribe;
import io.github.moulberry.notenoughupdates.events.RepositoryReloadEvent;
import io.github.moulberry.notenoughupdates.recipes.EssenceUpgrades;
import io.github.moulberry.notenoughupdates.recipes.NeuRecipe;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import java.lang.reflect.Type;
import java.util.Map;
import java.util.concurrent.locks.ReentrantLock;
import java.util.regex.Pattern;
@NEUAutoSubscribe
public class Constants {
private static class PatternSerializer implements JsonDeserializer, JsonSerializer {
@Override
public Pattern deserialize(
JsonElement json,
Type typeOfT,
JsonDeserializationContext context
) throws JsonParseException {
return Pattern.compile(json.getAsString());
}
@Override
public JsonElement serialize(Pattern src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src.pattern());
}
}
private static final Gson gson = new GsonBuilder()
.setPrettyPrinting()
.registerTypeAdapter(Pattern.class, new PatternSerializer())
.create();
public static JsonObject BONUSES;
public static JsonObject DISABLE;
public static JsonObject ENCHANTS;
public static JsonObject LEVELING;
public static JsonObject MISC;
public static JsonObject PETNUMS;
public static JsonObject PETS;
public static JsonObject PARENTS;
public static JsonObject ESSENCECOSTS;
public static JsonObject FAIRYSOULS;
public static JsonObject REFORGESTONES;
public static JsonObject TROPHYFISH;
public static JsonObject WEIGHT;
public static JsonObject RNGSCORE;
public static JsonObject ABIPHONE;
public static JsonObject ESSENCESHOPS;
public static JsonObject SBLEVELS;
public static JsonObject MUSEUM;
public static JsonObject BESTIARY;
public static JsonObject SACKS;
public static JsonObject HOPPITY;
public static JsonObject DYES;
public static JsonObject GEMSTONES;
public static JsonObject GARDEN;
private static final ReentrantLock lock = new ReentrantLock();
@SubscribeEvent
public void reload(RepositoryReloadEvent event) {
try {
lock.lock();
BONUSES = Utils.getConstant("bonuses", gson);
DISABLE = Utils.getConstant("disable", gson);
ENCHANTS = Utils.getConstant("enchants", gson);
LEVELING = Utils.getConstant("leveling", gson);
MISC = Utils.getConstant("misc", gson);
PETNUMS = Utils.getConstant("petnums", gson);
PETS = Utils.getConstant("pets", gson);
PARENTS = Utils.getConstant("parents", gson);
ESSENCECOSTS = Utils.getConstant("essencecosts", gson);
FAIRYSOULS = Utils.getConstant("fairy_souls", gson);
REFORGESTONES = Utils.getConstant("reforgestones", gson);
TROPHYFISH = Utils.getConstant("trophyfish", gson);
WEIGHT = Utils.getConstant("weight", gson);
RNGSCORE = Utils.getConstant("rngscore", gson);
ABIPHONE = Utils.getConstant("abiphone", gson);
ESSENCESHOPS = Utils.getConstant("essenceshops", gson);
SBLEVELS = Utils.getConstant("sblevels", gson);
MUSEUM = Utils.getConstant("museum", gson);
BESTIARY = Utils.getConstant("bestiary", gson);
SACKS = Utils.getConstant("sacks", gson);
HOPPITY = Utils.getConstant("hoppity", gson);
DYES = Utils.getConstant("dyes", gson);
GEMSTONES = Utils.getConstant("gemstones", gson);
GARDEN = Utils.getConstant("garden", gson);
parseEssenceCosts();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
lock.unlock();
}
}
public void parseEssenceCosts() {
for (Map.Entry entry : ESSENCECOSTS.entrySet()) {
NeuRecipe parsed = EssenceUpgrades.parseFromEssenceCostEntry(entry);
if (parsed != null) {
NotEnoughUpdates.INSTANCE.manager.registerNeuRecipe(parsed);
} else {
System.out.println("NULL for: " + entry);
}
}
}
}