- 388
- 1
Необходимо сделать пулю. В инете гуглится два варианта. Вариант c EntityThrowable (мне так не надо) и примерно вот такой в разных вариациях: http://forum.mcmodding.ru/viewtopic.php?id=2096. На версиях с 1.2.5 по 1.6.4 при незначительных изменениях этот код работает.
На 1.7.10 переменная movingobjectposition всегда получается равна null. Что не так? Если этот код вообще неправильный, то как правильно делается пуля?
И еще, в этом коде есть запись/чтение в/из NBT.
Зачем это нужно пуле? Да, знаю, пуля это тоже entity. Но, всё-таки, что это даёт?
Код:
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
}
И еще, в этом коде есть запись/чтение в/из 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);
}