aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkuba6000 <kuba.123123.6000@gmail.com>2022-09-14 23:48:50 +0200
committerkuba6000 <kuba.123123.6000@gmail.com>2022-09-14 23:48:50 +0200
commita59f3cf10006751d30212b7018839d0dfc29659f (patch)
treeb6ce89f01277f21cb08056fcca72d131e9a3f282 /src
parent16b17e16694d084f8d0868d60f733ec5dedc0605 (diff)
downloadGT5-Unofficial-a59f3cf10006751d30212b7018839d0dfc29659f.tar.gz
GT5-Unofficial-a59f3cf10006751d30212b7018839d0dfc29659f.tar.bz2
GT5-Unofficial-a59f3cf10006751d30212b7018839d0dfc29659f.zip
Add cache regeneration trigger config
Diffstat (limited to 'src')
-rw-r--r--src/main/java/kubatech/api/utils/ModUtils.java25
-rw-r--r--src/main/java/kubatech/config/Config.java23
-rw-r--r--src/main/java/kubatech/loaders/MobRecipeLoader.java14
3 files changed, 58 insertions, 4 deletions
diff --git a/src/main/java/kubatech/api/utils/ModUtils.java b/src/main/java/kubatech/api/utils/ModUtils.java
index e809fa607d..60ce5cbb2e 100644
--- a/src/main/java/kubatech/api/utils/ModUtils.java
+++ b/src/main/java/kubatech/api/utils/ModUtils.java
@@ -75,4 +75,29 @@ public class ModUtils {
return sortedList;
}
}
+
+ private static String modListVersionIgnoringModVersions = null;
+
+ public static String getModListVersionIgnoringModVersions() {
+ if (modListVersionIgnoringModVersions != null) return modListVersionIgnoringModVersions;
+ @SuppressWarnings("unchecked")
+ ArrayList<ModContainer> modlist = (ArrayList<ModContainer>)
+ ((ArrayList<ModContainer>) Loader.instance().getActiveModList()).clone();
+ String sortedList = modlist.stream()
+ .filter(m -> m.getMod() != null)
+ .sorted(Comparator.comparing(ModContainer::getModId))
+ .collect(StringBuilder::new, (a, b) -> a.append(b.getModId()), (a, b) -> a.append(", ")
+ .append(b))
+ .toString();
+ try {
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ modListVersionIgnoringModVersions = DatatypeConverter.printHexBinary(
+ md.digest(sortedList.getBytes(StandardCharsets.UTF_8)))
+ .toUpperCase();
+ return modListVersionIgnoringModVersions;
+ } catch (Exception e) {
+ modListVersionIgnoringModVersions = sortedList;
+ return sortedList;
+ }
+ }
}
diff --git a/src/main/java/kubatech/config/Config.java b/src/main/java/kubatech/config/Config.java
index 72044ae899..b09de66910 100644
--- a/src/main/java/kubatech/config/Config.java
+++ b/src/main/java/kubatech/config/Config.java
@@ -30,6 +30,19 @@ public class Config {
}
public static boolean mobHandlerEnabled = true;
+
+ public enum _CacheRegenerationTrigger {
+ Never,
+ ModAdditionRemoval,
+ ModAdditionRemovalChange,
+ Always;
+
+ public static _CacheRegenerationTrigger get(int oridinal) {
+ return values()[oridinal];
+ }
+ }
+
+ public static _CacheRegenerationTrigger regenerationTrigger = _CacheRegenerationTrigger.ModAdditionRemovalChange;
public static boolean includeEmptyMobs = true;
public static String[] mobBlacklist;
public static File configFile;
@@ -55,6 +68,16 @@ public class Config {
true,
"Enable \"Mob Drops\" NEI page and Extreme Extermination Chamber")
.getBoolean();
+ StringBuilder c = new StringBuilder("When will cache regeneration trigger? ");
+ for (_CacheRegenerationTrigger value : _CacheRegenerationTrigger.values())
+ c.append(value.ordinal()).append(" - ").append(value.name()).append(", ");
+ regenerationTrigger = _CacheRegenerationTrigger.get(configuration
+ .get(
+ Categories.mobHandler,
+ "CacheRegenerationTrigger",
+ _CacheRegenerationTrigger.ModAdditionRemovalChange.ordinal(),
+ c.toString())
+ .getInt());
includeEmptyMobs = configuration
.get(Categories.mobHandler, "IncludeEmptyMobs", true, "Include mobs that have no drops in NEI")
.getBoolean();
diff --git a/src/main/java/kubatech/loaders/MobRecipeLoader.java b/src/main/java/kubatech/loaders/MobRecipeLoader.java
index ed1e55e05b..b6c8d1e5c1 100644
--- a/src/main/java/kubatech/loaders/MobRecipeLoader.java
+++ b/src/main/java/kubatech/loaders/MobRecipeLoader.java
@@ -603,13 +603,19 @@ public class MobRecipeLoader {
File cache = Config.getConfigFile("MobRecipeLoader.cache");
Gson gson = GSONUtils.GSON_BUILDER.create();
- if (cache.exists()) {
+ String modlistversion;
+ if (Config.regenerationTrigger == Config._CacheRegenerationTrigger.ModAdditionRemoval)
+ modlistversion = ModUtils.getModListVersionIgnoringModVersions();
+ else modlistversion = ModUtils.getModListVersion();
+
+ if (Config.regenerationTrigger != Config._CacheRegenerationTrigger.Always && cache.exists()) {
LOG.info("Parsing Cached map");
Reader reader = null;
try {
reader = Files.newReader(cache, StandardCharsets.UTF_8);
MobRecipeLoaderCacheStructure s = gson.fromJson(reader, MobRecipeLoaderCacheStructure.class);
- if (s.version.equals(ModUtils.getModListVersion())) {
+ if (Config.regenerationTrigger == Config._CacheRegenerationTrigger.Never
+ || s.version.equals(modlistversion)) {
for (Map.Entry<String, ArrayList<MobDrop>> entry : s.moblist.entrySet()) {
try {
EntityLiving e;
@@ -642,7 +648,7 @@ public class MobRecipeLoader {
}
}
} else {
- LOG.info("Cached map doesn't exist, generating a new one");
+ LOG.info("Cached map doesn't exist or config option forced, generating a new one");
}
isInGenerationProcess = true;
@@ -1096,7 +1102,7 @@ public class MobRecipeLoader {
LOG.info("Saving generated map to file");
MobRecipeLoaderCacheStructure s = new MobRecipeLoaderCacheStructure();
- s.version = ModUtils.getModListVersion();
+ s.version = modlistversion;
s.moblist = new HashMap<>();
GeneralMobList.forEach((k, v) -> s.moblist.put(k, v.drops));
Writer writer = null;