- 1,185
- 3
Баг #10000000026
Есть обычный EntityTrowable, у него такой кодец на поиск блоков и энтити перед ним:
Судя по нему, первоначальным должно быть энтити, но если на "шаге (от предыдущей позиции до следующей)" сначала идёт забор, а потом энтити, то почему-то всё летит на хрен!
Старт поиска | забор | энтити | конец поиска
В итоге энтити не надохит, но если между забором и энтити достаточное пространство, то всё работает прекрасно (Видимо из-за того, что это в разных "шагах")
Судя по этому кусочку, всё должно же работать правильно...
[merge_posts_bbcode]Добавлено: 22.09.2015 08:01:40[/merge_posts_bbcode]
Может кто нить поделится адекватной пулей, которую он сам использует и доволен ей, ну поззя
[merge_posts_bbcode]Добавлено: 22.09.2015 08:02:38[/merge_posts_bbcode]
Вот так проверяю стоит ли убивать энтити при соприкосновении с блоком:
[merge_posts_bbcode]Добавлено: 22.09.2015 08:03:52[/merge_posts_bbcode]
Это ещё и прутьев с травой касается, не знаю на счёт остальных блоков, но наверняка и с ними беда.
Есть обычный EntityTrowable, у него такой кодец на поиск блоков и энтити перед ним:
Код:
Vec3 vec3 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
Vec3 vec31 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
MovingObjectPosition movingobjectposition = this.worldObj.rayTraceBlocks(vec3, vec31);
vec3 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
vec31 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
if (movingobjectposition != null)
{
vec31 = Vec3.createVectorHelper(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord);
}
Entity entity = null;
List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(2.0D, 2.0D, 2.0D));
double d0 = 0.0D;
EntityLivingBase entitylivingbase = this.getThrower();
for (int j = 0; j < list.size(); ++j)
{
Entity entity1 = (Entity)list.get(j);
if (entity1.canBeCollidedWith() && (entity1 != entitylivingbase || this.ticksInAir >= 5))
{
float f = 0.3F + addSize*2;
AxisAlignedBB axisalignedbb = entity1.boundingBox.expand((double)f, (double)f, (double)f);
MovingObjectPosition movingobjectposition1 = axisalignedbb.calculateIntercept(vec3, vec31);
if (movingobjectposition1 != null)
{
double d1 = vec3.distanceTo(movingobjectposition1.hitVec);
if (d1 < d0 || d0 == 0.0D)
{
entity = entity1;
d0 = d1;
}
}
}
}
if (entity != null)
{
movingobjectposition = new MovingObjectPosition(entity);
}
if (movingobjectposition != null)
{
if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && this.worldObj.getBlock(movingobjectposition.blockX, movingobjectposition.blockY, movingobjectposition.blockZ) == Blocks.portal)
{
this.setInPortal();
}
else
{
this.onImpact(movingobjectposition);
}
}
Судя по нему, первоначальным должно быть энтити, но если на "шаге (от предыдущей позиции до следующей)" сначала идёт забор, а потом энтити, то почему-то всё летит на хрен!
Старт поиска | забор | энтити | конец поиска
В итоге энтити не надохит, но если между забором и энтити достаточное пространство, то всё работает прекрасно (Видимо из-за того, что это в разных "шагах")
Судя по этому кусочку, всё должно же работать правильно...
Код:
if (entity != null)
{
movingobjectposition = new MovingObjectPosition(entity);
}
Может кто нить поделится адекватной пулей, которую он сам использует и доволен ей, ну поззя
[merge_posts_bbcode]Добавлено: 22.09.2015 08:02:38[/merge_posts_bbcode]
Вот так проверяю стоит ли убивать энтити при соприкосновении с блоком:
Код:
if(mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mop.entityHit != null && !(mop.entityHit instanceof EntityBulletShell))
{
mop.entityHit.hurtResistantTime = 0;
if(mop.entityHit instanceof EntityPlayer)
{
EntityPlayer player = (EntityPlayer) mop.entityHit;
mop.entityHit.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) this.getThrower()), CommonProxy.getDamageBulletPlayer(damage, 1, player));
}
else
{
mop.entityHit.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) this.getThrower()), damage);
}
this.setDead();
}
if(mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK)
{
Block block = this.worldObj.getBlock(mop.blockX, mop.blockY, mop.blockZ);
if(block != Blocks.leaves && block != Blocks.leaves2 && !(block instanceof BlockFence) && !(block instanceof BlockPane) && block != Blocks.tallgrass && block != Blocks.double_plant)
{
this.setDead();
}
}
[merge_posts_bbcode]Добавлено: 22.09.2015 08:03:52[/merge_posts_bbcode]
Это ещё и прутьев с травой касается, не знаю на счёт остальных блоков, но наверняка и с ними беда.