diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/RecipeIteratorMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/RecipeIteratorMixin.java new file mode 100644 index 00000000..e9a1ddec --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/RecipeIteratorMixin.java @@ -0,0 +1,37 @@ +package io.izzel.arclight.common.mixin.bukkit; + +import io.izzel.arclight.common.bridge.item.crafting.IRecipeBridge; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.util.ResourceLocation; +import org.bukkit.craftbukkit.v.inventory.RecipeIterator; +import org.bukkit.inventory.Recipe; +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.Iterator; +import java.util.Map; + +@Mixin(value = RecipeIterator.class, remap = false) +public class RecipeIteratorMixin { + + // @formatter:off + @Shadow private Iterator> current; + @Shadow @Final private Iterator, Map>>> recipes; + // @formatter:on + + @Overwrite + public boolean hasNext() { + return (current != null && current.hasNext()) || recipes.hasNext(); + } + + @Overwrite + public Recipe next() { + if (current == null || !current.hasNext()) { + current = recipes.next().getValue().values().iterator(); + } + return ((IRecipeBridge) current.next()).bridge$toBukkitRecipe(); + } +} diff --git a/arclight-common/src/main/resources/mixins.arclight.bukkit.json b/arclight-common/src/main/resources/mixins.arclight.bukkit.json index 94ebd245..648f2453 100644 --- a/arclight-common/src/main/resources/mixins.arclight.bukkit.json +++ b/arclight-common/src/main/resources/mixins.arclight.bukkit.json @@ -36,6 +36,7 @@ "MaterialMixin", "PluginClassLoaderMixin", "PotionEffectTypeMixin", + "RecipeIteratorMixin", "WatchdogThreadMixin" ] } \ No newline at end of file