Quick hack to "fix" DashLoader

This commit is contained in:
JFronny 2021-08-26 22:31:47 +02:00
parent ae2e2276bc
commit 649ca78d6c
No known key found for this signature in database
GPG Key ID: BEC5ACBBD4EE17E5
6 changed files with 71 additions and 4 deletions

View File

@ -7,6 +7,12 @@ repositories {
maven { url = 'https://server.bbkr.space/artifactory/libs-release'; name = "Required for canvas" }
maven { url = "https://minecraft.curseforge.com/api/maven"; name = "CurseForge (for canvas)" }
maven { url = "https://jitpack.io"; name = "jitpack (for StarScript)" }
maven {
url "https://oskarstrom.net/maven"
content {
includeGroup "net.oskarstrom"
}
}
}
dependencies {
@ -14,17 +20,22 @@ dependencies {
mappings "net.fabricmc:yarn:${project.minecraft_version}+${project.yarn_mappings}:v2"
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
modImplementation "net.fabricmc.fabric-api:fabric-api:0.38.2+1.17"
modImplementation "net.fabricmc.fabric-api:fabric-api:0.39.2+1.17"
modImplementation "com.terraformersmc:modmenu:2.0.5"
download("https://gitlab.com/jfmods/LibJF/-/jobs/artifacts/master/raw/latest-dev.jar?job=build_test", "libjf")
include modImplementation("com.github.MeteorDevelopment:starscript:0.1.5")
modApi("me.shedaniel.cloth:cloth-config-fabric:5.0.38")
modCompileOnly "grondag:frex-mc117:+"
modRuntime("grondag:canvas-mc117-1.17:+") {
exclude(group: "me.shedaniel.cloth")
}
//modRuntime("grondag:canvas-mc117-1.17:+") {
// exclude(group: "me.shedaniel.cloth")
//}
testImplementation('org.junit.jupiter:junit-jupiter:5.6.2')
//DashLoader "compatibility"
modImplementation ('net.oskarstrom:DashLoader:2.1-dev7') {
exclude group: 'net.fabricmc.fabric-api'
}
}
test {

View File

@ -1,5 +1,6 @@
package io.gitlab.jfronny.respackopts;
import io.gitlab.jfronny.respackopts.integration.dashloader.DashLoaderCompat;
import io.gitlab.jfronny.respackopts.data.entry.ConfigBranch;
import io.gitlab.jfronny.respackopts.data.entry.ConfigEntry;
import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
@ -58,6 +59,7 @@ public class GuiFactory {
builder.setSavingRunnable(() -> {
Respackopts.save();
Respackopts.forceRespackReload = true;
DashLoaderCompat.forceReload = true;
Respackopts.reloadData();
});
ConfigCategory config = builder.getOrCreateCategory(getText(resourcepackid, source.getVersion() < 4 ? "respackopts.title" : "rpo"));

View File

@ -3,6 +3,7 @@ package io.gitlab.jfronny.respackopts;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import io.gitlab.jfronny.libjf.data.WrappedPack;
import io.gitlab.jfronny.respackopts.integration.dashloader.DashLoaderCompat;
import io.gitlab.jfronny.respackopts.data.DirRpo;
import io.gitlab.jfronny.respackopts.data.PackCapability;
import io.gitlab.jfronny.respackopts.data.Respackmeta;
@ -53,6 +54,8 @@ public class Respackopts implements ClientModInitializer {
public static Starscript STAR_SCRIPT;
public static final Boolean DASHLOADER_PRESENT = FabricLoader.getInstance().isModLoaded("dashloader");
public static final Gson GSON;
public static GuiFactory factory = new GuiFactory();
public static boolean forceRespackReload = false;
@ -98,6 +101,7 @@ public class Respackopts implements ClientModInitializer {
} catch (IOException e) {
LOGGER.error("Could not initialize config directory", e);
}
if (DASHLOADER_PRESENT) DashLoaderCompat.hookDashLoader();
if (FabricLoader.getInstance().isDevelopmentEnvironment())
SAVE_ACTIONS.add(() -> LOGGER.info("Save"));
SAVE_ACTIONS.add(() -> {

View File

@ -3,6 +3,7 @@ package io.gitlab.jfronny.respackopts.integration;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
import io.gitlab.jfronny.respackopts.Respackopts;
import io.gitlab.jfronny.respackopts.integration.dashloader.DashLoaderCompat;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigCategory;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
@ -23,6 +24,7 @@ public class ModMenuCompat implements ModMenuApi {
ConfigEntryBuilder entryBuilder = builder.entryBuilder();
builder.setSavingRunnable(() -> {
Respackopts.save();
DashLoaderCompat.forceReload = true;
Respackopts.forceReloadResources();
});
AtomicBoolean categoryAdded = new AtomicBoolean(false);

View File

@ -0,0 +1,19 @@
package io.gitlab.jfronny.respackopts.integration.dashloader;
import net.oskarstrom.dashloader.DashLoader;
import java.lang.reflect.Field;
public class DashLoaderCompat {
public static boolean forceReload = false;
public static void hookDashLoader() {
try {
Field instance = DashLoader.class.getDeclaredField("instance");
instance.setAccessible(true);
instance.set(null, new HackedDashLoader((DashLoader) instance.get(null)));
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,29 @@
package io.gitlab.jfronny.respackopts.integration.dashloader;
import net.oskarstrom.dashloader.DashLoader;
import net.oskarstrom.dashloader.util.enums.DashCachePaths;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Collection;
public class HackedDashLoader extends DashLoader {
public HackedDashLoader(DashLoader previous) {
super(previous.getAssignedClassLoader().getParent());
initialize();
}
@Override
public void reload(Collection<String> resourcePacks) {
if (DashLoaderCompat.forceReload)
for (DashCachePaths value : DashCachePaths.values()) {
try {
Files.deleteIfExists(value.getPath());
} catch (IOException e) {
e.printStackTrace();
}
}
super.reload(resourcePacks);
DashLoaderCompat.forceReload = false;
}
}