package dev.pfaff.recipe_nope.mixin; import com.google.common.collect.ImmutableList; import dev.pfaff.recipe_nope.RecipeNope; import net.minecraft.network.PacketByteBuf; import net.minecraft.network.listener.ClientPlayPacketListener; import net.minecraft.network.packet.s2c.play.UnlockRecipesS2CPacket; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.book.RecipeBookOptions; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.Collection; import java.util.List; import java.util.function.Function; @Mixin(UnlockRecipesS2CPacket.class) public abstract class UnlockRecipesS2CPacketMixin { @Inject(method = "(Lnet/minecraft/network/packet/s2c/play/UnlockRecipesS2CPacket$Action;Ljava/util/Collection;Ljava/util/Collection;Lnet/minecraft/recipe/book/RecipeBookOptions;)V", at = @At(value = "INVOKE", target = "Ljava/lang/Object;()V", shift = At.Shift.AFTER)) private void init$noWrite(UnlockRecipesS2CPacket.Action action, Collection recipeIdsToChange, Collection recipeIdsToInit, RecipeBookOptions options, CallbackInfo ci) { throw RecipeNope.unsupported(); } //@Redirect(method = "(Lnet/minecraft/network/packet/s2c/play/UnlockRecipesS2CPacket$Action;Ljava/util/Collection;Ljava/util/Collection;Lnet/minecraft/recipe/book/RecipeBookOptions;)V", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/ImmutableList;copyOf(Ljava/util/Collection;)Lcom/google/common/collect/ImmutableList;")) //private ImmutableList init$skip(Collection list) { // return null; //} @Redirect(method = "(Lnet/minecraft/network/PacketByteBuf;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/PacketByteBuf;readEnumConstant(Ljava/lang/Class;)Ljava/lang/Enum;")) private > T init$skipReadAction(PacketByteBuf instance, Class enumClass) { return null; } @Redirect(method = "(Lnet/minecraft/network/PacketByteBuf;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/recipe/book/RecipeBookOptions;fromPacket(Lnet/minecraft/network/PacketByteBuf;)Lnet/minecraft/recipe/book/RecipeBookOptions;")) private RecipeBookOptions init$skipReadOptions(PacketByteBuf buf) { return null; } @Redirect(method = "(Lnet/minecraft/network/PacketByteBuf;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/PacketByteBuf;readList(Ljava/util/function/Function;)Ljava/util/List;")) private List init$skipReadList(PacketByteBuf instance, Function entryParser) { return null; } @Inject(method = "(Lnet/minecraft/network/PacketByteBuf;)V", at = @At(value = "TAIL")) private void init$noRead(PacketByteBuf buf, CallbackInfo ci) { buf.readerIndex(buf.writerIndex()); } @Overwrite public void write(PacketByteBuf buf) { throw RecipeNope.unsupported(); } @Overwrite public void apply(ClientPlayPacketListener clientPlayPacketListener) { } }