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

95 lines
3 KiB
Java
Raw Normal View History

package com.minelittlepony.unicopia.entity;
2020-09-23 17:19:28 +02:00
import com.minelittlepony.unicopia.Affinity;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.ability.magic.Affine;
2020-10-02 09:39:00 +02:00
import com.minelittlepony.unicopia.ability.magic.Levelled;
import com.minelittlepony.unicopia.ability.magic.Spell;
import com.minelittlepony.unicopia.ability.magic.spell.SpellRegistry;
import com.minelittlepony.unicopia.entity.ai.WantItNeedItTargetGoal;
import com.minelittlepony.unicopia.entity.ai.WantItTakeItGoal;
import com.minelittlepony.unicopia.entity.player.PlayerAttributes;
2020-01-16 12:35:46 +01:00
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.ai.goal.GoalSelector;
import net.minecraft.entity.attribute.DefaultAttributeContainer;
import net.minecraft.entity.attribute.EntityAttributes;
2020-01-16 12:35:46 +01:00
import net.minecraft.entity.data.DataTracker;
import net.minecraft.entity.data.TrackedData;
import net.minecraft.entity.data.TrackedDataHandlerRegistry;
import net.minecraft.entity.mob.MobEntity;
2020-01-16 12:35:46 +01:00
import net.minecraft.nbt.CompoundTag;
2021-02-14 16:52:56 +01:00
public class Creature extends Living<LivingEntity> {
2020-01-16 12:35:46 +01:00
private static final TrackedData<CompoundTag> EFFECT = DataTracker.registerData(LivingEntity.class, TrackedDataHandlerRegistry.TAG_COMPOUND);
2020-10-02 09:39:00 +02:00
private static final LevelStore LEVELS = Levelled.fixed(0);
2020-01-16 12:35:46 +01:00
public static void boostrap() {}
private final Physics physics = new EntityPhysics<>(this);
public Creature(LivingEntity entity) {
2021-02-14 16:52:56 +01:00
super(entity, EFFECT);
2020-01-16 12:35:46 +01:00
}
public void initAi(GoalSelector goals, GoalSelector targets) {
targets.add(1, new WantItNeedItTargetGoal((MobEntity)entity));
goals.add(1, new WantItTakeItGoal((MobEntity)entity));
}
public static void registerAttributes(DefaultAttributeContainer.Builder builder) {
builder.add(EntityAttributes.GENERIC_ATTACK_DAMAGE);
builder.add(EntityAttributes.GENERIC_ATTACK_KNOCKBACK);
builder.add(PlayerAttributes.ENTITY_GRAVTY_MODIFIER);
}
2020-01-16 12:35:46 +01:00
@Override
public Race getSpecies() {
return Race.HUMAN;
}
@Override
public Physics getPhysics() {
return physics;
}
2020-01-16 12:35:46 +01:00
@Override
public void setSpecies(Race race) {
}
@Override
2020-10-02 09:39:00 +02:00
public LevelStore getLevel() {
return LEVELS;
2020-01-16 12:35:46 +01:00
}
@Override
public Affinity getAffinity() {
if (getMaster() instanceof Affine) {
return ((Affine)getMaster()).getAffinity();
2020-01-16 12:35:46 +01:00
}
return Affinity.NEUTRAL;
}
@Override
public void toNBT(CompoundTag compound) {
super.toNBT(compound);
2020-09-24 14:49:02 +02:00
Spell effect = getSpell(true);
2020-01-16 12:35:46 +01:00
if (effect != null) {
2020-05-28 18:27:30 +02:00
compound.put("effect", SpellRegistry.toNBT(effect));
2020-01-16 12:35:46 +01:00
}
physics.toNBT(compound);
2020-01-16 12:35:46 +01:00
}
@Override
public void fromNBT(CompoundTag compound) {
super.fromNBT(compound);
2020-04-22 16:28:20 +02:00
if (compound.contains("effect")) {
2020-05-28 18:27:30 +02:00
setSpell(SpellRegistry.instance().createEffectFromNBT(compound.getCompound("effect")));
2020-01-16 12:35:46 +01:00
}
physics.fromNBT(compound);
2020-01-16 12:35:46 +01:00
}
}