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;",
|
||||
at = @At("RETURN"))
|
||||
private EntityDimensions modifyEyeHeight(EntityDimensions dimensions, EntityPose pose) {
|
||||
float factor = syncedPony.getCachedPonyData().size().eyeHeightFactor();
|
||||
return factor == 1 ? dimensions : dimensions.withEyeHeight(dimensions.eyeHeight() * factor);
|
||||
return getSyncedPony().modifyEyeHeight((PlayerEntity)(Object)this, dimensions, pose);
|
||||
}
|
||||
|
||||
@Inject(method = "tick()V", at = @At("TAIL"))
|
||||
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.entity.model.EntityModel;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.*;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
|
||||
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;
|
||||
@Nullable
|
||||
private Pony lastTransmittedPony;
|
||||
private boolean seated;
|
||||
|
||||
public Pony getCachedPony() {
|
||||
return lastRenderedPony;
|
||||
|
@ -163,15 +164,32 @@ public class EquineRenderManager<T extends LivingEntity, M extends EntityModel<T
|
|||
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) {
|
||||
Pony pony = Pony.getManager().getPony(player);
|
||||
boolean changed = pony.compareTo(lastRenderedPony) != 0;
|
||||
boolean seated = player.hasVehicle();
|
||||
|
||||
if (changed) {
|
||||
if (changed || seated != this.seated) {
|
||||
lastRenderedPony = pony;
|
||||
lastPonyData = pony.metadataGetter();
|
||||
player.calculateDimensions();
|
||||
}
|
||||
this.seated = seated;
|
||||
|
||||
if (!(player instanceof PreviewModel)) {
|
||||
@Nullable
|
||||
|
|
Loading…
Reference in a new issue