package net.fabricmc.fabric.mixin.client.rendering;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.llamalad7.mixinextras.sugar.Local;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.client.rendering.v1.ArmorRenderer;
import net.fabricmc.fabric.impl.client.rendering.ArmorRendererRegistryImpl;
import net.minecraft.class_1304;
import net.minecraft.class_1309;
import net.minecraft.class_1799;
import net.minecraft.class_922;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;

@Environment(EnvType.CLIENT)
@Mixin({class_922.class})
abstract class LivingEntityRendererMixin {
   @WrapOperation(
      method = {"method_62355(Lnet/minecraft/class_1309;Lnet/minecraft/class_10042;F)V"},
      at = {@At(
   value = "INVOKE",
   target = "Lnet/minecraft/class_970;method_64081(Lnet/minecraft/class_1799;Lnet/minecraft/class_1304;)Z"
)}
   )
   private boolean toggleDefaultHeadItem(class_1799 headStack, class_1304 slot, Operation<Boolean> original, @Local(argsOnly = true) class_1309 entity) {
      if ((Boolean)original.call(new Object[]{headStack, slot})) {
         return true;
      } else {
         ArmorRenderer renderer = ArmorRendererRegistryImpl.get(headStack.method_7909());
         return renderer != null && !renderer.shouldRenderDefaultHeadItem(entity, headStack);
      }
   }
}
