*ArmoredElytra* Fixes
This commit is contained in:
parent
e03c8433db
commit
8531be7b94
6 changed files with 58 additions and 29 deletions
|
@ -4,6 +4,7 @@ import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
|
|
||||||
import net.minecraft.client.model.EntityModel;
|
import net.minecraft.client.model.EntityModel;
|
||||||
|
import net.minecraft.client.model.geom.EntityModelSet;
|
||||||
import net.minecraft.client.player.AbstractClientPlayer;
|
import net.minecraft.client.player.AbstractClientPlayer;
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
import net.minecraft.client.renderer.MultiBufferSource;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
|
@ -18,12 +19,14 @@ import net.minecraft.world.entity.player.PlayerModelPart;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import ru.betterend.interfaces.FallFlyingItem;
|
import ru.betterend.interfaces.FallFlyingItem;
|
||||||
import ru.betterend.item.model.ArmoredElytraModel;
|
import ru.betterend.item.model.ArmoredElytraModel;
|
||||||
|
import ru.betterend.registry.EndEntitiesRenders;
|
||||||
|
|
||||||
public class ArmoredElytraLayer<T extends LivingEntity, M extends EntityModel<T>> extends ElytraLayer<T, M> {
|
public class ArmoredElytraLayer<T extends LivingEntity, M extends EntityModel<T>> extends ElytraLayer<T, M> {
|
||||||
private final ArmoredElytraModel<T> elytraModel = new ArmoredElytraModel<>();
|
private final ArmoredElytraModel<T> elytraModel;
|
||||||
|
|
||||||
public ArmoredElytraLayer(RenderLayerParent<T, M> renderLayerParent) {
|
public ArmoredElytraLayer(RenderLayerParent<T, M> renderLayerParent, EntityModelSet entityModelSet) {
|
||||||
super(renderLayerParent);
|
super(renderLayerParent, entityModelSet);
|
||||||
|
elytraModel = new ArmoredElytraModel<>(entityModelSet.bakeLayer(EndEntitiesRenders.ARMORED_ELYTRA));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, T livingEntity, float f, float g, float h, float j, float k, float l) {
|
public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, T livingEntity, float f, float g, float h, float j, float k, float l) {
|
||||||
|
|
|
@ -4,6 +4,12 @@ import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
import net.minecraft.client.model.AgeableListModel;
|
import net.minecraft.client.model.AgeableListModel;
|
||||||
import net.minecraft.client.model.geom.ModelPart;
|
import net.minecraft.client.model.geom.ModelPart;
|
||||||
|
import net.minecraft.client.model.geom.PartNames;
|
||||||
|
import net.minecraft.client.model.geom.PartPose;
|
||||||
|
import net.minecraft.client.model.geom.builders.CubeListBuilder;
|
||||||
|
import net.minecraft.client.model.geom.builders.LayerDefinition;
|
||||||
|
import net.minecraft.client.model.geom.builders.MeshDefinition;
|
||||||
|
import net.minecraft.client.model.geom.builders.PartDefinition;
|
||||||
import net.minecraft.client.player.AbstractClientPlayer;
|
import net.minecraft.client.player.AbstractClientPlayer;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
@ -12,12 +18,25 @@ public class ArmoredElytraModel<T extends LivingEntity> extends AgeableListModel
|
||||||
private final ModelPart rightWing;
|
private final ModelPart rightWing;
|
||||||
private final ModelPart leftWing;
|
private final ModelPart leftWing;
|
||||||
|
|
||||||
public ArmoredElytraModel() {
|
public static LayerDefinition getTexturedModelData() {
|
||||||
this.leftWing = new ModelPart(this, 22, 0);
|
MeshDefinition modelData = new MeshDefinition();
|
||||||
this.leftWing.addBox(-10.0F, 0.0F, 0.0F, 10.0F, 20.0F, 2.0F, 1.0F);
|
PartDefinition modelPartData = modelData.getRoot();
|
||||||
this.rightWing = new ModelPart(this, 22, 0);
|
modelPartData.addOrReplaceChild(PartNames.LEFT_WING, CubeListBuilder.create()
|
||||||
this.rightWing.mirror = true;
|
.addBox(-10.0f, 0.0f, 0.0f, 10.0f, 20.0f, 2.0f)
|
||||||
this.rightWing.addBox(0.0F, 0.0F, 0.0F, 10.0F, 20.0F, 2.0F, 1.0F);
|
.texOffs(22, 0),
|
||||||
|
PartPose.ZERO);
|
||||||
|
|
||||||
|
modelPartData.addOrReplaceChild(PartNames.RIGHT_WING, CubeListBuilder.create()
|
||||||
|
.mirror()
|
||||||
|
.addBox(0.0f, 0.0f, 0.0f, 10.0f, 20.0f, 2.0f)
|
||||||
|
.texOffs(22, 0),
|
||||||
|
PartPose.ZERO);
|
||||||
|
|
||||||
|
return LayerDefinition.create(modelData, 48, 48);
|
||||||
|
}
|
||||||
|
public ArmoredElytraModel(ModelPart modelPart) {
|
||||||
|
leftWing = modelPart.getChild(PartNames.LEFT_WING);
|
||||||
|
rightWing = modelPart.getChild(PartNames.RIGHT_WING);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Iterable<ModelPart> headParts() {
|
protected Iterable<ModelPart> headParts() {
|
||||||
|
|
|
@ -1,26 +1,25 @@
|
||||||
package ru.betterend.mixin.client;
|
package ru.betterend.mixin.client;
|
||||||
|
|
||||||
|
import net.minecraft.client.model.ArmorStandArmorModel;
|
||||||
|
import net.minecraft.client.renderer.entity.ArmorStandRenderer;
|
||||||
|
import net.minecraft.client.renderer.entity.EntityRendererProvider;
|
||||||
|
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
|
||||||
|
import net.minecraft.world.entity.decoration.ArmorStand;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
import net.minecraft.client.model.ArmorStandArmorModel;
|
|
||||||
import net.minecraft.client.renderer.entity.ArmorStandRenderer;
|
|
||||||
import net.minecraft.client.renderer.entity.EntityRenderDispatcher;
|
|
||||||
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
|
|
||||||
import net.minecraft.world.entity.decoration.ArmorStand;
|
|
||||||
import ru.betterend.client.render.ArmoredElytraLayer;
|
import ru.betterend.client.render.ArmoredElytraLayer;
|
||||||
|
|
||||||
@Mixin(ArmorStandRenderer.class)
|
@Mixin(ArmorStandRenderer.class)
|
||||||
public abstract class ArmorStandRendererMixin extends LivingEntityRenderer<ArmorStand, ArmorStandArmorModel> {
|
public abstract class ArmorStandRendererMixin extends LivingEntityRenderer<ArmorStand, ArmorStandArmorModel> {
|
||||||
|
|
||||||
public ArmorStandRendererMixin(EntityRenderDispatcher entityRenderDispatcher, ArmorStandArmorModel entityModel, float f) {
|
public ArmorStandRendererMixin(EntityRendererProvider.Context context, ArmorStandArmorModel entityModel, float f) {
|
||||||
super(entityRenderDispatcher, entityModel, f);
|
super(context, entityModel, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "<init>*", at = @At("TAIL"))
|
@Inject(method = "<init>*", at = @At("TAIL"))
|
||||||
public void be_addCustomLayer(EntityRenderDispatcher entityRenderDispatcher, CallbackInfo info) {
|
public void be_addCustomLayer(EntityRendererProvider.Context context, CallbackInfo ci) {
|
||||||
addLayer(new ArmoredElytraLayer<>(this));
|
addLayer(new ArmoredElytraLayer<>(this, context.getModelSet()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package ru.betterend.mixin.client;
|
package ru.betterend.mixin.client;
|
||||||
|
|
||||||
|
import net.minecraft.client.renderer.entity.EntityRendererProvider;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
@ -15,12 +16,12 @@ import ru.betterend.client.render.ArmoredElytraLayer;
|
||||||
@Mixin(HumanoidMobRenderer.class)
|
@Mixin(HumanoidMobRenderer.class)
|
||||||
public abstract class HumanoidMobRendererMixin<T extends Mob, M extends HumanoidModel<T>> extends MobRenderer<T, M> {
|
public abstract class HumanoidMobRendererMixin<T extends Mob, M extends HumanoidModel<T>> extends MobRenderer<T, M> {
|
||||||
|
|
||||||
public HumanoidMobRendererMixin(EntityRenderDispatcher entityRenderDispatcher, M entityModel, float f) {
|
public HumanoidMobRendererMixin(EntityRendererProvider.Context context, M entityModel, float f) {
|
||||||
super(entityRenderDispatcher, entityModel, f);
|
super(context, entityModel, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "<init>*", at = @At("TAIL"))
|
@Inject(method = "<init>(Lnet/minecraft/client/renderer/entity/EntityRendererProvider$Context;Lnet/minecraft/client/model/HumanoidModel;FFFF)V", at = @At("TAIL"))
|
||||||
public void be_addCustomLayer(EntityRenderDispatcher entityRenderDispatcher, M humanoidModel, float f, float g, float h, float i, CallbackInfo info) {
|
public void be_addCustomLayer(EntityRendererProvider.Context context, M humanoidModel, float f, float g, float h, float i, CallbackInfo ci) {
|
||||||
addLayer(new ArmoredElytraLayer<>(this));
|
addLayer(new ArmoredElytraLayer<>(this, context.getModelSet()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package ru.betterend.mixin.client;
|
package ru.betterend.mixin.client;
|
||||||
|
|
||||||
|
import net.minecraft.client.renderer.entity.EntityRendererProvider;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
@ -15,12 +16,12 @@ import ru.betterend.client.render.ArmoredElytraLayer;
|
||||||
@Mixin(PlayerRenderer.class)
|
@Mixin(PlayerRenderer.class)
|
||||||
public abstract class PlayerRendererMixin extends LivingEntityRenderer<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> {
|
public abstract class PlayerRendererMixin extends LivingEntityRenderer<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> {
|
||||||
|
|
||||||
public PlayerRendererMixin(EntityRenderDispatcher entityRenderDispatcher, PlayerModel<AbstractClientPlayer> entityModel, float f) {
|
public PlayerRendererMixin(EntityRendererProvider.Context context, PlayerModel<AbstractClientPlayer> entityModel, float f) {
|
||||||
super(entityRenderDispatcher, entityModel, f);
|
super(context, entityModel, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "<init>(Lnet/minecraft/client/renderer/entity/EntityRenderDispatcher;Z)V", at = @At("TAIL"))
|
@Inject(method = "<init>*", at = @At("TAIL"))
|
||||||
public void be_addCustomLayer(EntityRenderDispatcher entityRenderDispatcher, boolean bl, CallbackInfo info) {
|
public void be_addCustomLayer(EntityRendererProvider.Context context, boolean bl, CallbackInfo ci) {
|
||||||
addLayer(new ArmoredElytraLayer<>(this));
|
addLayer(new ArmoredElytraLayer<>(this, context.getModelSet()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ import ru.betterend.entity.render.RendererEntityEndFish;
|
||||||
import ru.betterend.entity.render.RendererEntityEndSlime;
|
import ru.betterend.entity.render.RendererEntityEndSlime;
|
||||||
import ru.betterend.entity.render.RendererEntityShadowWalker;
|
import ru.betterend.entity.render.RendererEntityShadowWalker;
|
||||||
import ru.betterend.entity.render.SilkMothEntityRenderer;
|
import ru.betterend.entity.render.SilkMothEntityRenderer;
|
||||||
|
import ru.betterend.item.model.ArmoredElytraModel;
|
||||||
|
|
||||||
public class EndEntitiesRenders {
|
public class EndEntitiesRenders {
|
||||||
|
|
||||||
|
@ -24,6 +25,9 @@ public class EndEntitiesRenders {
|
||||||
public static final ModelLayerLocation CUBOZOA_MODEL = registerMain("cubozoa");
|
public static final ModelLayerLocation CUBOZOA_MODEL = registerMain("cubozoa");
|
||||||
public static final ModelLayerLocation SILK_MOTH_MODEL = registerMain("silkmoth");
|
public static final ModelLayerLocation SILK_MOTH_MODEL = registerMain("silkmoth");
|
||||||
|
|
||||||
|
//Not sure if this should go to another registry
|
||||||
|
public static final ModelLayerLocation ARMORED_ELYTRA = registerMain("armored_elytra");
|
||||||
|
|
||||||
public static void register() {
|
public static void register() {
|
||||||
register(EndEntities.DRAGONFLY, RendererEntityDragonfly.class);
|
register(EndEntities.DRAGONFLY, RendererEntityDragonfly.class);
|
||||||
register(EndEntities.END_SLIME, RendererEntityEndSlime.class);
|
register(EndEntities.END_SLIME, RendererEntityEndSlime.class);
|
||||||
|
@ -38,6 +42,8 @@ public class EndEntitiesRenders {
|
||||||
EntityModelLayerRegistry.registerModelLayer(END_FISH_MODEL, EndFishEntityModel::getTexturedModelData);
|
EntityModelLayerRegistry.registerModelLayer(END_FISH_MODEL, EndFishEntityModel::getTexturedModelData);
|
||||||
EntityModelLayerRegistry.registerModelLayer(CUBOZOA_MODEL, CubozoaEntityModel::getTexturedModelData);
|
EntityModelLayerRegistry.registerModelLayer(CUBOZOA_MODEL, CubozoaEntityModel::getTexturedModelData);
|
||||||
EntityModelLayerRegistry.registerModelLayer(SILK_MOTH_MODEL, SilkMothEntityModel::getTexturedModelData);
|
EntityModelLayerRegistry.registerModelLayer(SILK_MOTH_MODEL, SilkMothEntityModel::getTexturedModelData);
|
||||||
|
|
||||||
|
EntityModelLayerRegistry.registerModelLayer(ARMORED_ELYTRA, ArmoredElytraModel::getTexturedModelData);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void register(EntityType<?> type, Class<? extends MobRenderer<?, ?>> renderer) {
|
private static void register(EntityType<?> type, Class<? extends MobRenderer<?, ?>> renderer) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue