Further KubeJS optimization
This commit is contained in:
parent
4d397361e2
commit
613364ce91
|
|
@ -0,0 +1,32 @@
|
||||||
|
package org.embeddedt.modernfix.mixin.perf.kubejs;
|
||||||
|
|
||||||
|
import dev.latvian.kubejs.recipe.RecipeEventJS;
|
||||||
|
import dev.latvian.kubejs.recipe.RecipeJS;
|
||||||
|
import dev.latvian.kubejs.recipe.filter.RecipeFilter;
|
||||||
|
import org.spongepowered.asm.mixin.Final;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Overwrite;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Mixin(RecipeEventJS.class)
|
||||||
|
public class RecipeEventJSMixin {
|
||||||
|
@Shadow @Final private List<RecipeJS> originalRecipes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author embeddedt
|
||||||
|
* @reason parallelize filtering, then run the consumer on one thread
|
||||||
|
*/
|
||||||
|
@Overwrite(remap = false)
|
||||||
|
public void forEachRecipe(RecipeFilter filter, Consumer<RecipeJS> consumer) {
|
||||||
|
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());
|
||||||
|
filtered.forEach(consumer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
package org.embeddedt.modernfix.mixin.perf.kubejs;
|
||||||
|
|
||||||
|
import dev.latvian.kubejs.recipe.RecipeJS;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.item.crafting.Recipe;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
|
|
||||||
|
@Mixin(RecipeJS.class)
|
||||||
|
public class RecipeJSMixin {
|
||||||
|
/**
|
||||||
|
* @author embeddedt
|
||||||
|
* @reason some mods seem to not like this being called concurrently, not sure why this doesn't crash in other scripts
|
||||||
|
*/
|
||||||
|
@Redirect(method = "hasOutput", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/crafting/Recipe;getResultItem()Lnet/minecraft/world/item/ItemStack;"))
|
||||||
|
private ItemStack syncResultItem(Recipe<?> recipe) {
|
||||||
|
synchronized (RecipeJS.class) {
|
||||||
|
return recipe.getResultItem();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -43,7 +43,9 @@
|
||||||
"feature.measure_time.SimpleReloadableResourceManagerMixin",
|
"feature.measure_time.SimpleReloadableResourceManagerMixin",
|
||||||
"feature.measure_time.ProfiledReloadInstanceMixin",
|
"feature.measure_time.ProfiledReloadInstanceMixin",
|
||||||
"perf.kubejs.TagIngredientJSMixin",
|
"perf.kubejs.TagIngredientJSMixin",
|
||||||
"perf.kubejs.TagWrapperMixin"
|
"perf.kubejs.TagWrapperMixin",
|
||||||
|
"perf.kubejs.RecipeEventJSMixin",
|
||||||
|
"perf.kubejs.RecipeJSMixin"
|
||||||
],
|
],
|
||||||
"client": [
|
"client": [
|
||||||
"feature.measure_time.MinecraftMixin",
|
"feature.measure_time.MinecraftMixin",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user