summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
author zaaarf <zaaarf@proton.me>2023-02-07 03:25:13 +0100
committer zaaarf <zaaarf@proton.me>2023-02-07 03:25:13 +0100
commitd399b4ff664879dda3fdbd233f77bee6974eda42 (patch)
tree224921e9d8c96130d31ea3a357b08a489d5f29a9 /src/main
parent57ff40491bc452fbbae4ede3f36c2f605f277b86 (diff)
fix: moved out launcher plugin
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/ftbsc/lll/loader/LilleroLoader.java113
1 files changed, 0 insertions, 113 deletions
diff --git a/src/main/java/ftbsc/lll/loader/LilleroLoader.java b/src/main/java/ftbsc/lll/loader/LilleroLoader.java
deleted file mode 100644
index d7b0453..0000000
--- a/src/main/java/ftbsc/lll/loader/LilleroLoader.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package ftbsc.lll.loader;
-
-import cpw.mods.modlauncher.serviceapi.ILaunchPluginService;
-
-import ftbsc.lll.IInjector;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.MethodNode;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.List;
-import java.util.Map;
-import java.util.ServiceLoader;
-import java.util.stream.Collectors;
-
-public class LilleroLoader implements ILaunchPluginService {
- public static final Logger LOGGER = LogManager.getLogger("LilleroLoader");
- public static final String NAME = "lillero-loader";
-
- private List<IInjector> injectors = new ArrayList<>();
-
- public LilleroLoader() {
- LOGGER.info("Lillero Patch Loader initialized");
- }
-
- @Override
- public String name() {
- return NAME;
- }
-
-
- // Load mods requesting patches from resources
-
- @Override
- public void offerResource(Path resource, String name) {
- LOGGER.warn(String.format("Resource offered to us: %s @ '%s'", name, resource.toString()));
- }
-
- @Override
- public void addResources(List<Map.Entry<String, Path>> resources) {
- LOGGER.info("Resources being added:");
- for (Map.Entry<String, Path> row : resources) {
- LOGGER.info(String.format("> %s @ '%s'", row.getKey(), row.getValue().toString()));
- try {
- URL jarUrl = new URL("file:" + row.getValue().toString());
- URLClassLoader loader = new URLClassLoader(new URL[] { jarUrl });
- for (IInjector inj : ServiceLoader.load(IInjector.class, loader)) {
- LOGGER.info(String.format("Registering injector %s", inj.name()));
- this.injectors.add(inj);
- }
- } catch (MalformedURLException e) {
- LOGGER.error(String.format("Malformed URL for resource %s - 'file:%s'", row.getKey(), row.getValue().toString()));
- }
- }
- }
-
-
- // Filter only classes we need to patch
-
- @Override
- public EnumSet<Phase> handlesClass(Type classType, final boolean isEmpty) {
- throw new IllegalStateException("Outdated ModLauncher"); //mixin does it
- }
-
- private static final EnumSet<Phase> YAY = EnumSet.of(Phase.BEFORE);
- private static final EnumSet<Phase> NAY = EnumSet.noneOf(Phase.class);
-
- @Override
- public EnumSet<Phase> handlesClass(Type classType, final boolean isEmpty, final String reason) {
- if (isEmpty) return NAY;
- // TODO can I make a set of target classes to make this faster
- for (IInjector inj : this.injectors) {
- if (inj.targetClass().equals(classType.getClassName()))
- return YAY;
- }
- return NAY;
- }
-
-
- // Process classes and inject methods
-
- @Override
- public int processClassWithFlags(Phase phase, ClassNode classNode, Type classType, String reason) {
- LOGGER.debug("Processing class {} in phase {} of {}", classType.getClassName(), phase.name(), reason);
- List<IInjector> relevantInjectors = this.injectors.stream()
- .filter(i -> i.targetClass().equals(classType.getClassName()))
- .collect(Collectors.toList());
- boolean modified = false;
- for (MethodNode method : classNode.methods) {
- for (IInjector inj : relevantInjectors) {
- if (
- inj.methodName().equals(method.name) &&
- inj.methodDesc().equals(method.desc)
- ) {
- LOGGER.info(String.format("Patching %s.%s with %s", classType.getClassName(), method.name, inj.name()));
- inj.inject(classNode, method); // TODO catch patching exceptions
- modified = true;
- }
- }
- }
-
- return modified ? ComputeFlags.COMPUTE_FRAMES : ComputeFlags.NO_REWRITE;
- }
-}