From f14ab56d547f27066cf812f270d248e8f7f9da03 Mon Sep 17 00:00:00 2001 From: Sollace Date: Sat, 10 Oct 2020 16:26:21 +0200 Subject: [PATCH] Fixed crash when disguising as certain types of blocks --- .../unicopia/entity/behaviour/EntityBehaviour.java | 6 +++--- .../entity/behaviour/FallingBlockBehaviour.java | 14 ++------------ .../unicopia/entity/player/PlayerDimensions.java | 10 +++++++++- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/EntityBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/EntityBehaviour.java index d0bee262..336c42c1 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/EntityBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/EntityBehaviour.java @@ -73,14 +73,14 @@ public class EntityBehaviour { return Optional.empty(); } - float h = entity.getHeight() - 0.1F; - float w = entity.getWidth(); + float h = Math.max(0.001F, entity.getHeight() - 0.1F); + float w = Math.max(0.001F, entity.getWidth()); if (current.isPresent() && h == current.get().height && w == current.get().width) { return current; } - return Optional.of(EntityDimensions.changing(entity.getHeight() - 0.1F, entity.getWidth())); + return Optional.of(EntityDimensions.changing(h, w)); } public void copyBaseAttributes(LivingEntity from, Entity to) { diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/FallingBlockBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/FallingBlockBehaviour.java index a0453cea..4fda49c2 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/FallingBlockBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/FallingBlockBehaviour.java @@ -24,27 +24,17 @@ import net.minecraft.state.property.Properties; import net.minecraft.tag.BlockTags; import net.minecraft.util.Tickable; import net.minecraft.util.math.Direction; -import net.minecraft.util.math.Direction.Axis; import net.minecraft.util.math.Vec3d; -import net.minecraft.util.shape.VoxelShape; public class FallingBlockBehaviour extends EntityBehaviour { private static final Vec3d UP = Vec3d.of(Direction.UP.getVector()); - // private static final Optional FULL_BLOCK = Optional.of(EntityDimensions.changing(0.6F, 0.9F)); + private static final Optional FULL_BLOCK = Optional.of(EntityDimensions.changing(0.6F, 0.9F)); @Override public Optional getDimensions(FallingBlockEntity entity, Optional current) { - - VoxelShape shape = entity.getBlockState().getCollisionShape(entity.world, entity.getBlockPos()); - float height = (float)shape.getMax(Axis.Y); - - if (!current.isPresent() || current.get().height != height) { - return Optional.of(EntityDimensions.changing(0.6F, height)); - } - - return current; + return FULL_BLOCK; } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerDimensions.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerDimensions.java index 071434ff..8cb7a94e 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerDimensions.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerDimensions.java @@ -4,6 +4,7 @@ import java.util.Optional; import javax.annotation.Nullable; +import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.ability.magic.Spell; import net.minecraft.entity.EntityDimensions; @@ -48,9 +49,16 @@ public final class PlayerDimensions { flyingDimensions = EntityDimensions.changing(dimensions.width, dimensions.height / 2); } - return getPredicate() + dimensions = getPredicate() .flatMap(e -> e.getTargetDimensions(pony)) .orElseGet(() -> physics.isFlyingSurvival ? flyingDimensions : defaultDimensions); + + if (dimensions.height < 0 || dimensions.width < 0) { + Unicopia.LOGGER.warn("Dim out was negative! Restoring original"); + return defaultDimensions; + } + + return dimensions; } private float calculateTargetEyeHeight() {