diff --git a/src/main/java/ru/betterend/mixin/common/MinecraftServerMixin.java b/src/main/java/ru/betterend/mixin/common/MinecraftServerMixin.java new file mode 100644 index 00000000..9e7dac59 --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/MinecraftServerMixin.java @@ -0,0 +1,39 @@ +package ru.betterend.mixin.common; + +import java.util.Collection; +import java.util.concurrent.CompletableFuture; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.resource.ServerResourceManager; +import net.minecraft.server.MinecraftServer; +import ru.betterend.recipe.EndRecipeManager; + +@Mixin(MinecraftServer.class) +public class MinecraftServerMixin { + @Shadow + private ServerResourceManager serverResourceManager; + + @Inject(method = "reloadResources", at = @At(value = "RETURN"), cancellable = true) + private void onReload(Collection collection, CallbackInfoReturnable> info) { + injectRecipes(); + } + + @Inject(method = "loadWorld", at = @At(value = "RETURN"), cancellable = true) + private void onLoadWorld(CallbackInfo info) { + injectRecipes(); + } + + private void injectRecipes() { + if (FabricLoader.getInstance().isModLoaded("kubejs")) { + RecipeManagerAccessor accessor = (RecipeManagerAccessor) serverResourceManager.getRecipeManager(); + accessor.setRecipes(EndRecipeManager.getMap(accessor.getRecipes())); + } + } +} diff --git a/src/main/java/ru/betterend/mixin/common/RecipeManagerAccessor.java b/src/main/java/ru/betterend/mixin/common/RecipeManagerAccessor.java new file mode 100644 index 00000000..deaa0d66 --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/RecipeManagerAccessor.java @@ -0,0 +1,20 @@ +package ru.betterend.mixin.common; + +import java.util.Map; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import net.minecraft.recipe.Recipe; +import net.minecraft.recipe.RecipeManager; +import net.minecraft.recipe.RecipeType; +import net.minecraft.util.Identifier; + +@Mixin(RecipeManager.class) +public interface RecipeManagerAccessor { + @Accessor("recipes") + Map, Map>> getRecipes(); + + @Accessor("recipes") + void setRecipes(Map, Map>> recipes); +} \ No newline at end of file diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index 4162c4e2..02e32bc3 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -12,6 +12,8 @@ "ChorusPlantFeatureMixin", "ChorusFlowerBlockMixin", "ChorusPlantBlockMixin", + "RecipeManagerAccessor", + "MinecraftServerMixin", "TagGroupLoaderMixin", "EndermanEntityMixin", "LocateCommandMixin",