Skip to content

Commit

Permalink
re-add werewolf swimming animation
Browse files Browse the repository at this point in the history
  • Loading branch information
Cheaterpaul committed Mar 6, 2024
1 parent 2d2e7fd commit 6c026e6
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,29 +8,27 @@
import net.minecraft.client.player.AbstractClientPlayer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.network.chat.OutgoingChatMessage;
import net.minecraft.world.entity.HumanoidArm;
import net.minecraft.world.entity.player.Player;

import java.util.function.Function;

public class ModPlayerRenderer {

private final WerewolfPlayerBeastRenderer BEAST_RENDERER;
private final WerewolfPlayerSurvivalistRenderer SURVIVALIST_RENDERER;
private final WerewolfPlayerBeastRenderer beastRenderer;
private final WerewolfPlayerSurvivalistRenderer survivalistRenderer;

public ModPlayerRenderer(EntityRendererProvider.Context context) {
this.BEAST_RENDERER = new WerewolfPlayerBeastRenderer(context);
this.SURVIVALIST_RENDERER = new WerewolfPlayerSurvivalistRenderer(context);
this.beastRenderer = new WerewolfPlayerBeastRenderer(context);
this.survivalistRenderer = new WerewolfPlayerSurvivalistRenderer(context);
}

public boolean renderPlayer(AbstractClientPlayer player, float entityYaw, float partialTicks, PoseStack stack, MultiBufferSource buffer, int packedLight) {
return render(player, x -> {
if (x == WerewolfForm.SURVIVALIST) {
SURVIVALIST_RENDERER.render(player, entityYaw, partialTicks, stack, buffer, packedLight);
survivalistRenderer.render(player, entityYaw, partialTicks, stack, buffer, packedLight);
return true;
} else if (x == WerewolfForm.BEAST) {
BEAST_RENDERER.render(player, entityYaw, partialTicks, stack, buffer, packedLight);
beastRenderer.render(player, entityYaw, partialTicks, stack, buffer, packedLight);
return true;
}
return false;
Expand All @@ -45,16 +43,16 @@ public boolean renderArm(AbstractClientPlayer player, PoseStack stack, MultiBuff
return render(player, form -> {
if (form == WerewolfForm.SURVIVALIST) {
if (arm == HumanoidArm.LEFT) {
SURVIVALIST_RENDERER.renderLeftHand(stack, bufferSource, pCombinedLight, player);
survivalistRenderer.renderLeftHand(stack, bufferSource, pCombinedLight, player);
} else {
SURVIVALIST_RENDERER.renderRightHand(stack, bufferSource, pCombinedLight, player);
survivalistRenderer.renderRightHand(stack, bufferSource, pCombinedLight, player);
}
return true;
} else if (form == WerewolfForm.BEAST) {
if (arm == HumanoidArm.LEFT) {
BEAST_RENDERER.renderLeftHand(stack, bufferSource, pCombinedLight, player);
beastRenderer.renderLeftHand(stack, bufferSource, pCombinedLight, player);
} else {
BEAST_RENDERER.renderRightHand(stack, bufferSource, pCombinedLight, player);
beastRenderer.renderRightHand(stack, bufferSource, pCombinedLight, player);
}
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import net.minecraft.client.model.geom.builders.*;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
import net.minecraft.world.entity.HumanoidArm;
import net.minecraft.world.entity.LivingEntity;
import net.minecraftforge.api.distmarker.Dist;
Expand Down Expand Up @@ -90,6 +91,7 @@ public class WerewolfBeastModel<T extends LivingEntity> extends WerewolfBaseMode
public final ModelPart earRight;
public final ModelPart joint;
public final ModelPart neck;
private final List<ModelPart> parts;

public WerewolfBeastModel(ModelPart part) {
super(part);
Expand All @@ -111,6 +113,7 @@ public WerewolfBeastModel(ModelPart part) {
this.jaw = this.head.getChild(JAW);
this.earLeft = this.head.getChild(EAR_LEFT);
this.earRight = this.head.getChild(EAR_RIGHT);
this.parts = part.getAllParts().filter(s -> !s.isEmpty()).toList();
}

@SuppressWarnings({"unused", "DuplicatedCode"})
Expand Down Expand Up @@ -332,4 +335,9 @@ public static List<ResourceLocation> getBeastTextures() {
protected @NotNull ModelPart getArm(@NotNull HumanoidArm pSide) {
return pSide == HumanoidArm.LEFT ? this.rightArm : this.leftArm;
}

@Override
public ModelPart getRandomModelPart(RandomSource pRandom) {
return this.parts.get(pRandom.nextInt(this.parts.size()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import net.minecraft.client.model.geom.builders.*;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
import net.minecraft.world.entity.HumanoidArm;
import net.minecraft.world.entity.LivingEntity;
import net.minecraftforge.api.distmarker.Dist;
Expand Down Expand Up @@ -75,6 +76,7 @@ public class WerewolfSurvivalistModel<T extends LivingEntity> extends WerewolfBa
public final ModelPart jawTeeth;
public final ModelPart neck;
public final ModelPart joint;
private final List<ModelPart> parts;


public WerewolfSurvivalistModel(ModelPart part) {
Expand All @@ -91,6 +93,7 @@ public WerewolfSurvivalistModel(ModelPart part) {
this.head = this.joint.getChild(HEAD);
this.jaw = this.head.getChild(JAW);
this.jawTeeth = this.jaw.getChild(JAW_TEETH);
this.parts = part.getAllParts().filter(s -> !s.isEmpty()).toList();
}

@Nonnull
Expand Down Expand Up @@ -180,15 +183,7 @@ public void setupAnim(@Nonnull T entityIn, float limbSwing, float limbSwingAmoun
this.crouching = entityIn.isCrouching();
boolean flag1 = entityIn.isVisuallySwimming();
this.head.yRot = netHeadYaw * ((float) Math.PI / 180F);
if (this.swimAmount > 0.0f) {
if (flag1) {
this.head.xRot = this.rotlerpRad(this.head.xRot, (-(float) Math.PI / 4F), this.swimAmount);
} else {
this.head.xRot = this.rotlerpRad(this.head.xRot, headPitch * ((float) Math.PI / 180F), this.swimAmount);
}
} else {
this.head.xRot = headPitch * ((float) Math.PI / 180F);
}
this.head.xRot = headPitch * ((float) Math.PI / 180F);

setupAttackAnimation(entityIn, ageInTicks);

Expand Down Expand Up @@ -268,4 +263,9 @@ public static List<ResourceLocation> getSurvivalTextures() {
return locs;
}

@Override
public @NotNull ModelPart getRandomModelPart(RandomSource pRandom) {
return this.parts.get(pRandom.nextInt(this.parts.size()));
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.teamlapen.werewolves.client.render;

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Axis;
import de.teamlapen.werewolves.api.entities.werewolf.WerewolfForm;
import de.teamlapen.werewolves.client.gui.WerewolfPlayerAppearanceScreen;
import de.teamlapen.werewolves.entities.player.werewolf.WerewolfPlayer;
Expand All @@ -15,6 +16,7 @@
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.LivingEntity;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
Expand Down Expand Up @@ -57,4 +59,20 @@ protected void renderHand(PoseStack stack, MultiBufferSource bufferSource, int p
arm.xRot = 0.0F;
arm.render(stack, bufferSource.getBuffer(RenderType.entitySolid(getTextureLocation(entity))), p_117778_, OverlayTexture.NO_OVERLAY);
}

@Override
protected void setupRotations(T pEntityLiving, PoseStack pMatrixStack, float pAgeInTicks, float pRotationYaw, float pPartialTicks) {
float f = pEntityLiving.getSwimAmount(pPartialTicks);
if (pEntityLiving.isFallFlying()) {
super.setupRotations(pEntityLiving, pMatrixStack, pAgeInTicks, pRotationYaw, pPartialTicks);
} else if (f > 0) {
super.setupRotations(pEntityLiving, pMatrixStack, pAgeInTicks, pRotationYaw, pPartialTicks);
setupSwimRotations(pEntityLiving, pMatrixStack, pAgeInTicks, pRotationYaw, pPartialTicks);
} else {
super.setupRotations(pEntityLiving, pMatrixStack, pAgeInTicks, pRotationYaw, pPartialTicks);
}
}

protected abstract void setupSwimRotations(T pEntityLiving, PoseStack pMatrixStack, float pAgeInTicks, float pRotationYaw, float pPartialTicks);

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.teamlapen.werewolves.client.render.player;

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Axis;
import de.teamlapen.werewolves.api.entities.werewolf.WerewolfForm;
import de.teamlapen.werewolves.client.core.ModModelRender;
import de.teamlapen.werewolves.client.model.WerewolfBeastModel;
Expand All @@ -13,6 +14,7 @@
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.entity.layers.ArrowLayer;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.HumanoidArm;
import org.jetbrains.annotations.NotNull;

Expand Down Expand Up @@ -51,4 +53,14 @@ public void renderLeftHand(PoseStack stack, MultiBufferSource bufferSource, int
this.renderHand(stack, bufferSource, p_117816_, entity, this.model.getLeftArmModel());
}
}

@Override
protected void setupSwimRotations(AbstractClientPlayer pEntityLiving, PoseStack pMatrixStack, float pAgeInTicks, float pRotationYaw, float pPartialTicks) {
float f3 = pEntityLiving.isInWater() || pEntityLiving.isInFluidType((fluidType, height) -> pEntityLiving.canSwimInFluidType(fluidType)) ? -70.0F - pEntityLiving.getXRot() : -70.0F;
float f4 = Mth.lerp(pEntityLiving.getSwimAmount(pPartialTicks), 0.0F, f3);
pMatrixStack.mulPose(Axis.XP.rotationDegrees(f4));
if (pEntityLiving.isVisuallySwimming()) {
pMatrixStack.translate(0.0F, -1.0F, 0.3F);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.teamlapen.werewolves.client.render.player;

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Axis;
import de.teamlapen.werewolves.api.entities.werewolf.WerewolfForm;
import de.teamlapen.werewolves.client.core.ModModelRender;
import de.teamlapen.werewolves.client.model.WerewolfSurvivalistModel;
Expand All @@ -13,6 +14,7 @@
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.entity.layers.ArrowLayer;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import org.jetbrains.annotations.NotNull;

import java.util.List;
Expand Down Expand Up @@ -45,4 +47,11 @@ public void renderRightHand(PoseStack stack, MultiBufferSource bufferSource, int
public void renderLeftHand(PoseStack stack, MultiBufferSource bufferSource, int p_117816_, AbstractClientPlayer entity) {

}

@Override
protected void setupSwimRotations(AbstractClientPlayer pEntityLiving, PoseStack pMatrixStack, float pAgeInTicks, float pRotationYaw, float pPartialTicks) {
float f3 = pEntityLiving.isInWater() || pEntityLiving.isInFluidType((fluidType, height) -> pEntityLiving.canSwimInFluidType(fluidType)) ? -10.0F - pEntityLiving.getXRot() : -10.0F;
float f4 = Mth.lerp(pEntityLiving.getSwimAmount(pPartialTicks), 0.0F, f3);
pMatrixStack.mulPose(Axis.XP.rotationDegrees(f4));
}
}

0 comments on commit 6c026e6

Please sign in to comment.