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;
|
package org.embeddedt.modernfix.mixin.perf.kubejs;
|
||||||
|
|
||||||
|
import cpw.mods.modlauncher.api.LamdbaExceptionUtils;
|
||||||
import dev.latvian.kubejs.recipe.RecipeEventJS;
|
import dev.latvian.kubejs.recipe.RecipeEventJS;
|
||||||
import dev.latvian.kubejs.recipe.RecipeJS;
|
import dev.latvian.kubejs.recipe.RecipeJS;
|
||||||
import dev.latvian.kubejs.recipe.filter.RecipeFilter;
|
import dev.latvian.kubejs.recipe.filter.RecipeFilter;
|
||||||
|
import org.embeddedt.modernfix.util.ModUtil;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Overwrite;
|
import org.spongepowered.asm.mixin.Overwrite;
|
||||||
|
|
@ -25,7 +27,7 @@ public class RecipeEventJSMixin {
|
||||||
if (filter == RecipeFilter.ALWAYS_TRUE) {
|
if (filter == RecipeFilter.ALWAYS_TRUE) {
|
||||||
this.originalRecipes.forEach(consumer);
|
this.originalRecipes.forEach(consumer);
|
||||||
} else if (filter != RecipeFilter.ALWAYS_FALSE) {
|
} 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);
|
filtered.forEach(consumer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,8 @@ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||||
import org.embeddedt.modernfix.ModernFix;
|
import org.embeddedt.modernfix.ModernFix;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.ForkJoinPool;
|
||||||
|
import java.util.concurrent.ForkJoinWorkerThread;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class ModUtil {
|
public class ModUtil {
|
||||||
|
|
@ -49,4 +51,21 @@ public class ModUtil {
|
||||||
});
|
});
|
||||||
return modsListening;
|
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