@EventHandler
	public void onInteract(PlayerInteractEvent event) {
		Action action = event.getAction();
		if (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK) {
			ItemStack item = event.getItem();
			if (item != null) {
				Player player = event.getPlayer();
				String playerName = player.getName();
				Settings settings = Main.getInstance().getSettings();
				// check for the different magic wands:
				if (item.isSimilar(settings.SHOOT_WAND)) {
					if (player.hasPermission(Main.SHOOT_USE_PERMISSION)) {
						Magician magician = Main.getInstance().getPlayerManager().getMagician(playerName);
						// spawn single bat:
						Location spawnLocation = player.getEyeLocation();
						magician.spawnBat(spawnLocation, SimpleDamageBehavior.singleton, new FlyStraightBehavior(spawnLocation.getDirection().normalize().multiply(settings.BAT_FLY_SPEED)));
					} else {
						player.sendMessage(Main.getInstance().getMessage(Message.WAND_USE_NO_PERMISSION));
					}
				} else if (item.isSimilar(settings.SWARM_WAND)) {
					if (player.hasPermission(Main.SWARM_USE_PERMISSION)) {
						Integer cooldown = swarmCooldown.get(playerName);
						if (cooldown != null) {
							player.sendMessage(Main.getInstance().getMessage(Message.SWARM_COOLDOWN, String.valueOf(cooldown.intValue())));
							return;
						}
						Magician magician = Main.getInstance().getPlayerManager().getMagician(playerName);
						Location spawnLocation = player.getEyeLocation();
						for (int i = 0; i < settings.SWARM_BAT_AMOUNT; i++) {
							magician.spawnBat(spawnLocation, SimpleDamageBehavior.singleton);
						}
						swarmCooldown.put(playerName, settings.SWARM_COOLDOWN_SECONDS);
					} else {
						player.sendMessage(Main.getInstance().getMessage(Message.WAND_USE_NO_PERMISSION));
					}
				}
			}
		}
	}