diff options
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/kubatech/api/utils/ModUtils.java | 25 | ||||
-rw-r--r-- | src/main/java/kubatech/config/Config.java | 23 | ||||
-rw-r--r-- | src/main/java/kubatech/loaders/MobRecipeLoader.java | 14 |
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; |