mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-12 16:14:24 +01:00
Changelings can now climb walls. Closes #122
This commit is contained in:
parent
ca792dc4d2
commit
db69d649a5
3 changed files with 25 additions and 8 deletions
|
@ -15,8 +15,10 @@ import com.minelittlepony.unicopia.ability.magic.Caster;
|
||||||
import com.minelittlepony.unicopia.ability.magic.SpellContainer;
|
import com.minelittlepony.unicopia.ability.magic.SpellContainer;
|
||||||
import com.minelittlepony.unicopia.ability.magic.SpellPredicate;
|
import com.minelittlepony.unicopia.ability.magic.SpellPredicate;
|
||||||
import com.minelittlepony.unicopia.ability.magic.SpellContainer.Operation;
|
import com.minelittlepony.unicopia.ability.magic.SpellContainer.Operation;
|
||||||
|
import com.minelittlepony.unicopia.ability.magic.spell.AbstractDisguiseSpell;
|
||||||
import com.minelittlepony.unicopia.ability.magic.spell.Situation;
|
import com.minelittlepony.unicopia.ability.magic.spell.Situation;
|
||||||
import com.minelittlepony.unicopia.advancement.UCriteria;
|
import com.minelittlepony.unicopia.advancement.UCriteria;
|
||||||
|
import com.minelittlepony.unicopia.entity.behaviour.EntityAppearance;
|
||||||
import com.minelittlepony.unicopia.entity.duck.LivingEntityDuck;
|
import com.minelittlepony.unicopia.entity.duck.LivingEntityDuck;
|
||||||
import com.minelittlepony.unicopia.entity.effect.UEffects;
|
import com.minelittlepony.unicopia.entity.effect.UEffects;
|
||||||
import com.minelittlepony.unicopia.entity.player.Pony;
|
import com.minelittlepony.unicopia.entity.player.Pony;
|
||||||
|
@ -328,6 +330,13 @@ public abstract class Living<T extends LivingEntity> implements Equine<T>, Caste
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Optional<BlockPos> chooseClimbingPos() {
|
||||||
|
return getSpellSlot().get(SpellPredicate.IS_DISGUISE, false)
|
||||||
|
.map(AbstractDisguiseSpell::getDisguise)
|
||||||
|
.filter(EntityAppearance::canClimbWalls)
|
||||||
|
.map(v -> entity.getBlockPos());
|
||||||
|
}
|
||||||
|
|
||||||
private boolean tryCaptureLightning() {
|
private boolean tryCaptureLightning() {
|
||||||
return getInventoryStacks().filter(stack -> !stack.isEmpty() && stack.getItem() == UItems.EMPTY_JAR).findFirst().map(stack -> {
|
return getInventoryStacks().filter(stack -> !stack.isEmpty() && stack.getItem() == UItems.EMPTY_JAR).findFirst().map(stack -> {
|
||||||
invinsibilityTicks = 20;
|
invinsibilityTicks = 20;
|
||||||
|
|
|
@ -171,7 +171,6 @@ public class Pony extends Living<PlayerEntity> implements Copyable<Pony>, Update
|
||||||
if (animation.isOf(Animation.NONE)) {
|
if (animation.isOf(Animation.NONE)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
System.out.println(animationMaxDuration);
|
|
||||||
return 1 - (((float)animationDuration) / animationMaxDuration);
|
return 1 - (((float)animationDuration) / animationMaxDuration);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -360,6 +359,11 @@ public class Pony extends Living<PlayerEntity> implements Copyable<Pony>, Update
|
||||||
|
|
||||||
powers.tick();
|
powers.tick();
|
||||||
|
|
||||||
|
if (entity.getClimbingPos().isPresent() && entity.isSneaky()) {
|
||||||
|
Vec3d vel = entity.getVelocity();
|
||||||
|
entity.setVelocity(vel.x, 0, vel.z);
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -397,6 +401,14 @@ public class Pony extends Living<PlayerEntity> implements Copyable<Pony>, Update
|
||||||
return state.isSolidSurface(asWorld(), pos, entity, Direction.DOWN);
|
return state.isSolidSurface(asWorld(), pos, entity, Direction.DOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<BlockPos> chooseClimbingPos() {
|
||||||
|
if (getObservedSpecies() == Race.CHANGELING && getSpellSlot().get(SpellPredicate.IS_DISGUISE, false).isEmpty()) {
|
||||||
|
return Optional.of(entity.getBlockPos());
|
||||||
|
}
|
||||||
|
return super.chooseClimbingPos();
|
||||||
|
}
|
||||||
|
|
||||||
private void updateAnimations() {
|
private void updateAnimations() {
|
||||||
if (animationDuration > 0 && --animationDuration <= 0) {
|
if (animationDuration > 0 && --animationDuration <= 0) {
|
||||||
setAnimation(AnimationInstance.NONE);
|
setAnimation(AnimationInstance.NONE);
|
||||||
|
|
|
@ -17,7 +17,6 @@ import com.minelittlepony.unicopia.ability.magic.spell.AbstractDisguiseSpell;
|
||||||
import com.minelittlepony.unicopia.entity.*;
|
import com.minelittlepony.unicopia.entity.*;
|
||||||
import com.minelittlepony.unicopia.entity.behaviour.EntityAppearance;
|
import com.minelittlepony.unicopia.entity.behaviour.EntityAppearance;
|
||||||
import com.minelittlepony.unicopia.entity.duck.*;
|
import com.minelittlepony.unicopia.entity.duck.*;
|
||||||
import com.minelittlepony.unicopia.entity.player.Pony;
|
|
||||||
|
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
|
@ -85,12 +84,9 @@ abstract class MixinLivingEntity extends Entity implements LivingEntityDuck, Equ
|
||||||
|
|
||||||
@Inject(method = "isClimbing()Z", at = @At("HEAD"), cancellable = true)
|
@Inject(method = "isClimbing()Z", at = @At("HEAD"), cancellable = true)
|
||||||
public void onIsClimbing(CallbackInfoReturnable<Boolean> info) {
|
public void onIsClimbing(CallbackInfoReturnable<Boolean> info) {
|
||||||
if (get() instanceof Pony && horizontalCollision) {
|
if (horizontalCollision) {
|
||||||
((Pony)get()).getSpellSlot().get(SpellPredicate.IS_DISGUISE, false)
|
get().chooseClimbingPos().ifPresent(pos -> {
|
||||||
.map(AbstractDisguiseSpell::getDisguise)
|
climbingPos = Optional.of(pos);
|
||||||
.filter(EntityAppearance::canClimbWalls)
|
|
||||||
.ifPresent(v -> {
|
|
||||||
climbingPos = Optional.of(getBlockPos());
|
|
||||||
info.setReturnValue(true);
|
info.setReturnValue(true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue