- 210
- 1
- 19
В общем, я добавил к стреле ещё две точно таких же, ничего им не менял. И теперь если стрелы попадают в одного моба - две после попадания отскакивают обратно, а мобу при этом урона наносится, как от одной. Если рядом стоят два моба и две стрелы попали по обоим - урон получают оба. Что я делаю не так?
Видео, как оно работает (30 секунд)
Видео, как оно работает (30 секунд)
Java:
@Override
public void onPlayerStoppedUsing(ItemStack bow, World w, EntityPlayer player, int par4)
{
int j = this.getMaxItemUseDuration(bow) - par4;
ArrowLooseEvent event = new ArrowLooseEvent(player, bow, j);
MinecraftForge.EVENT_BUS.post(event);
if (event.isCanceled()) { return; } // эвент отменён
j = event.charge;
boolean flag = player.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, bow) > 0;
if (flag || player.inventory.hasItem(Items.arrow)) // if Creative or player has arrows --> do!
// j - int charge
{
float f = (float)j / 20.0F;
f = (f * f + f * 2.0F) / 3.0F;
if ((double)f < 0.1D)
{
return;
}
if (f > 1.0F)
{
f = 1.0F;
}
EntityArrow arrow = new EntityArrow(w, player, f * 2.0F);
EntityArrow arrow2 = null;
EntityArrow arrow3 = null;
int triplearrow = EnchantmentHelper.getEnchantmentLevel(RHEnchantments.tripleArrow.effectId, bow);
if(triplearrow > 0){
float correctyaw = 0.0f;
float correctpitch = 0.0f;
arrow2 = new EntityArrow(w, player, f * 2.0F);
arrow3 = new EntityArrow(w, player, f * 2.0F);
}
double arrowpower = arrow.getDamage();
arrow.setDamage(arrowpower * power);
if (f == 1.0F)
{
arrow.setIsCritical(true);
if(arrow2 != null)arrow2.setIsCritical(true);
if(arrow3 != null)arrow3.setIsCritical(true);
}
int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, bow);
if (k > 0)
{
arrow.setDamage(arrow.getDamage() + (double)k * 0.5D + 0.5D);
if(arrow2 != null)arrow2.setDamage(arrow.getDamage() + (double)k * 0.5D + 0.5D);
if(arrow3 != null)arrow3.setDamage(arrow.getDamage() + (double)k * 0.5D + 0.5D);
}
int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, bow);
if (l > 0)
{
arrow.setKnockbackStrength(l);
if(arrow2 != null)arrow2.setKnockbackStrength(l);
if(arrow3 != null)arrow3.setKnockbackStrength(l);
}
if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, bow) > 0){
arrow.setFire(100);
if(arrow2 != null)arrow2.setFire(100);
if(arrow3 != null)arrow3.setFire(100);
}
bow.damageItem(1, player);
if(arrow2 != null)bow.damageItem(1, player);
if(arrow3 != null)bow.damageItem(1, player);
if (flag)
{ // если лук на бесконечность или креатив, то стрелу делаем неподнимаемой
arrow.canBePickedUp = 2;
if(arrow2 != null)arrow2.canBePickedUp = 2;
if(arrow3 != null)arrow3.canBePickedUp = 2;
}
else
{ // иначе просто забираем у игрока одну стрелу (наличие проверяли выше)
player.inventory.consumeInventoryItem(Items.arrow);
if(arrow2 != null)player.inventory.consumeInventoryItem(Items.arrow);
if(arrow3 != null)player.inventory.consumeInventoryItem(Items.arrow);
}
if (!w.isRemote){
arrowSound(player, f);
w.spawnEntityInWorld(arrow);
w.spawnEntityInWorld(arrow2);
w.spawnEntityInWorld(arrow3);
}
}
}