// ==UserScript== // @name MCJS 高版本极限提帧器 (WASM专用) // @namespace https://scriptcat.org/ // @version 3.0 // @description 针对 Eaglercraft 1.13+ 至 26.3 高版本 WASM,强制降分辨率、关特效,硬核提帧保画质 // @author You // @match *://*/* // @grant GM_setValue // @grant GM_getValue // @run-at document-start // ==/UserScript== (function () { 'use strict'; // ==================== 1. 底层渲染强制降级 (在游戏加载前执行) ==================== // 强行关闭抗锯齿,降低GPU负担,这对于高版本WASM是致命的性能点 const originalGetContext = HTMLCanvasElement.prototype.getContext; HTMLCanvasElement.prototype.getContext = function (type, attributes) { if (type === 'webgl' || type === 'webgl2' || type === 'experimental-webgl') { const optimisedAttributes = Object.assign({}, attributes, { antialias: false, // 必须关!高版本开抗锯齿直接掉一半帧 powerPreference: "high-performance", // 强制使用独立显卡 alpha: false, // 不透明画布更省性能 depth: true, stencil: false, // 不用模板缓冲 desynchronized: true, // 开启低延迟渲染 (减少鼠标转头时的拖拽感) preserveDrawingBuffer: false }); return originalGetContext.call(this, type, optimisedAttributes); } return originalGetContext.call(this, type, attributes); }; // ==================== 2. 设备分辨率劫持 (超强提帧核心) ==================== // 获取用户保存的 DPR (默认 0.7,即按 70% 分辨率渲染) let targetDPR = parseFloat(GM_getValue('mc_dpr_v3', '0.7')); try { // 劫持 window.devicePixelRatio Object.defineProperty(window, 'devicePixelRatio', { get: function () { return targetDPR; } }); } catch (e) { console.warn("[MC提帧] 无法劫持 DPR,可能被浏览器安全策略限制。"); } // ==================== 3. 控制面板 UI ==================== function createUI() { if (document.getElementById('mc-wasm-opt')) return; const panel = document.createElement('div'); panel.id = 'mc-wasm-opt'; panel.style.cssText = ` position: fixed; bottom: 20px; left: 20px; width: 280px; background: rgba(10, 15, 25, 0.95); backdrop-filter: blur(10px); border: 1px solid #00d2ff; 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; user-select: none; `; panel.innerHTML = `
⚡ MC 高版本 WASM 极限提帧
×
渲染缩放 (降维打击): ${targetDPR}x
⭐ 笔记本/核显建议 0.5x - 0.7x,帧数直接翻倍。台式机可 1.0x。
画面锐化 (补偿画质):
降低分辨率后画面会糊,勾选此项可强制边缘锐化,找回清晰度。
`; 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); // 交互逻辑 const dprSlider = panel.querySelector('#dpr-slider'); const dprVal = panel.querySelector('#dpr-val'); dprSlider.oninput = () => dprVal.textContent = dprSlider.value + 'x'; const sharpenBox = panel.querySelector('#sharpen-box'); sharpenBox.checked = GM_getValue('mc_sharpen_v3', true); // 默认开启锐化 // 应用滤镜的函数 function applySharpen(enable) { const canvases = document.querySelectorAll('canvas'); canvases.forEach(c => { if (enable) { c.style.imageRendering = 'pixelated'; // 关键:保持像素风,防止变糊 c.style.filter = 'contrast(1.15) saturate(1.1)'; // 增强对比和色彩 } else { c.style.imageRendering = 'auto'; c.style.filter = 'none'; } }); } // 初始应用锐化 applySharpen(sharpenBox.checked); // 监听 DOM,新生成的 Canvas 也应用 const observer = new MutationObserver(() => { applySharpen(sharpenBox.checked); }); observer.observe(document.body, { childList: true, subtree: true }); panel.querySelector('#apply-btn').onclick = () => { const newDpr = parseFloat(dprSlider.value); const enableSharpen = sharpenBox.checked; GM_setValue('mc_dpr_v3', newDpr); GM_setValue('mc_sharpen_v3', enableSharpen); // 提示并刷新 alert(`已应用优化设置:\\n分辨率缩放:${newDpr}x\\n画面锐化:${enableSharpen ? '开启' : '关闭'}\\n\\n即将刷新页面生效!`); window.location.reload(); }; } // ==================== 4. 初始化 ==================== function init() { // 检测到 Canvas 后再出 UI const checkCanvas = setInterval(() => { if (document.querySelector('canvas')) { createUI(); clearInterval(checkCanvas); } }, 500); // 阻止在画布上右键弹出菜单 document.addEventListener('contextmenu', (e) => { if (e.target.tagName.toLowerCase() === 'canvas') { e.preventDefault(); } }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();