diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/ArclightClassCache.java b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/ArclightClassCache.java index 25874086..2ab6d67e 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/ArclightClassCache.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/ArclightClassCache.java @@ -3,6 +3,7 @@ package io.izzel.arclight.common.mod.util.remapper; import com.google.common.hash.Hasher; import com.google.common.hash.Hashing; import cpw.mods.modlauncher.api.LamdbaExceptionUtils; +import io.izzel.arclight.api.PluginPatcher; import io.izzel.arclight.common.mod.ArclightMod; import io.izzel.arclight.i18n.ArclightConfig; import io.izzel.tools.product.Product; @@ -69,6 +70,20 @@ public abstract class ArclightClassCache implements AutoCloseable { private final Path basePath = Paths.get(".arclight/class_cache"); private ScheduledExecutorService executor; + private static String currentVersionInfo() { + var builder = new StringBuilder(); + var arclight = ModList.get().getModContainerById("arclight") + .orElseThrow(IllegalStateException::new).getModInfo().getVersion().toString(); + builder.append(arclight); + for (PluginPatcher patcher : ArclightRemapper.INSTANCE.getPatchers()) { + builder.append('\0') + .append(patcher.getClass().getName()) + .append('\0') + .append(patcher.version()); + } + return builder.toString(); + } + public Impl() { if (!enabled) return; executor = Executors.newSingleThreadScheduledExecutor(r -> { @@ -91,8 +106,7 @@ public abstract class ArclightClassCache implements AutoCloseable { if (!Files.isDirectory(basePath)) { Files.createDirectories(basePath); } - String current = ModList.get().getModContainerById("arclight") - .orElseThrow(IllegalStateException::new).getModInfo().getVersion().toString(); + String current = currentVersionInfo(); String store; Path version = basePath.resolve(".version"); if (Files.exists(version)) { diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/ArclightRemapper.java b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/ArclightRemapper.java index e750a9b7..b2966f49 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/ArclightRemapper.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/ArclightRemapper.java @@ -2,6 +2,7 @@ package io.izzel.arclight.common.mod.util.remapper; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; +import io.izzel.arclight.api.PluginPatcher; import io.izzel.arclight.api.Unsafe; import io.izzel.arclight.common.mod.util.log.ArclightI18nLogger; import io.izzel.arclight.common.mod.util.remapper.patcher.ArclightPluginPatcher; @@ -57,6 +58,7 @@ public class ArclightRemapper { private final List transformerList = new ArrayList<>(); private final JarRemapper toBukkitRemapper; private final JarRemapper toNmsRemapper; + private final List patchers; public ArclightRemapper() throws Exception { this.toNmsMapping = new JarMapping(); @@ -82,7 +84,7 @@ public class ArclightRemapper { this.transformerList.add(ArclightInterfaceInvokerGen.INSTANCE); this.transformerList.add(ArclightRedirectAdapter.INSTANCE); this.transformerList.add(ClassLoaderAdapter.INSTANCE); - ArclightPluginPatcher.load(this.transformerList); + this.patchers = ArclightPluginPatcher.load(this.transformerList); toBukkitMapping.setFallbackInheritanceProvider(GlobalClassRepo.inheritanceProvider()); this.toBukkitRemapper = new LenientJarRemapper(toBukkitMapping); this.toNmsRemapper = new LenientJarRemapper(toNmsMapping); @@ -105,6 +107,10 @@ public class ArclightRemapper { return transformerList; } + public List getPatchers() { + return patchers; + } + private static long pkgOffset, clOffset, mdOffset, fdOffset, mapOffset; static { diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/patcher/ArclightPluginPatcher.java b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/patcher/ArclightPluginPatcher.java index f6eb00ab..5876afbd 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/patcher/ArclightPluginPatcher.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/patcher/ArclightPluginPatcher.java @@ -14,6 +14,7 @@ import java.io.InputStreamReader; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Optional; @@ -35,7 +36,7 @@ public class ArclightPluginPatcher implements PluginTransformer { } } - public static void load(List transformerList) { + public static List load(List transformerList) { File pluginFolder = new File("plugins"); if (pluginFolder.exists()) { ArclightMod.LOGGER.info("patcher.loading"); @@ -51,9 +52,11 @@ public class ArclightPluginPatcher implements PluginTransformer { list.sort(Comparator.comparing(PluginPatcher::priority)); ArclightMod.LOGGER.info("patcher.loaded", list.size()); transformerList.add(new ArclightPluginPatcher(list)); + return list; } } } + return Collections.emptyList(); } private static Optional loadFromJar(File file) {