From bb50b20be4fbbc2aff88464a602b5fa59902a5ec Mon Sep 17 00:00:00 2001 From: Sollace Date: Sun, 12 Dec 2021 13:10:24 +0200 Subject: [PATCH] Slightly clean up flight and dimensions predicates --- .../com/minelittlepony/unicopia/FlightType.java | 9 ++++++--- .../ability/magic/spell/DisguiseSpell.java | 15 ++++++++------- .../unicopia/entity/behaviour/Disguise.java | 14 +++++++++++--- .../unicopia/entity/player/PlayerPhysics.java | 3 ++- 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/FlightType.java b/src/main/java/com/minelittlepony/unicopia/FlightType.java index 6c9d6368..e2329c0f 100644 --- a/src/main/java/com/minelittlepony/unicopia/FlightType.java +++ b/src/main/java/com/minelittlepony/unicopia/FlightType.java @@ -1,11 +1,10 @@ package com.minelittlepony.unicopia; -import com.minelittlepony.unicopia.entity.player.Pony; - import net.minecraft.entity.player.PlayerEntity; import net.minecraft.sound.SoundEvent; public enum FlightType { + UNSET, NONE, AVIAN, INSECTOID, @@ -23,6 +22,10 @@ public enum FlightType { return this == ARTIFICIAL; } + public boolean isPresent() { + return this != UNSET; + } + public boolean canFly() { return !isGrounded(); } @@ -41,6 +44,6 @@ public enum FlightType { * This overrides what the race specifies. */ public interface Provider { - FlightType getFlightType(Pony player); + FlightType getFlightType(); } } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/DisguiseSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/DisguiseSpell.java index e8271d09..7b864297 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/DisguiseSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/DisguiseSpell.java @@ -205,21 +205,22 @@ public class DisguiseSpell extends AbstractSpell implements Suppressable, Flight } @Override - public FlightType getFlightType(Pony player) { - if (isSuppressed() || !disguise.isPresent()) { - return player.getSpecies().getFlightType(); - } - return disguise.getFlightType(); + public FlightType getFlightType() { + return getAppearance().map(Disguise::getFlightType).orElse(FlightType.UNSET); + } + + public Optional getAppearance() { + return isSuppressed() ? Optional.empty() : Optional.ofNullable(disguise); } @Override public Optional getTargetEyeHeight(Pony player) { - return isSuppressed() ? Optional.empty() : disguise.getStandingEyeHeight(); + return getAppearance().flatMap(d -> d.getTargetEyeHeight(player)); } @Override public Optional getTargetDimensions(Pony player) { - return isSuppressed() ? Optional.empty() : disguise.getDimensions(); + return getAppearance().flatMap(d -> d.getTargetDimensions(player)); } static abstract class PlayerAccess extends PlayerEntity { diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/Disguise.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/Disguise.java index 13666eea..48f205bb 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/Disguise.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/Disguise.java @@ -17,6 +17,7 @@ import com.minelittlepony.unicopia.Owned; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType; import com.minelittlepony.unicopia.entity.player.PlayerAttributes; +import com.minelittlepony.unicopia.entity.player.PlayerDimensions; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.projectile.ProjectileUtil; import com.minelittlepony.unicopia.util.NbtSerialisable; @@ -49,7 +50,7 @@ import net.minecraft.util.shape.VoxelShape; import net.minecraft.util.shape.VoxelShapes; import net.minecraft.world.WorldAccess; -public class Disguise implements NbtSerialisable { +public class Disguise implements NbtSerialisable, PlayerDimensions.Provider, FlightType.Provider { private static final Optional BLOCK_HEIGHT = Optional.of(0.5F); @NotNull @@ -206,7 +207,12 @@ public class Disguise implements NbtSerialisable { } } + @Override public FlightType getFlightType() { + if (!isPresent()) { + return FlightType.UNSET; + } + if (entity == null) { return FlightType.NONE; } @@ -231,7 +237,8 @@ public class Disguise implements NbtSerialisable { return FlightType.NONE; } - public Optional getStandingEyeHeight() { + @Override + public Optional getTargetEyeHeight(Pony player) { if (entity != null) { if (entity instanceof FallingBlockEntity) { return BLOCK_HEIGHT; @@ -255,7 +262,8 @@ public class Disguise implements NbtSerialisable { return EntityBehaviour.forEntity(entity).getCameraDistance(entity, player); } - public Optional getDimensions() { + @Override + public Optional getTargetDimensions(Pony player) { return dimensions = EntityBehaviour.forEntity(entity).getDimensions(entity, dimensions); } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java index d168d525..200cd960 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java @@ -134,7 +134,8 @@ public class PlayerPhysics extends EntityPhysics implements Tickab return pony.getSpellSlot().get(true) .filter(effect -> !effect.isDead() && effect instanceof FlightType.Provider) - .map(effect -> ((FlightType.Provider)effect).getFlightType(pony)) + .map(effect -> ((FlightType.Provider)effect).getFlightType()) + .filter(FlightType::isPresent) .orElse(pony.getSpecies().getFlightType()); }