- 5
- 0
Подскажите, как реализовать неуязвимость? Нашел 1 метод в классе Entity прописал к себе, но ничего не получилось.
public class Radiced extends PigZombie implements IAnimatable {
public static final EntityDataAccessor<Integer> STATE = SynchedEntityData.defineId(Radiced.class, EntityDataSerializers.INT);
private boolean invulnerable;
private int lifeTicks = 50;
private final AnimationFactory factory = new AnimationFactory(this);
private <E extends IAnimatable> PlayState predicate(AnimationEvent<E> event) {
event.getController().setAnimation(new AnimationBuilder().addAnimation("lightning", true));
return PlayState.CONTINUE;
}
@Override
public void registerControllers(AnimationData data) {
data.addAnimationController(new AnimationController<Radiced>
this, "controller", 0, this::predicate));
}
@Override
public AnimationFactory getFactory() {
return this.factory;
}
public Radiced(EntityType<? extends PigZombie> p_i48549_1_, Level p_i48549_2_) {
super(p_i48549_1_, p_i48549_2_);
}
public static AttributeSupplier.Builder createAttributes() {
return Mob.createMobAttributes()
.add(Attributes.MAX_HEALTH, 1000.0D)
.add(Attributes.MOVEMENT_SPEED, 0.0D)
.add(Attributes.ATTACK_DAMAGE, 25.0D)
.add(Attributes.FOLLOW_RANGE, 45.0D)
.add(Attributes.SPAWN_REINFORCEMENTS_CHANCE);
}
@Override
public boolean doHurtTarget(Entity entityIn) {
if (!super.doHurtTarget(entityIn)) {
return false;
} else {
if (entityIn instanceof LivingEntity) {
((LivingEntity)entityIn).addEffect(new MobEffectInstance(MobEffects.CONFUSION, 140));
} return true;
}
}
@Override
protected void defineSynchedData() {
super.defineSynchedData();
this.entityData.define(STATE, 0);
}
@Override
protected void registerGoals() {
super.registerGoals();
this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true));
this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Monster.class, false));
this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, FlyingMob.class, false));
this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Animal.class, false));
}
public boolean isInvulnerableTo(DamageSource p_20122_) {
return this.isRemoved() || this.invulnerable && p_20122_ != DamageSource.OUT_OF_WORLD && !p_20122_.isCreativePlayer();
}
public boolean isInvulnerable() {
return this.invulnerable;
}
public void setInvulnerable(boolean p_20332_) {
this.invulnerable = p_20332_;
}
@Nullable
@Override
protected SoundEvent getHurtSound(@Nonnull DamageSource damageSourceIn) {
this.playSound(SoundEvents.GHAST_HURT, 0.0F, 0.0F);
return null;
}
@Nullable
@Override
protected SoundEvent getDeathSound() {
this.playSound(SoundEvents.LIGHTNING_BOLT_IMPACT, 7.0F, 1.0F);
return null;
}
@Nullable
@Override
protected SoundEvent getAmbientSound() {
this.playSound(SoundEvents.LIGHTNING_BOLT_THUNDER, 7.0F, 1.0F);
return null;
}
public void tick() {
super.tick();
if (--this.lifeTicks < 0) {
this.remove(RemovalReason.DISCARDED);
}
}
@Override
public boolean isBaby() {
return false;
}
@Override
public boolean isPushable() {
return false;
}
@Override
protected void pushEntities() {}
}
Зачем ты скопировал это из класса Entity? Делать это бессмысленно и это ничего не дает. Если нужна неуязвимость, тебе нужно либо вызватьprivate boolean invulnerable;
setInvulnerable(true)
из конструктора, либо переопределить isInvulnerable
и isInvulnerableTo
, чтобы они всегда возвращали true. Разница в том, что первая опция позволяет игроку переопределить ее, например, с помощью команды data.Точно, Я даже забыл, что могу так сделать, Спасибо!.Зачем ты скопировал это из класса Entity? Делать это бессмысленно и это ничего не дает. Если нужна неуязвимость, тебе нужно либо вызватьsetInvulnerable(true)
из конструктора, либо переопределитьisInvulnerable
иisInvulnerableTo
, чтобы они всегда возвращали true. Разница в том, что первая опция позволяет игроку переопределить ее, например, с помощью команды data.