Unicopia/src/main/java/com/minelittlepony/unicopia/entity/Equine.java

76 lines
1.8 KiB
Java
Raw Normal View History

package com.minelittlepony.unicopia.entity;
2020-01-16 12:35:46 +01:00
import java.util.Optional;
2020-04-15 18:12:00 +02:00
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.projectile.ProjectileImpactListener;
2020-04-15 18:12:00 +02:00
import com.minelittlepony.unicopia.util.NbtSerialisable;
2020-01-16 12:35:46 +01:00
2020-04-15 18:12:00 +02:00
import net.minecraft.entity.Entity;
import net.minecraft.entity.damage.DamageSource;
2020-01-16 12:35:46 +01:00
import net.minecraft.entity.projectile.ProjectileEntity;
import net.minecraft.util.Tickable;
2020-01-16 12:35:46 +01:00
public interface Equine<T extends Entity> extends NbtSerialisable, Tickable, ProjectileImpactListener {
2020-01-16 12:35:46 +01:00
Race getSpecies();
Physics getPhysics();
2020-01-16 12:35:46 +01:00
void setSpecies(Race race);
2020-01-16 12:35:46 +01:00
/**
* Gets the last magical entity to attack us.
*/
Entity getAttacker();
2020-01-16 12:35:46 +01:00
/**
* Returns true if this player is fully invisible.
* Held items and other effects will be hidden as well.
*/
default boolean isInvisible() {
return false;
}
/**
* Sets whether this player should be invisible.
*/
default void setInvisible(boolean invisible) {
}
/**
2020-01-27 11:05:22 +01:00
* Called at the beginning of an update cycle.
2020-01-16 12:35:46 +01:00
*/
default boolean beforeUpdate() {
return false;
}
2020-01-16 12:35:46 +01:00
/**
2020-01-27 11:05:22 +01:00
* Event triggered when this entity is hit by a projectile.
2020-01-16 12:35:46 +01:00
*/
@Override
2020-01-16 12:35:46 +01:00
default boolean onProjectileImpact(ProjectileEntity projectile) {
return false;
}
/**
* Called when this entity jumps
*/
default void onJump() {
}
2020-04-15 18:12:00 +02:00
/**
* Called when an entity is harmed.
*/
default Optional<Boolean> onDamage(DamageSource source, float amount) {
return Optional.empty();
}
2021-03-06 22:11:17 +01:00
static <E extends Entity, T extends Equine<E>> Optional<T> of(@Nullable E entity) {
return PonyContainer.<E, T>of(entity).map(PonyContainer::get);
2020-04-15 18:12:00 +02:00
}
2020-01-16 12:35:46 +01:00
}