2019-11-25 17:49:20 +02:00
|
|
|
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;
|
2019-11-25 17:49:20 +02:00
|
|
|
import net.minecraft.util.Identifier;
|
|
|
|
|
|
|
|
import com.minelittlepony.mson.api.ModelKey;
|
|
|
|
import com.minelittlepony.mson.api.Mson;
|
|
|
|
import com.minelittlepony.mson.api.MsonModel;
|
|
|
|
|
2020-11-26 15:41:15 +02:00
|
|
|
import java.util.function.BiFunction;
|
2019-11-25 17:49:20 +02:00
|
|
|
import java.util.function.Function;
|
|
|
|
|
2019-11-26 23:55:39 +02:00
|
|
|
public class PlayerModelKey<T extends LivingEntity, M extends Model & MsonModel> {
|
2019-11-25 17:49:20 +02:00
|
|
|
|
2019-11-27 13:42:19 +02:00
|
|
|
private final ModelKey<M> steveKey;
|
|
|
|
private final ModelKey<M> alexKey;
|
2019-11-25 17:49:20 +02:00
|
|
|
|
2019-11-26 23:55:39 +02:00
|
|
|
private final RendererFactory rendererFactory;
|
|
|
|
|
2020-11-26 15:41:15 +02:00
|
|
|
PlayerModelKey(String name, BiFunction<ModelPart, Boolean, M> modelFactory, RendererFactory rendererFactory) {
|
2019-11-26 23:55:39 +02:00
|
|
|
this.rendererFactory = rendererFactory;
|
2019-11-25 17:49:20 +02:00
|
|
|
|
2020-11-26 15:41:15 +02:00
|
|
|
steveKey = Mson.getInstance().registerModel(new Identifier("minelittlepony", "races/steve/" + name), tree -> modelFactory.apply(tree, false));
|
|
|
|
alexKey = Mson.getInstance().registerModel(new Identifier("minelittlepony", "races/alex/" + name), tree -> modelFactory.apply(tree, true));
|
2019-11-25 17:49:20 +02:00
|
|
|
}
|
|
|
|
|
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;
|
2019-11-25 17:49:20 +02:00
|
|
|
}
|
|
|
|
|
2019-11-27 13:42:19 +02:00
|
|
|
@SuppressWarnings("unchecked")
|
2020-11-26 15:41:15 +02:00
|
|
|
public Function<EntityRendererFactory.Context, PlayerEntityRenderer> getRendererFactory(boolean slimArms) {
|
2019-11-27 13:42:19 +02:00
|
|
|
return d -> rendererFactory.create(d, slimArms, (ModelKey<? extends ClientPonyModel<AbstractClientPlayerEntity>>)getKey(slimArms));
|
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,
|
|
|
|
ModelKey<? extends ClientPonyModel<AbstractClientPlayerEntity>> key
|
|
|
|
);
|
2019-11-25 17:49:20 +02:00
|
|
|
}
|
|
|
|
}
|