- 1
- 0
Ничерта не понимаю.
Создал класс Entity, все настроил, моб появляется, ходит, да даже geckolib нормально отрабатывает, но вот незадача, он напрочь отказывается меня атаковать (в любом виде, когда я просто рядом с ним в выживании, или когда первый его атаковал)
Создал класс Entity, все настроил, моб появляется, ходит, да даже geckolib нормально отрабатывает, но вот незадача, он напрочь отказывается меня атаковать (в любом виде, когда я просто рядом с ним в выживании, или когда первый его атаковал)
Java:
package ru.fermanent.darktimes.entity.custom;
import net.minecraft.client.resources.sounds.Sound;
import net.minecraft.core.BlockPos;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.MobType;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.ai.goal.*;
import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal;
import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal;
import net.minecraft.world.entity.animal.IronGolem;
import net.minecraft.world.entity.animal.Turtle;
import net.minecraft.world.entity.animal.Wolf;
import net.minecraft.world.entity.monster.AbstractSkeleton;
import net.minecraft.world.entity.monster.Monster;
import net.minecraft.world.entity.monster.WitherSkeleton;
import net.minecraft.world.entity.monster.piglin.AbstractPiglin;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.pathfinder.BlockPathTypes;
import org.jetbrains.annotations.Nullable;
import ru.fermanent.darktimes.DarkTimes;
import software.bernie.geckolib3.core.IAnimatable;
import software.bernie.geckolib3.core.PlayState;
import software.bernie.geckolib3.core.builder.AnimationBuilder;
import software.bernie.geckolib3.core.builder.ILoopType;
import software.bernie.geckolib3.core.controller.AnimationController;
import software.bernie.geckolib3.core.event.predicate.AnimationEvent;
import software.bernie.geckolib3.core.manager.AnimationData;
import software.bernie.geckolib3.core.manager.AnimationFactory;
import software.bernie.geckolib3.util.GeckoLibUtil;
public class ErringEntity extends Monster implements IAnimatable {
private final AnimationFactory factory = GeckoLibUtil.createFactory(this);
public ErringEntity(EntityType<? extends Monster> entityType, Level level) {
super(entityType, level);
this.setPathfindingMalus(BlockPathTypes.LAVA, 8.0F);
}
public static AttributeSupplier setAttributes() {
return Monster.createMonsterAttributes()
.add(Attributes.MAX_HEALTH, 20.00)
.add(Attributes.ATTACK_DAMAGE, 3.0f)
.add(Attributes.MOVEMENT_SPEED, 0.25F)
.build();
}
protected void registerGoals() {
this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0));
this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 8.0F));
this.goalSelector.addGoal(6, new RandomLookAroundGoal(this));
this.targetSelector.addGoal(1, new HurtByTargetGoal(this));
this.targetSelector.addGoal(2, new NearestAttackableTargetGoal(this, Player.class, true));
this.targetSelector.addGoal(3, new NearestAttackableTargetGoal(this, IronGolem.class, true));
}
public MobType getMobType() {
return MobType.UNDEAD;
}
protected void dropCustomDeathLoot(DamageSource source, int i, boolean b) {
Entity entity = source.getEntity();
}
private <E extends IAnimatable>PlayState predicate(AnimationEvent<E> event) {
if (event.isMoving()) {
event.getController().setAnimation(
new AnimationBuilder().loop("animation.erring.idle")
);
return PlayState.CONTINUE;
}
event.getController().setAnimation(
new AnimationBuilder().loop("animation.erring.idle")
);
return PlayState.CONTINUE;
}
@Override
public void registerControllers(AnimationData animationData) {
animationData.addAnimationController(
new AnimationController(this, "controller", 0, this::predicate)
);
}
@Override
public AnimationFactory getFactory() {
return this.factory;
}
protected SoundEvent getAmbientSound() {
return SoundEvents.WITHER_SKELETON_AMBIENT;
}
protected SoundEvent getHurtSound(DamageSource source) {
return SoundEvents.WITHER_SKELETON_HURT;
}
protected SoundEvent getDeathSound() {
return SoundEvents.WITHER_SKELETON_DEATH;
}
public boolean doHurtTarget(Entity entity) {
if (!super.doHurtTarget(entity)) { return false; }
else {
if (entity instanceof LivingEntity) {
((LivingEntity) entity).addEffect(new MobEffectInstance(MobEffects.WITHER, 200), this);
}
return true;
}
}
}