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

106 lines
2.7 KiB
Java
Raw Normal View History

2019-05-27 17:59:15 +02:00
package com.minelittlepony.client.model;
2019-11-22 18:24:22 +01:00
import net.minecraft.client.model.ModelPart;
import net.minecraft.client.render.entity.model.BipedEntityModel;
2019-05-27 17:59:15 +02:00
import net.minecraft.entity.LivingEntity;
2019-07-20 20:16:54 +02:00
import net.minecraft.util.Arm;
2019-05-27 17:59:15 +02:00
import com.minelittlepony.client.pony.PonyData;
import com.minelittlepony.client.render.EquineRenderManager;
import com.minelittlepony.model.ModelAttributes;
import com.minelittlepony.mson.api.model.biped.MsonPlayer;
import com.minelittlepony.pony.IPony;
import com.minelittlepony.pony.IPonyData;
import com.minelittlepony.pony.meta.Size;
2019-05-27 17:59:15 +02:00
/**
* The raw pony model without any implementations.
* Will act effectively the same as a normal player model without any hints
* of being cute and adorable.
*
* Modders can extend this class to make their own pony models if they wish.
*/
public abstract class ClientPonyModel<T extends LivingEntity> extends MsonPlayer<T> implements IPonyModel<T> {
2019-05-27 17:59:15 +02:00
/**
* The model attributes.
*/
protected ModelAttributes<T> attributes = new ModelAttributes<>();
/**
* Associated pony data.
*/
protected IPonyData metadata = PonyData.NULL;
@Override
public void updateLivingState(T entity, IPony pony, EquineRenderManager.Mode mode) {
2019-12-07 11:10:39 +01:00
child = entity.isBaby();
attributes.updateLivingState(entity, pony, mode);
2019-12-12 22:57:37 +01:00
isSneaking = attributes.isCrouching;
riding = attributes.isSitting;
}
@Override
public void copyAttributes(BipedEntityModel<T> other) {
setAttributes(other);
}
@Override
public ModelAttributes<?> getAttributes() {
return attributes;
}
@Override
public IPonyData getMetadata() {
return metadata;
}
@Override
public Size getSize() {
2019-12-07 11:10:39 +01:00
return child ? Size.FOAL : getMetadata().getSize();
}
@Override
public void apply(IPonyData meta) {
metadata = meta;
}
@Override
2019-11-22 18:24:22 +01:00
public ModelPart getHead() {
return head;
}
@Override
public boolean isRiding() {
2019-12-07 11:10:39 +01:00
return riding;
}
@Override
public float getSwingAmount() {
return handSwingProgress;
}
2019-06-27 15:50:34 +02:00
@Override
2019-11-22 18:24:22 +01:00
public ModelPart getArm(Arm side) {
2019-06-27 15:50:34 +02:00
return super.getArm(side);
}
2019-07-20 20:16:54 +02:00
public ArmPose getArmPoseForSide(Arm side) {
return side == Arm.RIGHT ? rightArmPose : leftArmPose;
}
/**
2019-06-24 13:12:13 +02:00
* Copies this model's attributes into the passed model.
*/
@Override
public void setAttributes(BipedEntityModel<T> model) {
super.setAttributes(model);
if (model instanceof ClientPonyModel) {
((ClientPonyModel<T>)model).attributes = attributes;
((ClientPonyModel<T>)model).metadata = metadata;
}
}
2019-05-27 17:59:15 +02:00
}