Added support for Minecraft Bedrock edition to the Minecraft widget

This commit is contained in:
LojDev 2024-03-25 21:22:55 -05:00
parent 0af975b3d9
commit 80ca8407eb
4 changed files with 36 additions and 6 deletions

View File

@ -9,4 +9,5 @@ Allowed fields: `["players", "version", "status"]`.
widget: widget:
type: minecraft type: minecraft
url: udp://minecraftserveripordomain:port url: udp://minecraftserveripordomain:port
``` edition: # Optional, should be 'java' or 'bedrock'. Defaults to 'java'
```

View File

@ -24,6 +24,7 @@
"luxon": "^3.4.4", "luxon": "^3.4.4",
"memory-cache": "^0.2.0", "memory-cache": "^0.2.0",
"minecraft-ping-js": "^1.0.2", "minecraft-ping-js": "^1.0.2",
"minecraft-server-util-dist": "^5.4.5",
"next": "^12.3.4", "next": "^12.3.4",
"next-i18next": "^12.1.0", "next-i18next": "^12.1.0",
"ping": "^0.4.4", "ping": "^0.4.4",

View File

@ -47,6 +47,9 @@ dependencies:
minecraft-ping-js: minecraft-ping-js:
specifier: ^1.0.2 specifier: ^1.0.2
version: 1.0.2 version: 1.0.2
minecraft-server-util-dist:
specifier: ^5.4.5
version: 5.4.5
next: next:
specifier: ^12.3.4 specifier: ^12.3.4
version: 12.3.4(react-dom@18.2.0)(react@18.2.0) version: 12.3.4(react-dom@18.2.0)(react@18.2.0)
@ -2755,6 +2758,11 @@ packages:
engines: {node: '>=6.0'} engines: {node: '>=6.0'}
dev: false dev: false
/jsonrepair@3.6.0:
resolution: {integrity: sha512-ZvOmoq35LhlDaf1W3uT7e17Bh2dYbln1+pdJ1KUIMkRAoUC4mvXX+dbr9Ih6dDmYvB0mdijAucyPk4xX1cEjww==}
hasBin: true
dev: false
/jsprim@1.4.2: /jsprim@1.4.2:
resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==}
engines: {node: '>=0.6.0'} engines: {node: '>=0.6.0'}
@ -2923,6 +2931,11 @@ packages:
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dev: false 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: /minecraft-ping-js@1.0.2:
resolution: {integrity: sha512-h9QYG2n+fBKgp520tXBwR354XRzR/w5wXe8CJCmxKm6jbLpAoLODM8Nj5+ssuIVQF8rtxkAnjwv7PH+7ehFzQQ==} resolution: {integrity: sha512-h9QYG2n+fBKgp520tXBwR354XRzR/w5wXe8CJCmxKm6jbLpAoLODM8Nj5+ssuIVQF8rtxkAnjwv7PH+7ehFzQQ==}
deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. 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 varint: 6.0.0
dev: false 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: /mini-svg-data-uri@1.4.4:
resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
hasBin: true hasBin: true

View File

@ -1,4 +1,4 @@
import { pingWithPromise } from "minecraft-ping-js"; import {status, statusBedrock} from "minecraft-server-util-dist";
import createLogger from "utils/logger"; import createLogger from "utils/logger";
import getServiceWidget from "utils/config/service-helpers"; import getServiceWidget from "utils/config/service-helpers";
@ -10,12 +10,19 @@ export default async function minecraftProxyHandler(req, res) {
const { group, service } = req.query; const { group, service } = req.query;
const serviceWidget = await getServiceWidget(group, service); const serviceWidget = await getServiceWidget(group, service);
const url = new URL(serviceWidget.url); const url = new URL(serviceWidget.url);
const edition = serviceWidget.edition || "java";
try { 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({ res.status(200).send({
version: pingResponse.version.name, version: svrResponse.version.name,
online: true, online: true,
players: pingResponse.players, players: svrResponse.players,
}); });
} catch (e) { } catch (e) {
if (e) logger.error(e); if (e) logger.error(e);
@ -25,4 +32,4 @@ export default async function minecraftProxyHandler(req, res) {
players: undefined, players: undefined,
}); });
} }
} }