mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2025-02-13 08:14:23 +01:00
Minorly improved armour rendering
This commit is contained in:
parent
c02a46aa7d
commit
c51fea4a87
5 changed files with 71 additions and 7 deletions
|
@ -51,6 +51,9 @@ public final class MobRenderers {
|
|||
public static final MobRenderers ENDERMAN = register("endermen", (state, pony) -> {
|
||||
pony.switchRenderer(state, EntityType.ENDERMAN, EnderStallionRenderer::new);
|
||||
});
|
||||
public static final MobRenderers INANIMATE = register("inanimates", (state, pony) -> {
|
||||
pony.switchRenderer(state, EntityType.ARMOR_STAND, PonyStandRenderer::new);
|
||||
});
|
||||
|
||||
private final BiConsumer<Boolean, PonyRenderDispatcher> changer;
|
||||
|
||||
|
|
|
@ -4,8 +4,8 @@ import net.minecraft.client.render.VertexConsumer;
|
|||
import net.minecraft.client.util.math.MatrixStack;
|
||||
|
||||
import com.minelittlepony.client.model.PonySkullModel;
|
||||
import com.minelittlepony.client.model.ModelType;
|
||||
import com.minelittlepony.client.render.blockentity.skull.PonySkullRenderer.ISkull;
|
||||
import com.minelittlepony.client.model.ModelType;
|
||||
import com.minelittlepony.pony.IPony;
|
||||
|
||||
public abstract class AbstractPonySkull implements ISkull {
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
package com.minelittlepony.client.render.entity;
|
||||
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.render.entity.ArmorStandEntityRenderer;
|
||||
import net.minecraft.client.render.entity.EntityRenderDispatcher;
|
||||
import net.minecraft.client.render.entity.feature.ArmorBipedFeatureRenderer;
|
||||
import net.minecraft.client.render.entity.feature.ElytraFeatureRenderer;
|
||||
import net.minecraft.client.render.entity.feature.FeatureRendererContext;
|
||||
import net.minecraft.client.render.entity.feature.HeadFeatureRenderer;
|
||||
import net.minecraft.client.render.entity.feature.HeldItemFeatureRenderer;
|
||||
import net.minecraft.client.render.entity.model.ArmorStandArmorEntityModel;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.entity.EquipmentSlot;
|
||||
import net.minecraft.entity.decoration.ArmorStandEntity;
|
||||
|
||||
import com.minelittlepony.client.model.ModelType;
|
||||
import com.minelittlepony.client.model.ModelWrapper;
|
||||
import com.minelittlepony.client.model.entity.race.EarthPonyModel;
|
||||
import com.minelittlepony.client.pony.PonyData;
|
||||
import com.minelittlepony.client.render.entity.feature.ArmourFeature;
|
||||
import com.minelittlepony.model.armour.ArmourLayer;
|
||||
import com.minelittlepony.pony.meta.Race;
|
||||
|
||||
public class PonyStandRenderer extends ArmorStandEntityRenderer {
|
||||
|
||||
public PonyStandRenderer(EntityRenderDispatcher entityRenderDispatcher) {
|
||||
super(entityRenderDispatcher);
|
||||
|
||||
features.clear();
|
||||
addFeature(new Armour(this));
|
||||
addFeature(new HeldItemFeatureRenderer<>(this));
|
||||
addFeature(new ElytraFeatureRenderer<>(this));
|
||||
addFeature(new HeadFeatureRenderer<>(this));
|
||||
}
|
||||
|
||||
class Armour extends ArmorBipedFeatureRenderer<ArmorStandEntity, ArmorStandArmorEntityModel, ArmorStandArmorEntityModel> {
|
||||
private final ModelWrapper<ArmorStandEntity, EarthPonyModel<ArmorStandEntity>> pony = new ModelWrapper<>(ModelType.EARTH_PONY.getKey(false));
|
||||
|
||||
public Armour(FeatureRendererContext<ArmorStandEntity, ArmorStandArmorEntityModel> context) {
|
||||
super(context, new ArmorStandArmorEntityModel(0.5F), new ArmorStandArmorEntityModel(1));
|
||||
|
||||
pony.apply(new PonyData(Race.EARTH));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(MatrixStack stack, VertexConsumerProvider renderContext, int lightUv, ArmorStandEntity entity, float limbDistance, float limbAngle, float tickDelta, float age, float headYaw, float headPitch) {
|
||||
if (entity.hasCustomName() && "Ponita".equals(entity.getCustomName().asString())) {
|
||||
|
||||
pony.getBody().setAngles(entity, limbDistance, limbAngle, tickDelta, headYaw, headPitch);
|
||||
|
||||
for (EquipmentSlot i : EquipmentSlot.values()) {
|
||||
if (i.getType() == EquipmentSlot.Type.ARMOR) {
|
||||
ArmourFeature.renderArmor(pony, stack, renderContext, lightUv, entity, limbDistance, limbAngle, tickDelta, age, headYaw, headPitch, i, ArmourLayer.INNER);
|
||||
ArmourFeature.renderArmor(pony, stack, renderContext, lightUv, entity, limbDistance, limbAngle, tickDelta, age, headYaw, headPitch, i, ArmourLayer.OUTER);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
super.render(stack, renderContext, lightUv, entity, limbDistance, limbAngle, tickDelta, age, headYaw, headPitch);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -31,26 +31,24 @@ public class ArmourFeature<T extends LivingEntity, M extends EntityModel<T> & IP
|
|||
|
||||
private static final IArmourTextureResolver<LivingEntity> textures = new DefaultArmourTextureResolver<>();
|
||||
|
||||
private ModelWrapper<T, M> pony;
|
||||
|
||||
public ArmourFeature(IPonyRenderContext<T, M> renderer) {
|
||||
super(renderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(MatrixStack stack, VertexConsumerProvider renderContext, int lightUv, T entity, float limbDistance, float limbAngle, float tickDelta, float age, float headYaw, float headPitch) {
|
||||
pony = getContext().getModelWrapper();
|
||||
ModelWrapper<T, M> pony = getContext().getModelWrapper();
|
||||
|
||||
for (EquipmentSlot i : EquipmentSlot.values()) {
|
||||
if (i.getType() == EquipmentSlot.Type.ARMOR) {
|
||||
renderArmor(stack, renderContext, lightUv, entity, limbDistance, limbAngle, tickDelta, age, headYaw, headPitch, i, ArmourLayer.INNER);
|
||||
renderArmor(stack, renderContext, lightUv, entity, limbDistance, limbAngle, tickDelta, age, headYaw, headPitch, i, ArmourLayer.OUTER);
|
||||
renderArmor(pony, stack, renderContext, lightUv, entity, limbDistance, limbAngle, tickDelta, age, headYaw, headPitch, i, ArmourLayer.INNER);
|
||||
renderArmor(pony, stack, renderContext, lightUv, entity, limbDistance, limbAngle, tickDelta, age, headYaw, headPitch, i, ArmourLayer.OUTER);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private <V extends BipedEntityModel<T> & IArmour> void renderArmor(MatrixStack stack, VertexConsumerProvider renderContext, int lightUv, T entity, float limbDistance, float limbAngle, float tickDelta, float age, float headYaw, float headPitch, EquipmentSlot armorSlot, ArmourLayer layer) {
|
||||
public static <T extends LivingEntity, V extends BipedEntityModel<T> & IArmour> void renderArmor(ModelWrapper<T, ? extends IPonyModel<T>> pony, MatrixStack stack, VertexConsumerProvider renderContext, int lightUv, T entity, float limbDistance, float limbAngle, float tickDelta, float age, float headYaw, float headPitch, EquipmentSlot armorSlot, ArmourLayer layer) {
|
||||
ItemStack itemstack = entity.getEquippedStack(armorSlot);
|
||||
|
||||
if (!itemstack.isEmpty() && itemstack.getItem() instanceof ArmorItem) {
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
"minelp.mobs.illagers": "Ponify Illagers",
|
||||
"minelp.mobs.guardians": "Ponify Guardians",
|
||||
"minelp.mobs.endermen": "Ponify Endermen",
|
||||
"minelp.mobs.inanimates": "Ponify Objects",
|
||||
"minelp.mode.dry": "Land pony",
|
||||
"minelp.mode.wet": "Sea pony",
|
||||
"minelp.debug.reload_models.message": "Reloading pony models...",
|
||||
|
|
Loading…
Reference in a new issue