uses bukkit events instead of packet-level implmentation