MineLittlePony/src/main/java/com/minelittlepony/client/model/PlayerModelKey.java

62 lines
2.5 KiB
Java
Raw Normal View History

package com.minelittlepony.client.model;
import net.minecraft.client.model.Model;
2020-11-26 15:41:15 +02:00
import net.minecraft.client.model.ModelPart;
2019-11-26 23:55:39 +02:00
import net.minecraft.client.network.AbstractClientPlayerEntity;
2020-11-26 15:41:15 +02:00
import net.minecraft.client.render.entity.EntityRendererFactory;
2019-11-26 23:55:39 +02:00
import net.minecraft.client.render.entity.PlayerEntityRenderer;
import net.minecraft.entity.LivingEntity;
import net.minecraft.util.Identifier;
2023-02-15 19:09:59 +00:00
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;
2023-02-15 19:09:59 +00:00
import java.util.function.*;
2023-02-15 19:09:59 +00:00
public record PlayerModelKey<T extends LivingEntity, M extends Model & MsonModel & IModel> (
ModelKey<M> steveKey,
ModelKey<M> alexKey,
2023-02-15 19:09:59 +00:00
RendererFactory factory,
MsonModel.Factory<PonyArmourModel<T>> armorFactory
) {
2023-02-15 19:09:59 +00:00
PlayerModelKey(String name, BiFunction<ModelPart, Boolean, M> modelFactory, RendererFactory rendererFactory, MsonModel.Factory<PonyArmourModel<T>> 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)),
2023-02-15 19:09:59 +00:00
rendererFactory,
armorFactory
);
}
2019-11-27 13:42:19 +02:00
public ModelKey<M> getKey(boolean slimArms) {
2019-11-26 23:55:39 +02:00
return slimArms ? alexKey : steveKey;
}
2023-02-15 19:09:59 +00:00
public <K extends T, N extends M> ModelWrapper<K, N> create(boolean slimArms) {
return create(slimArms, null);
}
@SuppressWarnings({"rawtypes", "unchecked"})
public <K extends T, N extends M> ModelWrapper<K, N> create(boolean slimArms, @Nullable Consumer<N> initializer) {
return new ModelWrapper(this, slimArms, initializer);
}
2019-11-27 13:42:19 +02:00
@SuppressWarnings("unchecked")
public Function<EntityRendererFactory.Context, PlayerEntityRenderer> getFactory(boolean slimArms) {
2023-02-15 19:09:59 +00:00
return d -> factory.create(d, slimArms, (PlayerModelKey<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>>)this);
2019-11-26 23:55:39 +02:00
}
public interface RendererFactory {
2019-11-27 13:42:19 +02:00
PlayerEntityRenderer create(
2020-11-26 15:41:15 +02:00
EntityRendererFactory.Context context,
2019-11-27 13:42:19 +02:00
boolean slim,
2023-02-15 19:09:59 +00:00
PlayerModelKey<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>> key
2019-11-27 13:42:19 +02:00
);
}
}