- 329
- 13
В продолжении темы про пулю. Как и обещал, выкладываю реализацию пули, но только для 1.8. Переделать для 1.7.* не составит труда.
Собственно, виновник торжества:
Регистрируем в CommonProxy:
И вызываем пулю в любом из предметов:
Вопросы? Идеи? Предложения?
Собственно, виновник торжества:
Код:
public class EntityBullet extends EntityThrowable
{
// Урон от попадания
int damage;
public EntityBullet(World world)
{
super(world);
}
// Наш кастомный конструктор для пули
// par1world - мир в котором будет пуля
// par2EntityLivingBase - тот, кто осуществил выстрел
// par3Velocity - скорость полёта пули
// par4Accuracy - разброс при стрельбе
// par5Damage - урон от попадания
public EntityBullet(World par1world, EntityLivingBase par2EntityLivingBase, float par3Velocity, float par4Accuracy, int par5Damage)
{
super(par1world, par2EntityLivingBase);
this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, par3Velocity, par4Accuracy);
this.damage = par5Damage;
}
// Перезаписываем то, что происходит при попадании
@Override
protected void onImpact(MovingObjectPosition par1MovingObjectPosition)
{
// Если это произошло на сервере
if (!this.worldObj.isRemote)
{
// Если мы попали в Entity и этот Entity - живой объект
if (par1MovingObjectPosition.entityHit instanceof EntityLivingBase)
{
// Наносим ему урон и сбрасываем задержку на урон
par1MovingObjectPosition.entityHit.attackEntityFrom(new DamageSource("bullet"), this.damage);
par1MovingObjectPosition.entityHit.hurtResistantTime = 0;
}
// И затем пуля исчезает
this.setDead();
}
}
}
Регистрируем в CommonProxy:
Код:
EntityRegistry.registerModEntity(EntityBullet.class, "bullet", 4, MyYOBAMod.instance, 64, 20, true);
И вызываем пулю в любом из предметов:
Код:
@Override
public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player)
{
if(!world.isRemote)
{
// Можно поиграть с параметрами Скорости, Разброса, Урона
world.spawnEntityInWorld(new EntityBullet(world, player, 3.0F, 1.0F, 4));
}
return itemStack;
}
Вопросы? Идеи? Предложения?