Forge QOL

Makes downloading minecraft mods on curseforge less painful.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         Forge QOL
// @namespace    http://tampermonkey.net/
// @version      1
// @description  Makes downloading minecraft mods on curseforge less painful.
// @author       angxxl
// @match        https://www.curseforge.com/*
// @match        https://legacy.curseforge.com/*
// @grant        none
// ==/UserScript==



function updateCurseForgeLinks() {
    document.querySelectorAll('a[href*="https://www.curseforge.com/minecraft/mc-mods/"][href*="/files/"], a[href*="https://legacy.curseforge.com/minecraft/mc-mods/"][href*="/files/"]').forEach(link => {
        const urlParts = link.href.split('/');
        const lastPart = urlParts[urlParts.length - 1];
        if (!isNaN(lastPart)) { // Check if the last part is a number
            link.href = link.href.replace('/files/', '/download/');
        }
    });
}


function redirectCurseForgePage() {
    const urlParts = window.location.href.split('/');
    const lastPart = urlParts[urlParts.length - 1];
    if ((window.location.href.includes("https://www.curseforge.com/minecraft/mc-mods/") || window.location.href.includes("https://legacy.curseforge.com/minecraft/mc-mods/")) && window.location.href.includes("/files/") && !isNaN(lastPart)) {
        window.location.href = window.location.href.replace('/files/', '/download/');
    }
}


function updateAndRedirectLegacyCurseForgeLinks() {
    document.querySelectorAll('a[href*="https://legacy.curseforge.com/"]').forEach(link => {
        link.href = link.href.replace('https://legacy.curseforge.com/', 'https://www.curseforge.com/');
    });

    if (window.location.href.includes("https://legacy.curseforge.com/")) {
        window.location.href = window.location.href.replace('https://legacy.curseforge.com/', 'https://www.curseforge.com/');
    }
}

function speedUpTime(factor) {
    const originalSetInterval = window.setInterval;
    const originalSetTimeout = window.setTimeout;

    window.setInterval = function(callback, delay, ...args) {
        return originalSetInterval(callback, delay / factor, ...args);
    };

    window.setTimeout = function(callback, delay, ...args) {
        return originalSetTimeout(callback, delay / factor, ...args);
    };
}

function checkPagePattern() {
    const urlPattern = /^https:\/\/www\.curseforge\.com\/[^\/]+\/[^\/]+\/[^\/]+\/download\/[^\/]+$/;
    return urlPattern.test(window.location.href);
}

if (checkPagePattern()) {
    speedUpTime(40);
}

updateCurseForgeLinks();
redirectCurseForgePage();
updateAndRedirectLegacyCurseForgeLinks();

setInterval(() => {
    updateCurseForgeLinks();
    redirectCurseForgePage();
    updateAndRedirectLegacyCurseForgeLinks();
}, 700);