From 80ca8407eb6bde3301350cb0c09ca50fd1d250c9 Mon Sep 17 00:00:00 2001 From: LojDev Date: Mon, 25 Mar 2024 21:22:55 -0500 Subject: [PATCH] Added support for Minecraft Bedrock edition to the Minecraft widget --- docs/widgets/services/minecraft.md | 3 ++- package.json | 1 + pnpm-lock.yaml | 21 +++++++++++++++++++++ src/widgets/minecraft/proxy.js | 17 ++++++++++++----- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/docs/widgets/services/minecraft.md b/docs/widgets/services/minecraft.md index 44d860c85..5cc3cfeec 100644 --- a/docs/widgets/services/minecraft.md +++ b/docs/widgets/services/minecraft.md @@ -9,4 +9,5 @@ Allowed fields: `["players", "version", "status"]`. widget: type: minecraft url: udp://minecraftserveripordomain:port -``` + edition: # Optional, should be 'java' or 'bedrock'. Defaults to 'java' +``` \ No newline at end of file diff --git a/package.json b/package.json index 35d388a5f..3cef36119 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "luxon": "^3.4.4", "memory-cache": "^0.2.0", "minecraft-ping-js": "^1.0.2", + "minecraft-server-util-dist": "^5.4.5", "next": "^12.3.4", "next-i18next": "^12.1.0", "ping": "^0.4.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 08a5004a7..e1abbe069 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,6 +47,9 @@ dependencies: minecraft-ping-js: specifier: ^1.0.2 version: 1.0.2 + minecraft-server-util-dist: + specifier: ^5.4.5 + version: 5.4.5 next: specifier: ^12.3.4 version: 12.3.4(react-dom@18.2.0)(react@18.2.0) @@ -2755,6 +2758,11 @@ packages: engines: {node: '>=6.0'} dev: false + /jsonrepair@3.6.0: + resolution: {integrity: sha512-ZvOmoq35LhlDaf1W3uT7e17Bh2dYbln1+pdJ1KUIMkRAoUC4mvXX+dbr9Ih6dDmYvB0mdijAucyPk4xX1cEjww==} + hasBin: true + dev: false + /jsprim@1.4.2: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} engines: {node: '>=0.6.0'} @@ -2923,6 +2931,11 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: false + /minecraft-motd-util@1.1.12: + resolution: {integrity: sha512-5TuTRjrRupSTruea0nRC37r0FdhkS1O4wIJKAYfwJRCQd/X4Zyl/dVIs96h9UVW6N8jhIuz9pNkrDsqyN7VBdA==} + deprecated: no longer maintained + dev: false + /minecraft-ping-js@1.0.2: resolution: {integrity: sha512-h9QYG2n+fBKgp520tXBwR354XRzR/w5wXe8CJCmxKm6jbLpAoLODM8Nj5+ssuIVQF8rtxkAnjwv7PH+7ehFzQQ==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -2931,6 +2944,14 @@ packages: varint: 6.0.0 dev: false + /minecraft-server-util-dist@5.4.5: + resolution: {integrity: sha512-s1X//SM/IrFcaZYQrnVd6feWC39pmerhbdDhO/7naKQ0tUjsyFsHcfqZiVpU7jlKtHwDcYbBrs3ad8kRnExapA==} + engines: {node: '>=10.0.0'} + dependencies: + jsonrepair: 3.6.0 + minecraft-motd-util: 1.1.12 + dev: false + /mini-svg-data-uri@1.4.4: resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} hasBin: true diff --git a/src/widgets/minecraft/proxy.js b/src/widgets/minecraft/proxy.js index f7bac9d45..8609fe127 100644 --- a/src/widgets/minecraft/proxy.js +++ b/src/widgets/minecraft/proxy.js @@ -1,4 +1,4 @@ -import { pingWithPromise } from "minecraft-ping-js"; +import {status, statusBedrock} from "minecraft-server-util-dist"; import createLogger from "utils/logger"; import getServiceWidget from "utils/config/service-helpers"; @@ -10,12 +10,19 @@ export default async function minecraftProxyHandler(req, res) { const { group, service } = req.query; const serviceWidget = await getServiceWidget(group, service); const url = new URL(serviceWidget.url); + const edition = serviceWidget.edition || "java"; + try { - const pingResponse = await pingWithPromise(url.hostname, url.port || 25565); + let svrResponse; + if (edition.toLowerCase() === "java") { + svrResponse = await status(url.hostname, Number(url.port)); + } else if (edition.toLowerCase() === "bedrock") { + svrResponse = await statusBedrock(url.hostname, Number(url.port)); + } res.status(200).send({ - version: pingResponse.version.name, + version: svrResponse.version.name, online: true, - players: pingResponse.players, + players: svrResponse.players, }); } catch (e) { if (e) logger.error(e); @@ -25,4 +32,4 @@ export default async function minecraftProxyHandler(req, res) { players: undefined, }); } -} +} \ No newline at end of file