Invalidate plugin class cache with patcher info
This commit is contained in:
parent
19256c504a
commit
64d48c6a00
|
@ -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)) {
|
||||
|
|
|
@ -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<PluginTransformer> transformerList = new ArrayList<>();
|
||||
private final JarRemapper toBukkitRemapper;
|
||||
private final JarRemapper toNmsRemapper;
|
||||
private final List<PluginPatcher> 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<PluginPatcher> getPatchers() {
|
||||
return patchers;
|
||||
}
|
||||
|
||||
private static long pkgOffset, clOffset, mdOffset, fdOffset, mapOffset;
|
||||
|
||||
static {
|
||||
|
|
|
@ -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<PluginTransformer> transformerList) {
|
||||
public static List<PluginPatcher> load(List<PluginTransformer> 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<PluginPatcher> loadFromJar(File file) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user