Make recipe streams sequential
This commit is contained in:
parent
e56f27ee6b
commit
ed027eecec
@ -85,7 +85,7 @@ object RecipeResolverManager : SimpleJsonResourceReloadListener(GsonBuilder().se
|
|||||||
|
|
||||||
fun interface Finder {
|
fun interface Finder {
|
||||||
/**
|
/**
|
||||||
* Returned stream should be thread safe (parallel)
|
* Returned stream MUST be sequential
|
||||||
*/
|
*/
|
||||||
fun find(server: MinecraftServer, json: JsonObject): Stream<ResolvedRecipe>
|
fun find(server: MinecraftServer, json: JsonObject): Stream<ResolvedRecipe>
|
||||||
}
|
}
|
||||||
@ -113,7 +113,7 @@ object RecipeResolverManager : SimpleJsonResourceReloadListener(GsonBuilder().se
|
|||||||
val isCritical = data["is_critical"]?.asBoolean ?: true
|
val isCritical = data["is_critical"]?.asBoolean ?: true
|
||||||
val ignoreDamageables = data["ignore_damageables"]?.asBoolean ?: false
|
val ignoreDamageables = data["ignore_damageables"]?.asBoolean ?: false
|
||||||
|
|
||||||
server.recipeManager.byType(findRecipeType).values.parallelStream()
|
server.recipeManager.byType(findRecipeType).values.stream()
|
||||||
.filter { !it.isIncomplete && !it.ingredients.stream().anyMatch { it.isActuallyEmpty } } // get rid of invalid recipes, second "isActuallyEmpty" is required because we do care about ingredients being "missing"
|
.filter { !it.isIncomplete && !it.ingredients.stream().anyMatch { it.isActuallyEmpty } } // get rid of invalid recipes, second "isActuallyEmpty" is required because we do care about ingredients being "missing"
|
||||||
.filter {
|
.filter {
|
||||||
!ignoreDamageables || it.ingredients.stream().flatMap { Arrays.stream(it.items) }.noneMatch { it.isDamageableItem }
|
!ignoreDamageables || it.ingredients.stream().flatMap { Arrays.stream(it.items) }.noneMatch { it.isDamageableItem }
|
||||||
@ -401,7 +401,7 @@ object RecipeResolverManager : SimpleJsonResourceReloadListener(GsonBuilder().se
|
|||||||
|
|
||||||
val stream = Streams.concat(*foundResolvers.map {
|
val stream = Streams.concat(*foundResolvers.map {
|
||||||
try {
|
try {
|
||||||
it.value.first.find(server, it.value.second).parallel()
|
it.value.first.find(server, it.value.second).sequential()
|
||||||
} catch(err: Throwable) {
|
} catch(err: Throwable) {
|
||||||
LOGGER.fatal("Recipe resolver ${it.key} experienced internal error", err)
|
LOGGER.fatal("Recipe resolver ${it.key} experienced internal error", err)
|
||||||
throw RuntimeException("Recipe resolver ${it.key} experienced internal error", err)
|
throw RuntimeException("Recipe resolver ${it.key} experienced internal error", err)
|
||||||
|
Loading…
Reference in New Issue
Block a user