// ==UserScript==
// @name MCJS 111s 卡死急救器 (极简版)
// @namespace https://scriptcat.org/
// @version 3.2
// @description 移除所有底层干扰,专治高版本加载极慢、卡黑屏、Connecting 超时,提供一键清空缓存功能
// @author You
// @match *://*/*
// @grant GM_setValue
// @grant GM_getValue
// @run-at document-start
// ==/UserScript==
(function () {
'use strict';
// 提醒:高版本卡加载,90% 是浏览器本地数据库(IndexedDB)因为旧存档膨胀导致崩溃。
// 请点击面板上的“清理本地存档缓存”按钮,很多时候能瞬间解决 111s 的卡死!
function createUI() {
if (document.getElementById('mc-rescue')) return;
const panel = document.createElement('div');
panel.id = 'mc-rescue';
panel.style.cssText = `
position: fixed; bottom: 20px; left: 20px; width: 280px;
background: rgba(10, 15, 25, 0.95); backdrop-filter: blur(10px);
border: 2px solid #ff3366; border-radius: 12px;
box-shadow: 0 10px 30px rgba(0,0,0,0.8); z-index: 2147483647;
color: #e0e6ed; font-family: "Segoe UI", sans-serif; font-size: 13px;
display: flex; flex-direction: column; overflow: hidden;
transition: opacity 0.3s;
`;
panel.innerHTML = `
如果卡在 Connecting... 很久:
1. 请果断按下 Esc 键,或点击游戏内的 Cancel Task,退回主菜单。
2. 点击下方红色按钮清理缓存。
3. 再次尝试进入。
注意:清理会删除单机存档,但不会影响你连服务器。
`;
document.body.appendChild(panel);
// 拖动
const header = panel.querySelector('.header');
let isDragging = false, startX, startY, initialX, initialY;
header.addEventListener('mousedown', (e) => {
isDragging = true;
startX = e.clientX; startY = e.clientY;
const rect = panel.getBoundingClientRect();
initialX = rect.left; initialY = rect.top;
panel.style.bottom = 'auto'; panel.style.left = initialX + 'px'; panel.style.top = initialY + 'px';
});
document.addEventListener('mousemove', (e) => {
if (!isDragging) return;
panel.style.left = `${initialX + e.clientX - startX}px`;
panel.style.top = `${initialY + e.clientY - startY}px`;
});
document.addEventListener('mouseup', () => isDragging = false);
// 隐藏面板
panel.querySelector('#hide-ui-btn').onclick = () => {
panel.style.opacity = '0';
panel.style.pointerEvents = 'none';
// 10秒后变半透明显示,免得彻底找不到了
setTimeout(() => {
panel.style.opacity = '0.2';
panel.style.pointerEvents = 'auto';
}, 10000);
};
// 清理 IndexedDB(极其重要)
panel.querySelector('#clear-db-btn').onclick = async () => {
if (!confirm("确定要清理本地游戏缓存吗?这会清除所有本地单机存档,并重置加载状态!")) return;
try {
// 清理 IndexedDB
if (window.indexedDB && window.indexedDB.databases) {
const dbs = await window.indexedDB.databases();
for (let db of dbs) {
if (db.name) window.indexedDB.deleteDatabase(db.name);
}
}
// 清理 localStorage 和 sessionStorage 中的非设置项
const clearStorage = (storage) => {
for (let i = storage.length - 1; i >= 0; i--) {
const key = storage.key(i);
// 避开脚本自身的存储
if (key && !key.startsWith('mc_')) {
storage.removeItem(key);
}
}
};
clearStorage(localStorage);
clearStorage(sessionStorage);
// 强制刷新并清除 Service Worker 缓存 (如果有的话)
if ('serviceWorker' in navigator) {
const registrations = await navigator.serviceWorker.getRegistrations();
for (let registration of registrations) {
await registration.unregister();
}
}
if (window.caches) {
const cacheNames = await caches.keys();
for (let name of cacheNames) {
await caches.delete(name);
}
}
alert("✅ 所有本地缓存已清空!页面将重新加载。请重新选择版本进入,加载速度应该会大幅提升。");
window.location.reload();
} catch (e) {
alert("清理失败,请尝试在浏览器设置中手动清理此网站的缓存。\n" + e.message);
}
};
}
// 启动逻辑
function init() {
const checkTimer = setInterval(() => {
if (document.querySelector('canvas')) {
createUI();
clearInterval(checkTimer);
}
}, 1000);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();