[1.7.10] Пуля

Необходимо сделать пулю. В инете гуглится два варианта. Вариант c EntityThrowable (мне так не надо) и примерно вот такой в разных вариациях: http://forum.mcmodding.ru/viewtopic.php?id=2096. На версиях с 1.2.5 по 1.6.4 при незначительных изменениях этот код работает.
Код:
        Vec3 vec3d = Vec3.createVectorHelper(posX, posY, posZ);
        Vec3 vec3d1 = Vec3.createVectorHelper(posX + motionX, posY + motionY, posZ + motionZ);
        MovingObjectPosition movingobjectposition = worldObj.rayTraceBlocks(vec3d, vec3d1);
        vec3d = Vec3.createVectorHelper(posX, posY, posZ);
        vec3d1 = Vec3.createVectorHelper(posX + motionX, posY + motionY, posZ + motionZ);
        System.out.println("bullet");
        if (movingobjectposition != null)
        {
                blablacode
        }
На 1.7.10 переменная movingobjectposition всегда получается равна null. Что не так? Если этот код вообще неправильный, то как правильно делается пуля?
И еще, в этом коде есть запись/чтение в/из NBT.
Код:
public void writeEntityToNBT(NBTTagCompound p_70014_1_)
    {
        p_70014_1_.setShort("xTile", (short)this.field_145788_c);
        p_70014_1_.setShort("yTile", (short)this.field_145786_d);
        p_70014_1_.setShort("zTile", (short)this.field_145787_e);
        p_70014_1_.setByte("inTile", (byte)Block.getIdFromBlock(this.field_145785_f));
        p_70014_1_.setByte("shake", (byte)this.throwableShake);
        p_70014_1_.setByte("inGround", (byte)(this.inGround ? 1 : 0));

        if ((this.throwerName == null || this.throwerName.length() == 0) && this.thrower != null && this.thrower instanceof EntityPlayer)
        {
            this.throwerName = this.thrower.getCommandSenderName();
        }

        p_70014_1_.setString("ownerName", this.throwerName == null ? "" : this.throwerName);
    }
Зачем это нужно пуле? Да, знаю, пуля это тоже entity. Но, всё-таки, что это даёт?
 
А ещё этот код скопирован с EntityThrowable. Не строй велосипеды, наследуй и все.
 
Но если наследоваться от EntityThrowable, от он будет лететь. А как сделать, чтобы он долетал мгновенно (за 1 тик)? То есть, чтобы сразу оказывался в координатах цели. Конечно, можно сделать @Override onUpdate() и вставить весь код, но тогда смысл в наследовании?
 
svk написал(а):
Просто motion умножай на over
Если это делать каждый тик, то пуля летит очень быстро, скорость ее ты не котролируешь.
А если в конструкторе, то визуально пуля летит вообще фиг знает куда, хотя физически попадает в цель...
 
Agravaine написал(а):
svk написал(а):
Просто motion умножай на over
Если это делать каждый тик, то пуля летит очень быстро, скорость ее ты не котролируешь.
А если в конструкторе, то визуально пуля летит вообще фиг знает куда, хотя физически попадает в цель...
Всё нормально летит, я тебя вообще не понял... В смысле, контролировать скорость?
 
BlackCrafter написал(а):
svk написал(а):
Всё нормально летит, я тебя вообще не понял...
При большом значении motion, пуля, действительно летит рандомно. Однако, в цель попадает.
Не знаю что у вас за проблемы, но у меня летит всё нормально...
 
XuPuPG написал(а):
может он имеет в виду float или double ?
я пытаюсь узнать максимальные допустимые значения motionX,motionY,motionZ, при которых движение пули будет максимально быстрым и траектория ее перемещения будет адекватной.
 
а попробовать нельзя самому и проверить?
максимально допустимые на столько большие что тебе хватит.
траектория всегда будет адекватной, потому что это как вектор, она не изменяет своего направления.
меня больше беспокоит не поволияет ли это на урон, не произойдет ли такого что дамажить будет сразу троих через которых она прошла или не получится ли так что урон будет совершенно случайным.
 
Salamandr написал(а):
а попробовать нельзя самому и проверить?
максимально допустимые на столько большие что тебе хватит.
траектория всегда будет адекватной, потому что это как вектор, она не изменяет своего направления.
меня больше беспокоит не поволияет ли это на урон, не произойдет ли такого что дамажить будет сразу троих через которых она прошла или не получится ли так что урон будет совершенно случайным.
Нет, даже если вектор пройдёт через over энтити, код выполнится 1 раз и при this.setDead(); - конец...
 
Назад
Сверху