mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2025-02-13 08:14:23 +01:00
Backport fixes for head position when riding/sitting
This commit is contained in:
parent
7988da222f
commit
7328d0c43d
2 changed files with 22 additions and 5 deletions
|
@ -24,12 +24,11 @@ abstract class MixinPlayerEntity implements RegistrationHandler {
|
||||||
@ModifyReturnValue(method = "getBaseDimensions(Lnet/minecraft/entity/EntityPose;)Lnet/minecraft/entity/EntityDimensions;",
|
@ModifyReturnValue(method = "getBaseDimensions(Lnet/minecraft/entity/EntityPose;)Lnet/minecraft/entity/EntityDimensions;",
|
||||||
at = @At("RETURN"))
|
at = @At("RETURN"))
|
||||||
private EntityDimensions modifyEyeHeight(EntityDimensions dimensions, EntityPose pose) {
|
private EntityDimensions modifyEyeHeight(EntityDimensions dimensions, EntityPose pose) {
|
||||||
float factor = syncedPony.getCachedPonyData().size().eyeHeightFactor();
|
return getSyncedPony().modifyEyeHeight((PlayerEntity)(Object)this, dimensions, pose);
|
||||||
return factor == 1 ? dimensions : dimensions.withEyeHeight(dimensions.eyeHeight() * factor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "tick()V", at = @At("TAIL"))
|
@Inject(method = "tick()V", at = @At("TAIL"))
|
||||||
private void onTick(CallbackInfo info) {
|
private void onTick(CallbackInfo info) {
|
||||||
syncedPony.synchronize((PlayerEntity)(Object)this);
|
getSyncedPony().synchronize((PlayerEntity)(Object)this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.render.Frustum;
|
import net.minecraft.client.render.Frustum;
|
||||||
import net.minecraft.client.render.entity.model.EntityModel;
|
import net.minecraft.client.render.entity.model.EntityModel;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.*;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
@ -154,6 +154,7 @@ public class EquineRenderManager<T extends LivingEntity, M extends EntityModel<T
|
||||||
private Supplier<Optional<PonyData>> lastPonyData = PonyDataLoader.NULL;
|
private Supplier<Optional<PonyData>> lastPonyData = PonyDataLoader.NULL;
|
||||||
@Nullable
|
@Nullable
|
||||||
private Pony lastTransmittedPony;
|
private Pony lastTransmittedPony;
|
||||||
|
private boolean seated;
|
||||||
|
|
||||||
public Pony getCachedPony() {
|
public Pony getCachedPony() {
|
||||||
return lastRenderedPony;
|
return lastRenderedPony;
|
||||||
|
@ -163,15 +164,32 @@ public class EquineRenderManager<T extends LivingEntity, M extends EntityModel<T
|
||||||
return lastPonyData.get().orElse(PonyData.NULL);
|
return lastPonyData.get().orElse(PonyData.NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public EntityDimensions modifyEyeHeight(PlayerEntity player, EntityDimensions dimensions, EntityPose pose) {
|
||||||
|
float factor = lastRenderedPony == null ? 1 : lastRenderedPony.size().eyeHeightFactor();
|
||||||
|
|
||||||
|
if (factor == 1) {
|
||||||
|
return dimensions;
|
||||||
|
}
|
||||||
|
|
||||||
|
float eyeHeight = dimensions.eyeHeight() * factor;
|
||||||
|
if (player.hasVehicle()) {
|
||||||
|
eyeHeight += player.getVehicleAttachmentPos(player.getVehicle()).getY();
|
||||||
|
}
|
||||||
|
|
||||||
|
return dimensions.withEyeHeight(eyeHeight);
|
||||||
|
}
|
||||||
|
|
||||||
public void synchronize(PlayerEntity player) {
|
public void synchronize(PlayerEntity player) {
|
||||||
Pony pony = Pony.getManager().getPony(player);
|
Pony pony = Pony.getManager().getPony(player);
|
||||||
boolean changed = pony.compareTo(lastRenderedPony) != 0;
|
boolean changed = pony.compareTo(lastRenderedPony) != 0;
|
||||||
|
boolean seated = player.hasVehicle();
|
||||||
|
|
||||||
if (changed) {
|
if (changed || seated != this.seated) {
|
||||||
lastRenderedPony = pony;
|
lastRenderedPony = pony;
|
||||||
lastPonyData = pony.metadataGetter();
|
lastPonyData = pony.metadataGetter();
|
||||||
player.calculateDimensions();
|
player.calculateDimensions();
|
||||||
}
|
}
|
||||||
|
this.seated = seated;
|
||||||
|
|
||||||
if (!(player instanceof PreviewModel)) {
|
if (!(player instanceof PreviewModel)) {
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
Loading…
Reference in a new issue