package net.fabricmc.fabric.mixin.renderer.client.block.model;

import java.util.function.Predicate;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter;
import net.minecraft.class_1058;
import net.minecraft.class_1087;
import net.minecraft.class_1097;
import net.minecraft.class_1920;
import net.minecraft.class_2338;
import net.minecraft.class_2350;
import net.minecraft.class_2680;
import net.minecraft.class_5819;
import net.minecraft.class_6010;
import net.minecraft.class_6012;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;

@Environment(EnvType.CLIENT)
@Mixin({class_1097.class})
abstract class WeightedBlockStateModelMixin implements class_1087 {
   @Shadow
   @Final
   private class_6012<class_1087> field_5434;

   public void emitQuads(QuadEmitter emitter, class_1920 blockView, class_2338 pos, class_2680 state, class_5819 random, Predicate<@Nullable class_2350> cullTest) {
      ((class_1087)this.field_5434.method_66216(random)).emitQuads(emitter, blockView, pos, state, random, cullTest);
   }

   public @Nullable Object createGeometryKey(class_1920 blockView, class_2338 pos, class_2680 state, class_5819 random) {
      return ((class_1087)this.field_5434.method_66216(random)).createGeometryKey(blockView, pos, state, random);
   }

   public class_1058 particleSprite(class_1920 blockView, class_2338 pos, class_2680 state) {
      return ((class_1087)((class_6010)this.field_5434.method_34994().getFirst()).comp_2542()).particleSprite(blockView, pos, state);
   }
}
