Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,7 @@ public boolean shouldRemoved(Player player, Parkourability parkourability) {

@Override
public boolean animatePre(Player player, Parkourability parkourability, PlayerModelTransformer transformer) {
float transitionPhase = Math.min(1f, (parkourability.get(ChargeJump.class).getChargingTick() + transformer.getPartialTick()) / ChargeJump.JUMP_MAX_CHARGE_TICK);
float animFactor = new Easing(transitionPhase)
.sinInOut(0, 1, 0, 1)
.get();
float animFactor = getAnimFactor(parkourability, transformer.getPartialTick());
transformer
.translateLeftLeg(
0,
Expand Down Expand Up @@ -53,14 +50,20 @@ public boolean animatePre(Player player, Parkourability parkourability, PlayerMo

@Override
public boolean rotatePre(Player player, Parkourability parkourability, PlayerModelRotator rotator) {
float transitionPhase = Math.min(1f, (parkourability.get(ChargeJump.class).getChargingTick() + rotator.getPartialTick()) / ChargeJump.JUMP_MAX_CHARGE_TICK);
float animFactor = new Easing(transitionPhase)
.sinInOut(0, 1, 0, 1)
.get();
float animFactor = getAnimFactor(parkourability, rotator.getPartialTick());
rotator
.rotateYawRightward(180f + rotator.getYRot())
.translate(0, 0f, 0.3f * animFactor)
.rotatePitchFrontward(25 * animFactor);
return true;
}

private float getAnimFactor(Parkourability parkourability, float partialTick) {
partialTick *= (parkourability.get(ChargeJump.class).getNotChargingTick() == 0 ? 1 : -1);
float transitionPhase = Math.min(1f, (parkourability.get(ChargeJump.class).getChargingTick() + partialTick) / ChargeJump.JUMP_MAX_CHARGE_TICK);
float animFactor = new Easing(transitionPhase)
.sinInOut(0, 1, 0, 1)
.get();
return animFactor;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,13 @@ public class SlidingAnimator extends Animator {
private static final int MAX_TRANSITION_TICK = 5;
@Override
public boolean shouldRemoved(Player player, Parkourability parkourability) {
return !parkourability.get(Slide.class).isDoing();
Slide slide = parkourability.get(Slide.class);
return !slide.isDoing() && slide.getNotDoingTick() >= MAX_TRANSITION_TICK;
}

@Override
public void animatePost(Player player, Parkourability parkourability, PlayerModelTransformer transformer) {
float animFactor = (getTick() + transformer.getPartialTick()) / MAX_TRANSITION_TICK;
if (animFactor > 1) animFactor = 1;
animFactor = new Easing(animFactor)
.sinInOut(0, 1, 0, 1)
.get();
float animFactor = getAnimFactor(parkourability, transformer.getPartialTick());

transformer
.translateLeftLeg(
Expand Down Expand Up @@ -53,12 +50,8 @@ public void animatePost(Player player, Parkourability parkourability, PlayerMode
public boolean rotatePre(Player player, Parkourability parkourability, PlayerModelRotator rotator) {
Vec3 vec = parkourability.get(Slide.class).getSlidingVector();
if (vec == null) return false;
float animFactor = (getTick() + rotator.getPartialTick()) / MAX_TRANSITION_TICK;
float yRot = (float) VectorUtil.toYawDegree(vec);
if (animFactor > 1) animFactor = 1;
animFactor = new Easing(animFactor)
.sinInOut(0, 1, 0, 1)
.get();
float animFactor = getAnimFactor(parkourability, rotator.getPartialTick());
float yRot = parkourability.get(Slide.class).isDoing() ? (float) VectorUtil.toYawDegree(vec) : rotator.getYRot();
rotator
.rotateYawRightward(180f + yRot)
.rotatePitchFrontward(-55f * animFactor)
Expand All @@ -67,4 +60,18 @@ public boolean rotatePre(Player player, Parkourability parkourability, PlayerMod
.translate(0, -0.7f * animFactor, -0.3f * animFactor);
return true;
}

private float getAnimFactor(Parkourability parkourability, float partialTick) {
Slide slide = parkourability.get(Slide.class);
boolean doing = slide.isDoing();
int tick = doing ? getTick() : slide.getNotDoingTick();
float animFactor = Math.min((tick + partialTick) / MAX_TRANSITION_TICK, 1);
if (!doing) {
animFactor = 1 - animFactor;
}
animFactor = new Easing(animFactor)
.sinInOut(0, 1, 0, 1)
.get();
return animFactor;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -175,4 +175,8 @@ public boolean isCharging() {
public int getChargingTick() {
return chargeTick;
}

public int getNotChargingTick() {
return notChargeTick;
}
}
8 changes: 8 additions & 0 deletions src/main/java/com/alrex/parcool/common/action/impl/Slide.java
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,10 @@ public void onStopInLocalClient(Player player) {
if (animation != null && !animation.hasAnimator()) {
animation.setAnimator(new CrawlAnimator());
}
if (!Parkourability.get(player).get(Crawl.class).isDoing()) {
player.swimAmount = 0;
player.swimAmountO = 0;
}
}

@Override
Expand All @@ -109,6 +113,10 @@ public void onStopInOtherClient(Player player) {
if (animation != null && !animation.hasAnimator()) {
animation.setAnimator(new CrawlAnimator());
}
if (!Parkourability.get(player).get(Crawl.class).isDoing()) {
player.swimAmount = 0;
player.swimAmountO = 0;
}
}

@Nullable
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/META-INF/accesstransformer.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ public net.minecraft.client.renderer.RenderStateShard f_173075_ # RENDERTYPE_LEA
public net.minecraft.world.entity.Entity onGround # onGround
public net.minecraft.world.damagesource.DamageSources *()
public net.minecraft.world.entity.player.Player canPlayerFitWithinBlocksAndEntitiesWhen(Lnet/minecraft/world/entity/Pose;)Z # canPlayerFitWithinBlocksAndEntitiesWhen
public net.minecraft.world.entity.LivingEntity swimAmount
public net.minecraft.world.entity.LivingEntity swimAmountO