fix jij loading by extracting nested mods, update thyroxine
All checks were successful
Publish to snapshot maven / build (push) Successful in 34s
All checks were successful
Publish to snapshot maven / build (push) Successful in 34s
This commit is contained in:
parent
e67ee70cb5
commit
32a95ce9cb
|
@ -26,13 +26,13 @@ dependencies {
|
|||
implementation(libs.thyroxine){
|
||||
isTransitive = false
|
||||
}
|
||||
compileOnly("org.apache.logging.log4j:log4j-slf4j2-impl:3.0.0-beta2")
|
||||
compileOnly("org.apache.logging.log4j:log4j-api:3.0.0-beta2")
|
||||
compileOnly("org.apache.logging.log4j:log4j-core:3.0.0-beta2")
|
||||
compileOnly("org.apache.logging.log4j:log4j-slf4j2-impl:2.22.1")
|
||||
compileOnly("org.apache.logging.log4j:log4j-api:2.22.1")
|
||||
compileOnly("org.apache.logging.log4j:log4j-core:2.22.1")
|
||||
|
||||
api(libs.mixin)
|
||||
api(libs.mixinextras)
|
||||
implementation(libs.nightconfig)
|
||||
api(libs.nightconfig)
|
||||
api(libs.annotations)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[versions]
|
||||
|
||||
thyroxine = "1.0.0-SNAPSHOT"
|
||||
thyroxine = "0.0.1-alpha.2"
|
||||
nightconfig = "3.7.2"
|
||||
mixin = "0.14.0+mixin.0.8.6"
|
||||
annotations = "24.1.0"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
plugins {
|
||||
java
|
||||
id("dev.frogmc.phytotelma") version "0.0.1-alpha.4"
|
||||
id("dev.frogmc.phytotelma") version "0.0.1-alpha.6"
|
||||
}
|
||||
|
||||
repositories {
|
||||
|
|
|
@ -122,6 +122,4 @@ public final class ModExtensions {
|
|||
((Collection<String>) l).forEach(c);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import java.lang.invoke.MethodHandles;
|
|||
import java.lang.invoke.MethodType;
|
||||
import java.net.MalformedURLException;
|
||||
import java.nio.file.*;
|
||||
import java.nio.file.attribute.BasicFileAttributes;
|
||||
import java.util.*;
|
||||
|
||||
import com.electronwill.nightconfig.core.UnmodifiableConfig;
|
||||
|
@ -76,9 +77,11 @@ public class Minecraft implements FrogPlugin {
|
|||
path.getFileName().toString().endsWith(FrogLoaderImpl.MOD_FILE_EXTENSION));
|
||||
this.getClass().getClassLoader().resources(ModPropertiesReader.PROPERTIES_FILE_NAME).map(ModPropertiesReader::readFile)
|
||||
.map(o -> o.orElse(null)).filter(Objects::nonNull).forEach(modProperties::add);
|
||||
|
||||
Map<Path, ModProperties> modPaths = new HashMap<>();
|
||||
Path jijCache = getJijCacheDir();
|
||||
for (Path mod : new HashSet<>(mods)) {
|
||||
findJiJMods(mod, mods, modPaths);
|
||||
findJiJMods(mod, mods, modPaths, jijCache);
|
||||
}
|
||||
|
||||
try {
|
||||
|
@ -89,13 +92,14 @@ public class Minecraft implements FrogPlugin {
|
|||
LoaderGui.execUnfulfilledDep(CrashReportGenerator.writeReport(e, modProperties), e, false);
|
||||
}
|
||||
|
||||
mods.stream().filter(p -> modProperties.contains(modPaths.get(p))).map(Path::toUri).map(uri -> {
|
||||
mods.stream().filter(p -> modProperties.contains(modPaths.get(p))).map(path -> {
|
||||
try {
|
||||
return uri.toURL();
|
||||
return path.toUri().toURL();
|
||||
} catch (MalformedURLException e) {
|
||||
throw new RuntimeException(e);
|
||||
LOGGER.warn("Failed to resolve url for {}", path, e);
|
||||
return null;
|
||||
}
|
||||
}).forEach(FrogLoaderImpl.getInstance().getClassloader()::addURL);
|
||||
}).filter(Objects::nonNull).forEach(FrogLoaderImpl.getInstance().getClassloader()::addURL);
|
||||
|
||||
modProperties.forEach(props -> {
|
||||
Object o = props.extensions().get(BuiltinExtensions.MIXIN_CONFIG);
|
||||
|
@ -118,7 +122,7 @@ public class Minecraft implements FrogPlugin {
|
|||
FrogLoaderImpl.getInstance().getClassloader().addURL(runtimePath.toUri().toURL());
|
||||
}
|
||||
|
||||
protected void findJiJMods(Path mod, Collection<Path> mods, Map<Path, ModProperties> modPaths) throws IOException {
|
||||
protected void findJiJMods(Path mod, Collection<Path> mods, Map<Path, ModProperties> modPaths, Path jijCache) throws IOException {
|
||||
Optional<ModProperties> opt = ModPropertiesReader.read(mod);
|
||||
if (opt.isPresent()) {
|
||||
ModProperties p = opt.get();
|
||||
|
@ -132,14 +136,45 @@ public class Minecraft implements FrogPlugin {
|
|||
for (List<UnmodifiableConfig> jars : entries) {
|
||||
for (UnmodifiableConfig jar : jars) {
|
||||
Path path = fs.getPath(jar.get("path")).toAbsolutePath();
|
||||
mods.add(path);
|
||||
findJiJMods(path, mods, modPaths);
|
||||
Path extracted = jijCache.resolve((String) jar.get("id"));
|
||||
if (!Files.exists(extracted)){
|
||||
Files.createDirectories(jijCache);
|
||||
Files.copy(path, extracted);
|
||||
}
|
||||
mods.add(extracted);
|
||||
findJiJMods(extracted, mods, modPaths, jijCache);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Path getJijCacheDir(){
|
||||
Path dir = FrogLoader.getInstance().getGameDir().resolve(".frogmc").resolve("jijcache");
|
||||
|
||||
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
||||
try {
|
||||
Files.walkFileTree(dir, new SimpleFileVisitor<>(){
|
||||
@Override
|
||||
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
|
||||
Files.delete(file);
|
||||
return super.visitFile(file, attrs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
|
||||
Files.delete(dir);
|
||||
return super.postVisitDirectory(dir, exc);
|
||||
}
|
||||
});
|
||||
} catch (IOException e) {
|
||||
LOGGER.error("Failed to clear extracted jij mods!", e);
|
||||
}
|
||||
}));
|
||||
|
||||
return dir;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<ModProperties> getMods() {
|
||||
return modProperties;
|
||||
|
|
Loading…
Reference in a new issue