Skip to content

Commit

Permalink
update bouldering zombie RenderLayers
Browse files Browse the repository at this point in the history
  • Loading branch information
Uraneptus committed Nov 9, 2024
1 parent aa90335 commit 857f357
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,7 @@ public static <M extends EntityModel<?> & RootModel> void animateWalk(M model, A

public static <M extends EntityModel<?> & RootModel> void animate(M model, AnimationState pAnimationState, AnimationDefinition pAnimationDefinition, float pAgeInTicks, float pSpeed) {
pAnimationState.updateTime(pAgeInTicks, pSpeed);
pAnimationState.ifStarted((p_233392_) -> {
animate(model, pAnimationDefinition, p_233392_.getAccumulatedTime(), 1.0F, ANIMATION_VECTOR_CACHE);
});
pAnimationState.ifStarted((p_233392_) -> animate(model, pAnimationDefinition, p_233392_.getAccumulatedTime(), 1.0F, ANIMATION_VECTOR_CACHE));
}

public static <M extends EntityModel<?> & RootModel> void animate(M model, AnimationDefinition pAnimationDefinition, long pAccumulatedTime, float pScale, Vector3f pAnimationVecCache) {
Expand All @@ -40,35 +38,30 @@ public static <M extends EntityModel<?> & RootModel> void animate(M model, Anima
for(Map.Entry<String, List<AnimationChannel>> entry : pAnimationDefinition.boneAnimations().entrySet()) {
Optional<ModelPart> optional = getAnyDescendantWithName(model, entry.getKey());
List<AnimationChannel> list = entry.getValue();
optional.ifPresent((p_232330_) -> {
list.forEach((p_288241_) -> {
Keyframe[] akeyframe = p_288241_.keyframes();
int i = Math.max(0, Mth.binarySearch(0, akeyframe.length, (p_232315_) -> f <= akeyframe[p_232315_].timestamp()) - 1);
int j = Math.min(akeyframe.length - 1, i + 1);
Keyframe keyframe = akeyframe[i];
Keyframe keyframe1 = akeyframe[j];
float f1 = f - keyframe.timestamp();
float f2;
if (j != i) {
f2 = Mth.clamp(f1 / (keyframe1.timestamp() - keyframe.timestamp()), 0.0F, 1.0F);
} else {
f2 = 0.0F;
}
optional.ifPresent((p_232330_) -> list.forEach((p_288241_) -> {
Keyframe[] akeyframe = p_288241_.keyframes();
int i = Math.max(0, Mth.binarySearch(0, akeyframe.length, (p_232315_) -> f <= akeyframe[p_232315_].timestamp()) - 1);
int j = Math.min(akeyframe.length - 1, i + 1);
Keyframe keyframe = akeyframe[i];
Keyframe keyframe1 = akeyframe[j];
float f1 = f - keyframe.timestamp();
float f2;
if (j != i) {
f2 = Mth.clamp(f1 / (keyframe1.timestamp() - keyframe.timestamp()), 0.0F, 1.0F);
} else {
f2 = 0.0F;
}

keyframe1.interpolation().apply(pAnimationVecCache, f2, akeyframe, i, j, pScale);
p_288241_.target().apply(p_232330_, pAnimationVecCache);
});
});
keyframe1.interpolation().apply(pAnimationVecCache, f2, akeyframe, i, j, pScale);
p_288241_.target().apply(p_232330_, pAnimationVecCache);
}));
}

}

private static <M extends EntityModel<?> & RootModel> Optional<ModelPart> getAnyDescendantWithName(M model, String pName) {
return pName.equals("root") ? Optional.of(model.root()) : model.root().getAllParts().filter((p_233400_) -> {
return p_233400_.hasChild(pName);
}).findFirst().map((p_233397_) -> {
return p_233397_.getChild(pName);
});
return pName.equals("root") ? Optional.of(model.root()) : model.root().getAllParts().filter((p_233400_)
-> p_233400_.hasChild(pName)).findFirst().map((p_233397_) -> p_233397_.getChild(pName));
}

private static float getElapsedSeconds(AnimationDefinition pAnimationDefinition, long pAccumulatedTime) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@

public class BoulderingZombieModel<E extends BoulderingZombie> extends HumanoidModel<E> implements RootModel {
public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(SullysMod.modPrefix("bouldering_zombie"), "main");
public static final ModelLayerLocation INNER_ARMOR = new ModelLayerLocation(SullysMod.modPrefix("bouldering_zombie"), "inner_armor");
public static final ModelLayerLocation OUTER_ARMOR = new ModelLayerLocation(SullysMod.modPrefix("bouldering_zombie"), "outer_armor");
private final ModelPart root;

public BoulderingZombieModel(ModelPart pRoot) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,18 @@
import com.uraneptus.sullysmod.SullysMod;
import com.uraneptus.sullysmod.client.model.BoulderingZombieModel;
import com.uraneptus.sullysmod.common.entities.BoulderingZombie;
import net.minecraft.client.model.ZombieModel;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.entity.HumanoidMobRenderer;
import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer;
import net.minecraft.resources.ResourceLocation;

public class BoulderingZombieRenderer<E extends BoulderingZombie> extends HumanoidMobRenderer<E, BoulderingZombieModel<E>> {
private static final ResourceLocation TEXTURE = SullysMod.modPrefix("textures/entity/bouldering_zombie/bouldering_zombie.png");

public BoulderingZombieRenderer(EntityRendererProvider.Context pContext) {
super(pContext, new BoulderingZombieModel<>(pContext.bakeLayer(BoulderingZombieModel.LAYER_LOCATION)), 0.5F);
this.addLayer(new HumanoidArmorLayer<>(this, new BoulderingZombieModel<>(pContext.bakeLayer(BoulderingZombieModel.INNER_ARMOR)), new BoulderingZombieModel<>(pContext.bakeLayer(BoulderingZombieModel.OUTER_ARMOR)), pContext.getModelManager()));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
import com.uraneptus.sullysmod.core.registry.SMItems;
import com.uraneptus.sullysmod.core.registry.SMParticleTypes;
import net.minecraft.Util;
import net.minecraft.client.model.HumanoidArmorModel;
import net.minecraft.client.model.geom.builders.CubeDeformation;
import net.minecraft.client.model.geom.builders.LayerDefinition;
import net.minecraft.client.renderer.blockentity.SkullBlockRenderer;
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
import net.minecraft.client.renderer.item.ItemProperties;
Expand Down Expand Up @@ -58,12 +61,17 @@ public static void registerEntityRenderer(EntityRenderersEvent.RegisterRenderers

@SubscribeEvent
public static void registerLayerLocation(EntityRenderersEvent.RegisterLayerDefinitions event) {
LayerDefinition INNER_ARMOR_DEF = LayerDefinition.create(HumanoidArmorModel.createBodyLayer(new CubeDeformation(0.5F)), 64, 32);
LayerDefinition OUTER_ARMOR_DEF = LayerDefinition.create(HumanoidArmorModel.createBodyLayer(new CubeDeformation(1.0F)), 64, 32);

event.registerLayerDefinition(LanternfishModel.LAYER_LOCATION, LanternfishModel::createBodyLayer);
event.registerLayerDefinition(JadeShieldModel.LAYER_LOCATION, JadeShieldModel::createLayer);
event.registerLayerDefinition(TortoiseShellModel.LAYER_LOCATION, TortoiseShellModel::createBodyLayer);
event.registerLayerDefinition(TortoiseModel.LAYER_LOCATION, TortoiseModel::createBodyLayer);
event.registerLayerDefinition(JungleSpiderModel.LAYER_LOCATION, JungleSpiderModel::createBodyLayer);
event.registerLayerDefinition(BoulderingZombieModel.LAYER_LOCATION, BoulderingZombieModel::createBodyLayer);
event.registerLayerDefinition(BoulderingZombieModel.INNER_ARMOR, () -> INNER_ARMOR_DEF);
event.registerLayerDefinition(BoulderingZombieModel.OUTER_ARMOR, () -> OUTER_ARMOR_DEF);
event.registerLayerDefinition(PiranhaModel.LAYER_LOCATION, PiranhaModel::createBodyLayer);
event.registerLayerDefinition(MinersHelmetModel.LAYER_LOCATION, MinersHelmetModel::createBodyLayer);
event.registerLayerDefinition(CrackedAncientSkullModel.LAYER_LOCATION, CrackedAncientSkullModel::createBodyLayer);
Expand Down

0 comments on commit 857f357

Please sign in to comment.