world.newExplosion не наносит урон игроку

Версия Minecraft
1.12.2
API
Forge
55
1
1
Привет всем! Я устал пытаться понять, в чем проблема этого кода... У меня есть блок, при наступлении на него должен быть взрыв... Да, взрыв происходит, но урон игроку не наносит. Наноситься урон только мобам рядом. Как я понял, первый аргумент newExplosion это entity, который является исключением для списка мобов в радиусе. Поставил null, ничего не изменяется, игрок в редком случае получает урон. В общем не пойму как работает этот метод... Я думаю это связано с тем, что я вызываю метод не с entity, а в блоке, т.к у меня такой же метод стоит в EntityThrowable
code:
  @Override
    public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) {
        super.onEntityCollidedWithBlock(worldIn, pos, state, entityIn);
        if(!worldIn.isRemote){
            worldIn.setBlockToAir(pos);
            worldIn.newExplosion(null, pos.getX(), pos.getY(), pos.getZ(), 3f, false, false);
        }
        
    }
List<Entity> list = this.world.getEntitiesWithinAABBExcludingEntity(this.exploder, new AxisAlignedBB((double)k1, (double)i2, (double)j2, (double)l1, (double)i1, (double)j1));
 
1,074
72
372
Как я понял, первый аргумент newExplosion это entity, который является исключением для списка мобов в радиусе.
Название поля говорит само за себя: кто/что взорвалось. Это обычно всеми горячо любимый EntityCreeper или EntityTNTPrimed. В случае если взрыв вызывается блоком, значит передаём null.

Копайте в сторону игрока, ищите что ему даёт защиту. Естественно в ГМ 1 урона не будет...
 
55
1
1
Копайте в сторону игрока, ищите что ему даёт защиту. Естественно в ГМ 1 урона не будет...
Привет! Все это время я думал как это решить, и понял, что worldIn.createExplosion(null, pos.getX(), pos.getY(), pos.getZ(), 3f, true); Вот этот код, когда в аргумент isSmoking передаём true, то действительно, урон наноситься, но и происходит разрушение блоков. У меня есть две идеи, переписать класс Explosion, либо же найти способ создавать взрыв, но без разрушения блоков. Хотел бы поинтересоваться, взрыв без разрушения блоков вообще возможен (Если не переписывать класс Explosion) ?
 
116
13
13
Вот этот код, когда в аргумент isSmoking передаём true, то действительно, урон наноситься, но и происходит разрушение блоков.
Аргумент isSmoking как раз и определяет будут ли разрушаться блоки или нет. Проблема не в методе. Могу добавить, что в корне метода происходит проверка на уязвимость к урону от взрыва - Entity#isImmuneToExplosions(). Тут два варианта: либо радиус взрыва маловат (в вашем случае 3), либо в каком-то случае метод isImmuneToExplosions возвращает true.
 
55
1
1
Скорее всего я понял, в чем дело. У игрока когда он только погружается в мире есть 3 секунды бессмертия. Когда я проверял взрывы, то ставил достаточно быстро, поэтому не получал урон, и только через 3 секунды взрывался. И еще, когда стоит мирная сложность, урон от взрыва не наносится.
 
Сверху