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