AbstractProjectile за'null'яет переменную

Версия Minecraft
1.20.1
API
Forge
1,383
115
244
Здравствуйте!
Столкнулся с совсем странной, на мой взгляд, проблемой: по какой-то причине spell в projectile становится null.
Код прилагаю:
Java:
public abstract class SpellEntity extends AbstractHurtingProjectile {

    private final Spell spell;
    public SpellEntity(EntityType<? extends SpellEntity> type, Level level) {
        super(type, level);
        this.spell = null; //Этот конструктор вызывается только в регистрации EntityType.
    }

    public SpellEntity(EntityType<? extends SpellBallEntity> type, LivingEntity entity, Spell spell) {
        super(type, entity, getSpellVec(entity).x, getSpellVec(entity).y, getSpellVec(entity).z, entity.level());
        this.spell = spell;
        //Здесь дебаггер показываёт, что со spell всё норм
    }

    @Override
    protected void onHitEntity(EntityHitResult result) {
        if(spell != null) {
            //... куча кода
        }
        super.onHitEntity(result);
    }

    @Override
    protected void onHitBlock(BlockHitResult result) {
        if(spell != null) { //Здесь дебаггер показывает, что spell == null
            //... куча кода
        }
        super.onHitBlock(result);
    }

    static Vec3 getSpellVec(LivingEntity entity) {
        return new Vec3(entity.getLookAngle().x, entity.getLookAngle().y, entity.getLookAngle().z);
    }

Может мне кто-нибудь, пожалуйста, объяснить в чём дело? Буду очень благодарен.
 
Решение
Может мне кто-нибудь, пожалуйста, объяснить в чём дело? Буду очень благодарен.
Это возможно только в 1-м единственном случае: Обьект недоконструировали, и пытаются обратится к его полю, которое пока null
У тебя такого полагаю нет

//Этот конструктор вызывается только в регистрации EntityType.
Значит что именно этот конструктор и был вызван.

Если я тебя правильно понял (не знаю за 1.20, на 1.12 сталкивался с подобным)
Конструктор (9-13 строки) ты вызываешь где-то в коде ручками, потом отправляется клиенту пакет,
клиент автоматически порождает сущность (конструктор 4-7 строки), и потом на стороне клиента вызывается onHitBlock и падает с ошибкой

Дополнительные данные сущностей передаются либо через NBT (есть специальные...
445
42
117
Может мне кто-нибудь, пожалуйста, объяснить в чём дело? Буду очень благодарен.
Это возможно только в 1-м единственном случае: Обьект недоконструировали, и пытаются обратится к его полю, которое пока null
У тебя такого полагаю нет

//Этот конструктор вызывается только в регистрации EntityType.
Значит что именно этот конструктор и был вызван.

Если я тебя правильно понял (не знаю за 1.20, на 1.12 сталкивался с подобным)
Конструктор (9-13 строки) ты вызываешь где-то в коде ручками, потом отправляется клиенту пакет,
клиент автоматически порождает сущность (конструктор 4-7 строки), и потом на стороне клиента вызывается onHitBlock и падает с ошибкой

Дополнительные данные сущностей передаются либо через NBT (есть специальные методы для этого) либо через DataManager
 
354
26
97
Этот конструктор вызывается только в регистрации EntityType.
А ты уверен? Мне кажется при загрузке мира этот конструктор будет вызываться. Твой Spell нужно хранить в NBT сущности, в классе этого нет вовсе.
 
1,383
115
244
Дополнительные данные сущностей передаются либо через NBT (есть специальные методы для этого) либо через DataManager
Твой Spell нужно хранить в NBT сущности, в классе этого нет вовсе.
Да, увидел. Спасибо, чуть позже попробуй сделать так.
 
Сверху