Use a custom ForkJoinPool so that mod classes load correctly
This commit is contained in:
parent
df7cd20e59
commit
5cd80ebd27
|
|
@ -1,8 +1,10 @@
|
|||
package org.embeddedt.modernfix.mixin.perf.kubejs;
|
||||
|
||||
import cpw.mods.modlauncher.api.LamdbaExceptionUtils;
|
||||
import dev.latvian.kubejs.recipe.RecipeEventJS;
|
||||
import dev.latvian.kubejs.recipe.RecipeJS;
|
||||
import dev.latvian.kubejs.recipe.filter.RecipeFilter;
|
||||
import org.embeddedt.modernfix.util.ModUtil;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Overwrite;
|
||||
|
|
@ -25,7 +27,7 @@ public class RecipeEventJSMixin {
|
|||
if (filter == RecipeFilter.ALWAYS_TRUE) {
|
||||
this.originalRecipes.forEach(consumer);
|
||||
} else if (filter != RecipeFilter.ALWAYS_FALSE) {
|
||||
List<RecipeJS> filtered = this.originalRecipes.parallelStream().filter(filter).collect(Collectors.toList());
|
||||
List<RecipeJS> filtered = LamdbaExceptionUtils.uncheck(() -> ModUtil.commonPool.submit(() -> this.originalRecipes.parallelStream().filter(filter).collect(Collectors.toList())).get());
|
||||
filtered.forEach(consumer);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
|||
import org.embeddedt.modernfix.ModernFix;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ForkJoinPool;
|
||||
import java.util.concurrent.ForkJoinWorkerThread;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class ModUtil {
|
||||
|
|
@ -49,4 +51,21 @@ public class ModUtil {
|
|||
});
|
||||
return modsListening;
|
||||
}
|
||||
|
||||
private static final ClassLoader targetClassLoader = Thread.currentThread().getContextClassLoader();
|
||||
|
||||
private static class ModernFixForkJoinWorkerThread extends ForkJoinWorkerThread {
|
||||
ModernFixForkJoinWorkerThread(ForkJoinPool pool) {
|
||||
super(pool);
|
||||
/* Ensure that the context class loader is set correctly */
|
||||
this.setContextClassLoader(targetClassLoader);
|
||||
}
|
||||
}
|
||||
|
||||
public static ForkJoinPool commonPool = new ForkJoinPool(
|
||||
ForkJoinPool.getCommonPoolParallelism(),
|
||||
ModernFixForkJoinWorkerThread::new,
|
||||
null,
|
||||
false
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user