Ringeal007的《我的世界》基岩版专用服务器下载按钮

对中文Minecraft Wiki镜像站的基岩版专用服务器页面中的表格作出修改。每个版本对应的行的最右侧都增加一个单元格,包含两个下载按钮,第一个默认采用第一接口,第二个默认采用第二接口。如果该版本为测试版或未发布Linux版,则将按钮设置为不可点击。按钮名称分别为“下载(Windows)”和“下载(Ubuntu(Linux))”。

// ==UserScript==
// @name         Ringeal007的《我的世界》基岩版专用服务器下载按钮
// @namespace    Ringeal007
// @version      1.0
// @description  对中文Minecraft Wiki镜像站的基岩版专用服务器页面中的表格作出修改。每个版本对应的行的最右侧都增加一个单元格,包含两个下载按钮,第一个默认采用第一接口,第二个默认采用第二接口。如果该版本为测试版或未发布Linux版,则将按钮设置为不可点击。按钮名称分别为“下载(Windows)”和“下载(Ubuntu(Linux))”。
// @author       binjie09
// @match        *://wiki.biligame.com/mc/%E5%9F%BA%E5%B2%A9%E7%89%88%E4%B8%93%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8*
// @grant        none
// @license      MIT
// ==/UserScript==

//本脚本部分代码由ChatGPT生成

(function() {
    'use strict';

    // 定义四个不同接口的下载链接
    const apiUrls = [
        "https://minecraft.azureedge.net/bin-win/bedrock-server-%version%.zip",
        "https://minecraft.azureedge.net/bin-linux/bedrock-server-%version%.zip",
        "https://minecraft.azureedge.net/bin-win-preview/bedrock-server-%version%.zip",
        "https://minecraft.azureedge.net/bin-linux-preview/bedrock-server-%version%.zip"
    ];

    // 找到包含版本信息的表格,获取tbody元素
    const tbody = document.evaluate('/html/body/div[2]/div[2]/div[4]/div[5]/div/table/tbody', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

    // 遍历表格中的每个版本行
    for (let i = 0; i < tbody.rows.length; i++) {
        const row = tbody.rows[i];

        // 在该版本行最后增加一个单元格
        const cell = row.insertCell(-1);

        // 如果该版本介绍中含有 "测试版服务器软件升级至",采用第三和第四接口
        const isPreview = row.cells[1].innerText.includes("测试版服务器软件升级至");

        // 如果该版本介绍中含有 "未发布Linux版",则将按钮变色并设置为不可点击
        const isLinuxUnavailable = row.cells[1].innerText.includes("未发布Linux版");

        // 获取版本号
        const version = row.cells[0].innerText;

        // 给该单元格添加两个下载按钮
        const downloadBtnWin = document.createElement("a");
        downloadBtnWin.textContent = "下载(Windows)";
        downloadBtnWin.href = apiUrls[isPreview ? 2 : 0].replace("%version%", version);
        downloadBtnWin.style.marginRight = "10px";
        if (isLinuxUnavailable) {
            downloadBtnWin.style.color = "gray";
            downloadBtnWin.style.pointerEvents = "none";
        }
        cell.appendChild(downloadBtnWin);

        const downloadBtnLinux = document.createElement("a");
        downloadBtnLinux.textContent = "下载(Ubuntu(Linux))";
        downloadBtnLinux.href = apiUrls[isPreview ? 3 : 1].replace("%version%", version);
        if (isLinuxUnavailable) {
            downloadBtnLinux.style.color = "gray";
            downloadBtnLinux.style.pointerEvents = "none";
        }
        cell.appendChild(downloadBtnLinux);

        // 设置该单元格的样式
        cell.style.whiteSpace = "nowrap";
        cell.style.textAlign = "right";
        cell.style.verticalAlign = "middle";
    }
})();