package com.minelittlepony.client.model; import net.minecraft.client.model.Model; import net.minecraft.client.model.ModelPart; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.entity.EntityRendererFactory; import net.minecraft.client.render.entity.PlayerEntityRenderer; import net.minecraft.entity.LivingEntity; import net.minecraft.util.Identifier; import org.jetbrains.annotations.Nullable; import com.minelittlepony.api.model.IModel; import com.minelittlepony.client.model.armour.PonyArmourModel; import com.minelittlepony.mson.api.ModelKey; import com.minelittlepony.mson.api.Mson; import com.minelittlepony.mson.api.MsonModel; import java.util.function.*; public record PlayerModelKey ( ModelKey steveKey, ModelKey alexKey, RendererFactory factory, MsonModel.Factory> armorFactory ) { PlayerModelKey(String name, BiFunction modelFactory, RendererFactory rendererFactory, MsonModel.Factory> armorFactory) { this( Mson.getInstance().registerModel(new Identifier("minelittlepony", "races/steve/" + name), tree -> modelFactory.apply(tree, false)), Mson.getInstance().registerModel(new Identifier("minelittlepony", "races/alex/" + name), tree -> modelFactory.apply(tree, true)), rendererFactory, armorFactory ); } public ModelKey getKey(boolean slimArms) { return slimArms ? alexKey : steveKey; } public ModelWrapper create(boolean slimArms) { return create(slimArms, null); } @SuppressWarnings({"rawtypes", "unchecked"}) public ModelWrapper create(boolean slimArms, @Nullable Consumer initializer) { return new ModelWrapper(this, slimArms, initializer); } @SuppressWarnings("unchecked") public Function getFactory(boolean slimArms) { return d -> factory.create(d, slimArms, (PlayerModelKey>)this); } public interface RendererFactory { PlayerEntityRenderer create( EntityRendererFactory.Context context, boolean slim, PlayerModelKey> key ); } }