npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

minecraftstatuspinger

v1.2.1

Published

A modern library for pinging Minecraft servers and getting their status and playerlist, written in TypeScript with zero dependencies.

Downloads

1,171

Readme

GitHub Link badge NPM link badge JSR link badge Web link badge

NPM Version TS Types License NPM Downloads Maintained?

What can this be used for?

  • Getting server Latency (ping)
  • Getting server MOTD
  • Downloading server Thumbnail (favicon)
  • Viewing Server Version
  • Fetching Player Count and Playerlist

And in general, checking the status of Minecraft servers!

Getting started

Requirements

  • NodeJS or Deno (used to run JavaScript code)
  • NPM (used to install Node packages)

Installation

npm install minecraftstatuspinger

Basic Example

import mc from "minecraftstatuspinger";

let result = await mc.lookup({ host: "mc.hypixel.net" })
console.log(result);
import mc from "minecraftstatuspinger";

let result = await mc.lookup({
    host: "mc.hypixel.net",
    port: 25565,
    ping: true,
    protocolVersion: 767,
    timeout: 10000,
    throwOnParseError: true,
    SRVLookup: true,
    JSONParse: true
})

console.log(result);

Docs

  • .lookup(): ((options: ServerStatusOptions) => Promise<ServerStatus>)

    • options: ServerStatusOptions
      • host: string

        Either an IP, or a hostname of the server. (alias: hostname)

      • port?: number default: 25565

        Port of the server. SRV lookup is disabled when using ports other than 25565.

      • timeout?: number default: 10000

        How long until an error is thrown if the transaction still hasn't finished. Default is 10 seconds.

      • ping?: boolean default: true

        Whether to send a payload at the end to measure the server latency. If false, the latency field will be null.

      • protocolVersion?: number default: 767

        Protocol version to send to the server to simulate different Minecraft client versions. Here, you can see the Protocol Version Numbers. The current default protocol version is for 1.21.1 (767) and will be irregularly updated to newer versions.

      • throwOnParseError?: boolean default: true

        Whether to throw an error if the status packet fails to parse the status field. The statusRaw field is always included.

      • SRVLookup?: boolean default: true

        Whether to perform a SRV lookup on the provided hostname. Set to true in order to skip. Useful to disable when you're only looking up the basic DNS records and a server with a specific port.

      • JSONParse?: boolean default: true

        Whether to parse the JSON status field. Useful to disable when you only need the raw plaintext response. If false, the status field will be null.

    • ServerStatus
      • latency?: number

        The time it takes to receive back a response after sending a small payload to a server, in milliseconds. Will be null if the ping option is false.

      • status?: DynamicObject

        Parsed status response from the server. Will be null if the status fails to parse, or if disableJSONParse is true. Example of a valid Status Response.

      • statusRaw: string

        Plaintext status response in the form of JSON. Useful when status fails to parse.

  • .setDnsServers(): ((serverArray: string[]) => Promise<boolean>)

    It wraps the dns.setServers function, useful for looking up SRV records through different DNS servers. The first IP in the array will always be used first, others will be tried if the first one is unreachable. Accepts an array of hostnames or IP addresses of DNS servers. It will either return true, or throw an error.

    Usage:

      // For example:
      mc.setDnsServers(["9.9.9.9", "1.1.1.1", "8.8.8.8"])
      // (Quad9, Cloudflare, Google)
      // Cloudflare is usually the fastest for DNS queries.

    If you never changed the DNS settings of your computer, the default DNS server will be your ISP's. ❗ I recommend changing your default DNS servers if you're doing thousands of lookups, such as for mass scanning.

Changelog

View Changelog, Latest version: v1.2.1

Contact

If you have some questions, you can message me through Discord - woodendoors7

Acknowledgements

TINY Readme

To-do

  • [x] Do SRV lookups
  • [ ] Parse MOTDs
  • [ ] Support versions less than 1.7.
  • [ ] Support Bedrock

License

This project is licensed under the GNU General Public License v3.0.