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.Hasher;
|
||||||
import com.google.common.hash.Hashing;
|
import com.google.common.hash.Hashing;
|
||||||
import cpw.mods.modlauncher.api.LamdbaExceptionUtils;
|
import cpw.mods.modlauncher.api.LamdbaExceptionUtils;
|
||||||
|
import io.izzel.arclight.api.PluginPatcher;
|
||||||
import io.izzel.arclight.common.mod.ArclightMod;
|
import io.izzel.arclight.common.mod.ArclightMod;
|
||||||
import io.izzel.arclight.i18n.ArclightConfig;
|
import io.izzel.arclight.i18n.ArclightConfig;
|
||||||
import io.izzel.tools.product.Product;
|
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 final Path basePath = Paths.get(".arclight/class_cache");
|
||||||
private ScheduledExecutorService executor;
|
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() {
|
public Impl() {
|
||||||
if (!enabled) return;
|
if (!enabled) return;
|
||||||
executor = Executors.newSingleThreadScheduledExecutor(r -> {
|
executor = Executors.newSingleThreadScheduledExecutor(r -> {
|
||||||
|
@ -91,8 +106,7 @@ public abstract class ArclightClassCache implements AutoCloseable {
|
||||||
if (!Files.isDirectory(basePath)) {
|
if (!Files.isDirectory(basePath)) {
|
||||||
Files.createDirectories(basePath);
|
Files.createDirectories(basePath);
|
||||||
}
|
}
|
||||||
String current = ModList.get().getModContainerById("arclight")
|
String current = currentVersionInfo();
|
||||||
.orElseThrow(IllegalStateException::new).getModInfo().getVersion().toString();
|
|
||||||
String store;
|
String store;
|
||||||
Path version = basePath.resolve(".version");
|
Path version = basePath.resolve(".version");
|
||||||
if (Files.exists(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.BiMap;
|
||||||
import com.google.common.collect.HashBiMap;
|
import com.google.common.collect.HashBiMap;
|
||||||
|
import io.izzel.arclight.api.PluginPatcher;
|
||||||
import io.izzel.arclight.api.Unsafe;
|
import io.izzel.arclight.api.Unsafe;
|
||||||
import io.izzel.arclight.common.mod.util.log.ArclightI18nLogger;
|
import io.izzel.arclight.common.mod.util.log.ArclightI18nLogger;
|
||||||
import io.izzel.arclight.common.mod.util.remapper.patcher.ArclightPluginPatcher;
|
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 List<PluginTransformer> transformerList = new ArrayList<>();
|
||||||
private final JarRemapper toBukkitRemapper;
|
private final JarRemapper toBukkitRemapper;
|
||||||
private final JarRemapper toNmsRemapper;
|
private final JarRemapper toNmsRemapper;
|
||||||
|
private final List<PluginPatcher> patchers;
|
||||||
|
|
||||||
public ArclightRemapper() throws Exception {
|
public ArclightRemapper() throws Exception {
|
||||||
this.toNmsMapping = new JarMapping();
|
this.toNmsMapping = new JarMapping();
|
||||||
|
@ -82,7 +84,7 @@ public class ArclightRemapper {
|
||||||
this.transformerList.add(ArclightInterfaceInvokerGen.INSTANCE);
|
this.transformerList.add(ArclightInterfaceInvokerGen.INSTANCE);
|
||||||
this.transformerList.add(ArclightRedirectAdapter.INSTANCE);
|
this.transformerList.add(ArclightRedirectAdapter.INSTANCE);
|
||||||
this.transformerList.add(ClassLoaderAdapter.INSTANCE);
|
this.transformerList.add(ClassLoaderAdapter.INSTANCE);
|
||||||
ArclightPluginPatcher.load(this.transformerList);
|
this.patchers = ArclightPluginPatcher.load(this.transformerList);
|
||||||
toBukkitMapping.setFallbackInheritanceProvider(GlobalClassRepo.inheritanceProvider());
|
toBukkitMapping.setFallbackInheritanceProvider(GlobalClassRepo.inheritanceProvider());
|
||||||
this.toBukkitRemapper = new LenientJarRemapper(toBukkitMapping);
|
this.toBukkitRemapper = new LenientJarRemapper(toBukkitMapping);
|
||||||
this.toNmsRemapper = new LenientJarRemapper(toNmsMapping);
|
this.toNmsRemapper = new LenientJarRemapper(toNmsMapping);
|
||||||
|
@ -105,6 +107,10 @@ public class ArclightRemapper {
|
||||||
return transformerList;
|
return transformerList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<PluginPatcher> getPatchers() {
|
||||||
|
return patchers;
|
||||||
|
}
|
||||||
|
|
||||||
private static long pkgOffset, clOffset, mdOffset, fdOffset, mapOffset;
|
private static long pkgOffset, clOffset, mdOffset, fdOffset, mapOffset;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|
|
@ -14,6 +14,7 @@ import java.io.InputStreamReader;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
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");
|
File pluginFolder = new File("plugins");
|
||||||
if (pluginFolder.exists()) {
|
if (pluginFolder.exists()) {
|
||||||
ArclightMod.LOGGER.info("patcher.loading");
|
ArclightMod.LOGGER.info("patcher.loading");
|
||||||
|
@ -51,9 +52,11 @@ public class ArclightPluginPatcher implements PluginTransformer {
|
||||||
list.sort(Comparator.comparing(PluginPatcher::priority));
|
list.sort(Comparator.comparing(PluginPatcher::priority));
|
||||||
ArclightMod.LOGGER.info("patcher.loaded", list.size());
|
ArclightMod.LOGGER.info("patcher.loaded", list.size());
|
||||||
transformerList.add(new ArclightPluginPatcher(list));
|
transformerList.add(new ArclightPluginPatcher(list));
|
||||||
|
return list;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Optional<PluginPatcher> loadFromJar(File file) {
|
private static Optional<PluginPatcher> loadFromJar(File file) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user