您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Change Scratch block colors and modify blocks in Scratch projects using a custom GUI
当前为
// ==UserScript== // @name Scratch Block Color Changer with GUI // @namespace http://tampermonkey.net/ // @version 0.2 // @description Change Scratch block colors and modify blocks in Scratch projects using a custom GUI // @match https://scratch.mit.edu/projects/* // @grant GM_addStyle // @run-at document-end // ==/UserScript== (function() { 'use strict'; // Utility function to add global styles function addGlobalStyle(css) { const style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; document.head.appendChild(style); } // Create and open GUI function createAndOpenGUI() { const gui = document.createElement('div'); gui.id = 'scratch-custom-gui'; gui.style.position = 'fixed'; gui.style.top = '10px'; gui.style.right = '10px'; gui.style.backgroundColor = '#ffffff'; gui.style.border = '1px solid #ddd'; gui.style.padding = '10px'; gui.style.zIndex = 1000; gui.style.borderRadius = '5px'; gui.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.3)'; gui.style.fontFamily = 'Arial, sans-serif'; gui.style.display = 'none'; // Main GUI content gui.innerHTML = ` <h2>Custom Scratch GUI</h2> <button onclick="openBlockColorChanger()">Block Color Changer</button> <button onclick="openBlockEditor()">Block Editor</button> <button onclick="openThemeChanger()">Theme Changer</button> <button onclick="openModifiers()">Modifiers</button> <button onclick="closeGUI()">Close</button> <div id="gui-content"></div> `; document.body.appendChild(gui); // Function to open the GUI window.openGUI = function() { gui.style.display = 'block'; }; // Function to close the GUI window.closeGUI = function() { gui.style.display = 'none'; }; // Function to open block color changer window.openBlockColorChanger = function() { document.getElementById('gui-content').innerHTML = ` <h3>Block Color Changer</h3> <label for="block-select-color">Select Block:</label> <select id="block-select-color"> <!-- Populate with block options dynamically --> </select> <br/><br/> <label for="block-new-color">New Block Color:</label> <input type="color" id="block-new-color" /> <br/><br/> <button onclick="changeBlockColor()">Change Color</button> `; }; // Function to open block editor window.openBlockEditor = function() { document.getElementById('gui-content').innerHTML = ` <h3>Block Editor</h3> <label for="block-name">Block Name:</label> <input type="text" id="block-name" /> <br/><br/> <label for="block-color">Block Color:</label> <input type="color" id="block-color" /> <br/><br/> <label for="block-inside-color">Inside Color:</label> <input type="color" id="block-inside-color" /> <br/><br/> <button onclick="createCustomBlock()">Create Custom Block</button> `; }; // Function to open theme changer window.openThemeChanger = function() { document.getElementById('gui-content').innerHTML = ` <h3>Theme Changer</h3> <label for="theme-select">Select Theme:</label> <select id="theme-select"> <option value="cupcake">Cupcake</option> <option value="candy">Candy</option> <option value="dark">Dark</option> <option value="marshmallow">Marshmallow</option> <option value="bloody">Bloody</option> <option value="image">Image</option> </select> <br/><br/> <label for="theme-image-url" id="image-url-label" style="display: none;">Image URL:</label> <input type="text" id="theme-image-url" style="display: none;" /> <br/><br/> <button onclick="applyTheme()">Apply Theme</button> `; }; // Function to open modifiers window.openModifiers = function() { document.getElementById('gui-content').innerHTML = ` <h3>Modifiers</h3> <label for="modifier-name">Modifier Name:</label> <input type="text" id="modifier-name" /> <br/><br/> <button onclick="addModifier()">Add Modifier</button> <br/><br/> <div id="modifiers-list"></div> `; }; // Function to change block color window.changeBlockColor = function() { const blockId = document.getElementById('block-select-color').value; const newColor = document.getElementById('block-new-color').value; console.log('Changing block color to:', newColor); // Implement logic to change the color of the selected block using Scratch API // For demonstration purposes, this is a placeholder }; // Function to create a custom block window.createCustomBlock = function() { const blockName = document.getElementById('block-name').value; const blockColor = document.getElementById('block-color').value; const blockInsideColor = document.getElementById('block-inside-color').value; console.log('Creating custom block:', blockName, blockColor, blockInsideColor); // Implement logic to create a custom block using Scratch API // For demonstration purposes, this is a placeholder }; // Function to apply theme window.applyTheme = function() { const theme = document.getElementById('theme-select').value; const imageUrl = document.getElementById('theme-image-url').value; const themes = { 'cupcake': ` body { background-color: #fbe8e8; color: #6a1b29; } .stage { background: #fcdada; } .backdrop { background: #f6a7b1; } `, 'candy': ` body { background-color: #f5a623; color: #fff; } .stage { background: #f79c42; } .backdrop { background: #f4b043; } `, 'dark': ` body { background-color: #333; color: #f5f5f5; } .stage { background: #555; } .backdrop { background: #444; } `, 'marshmallow': ` body { background-color: #fff; color: #000; } .stage { background: #f5f5f5; } .backdrop { background: #e0e0e0; } `, 'bloody': ` body { background-color: #3e0d0d; color: #f5f5f5; } .stage { background: #6a0b0b; } .backdrop { background: #9e0f0f; } `, 'image': ` body { background-image: url('${imageUrl}'); color: #ffffff; } .stage { background: rgba(0, 0, 0, 0.5); } .backdrop { background: rgba(0, 0, 0, 0.5); } ` }; if (theme === 'image') { document.getElementById('image-url-label').style.display = 'block'; document.getElementById('theme-image-url').style.display = 'block'; } else { document.getElementById('image-url-label').style.display = 'none'; document.getElementById('theme-image-url').style.display = 'none'; applyThemeStyles(themes[theme]); } }; function applyThemeStyles(css) { let existingStyle = document.getElementById('theme-style'); if (existingStyle) { existingStyle.remove(); } const style = document.createElement('style'); style.id = 'theme-style'; style.innerHTML = css; document.head.appendChild(style); } // Function to add a modifier window.addModifier = function() { const modifierName = document.getElementById('modifier-name').value; console.log('Adding modifier:', modifierName); const modifiersList = document.getElementById('modifiers-list'); const modifierItem = document.createElement('div'); modifierItem.textContent = modifierName; modifiersList.appendChild(modifierItem); }; } // Add global styles for the GUI addGlobalStyle(` #scratch-custom-gui button { margin: 5px; padding: 5px 10px; border: none; border-radius: 5px; background-color: #007bff; color: #fff; cursor: pointer; } #scratch-custom-gui button:hover { background-color: #0056b3; } #scratch-custom-gui input[type="color"] { margin: 5px 0; } `); // Create and open the GUI createAndOpenGUI(); })();