- Баллы
- 76
Как можно закодить нормальный выстрел из дробовика ? В данный момент я пытаюсь сделать рандомом, но получается не очень
PHP:
@Override
protected void doShoot() {
double averageStart = -0.1;
double averageEnd = 0.1;
int bulletsSize = 11;
Location start = GunUtils.getDirectionEntity(getPlayer());
HashMap<LivingEntity, Integer> damaged = new HashMap<>();
getPlayer().getWorld().playSound(start, Sound.BLOCK_ANVIL_DESTROY, 1, 2);
ArrayList<Location> bullets = new ArrayList<>();
for (int i = 0; i < bulletsSize; i++) {
Vector v = start.getDirection().clone().normalize().add(new Vector(random(averageStart, averageEnd), random(averageStart, averageEnd), random(averageStart, averageEnd)));
Location location = start.clone().setDirection(v);
bullets.add(location);
}
for (int k = 0; k < 50; k++) {
for (int i = 0; i < bullets.size(); i++) {
Location location = bullets.get(i);
boolean hit = false;
location.getWorld().spawnParticle(Particle.SMOKE_NORMAL, location, 1, 0, 0, 0, 0, null, true);
for (LivingEntity entity : EntityUtils.getEntity(location)) {
if (entity.equals(getPlayer()))
continue;
damage(entity, location, 10);
hit = true;
damaged.merge(entity, 1, Integer::sum);
break;
}
if (location.getBlock().getType().isSolid() || hit) {
bullets.remove(i);
continue;
}
location.add(location.getDirection());
}
}
damaged.forEach((e, i) -> Bukkit.getServer().broadcastMessage("Попало по " + e.getName() + " " + i + " пуль"));
}