package io.gitlab.jfronny.libjf.mixin; import com.google.common.collect.ImmutableMap; import com.google.gson.JsonObject; import io.gitlab.jfronny.libjf.Libjf; import io.gitlab.jfronny.libjf.data.RecipeUtil; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeManager; import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.Redirect; import java.util.ArrayList; import java.util.Iterator; import java.util.Map; @Mixin(RecipeManager.class) public class RecipeManagerMixin { @ModifyVariable(method = "apply", at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/Set;iterator()Ljava/util/Iterator;", ordinal = 0, remap = false)) private Iterator> filterIterator(Iterator> iterator) { ArrayList> replacement = new ArrayList<>(); while(iterator.hasNext()) { Map.Entry cur = iterator.next(); Identifier recipeId = cur.getKey(); if (RecipeUtil.getIdentifiersForRemoval().contains(recipeId.toString())) { Libjf.LOGGER.info("Blocking recipe by identifier: " + recipeId); } else { replacement.add(cur); } } return replacement.iterator(); } @Redirect(method = "apply", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/ImmutableMap$Builder;put(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/common/collect/ImmutableMap$Builder;", remap = false)) private ImmutableMap.Builder> onPutRecipe(ImmutableMap.Builder> builder, Object key, Object value) { Identifier id = (Identifier) key; Recipe recipe = (Recipe) value; for (ItemStack stack : RecipeUtil.getRecipesForRemoval()) { if (recipe.getOutput().isItemEqual(stack)) { Libjf.LOGGER.info("Blocked recipe by predicate: " + recipe.getId()); return builder; } } return builder.put(id, recipe); } }