fabric-rendering-v1-16.2.0+bee81f016f.jar

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

import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.client.rendering.v1.FabricModel;
import net.minecraft.class_1921;
import net.minecraft.class_2960;
import net.minecraft.class_3879;
import net.minecraft.class_630;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Environment(EnvType.CLIENT)
@Mixin({class_3879.class})
abstract class ModelMixin<S> implements FabricModel<S> {
   @Unique
   private final Map<String, class_630> childPartMap = new Object2ObjectOpenHashMap();

   @Shadow
   public abstract class_630 method_63512();

   @Inject(
      method = {"<init>(Lnet/minecraft/class_630;Ljava/util/function/Function;)V"},
      at = {@At("TAIL")}
   )
   private void fillChildPartMap(class_630 root, Function<class_2960, class_1921> layerFactory, CallbackInfo ci) {
      ModelPartAccessor var10000 = (ModelPartAccessor)root;
      Map var10001 = this.childPartMap;
      Objects.requireNonNull(var10001);
      var10000.fabric$callForEachChild(var10001::putIfAbsent);
   }

   public @Nullable class_630 getChildPart(String name) {
      return (class_630)this.childPartMap.get(name);
   }

   public void copyTransforms(class_3879<?> model) {
      copyTransforms(model.method_63512(), this.method_63512());
      ((ModelPartAccessor)model.method_63512()).fabric$callForEachChild((name, part) -> {
         class_630 childPart = this.getChildPart(name);
         if (childPart != null) {
            copyTransforms(part, childPart);
         }

      });
   }

   @Unique
   private static void copyTransforms(class_630 from, class_630 to) {
      to.field_3657 = from.field_3657;
      to.field_3656 = from.field_3656;
      to.field_3655 = from.field_3655;
      to.field_3654 = from.field_3654;
      to.field_3675 = from.field_3675;
      to.field_3674 = from.field_3674;
      to.field_37938 = from.field_37938;
      to.field_37939 = from.field_37939;
      to.field_37940 = from.field_37940;
   }
}
    
Download file