canEntityBeSeen

Версия Minecraft
1.7.10
API
Forge
как можно заменить canEntityBeSeen либо хукнуть в него чтобы игнорировались некоторые блоки по типу стекла, стеклопанелей, дверей и любых других прозрачных блоков и также можно ли сделать так чтобы этот метод проверял виден ли впринципе игрок хотя бы частично? (он как я понял делает рейтрейс до центра тела, тогда нужно делать несколько рейтрейсов или есть другой способ?)
 
придумал как костыль такое:

бебра:
private boolean canEntityBeSeen_modded(Entity e1, Entity e2) {
        if(!SidedProtection.SERVER)
            return false;
        if(e1.worldObj != e2.worldObj) return false;
        World w = e1.worldObj;
        MovingObjectPosition pos = w.rayTraceBlocks(Vec3.createVectorHelper(e1.posX, e1.posY + (double)e1.getEyeHeight(), e1.posZ), Vec3.createVectorHelper(e2.posX, e2.posY + (double)e2.getEyeHeight(), e2.posZ));
        while(pos != null) {
            Block b = w.getBlock(pos.blockX, pos.blockY, pos.blockZ);
            if(b != null) {
                if(check(b)) {
                    pos = w.rayTraceBlocks(pos.hitVec, Vec3.createVectorHelper(e2.posX, e2.posY + (double)e2.getEyeHeight(), e2.posZ));
                } else {
                    return false;
                }
            }
        }
        return true;
    }
но возникла проблема: бесконечный цикл т.к. я начинаю новый луч от блока и он сразу упирается в этот же блок, теперь думаю как перескачить его
 
Сверху