Не ломаются дополнительные блоки инструментом

Версия Minecraft
1.7.10
API
Forge
40
1
0
Пытаюсь сделать инструмент, ломающий блоки 3х3.
При EntityClientPlayerMP блоки ломаются визуально, но они не ломаются на самом деле, то есть в это место невозможно пройти и если попытаться туда что-то поставить, то блок вернётся обратно.
При EntityPlayerMP sideHit вообще не отображается правильно, берётся просто позиция игрока относительно блока.

Помогите, пожалуйста, что нужно исправить?

Код:
public boolean onBlockDestroyed(ItemStack is, World world, Block block, int x, int y, int z, EntityLivingBase entity) {
        
        if (block.getMaterial() == Material.rock) {
            if (!(entity instanceof EntityClientPlayerMP )) return false;
            if (!entity.isSneaking()) return false;
            
            int side = Minecraft.getMinecraft().objectMouseOver.sideHit;
            int rx = side == 4 || side == 5 ? 0 : 1;
            int ry = side == 0 || side == 1 ? 0 : 1;
            int rz = side == 2 || side == 3 ? 0 : 1;
            
            //System.out.println(side);
            //System.out.println(entity);
            
            for (int ax = -rx; ax <= rx; ax++) {
                for (int ay = -ry; ay <= ry; ay++) {
                    for (int az = -rz; az <= rz; az++) {
                        int bx = x + ax, by = y + ay, bz = z + az;
                        if (world.isAirBlock(bx, by, bz)) continue;
                        if (world.getBlock(bx, by, bz).getMaterial() != block.getMaterial()) continue;
                        //System.out.println(bx + " " + by + " " + bz);
                        world.func_147480_a(bx, by, bz, true);
                        //world.getBlock(bx, by, bz).dropBlockAsItem(world, bx, by, bz, 0, 0);
                        //world.setBlock(bx, by, bz, Blocks.air);
                    }
                }
            }
        }
        return true;
    }
 
Решение
чел ты... пересмотри что я тебе написал, ежкин кот
1611492317158.png
И посмотри, откуда берется vec3, думаю сам догадаешься как его получить?
И, блин, прибавлять entity.getEyeHeight() надо именно к yCoord вектора vec3, а не вектора взгляда :rolleyes:
1,173
28
168
EntityPlayerMP
Minecraft.class
логично!
Вместо юзания objectMouseOver, было бы логично зарейтрейсить блок через метод в мире вроде (raytraceBlock вродь, может он поможет, не ручаюсь), оттуда взять MovingObjectPosition и шаманить, либо учитывать угол поворота головы игрока, делить на 90 и кастить к int (это для поворота по горизонтали, по вертикали чуть иначе)
Возможно есть еще метод достать sideHit или его аналог, может еще так можно Block#collisionRayTrace
пробуй
 
40
1
0
Вместо юзания objectMouseOver, было бы логично зарейтрейсить блок через метод в мире вроде
А как и где его писать? Можно пример, пожалуйста?

UPD: Нашёл, вроде, world.rayTraceBlocks(Vec3, Vec3). Откуда векторы брать?
 
Последнее редактирование:
1,173
28
168
Java:
 Vec3d vec31 = player.getLookVec();
        Vec3d vec32 = vec3.addVector(vec31.x * dist, vec31.y * dist, vec31.z * dist);
      world.rayTraceBlocks(vec3, vec32, false, false, true);
dist - дистанция, в майне она 4.5F, как константу заведи
vec32 это vec31, только на сдвинутых вперед координатах
 
40
1
0
dist - дистанция, в майне она 4.5F, как константу заведи
vec32 это vec31, только на сдвинутых вперед координатах
Ок, а false, false, true обязательны? Там есть метод без этих аргументов
И vec3 - это vec31, да?
 
40
1
0
Java:
 Vec3d vec31 = player.getLookVec();
        Vec3d vec32 = vec3.addVector(vec31.x * dist, vec31.y * dist, vec31.z * dist);
      world.rayTraceBlocks(vec3, vec32, false, false, true);
dist - дистанция, в майне она 4.5F, как константу заведи
vec32 это vec31, только на сдвинутых вперед координатах
Java:
float dist = 4.5F;
Vec3 pv = entity.getLookVec();
pv.yCoord += entity.getEyeHeight();
Vec3 bv = pv.addVector(pv.xCoord * dist, pv.yCoord * dist, pv.zCoord * dist);
int side = world.rayTraceBlocks(pv, bv).sideHit;


На большом расстоянии, блока в 3, уже неправильно срабатывает, считает например 3 вместо 0, где у меня ошибка?
 
Последнее редактирование:
1,173
28
168
чел ты... пересмотри что я тебе написал, ежкин кот
1611492317158.png
И посмотри, откуда берется vec3, думаю сам догадаешься как его получить?
И, блин, прибавлять entity.getEyeHeight() надо именно к yCoord вектора vec3, а не вектора взгляда :rolleyes:
 
40
1
0
И посмотри, откуда берется vec3, думаю сам догадаешься как его получить?
И, блин, прибавлять entity.getEyeHeight() надо именно к yCoord вектора vec3, а не вектора взгляда
Да, затупил я, спасибо огромное :)
 
Сверху