您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Enhanced Sploop.io client with themed mods, visual effects, combat utilities, and expanded texture packs
当前为
// ==UserScript== // @name Sploop Lunar Client // @namespace http://tampermonkey.net/ // @version 2.0 // @description Enhanced Sploop.io client with themed mods, visual effects, combat utilities, and expanded texture packs // @author hooder // @match https://sploop.io/* // @grant none // ==/UserScript== (function() { 'use strict'; function addStyle(css) { const style = document.createElement('style'); style.textContent = css; document.head.appendChild(style); return style; } function makeDraggable(element) { let posX = 0, posY = 0, mouseX = 0, mouseY = 0; element.onmousedown = dragMouseDown; function dragMouseDown(e) { if (!isDragging) return; e.preventDefault(); mouseX = e.clientX; mouseY = e.clientY; document.onmouseup = closeDragElement; document.onmousemove = elementDrag; } function elementDrag(e) { e.preventDefault(); posX = mouseX - e.clientX; posY = mouseY - e.clientY; mouseX = e.clientX; mouseY = e.clientY; const newTop = element.offsetTop - posY; const newLeft = element.offsetLeft - posX; element.style.top = Math.max(0, Math.min(newTop, window.innerHeight - element.offsetHeight)) + "px"; element.style.left = Math.max(0, Math.min(newLeft, window.innerWidth - element.offsetWidth)) + "px"; } function closeDragElement() { document.onmouseup = null; document.onmousemove = null; } } let isDragging = false; let menuVisible = true; let currentTheme = 'purple'; addStyle(` .lunar-menu { position: fixed; top: 50px; left: 50px; width: 480px; height: 500px; background: linear-gradient(135deg, #4b0082, #1a1a1a); border: 2px solid #9400d3; border-radius: 15px; color: white; font-family: Arial, sans-serif; z-index: 10000; padding: 15px; box-shadow: 0 0 20px rgba(0, 0, 0, 0.6); overflow-y: auto; display: flex; flex-direction: column; } .lunar-menu h2 { margin: 0 0 10px 0; text-align: center; color: #d8bfd8; cursor: move; font-size: 24px; } .tab-buttons { display: flex; justify-content: center; gap: 10px; margin-bottom: 15px; } .tab-button { background: #9400d3; border: none; padding: 8px 20px; color: white; cursor: pointer; border-radius: 8px; transition: all 0.3s; } .tab-button:hover { background: #d8bfd8; color: #1a1a1a; } .tab-content { display: none; flex-grow: 1; } .tab-content.active { display: block; } .mod-toggle { margin: 10px 0; display: flex; align-items: center; justify-content: space-between; padding: 5px 10px; background: rgba(255, 255, 255, 0.05); border-radius: 5px; } .mod-toggle input { margin-right: 10px; } .move-mods-btn { background: #9400d3; border: none; padding: 10px 20px; color: white; cursor: pointer; border-radius: 8px; margin-top: 15px; width: 150px; align-self: center; transition: all 0.3s; } .move-mods-btn:hover { background: #d8bfd8; color: #1a1a1a; } .mod-ui { position: fixed; padding: 10px; color: white; z-index: 1000; display: none; border-radius: 5px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); background: rgba(0, 0, 0, 0.8); } .texture-ui, .keystrokes-ui { display: flex; flex-direction: column; gap: 8px; } .keystrokes-ui div { display: flex; justify-content: center; gap: 5px; } .keystroke-key { width: 40px; height: 40px; background: rgba(255, 255, 255, 0.1); border: 1px solid #fff; border-radius: 5px; display: flex; align-items: center; justify-content: center; transition: all 0.1s; } .keystroke-key.active { background: rgba(255, 255, 255, 0.8); color: #000; } .rgb-border { animation: rgbGlow 3s infinite; } @keyframes rgbGlow { 0% { border-color: #ff0000; } 33% { border-color: #00ff00; } 66% { border-color: #0000ff; } 100% { border-color: #ff0000; } } .arraylist-container { width: auto; max-width: 200px; background: rgba(0, 0, 0, 0.7); border-radius: 5px; padding: 5px; } .arraylist-item { padding: 3px 8px; background: rgba(255, 255, 255, 0.1); margin: 2px 0; border-radius: 3px; transition: all 0.2s; } .arraylist-item:hover { background: rgba(255, 255, 255, 0.2); } `); const themes = { purple: { background: `linear-gradient(135deg, #4b0082, #1a1a1a)`, border: `#9400d3`, button: `#9400d3` }, blue: { background: `linear-gradient(135deg, #00008b, #1a1a1a)`, border: `#00b7eb`, button: `#00b7eb` }, red: { background: `linear-gradient(135deg, #8b0000, #1a1a1a)`, border: `#ff4040`, button: `#ff4040` }, green: { background: `linear-gradient(135deg, #006400, #1a1a1a)`, border: `#00ff00`, button: `#00ff00` }, orange: { background: `linear-gradient(135deg, #ff4500, #1a1a1a)`, border: `#ffa500`, button: `#ffa500` }, cyan: { background: `linear-gradient(135deg, #008b8b, #1a1a1a)`, border: `#00ffff`, button: `#00ffff` }, pink: { background: `linear-gradient(135deg, #ff1493, #1a1a1a)`, border: `#ff69b4`, button: `#ff69b4` }, yellow: { background: `linear-gradient(135deg, #ffd700, #1a1a1a)`, border: `#ffff00`, button: `#ffff00` }, neon: { background: `linear-gradient(135deg, #00ffcc, #1a1a1a)`, border: `#39ff14`, button: `#39ff14` } }; function applyTheme(element, theme) { element.style.background = themes[theme].background; element.style.border = `2px solid ${themes[theme].border}`; if (element.className === 'move-mods-btn' || element.className === 'tab-button') { element.style.background = themes[theme].button; } } const menu = document.createElement('div'); menu.className = 'lunar-menu'; menu.innerHTML = ` <h2>Sploop Lunar Client</h2> <div class="tab-buttons"> <button class="tab-button" data-tab="visual">Visual</button> <button class="tab-button" data-tab="utility">Utility</button> <button class="tab-button" data-tab="combat">Combat</button> </div> <div id="visual-tab" class="tab-content"> <div class="mod-toggle"><input type="checkbox" id="texturePacksMod"> Texture Packs</div> <div class="mod-toggle"><input type="checkbox" id="menuThemeMod"> Menu Theme</div> <div class="mod-toggle"><input type="checkbox" id="arrayListMod"> ArrayList</div> <div class="mod-toggle"><input type="checkbox" id="rgbMod"> RGB Borders</div> <div class="mod-toggle"><input type="checkbox" id="particleEffectsMod"> Particle Effects</div> <div class="mod-toggle"><input type="checkbox" id="glowEffectMod"> Glow Effect</div> <div class="mod-toggle"><input type="checkbox" id="pulseEffectMod"> Pulse Effect</div> <div class="mod-toggle"><input type="checkbox" id="colorShiftMod"> Color Shift</div> <div class="mod-toggle"><input type="checkbox" id="sparkleEffectMod"> Sparkle Effect</div> <div class="mod-toggle"><input type="checkbox" id="blockOverlayMod"> Block Overlay</div> <div class="mod-toggle"><input type="checkbox" id="rainbowCursorMod"> Rainbow Cursor</div> </div> <div id="utility-tab" class="tab-content"> <div class="mod-toggle"><input type="checkbox" id="fpsMod"> FPS</div> <div class="mod-toggle"><input type="checkbox" id="cpsMod"> CPS</div> <div class="mod-toggle"><input type="checkbox" id="fpsBoosterMod"> FPS Booster</div> <div class="mod-toggle"><input type="checkbox" id="pingMod"> Ping</div> <div class="mod-toggle"><input type="checkbox" id="coordsMod"> Coordinates</div> <div class="mod-toggle"><input type="checkbox" id="keystrokesMod"> Keystrokes</div> </div> <div id="combat-tab" class="tab-content"> <div class="mod-toggle"><input type="checkbox" id="hitMarkersMod"> Hit Markers</div> <div class="mod-toggle"><input type="checkbox" id="rangeIndicatorMod"> Range Indicator</div> <div class="mod-toggle"><input type="checkbox" id="smoothCrosshairMod"> Smooth Crosshair</div> <div class="mod-toggle"><input type="checkbox" id="swingAnimationMod"> Swing Animation</div> </div> <button class="move-mods-btn">Move Mods</button> `; document.body.appendChild(menu); makeDraggable(menu); applyTheme(menu, currentTheme); const tabButtons = menu.querySelectorAll('.tab-button'); const tabContents = menu.querySelectorAll('.tab-content'); tabButtons.forEach(button => { button.addEventListener('click', () => { tabContents.forEach(content => content.classList.remove('active')); menu.querySelector(`#${button.dataset.tab}-tab`).classList.add('active'); }); applyTheme(button, currentTheme); }); menu.querySelector('#visual-tab').classList.add('active'); const moveModsBtn = menu.querySelector('.move-mods-btn'); moveModsBtn.addEventListener('click', () => { isDragging = !isDragging; moveModsBtn.textContent = isDragging ? 'Stop Moving' : 'Move Mods'; }); applyTheme(moveModsBtn, currentTheme); document.addEventListener('keydown', (e) => { if (e.key === 'Shift' && e.location === KeyboardEvent.DOM_KEY_LOCATION_RIGHT) { menuVisible = !menuVisible; menu.style.display = menuVisible ? 'block' : 'none'; } }); const texturePacks = { "default": { filter: `canvas { filter: none; } body { background-color: #fff; }`, textures: {} }, "darkSploop": { filter: `canvas { filter: brightness(0.8) contrast(1.2); } body { background-color: #1a1a1a; }`, textures: {} }, "vibrantHack": { filter: `canvas { filter: brightness(1.2) saturate(1.5); } body { background-color: #f0f0f0; }`, textures: {} }, "cosmicNebula": { filter: `canvas { filter: brightness(1.1) saturate(1.3) hue-rotate(270deg); } body { background-color: #0a0a2a; }`, textures: { "/img/entity/hammer.png": "https://cdn.pixabay.com/photo/2023/10/10/15/45/hammer-8306725_1280.png", "/img/entity/katana.png": "https://cdn.pixabay.com/photo/2023/08/15/12/30/sword-8192049_1280.png", "/img/entity/shield.png": "https://cdn.pixabay.com/photo/2023/09/20/14/45/shield-8265142_1280.png", "/img/entity/hat_1.png": "https://cdn.pixabay.com/photo/2023/07/25/14/30/helmet-8149148_1280.png", "/img/entity/hat_2.png": "https://cdn.pixabay.com/photo/2023/06/10/14/45/hat-8054086_1280.png", "/img/entity/hat_3.png": "https://cdn.pixabay.com/photo/2023/05/15/12/30/helmet-7994518_1280.png", "/img/items/pearl.png": "https://cdn.pixabay.com/photo/2023/04/25/14/45/gem-7950780_1280.png", "/img/entity/teleporter.png": "https://cdn.pixabay.com/photo/2023/03/10/14/45/portal-7842623_1280.png", "/img/entity/bed.png": "https://cdn.pixabay.com/photo/2023/02/15/14/45/bed-7791845_1280.png", "/img/entity/lootbox.png": "https://cdn.pixabay.com/photo/2023/01/20/14/45/chest-7731642_1280.png" } }, "lunarEclipse": { filter: `canvas { filter: brightness(0.9) contrast(1.1) sepia(0.3); } body { background-color: #2a1a3a; }`, textures: { "/img/entity/hammer.png": "https://cdn.pixabay.com/photo/2023/11/15/14/45/hammer-8390150_1280.png", "/img/entity/katana.png": "https://cdn.pixabay.com/photo/2023/09/10/14/45/sword-8245262_1280.png", "/img/entity/shield.png": "https://cdn.pixabay.com/photo/2023/08/20/14/45/shield-8202658_1280.png", "/img/items/pearl.png": "https://cdn.pixabay.com/photo/2023/05/20/14/45/gem-8006828_1280.png" } }, "stellarVoid": { filter: `canvas { filter: brightness(1.0) saturate(0.8) invert(0.1); } body { background-color: #1a1a2a; }`, textures: { "/img/entity/hammer.png": "https://cdn.pixabay.com/photo/2023/12/10/14/45/hammer-8442038_1280.png", "/img/entity/katana.png": "https://cdn.pixabay.com/photo/2023/10/20/14/45/sword-8329256_1280.png", "/img/entity/shield.png": "https://cdn.pixabay.com/photo/2023/07/15/14/45/shield-8129348_1280.png", "/img/entity/teleporter.png": "https://cdn.pixabay.com/photo/2023/06/25/14/45/portal-8087142_1280.png" } }, "astralGlow": { filter: `canvas { filter: brightness(1.3) saturate(1.4) hue-rotate(90deg); } body { background-color: #2a3a1a; }`, textures: { "/img/entity/hammer.png": "https://cdn.pixabay.com/photo/2023/09/25/14/45/hammer-8275126_1280.png", "/img/entity/katana.png": "https://cdn.pixabay.com/photo/2023/11/25/14/45/sword-8412038_1280.png", "/img/entity/shield.png": "https://cdn.pixabay.com/photo/2023/10/25/14/45/shield-8340620_1280.png", "/img/entity/bed.png": "https://cdn.pixabay.com/photo/2023/08/05/14/45/bed-8171530_1280.png" } }, "crystallV2": { filter: `canvas { filter: brightness(1.1) contrast(1.2) saturate(1.3); } body { background-color: #1e1e2f; }`, textures: { "/img/entity/hat_1.png": "https://media.discordapp.net/attachments/880690143575564339/948131805012312064/bull.io.png", "/img/entity/hat_3.png": "https://media.discordapp.net/attachments/880690143575564339/948131805205254164/cyrstal.io.png", "/img/entity/hat_4.png": "https://media.discordapp.net/attachments/880690143575564339/948131805603717140/spike.io.png", "/img/entity/hat_5.png": "https://media.discordapp.net/attachments/880690143575564339/948131805402398740/immunity.io.png", "/img/entity/hat_6.png": "https://media.discordapp.net/attachments/880690143575564339/948131804739690566/boost.io.png", "/img/items/c_katana.png": "https://media.discordapp.net/attachments/880690143575564339/948131805805035560/unknown.png", "/img/skins/body6.png": "https://media.discordapp.net/attachments/934750704604684338/943879698067386388/ping_wings_tester.png", "/img/entity/windmill_top.png": "https://media.discordapp.net/attachments/906185437389922355/943872973784350830/windmill_topyes.png", "/img/entity/inv_c_katana.png": "https://media.discordapp.net/attachments/906185437389922355/950275458811957248/inv_c_katana.png", "/img/entity/map.png": "https://media.discordapp.net/attachments/880690143575564339/949261797028945930/mapheheboi.png" } }, "crystallV3": { filter: `canvas { filter: brightness(1.1) contrast(1.2); } body { background-color: #1e1e2f; }`, textures: { "/img/entity/hat_1.png": "https://media.discordapp.net/attachments/951523489809072198/963088950182948884/bull.io.png", "/img/entity/hat_2.png": "https://media.discordapp.net/attachments/951523489809072198/961002006456197140/Medicinehat.webp", "/img/entity/hat_3.png": "https://media.discordapp.net/attachments/951523489809072198/960992157076955226/cyrstal.io.png", "/img/entity/teleporter.png": "https://cdn.discordapp.com/attachments/970942496672743444/1000002663267717190/unknown.png" } }, "darkCrystall": { filter: `canvas { filter: brightness(0.9) saturate(1.2) hue-rotate(180deg); } body { background-color: #121212; }`, textures: { "/img/entity/hat_1.png": "https://cdn.pixabay.com/photo/2023/07/25/14/30/helmet-8149148_1280.png", "/img/entity/hat_2.png": "https://cdn.pixabay.com/photo/2023/06/10/14/45/hat-8054086_1280.png", "/img/entity/hat_3.png": "https://cdn.pixabay.com/photo/2023/05/15/12/30/helmet-7994518_1280.png", "/img/entity/teleporter.png": "https://cdn.pixabay.com/photo/2023/03/10/14/45/portal-7842623_1280.png" } } }; const remaps = new Map(); function applyTexturePack(packName) { const pack = texturePacks[packName]; textureStyleElement.textContent = pack.filter; Object.entries(pack.textures).forEach(([fromUrl, toUrl]) => { remaps.set(`https://sploop.io${fromUrl}`, { src: toUrl, scale: 1 }); }); } const origImage = Image; window.Image = class extends origImage { set onload(fn) { this._onloadFn = fn; super.onload = function() { this.width = this.width * this._scale; this.height = this.height * this._scale; return fn.apply(this, arguments); }; } set src(_src) { const [path] = _src.split("?v="); if (remaps.has(path)) { const { src, scale } = remaps.get(path); _src = src; this._scale = scale; } else { this._scale = 1; } super.src = _src; } }; const textureUI = document.createElement('div'); textureUI.className = 'mod-ui texture-ui'; textureUI.style.top = '10px'; textureUI.style.left = '150px'; textureUI.style.display = 'none'; textureUI.innerHTML = ` <label>Texture Pack:</label> <select id="textureSelect"> <option value="default">Default (Built-in)</option> <option value="darkSploop">DarkSploop (Greasy Fork)</option> <option value="vibrantHack">VibrantHack (Tampermonkey)</option> <option value="cosmicNebula">Cosmic Nebula (Lunar)</option> <option value="lunarEclipse">Lunar Eclipse</option> <option value="stellarVoid">Stellar Void</option> <option value="astralGlow">Astral Glow</option> <option value="crystallV2">Crystall v2</option> <option value="crystallV3">Crystall v3.1 (Greasy Fork)</option> <option value="darkCrystall">Dark Crystall</option> </select> `; document.body.appendChild(textureUI); makeDraggable(textureUI); applyTheme(textureUI, currentTheme); let textureStyleElement = addStyle(texturePacks['default'].filter); const textureSelect = textureUI.querySelector('#textureSelect'); textureSelect.addEventListener('change', (e) => { remaps.clear(); applyTexturePack(e.target.value); }); applyTexturePack('default'); const fpsUI = document.createElement('div'); fpsUI.className = 'mod-ui'; fpsUI.style.top = '60px'; fpsUI.style.left = '10px'; fpsUI.style.display = 'none'; document.body.appendChild(fpsUI); makeDraggable(fpsUI); applyTheme(fpsUI, currentTheme); let lastTime = performance.now(); function updateFPS() { const now = performance.now(); const fps = Math.round(1000 / (now - lastTime)); fpsUI.textContent = `FPS: ${fps}`; lastTime = now; requestAnimationFrame(updateFPS); } const cpsUI = document.createElement('div'); cpsUI.className = 'mod-ui'; cpsUI.style.top = '110px'; cpsUI.style.left = '10px'; cpsUI.style.display = 'none'; document.body.appendChild(cpsUI); makeDraggable(cpsUI); applyTheme(cpsUI, currentTheme); let clicks = 0; document.addEventListener('mousedown', () => clicks++); setInterval(() => { cpsUI.textContent = `CPS: ${clicks}`; clicks = 0; }, 1000); const fpsBoosterUI = document.createElement('div'); fpsBoosterUI.className = 'mod-ui'; fpsBoosterUI.style.top = '160px'; fpsBoosterUI.style.left = '10px'; fpsBoosterUI.style.display = 'none'; document.body.appendChild(fpsBoosterUI); makeDraggable(fpsBoosterUI); applyTheme(fpsBoosterUI, currentTheme); function toggleFPSBooster(on) { const canvas = document.querySelector('canvas'); if (on) { canvas.style.imageRendering = 'pixelated'; document.body.style.background = '#000'; fpsBoosterUI.textContent = 'FPS Booster: ON'; } else { canvas.style.imageRendering = 'auto'; document.body.style.background = texturePacks[textureSelect.value].filter.split('body {')[1].split('}')[0].trim(); fpsBoosterUI.textContent = 'FPS Booster: OFF'; } } const pingUI = document.createElement('div'); pingUI.className = 'mod-ui'; pingUI.style.top = '210px'; pingUI.style.left = '10px'; pingUI.style.display = 'none'; document.body.appendChild(pingUI); makeDraggable(pingUI); applyTheme(pingUI, currentTheme); function updatePing() { const start = performance.now(); fetch('https://sploop.io/').then(() => { pingUI.textContent = `Ping: ${Math.round(performance.now() - start)}ms`; }).catch(() => pingUI.textContent = 'Ping: N/A'); } const coordsUI = document.createElement('div'); coordsUI.className = 'mod-ui'; coordsUI.style.top = '260px'; coordsUI.style.left = '10px'; coordsUI.style.display = 'none'; coordsUI.innerHTML = 'Coords: X:0 Y:0'; document.body.appendChild(coordsUI); makeDraggable(coordsUI); applyTheme(coordsUI, currentTheme); document.addEventListener('mousemove', (e) => { if (coordsMod.checked) { coordsUI.textContent = `Coords: X:${e.clientX} Y:${e.clientY}`; } }); const keystrokesUI = document.createElement('div'); keystrokesUI.className = 'mod-ui keystrokes-ui'; keystrokesUI.style.top = '310px'; keystrokesUI.style.left = '10px'; keystrokesUI.style.display = 'none'; keystrokesUI.innerHTML = ` <div><div class="keystroke-key" id="keyW">W</div></div> <div> <div class="keystroke-key" id="keyA">A</div> <div class="keystroke-key" id="keyS">S</div> <div class="keystroke-key" id="keyD">D</div> </div> <div><div class="keystroke-key" id="keySpace"> </div></div> `; document.body.appendChild(keystrokesUI); makeDraggable(keystrokesUI); applyTheme(keystrokesUI, currentTheme); const keyElements = { w: keystrokesUI.querySelector('#keyW'), a: keystrokesUI.querySelector('#keyA'), s: keystrokesUI.querySelector('#keyS'), d: keystrokesUI.querySelector('#keyD'), space: keystrokesUI.querySelector('#keySpace') }; document.addEventListener('keydown', (e) => { if (!keystrokesMod.checked) return; switch (e.key.toLowerCase()) { case 'w': keyElements.w.classList.add('active'); break; case 'a': keyElements.a.classList.add('active'); break; case 's': keyElements.s.classList.add('active'); break; case 'd': keyElements.d.classList.add('active'); break; case ' ': keyElements.space.classList.add('active'); break; } }); document.addEventListener('keyup', (e) => { if (!keystrokesMod.checked) return; switch (e.key.toLowerCase()) { case 'w': keyElements.w.classList.remove('active'); break; case 'a': keyElements.a.classList.remove('active'); break; case 's': keyElements.s.classList.remove('active'); break; case 'd': keyElements.d.classList.remove('active'); break; case ' ': keyElements.space.classList.remove('active'); break; } }); const menuThemeUI = document.createElement('div'); menuThemeUI.className = 'mod-ui'; menuThemeUI.style.top = '60px'; menuThemeUI.style.left = '150px'; menuThemeUI.style.display = 'none'; menuThemeUI.innerHTML = ` <label>Menu Theme: </label> <select id="themeSelect"> <option value="purple">Purple</option> <option value="blue">Blue</option> <option value="red">Red</option> <option value="green">Green</option> <option value="orange">Orange</option> <option value="cyan">Cyan</option> <option value="pink">Pink</option> <option value="yellow">Yellow</option> <option value="neon">Neon</option> </select> `; document.body.appendChild(menuThemeUI); makeDraggable(menuThemeUI); applyTheme(menuThemeUI, currentTheme); const themeSelect = menuThemeUI.querySelector('#themeSelect'); themeSelect.addEventListener('change', (e) => { currentTheme = e.target.value; applyTheme(menu, currentTheme); tabButtons.forEach(btn => applyTheme(btn, currentTheme)); applyTheme(moveModsBtn, currentTheme); applyTheme(textureUI, currentTheme); applyTheme(fpsUI, currentTheme); applyTheme(cpsUI, currentTheme); applyTheme(menuThemeUI, currentTheme); applyTheme(arrayListUI, currentTheme); applyTheme(particleEffectsUI, currentTheme); applyTheme(hitMarkersUI, currentTheme); applyTheme(rangeIndicatorUI, currentTheme); applyTheme(smoothCrosshairUI, currentTheme); applyTheme(fpsBoosterUI, currentTheme); applyTheme(glowEffectUI, currentTheme); applyTheme(pulseEffectUI, currentTheme); applyTheme(colorShiftUI, currentTheme); applyTheme(sparkleEffectUI, currentTheme); applyTheme(swingAnimationUI, currentTheme); applyTheme(pingUI, currentTheme); applyTheme(coordsUI, currentTheme); applyTheme(blockOverlayUI, currentTheme); applyTheme(keystrokesUI, currentTheme); applyTheme(rainbowCursorUI, currentTheme); }); const arrayListUI = document.createElement('div'); arrayListUI.className = 'mod-ui arraylist-container'; arrayListUI.style.top = '10px'; arrayListUI.style.right = '10px'; arrayListUI.style.display = 'none'; document.body.appendChild(arrayListUI); makeDraggable(arrayListUI); applyTheme(arrayListUI, currentTheme); function updateArrayList() { const activeMods = []; if (fpsMod.checked) activeMods.push('FPS'); if (cpsMod.checked) activeMods.push('CPS'); if (texturePacksMod.checked) activeMods.push('Texture Packs'); if (menuThemeMod.checked) activeMods.push('Menu Theme'); if (arrayListMod.checked) activeMods.push('ArrayList'); if (rgbMod.checked) activeMods.push('RGB Borders'); if (particleEffectsMod.checked) activeMods.push('Particle Effects'); if (glowEffectMod.checked) activeMods.push('Glow Effect'); if (pulseEffectMod.checked) activeMods.push('Pulse Effect'); if (colorShiftMod.checked) activeMods.push('Color Shift'); if (sparkleEffectMod.checked) activeMods.push('Sparkle Effect'); if (hitMarkersMod.checked) activeMods.push('Hit Markers'); if (rangeIndicatorMod.checked) activeMods.push('Range Indicator'); if (smoothCrosshairMod.checked) activeMods.push('Smooth Crosshair'); if (fpsBoosterMod.checked) activeMods.push('FPS Booster'); if (swingAnimationMod.checked) activeMods.push('Swing Animation'); if (pingMod.checked) activeMods.push('Ping'); if (coordsMod.checked) activeMods.push('Coordinates'); if (blockOverlayMod.checked) activeMods.push('Block Overlay'); if (keystrokesMod.checked) activeMods.push('Keystrokes'); if (rainbowCursorMod.checked) activeMods.push('Rainbow Cursor'); arrayListUI.innerHTML = activeMods.map(mod => `<div class="arraylist-item">${mod}</div>`).join(''); } const particleEffectsUI = document.createElement('div'); particleEffectsUI.className = 'mod-ui'; particleEffectsUI.style.top = '110px'; particleEffectsUI.style.left = '150px'; particleEffectsUI.style.display = 'none'; particleEffectsUI.innerHTML = ` <label>Particle Density: </label> <input type="range" id="particleDensity" min="1" max="10" value="5"> `; document.body.appendChild(particleEffectsUI); makeDraggable(particleEffectsUI); applyTheme(particleEffectsUI, currentTheme); function spawnParticles(density) { const canvas = document.querySelector('canvas'); if (!canvas) return; const rect = canvas.getBoundingClientRect(); for (let i = 0; i < density; i++) { const particle = document.createElement('div'); particle.style = ` position: absolute; width: 5px; height: 5px; background: ${['#ff0', '#0ff', '#f0f'][Math.floor(Math.random() * 3)]}; border-radius: 50%; z-index: 999; top: ${rect.top + Math.random() * rect.height}px; left: ${rect.left + Math.random() * rect.width}px; animation: particleFade 1s ease-out forwards; pointer-events: none; `; document.body.appendChild(particle); setTimeout(() => particle.remove(), 1000); } } addStyle(` @keyframes particleFade { 0% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: scale(0.5) translate(${Math.random() * 20 - 10}px, ${Math.random() * 20 - 10}px); } } `); const glowEffectUI = document.createElement('div'); glowEffectUI.className = 'mod-ui'; glowEffectUI.style.top = '160px'; glowEffectUI.style.left = '150px'; glowEffectUI.style.display = 'none'; document.body.appendChild(glowEffectUI); makeDraggable(glowEffectUI); applyTheme(glowEffectUI, currentTheme); function toggleGlowEffect(on) { const canvas = document.querySelector('canvas'); if (on) { canvas.style.filter = `${texturePacks[textureSelect.value].filter.split('canvas { filter: ')[1].split(';')[0]} drop-shadow(0 0 10px #fff)`; glowEffectUI.textContent = 'Glow Effect: ON'; } else { canvas.style.filter = texturePacks[textureSelect.value].filter.split('canvas { filter: ')[1].split(';')[0]; glowEffectUI.textContent = 'Glow Effect: OFF'; } } const pulseEffectUI = document.createElement('div'); pulseEffectUI.className = 'mod-ui'; pulseEffectUI.style.top = '210px'; pulseEffectUI.style.left = '150px'; pulseEffectUI.style.display = 'none'; document.body.appendChild(pulseEffectUI); makeDraggable(pulseEffectUI); applyTheme(pulseEffectUI, currentTheme); function togglePulseEffect(on) { const canvas = document.querySelector('canvas'); if (on) { canvas.style.animation = 'pulse 2s infinite'; pulseEffectUI.textContent = 'Pulse Effect: ON'; } else { canvas.style.animation = 'none'; pulseEffectUI.textContent = 'Pulse Effect: OFF'; } } addStyle(` @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.02); } 100% { transform: scale(1); } } `); const colorShiftUI = document.createElement('div'); colorShiftUI.className = 'mod-ui'; colorShiftUI.style.top = '260px'; colorShiftUI.style.left = '150px'; colorShiftUI.style.display = 'none'; document.body.appendChild(colorShiftUI); makeDraggable(colorShiftUI); applyTheme(colorShiftUI, currentTheme); function toggleColorShift(on) { const canvas = document.querySelector('canvas'); if (on) { canvas.style.animation = 'colorShift 5s infinite'; colorShiftUI.textContent = 'Color Shift: ON'; } else { canvas.style.animation = 'none'; colorShiftUI.textContent = 'Color Shift: OFF'; } } addStyle(` @keyframes colorShift { 0% { filter: hue-rotate(0deg); } 50% { filter: hue-rotate(180deg); } 100% { filter: hue-rotate(360deg); } } `); const sparkleEffectUI = document.createElement('div'); sparkleEffectUI.className = 'mod-ui'; sparkleEffectUI.style.top = '310px'; sparkleEffectUI.style.left = '150px'; sparkleEffectUI.style.display = 'none'; document.body.appendChild(sparkleEffectUI); makeDraggable(sparkleEffectUI); applyTheme(sparkleEffectUI, currentTheme); function spawnSparkles() { const canvas = document.querySelector('canvas'); if (!canvas) return; const rect = canvas.getBoundingClientRect(); const sparkle = document.createElement('div'); sparkle.style = ` position: absolute; width: 8px; height: 8px; background: #fff; border-radius: 50%; z-index: 999; top: ${rect.top + Math.random() * rect.height}px; left: ${rect.left + Math.random() * rect.width}px; animation: sparkleFade 0.8s ease-out forwards; pointer-events: none; `; document.body.appendChild(sparkle); setTimeout(() => sparkle.remove(), 800); } addStyle(` @keyframes sparkleFade { 0% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: scale(2); } } `); const blockOverlayUI = document.createElement('div'); blockOverlayUI.className = 'mod-ui'; blockOverlayUI.style.top = '360px'; blockOverlayUI.style.left = '150px'; blockOverlayUI.style.display = 'none'; document.body.appendChild(blockOverlayUI); makeDraggable(blockOverlayUI); applyTheme(blockOverlayUI, currentTheme); function toggleBlockOverlay(on) { const canvas = document.querySelector('canvas'); if (on) { canvas.style.border = '2px solid rgba(255, 255, 255, 0.5)'; blockOverlayUI.textContent = 'Block Overlay: ON'; } else { canvas.style.border = 'none'; blockOverlayUI.textContent = 'Block Overlay: OFF'; } } const hitMarkersUI = document.createElement('div'); hitMarkersUI.className = 'mod-ui'; hitMarkersUI.style.top = '360px'; hitMarkersUI.style.left = '10px'; hitMarkersUI.style.display = 'none'; document.body.appendChild(hitMarkersUI); makeDraggable(hitMarkersUI); applyTheme(hitMarkersUI, currentTheme); document.addEventListener('mousedown', (e) => { if (!hitMarkersMod.checked || e.button !== 0) return; const marker = document.createElement('div'); marker.style = ` position: fixed; top: ${e.clientY - 10}px; left: ${e.clientX - 10}px; width: 20px; height: 20px; background: rgba(255, 0, 0, 0.7); border-radius: 50%; z-index: 1000; animation: hitFade 0.3s ease-out forwards; pointer-events: none; `; document.body.appendChild(marker); setTimeout(() => marker.remove(), 300); }); addStyle(` @keyframes hitFade { 0% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: scale(1.5); } } `); const rangeIndicatorUI = document.createElement('div'); rangeIndicatorUI.className = 'mod-ui'; rangeIndicatorUI.style.top = '410px'; rangeIndicatorUI.style.left = '10px'; rangeIndicatorUI.style.display = 'none'; rangeIndicatorUI.innerHTML = ` <label>Range: </label> <input type="range" id="rangeSize" min="50" max="200" value="100"> `; document.body.appendChild(rangeIndicatorUI); makeDraggable(rangeIndicatorUI); applyTheme(rangeIndicatorUI, currentTheme); const rangeCircle = document.createElement('div'); rangeCircle.style = ` position: fixed; border: 2px dashed #fff; border-radius: 50%; z-index: 999; pointer-events: none; display: none; `; document.body.appendChild(rangeCircle); document.addEventListener('mousemove', (e) => { if (!rangeIndicatorMod.checked) return; const size = rangeIndicatorUI.querySelector('#rangeSize').value; rangeCircle.style.width = `${size}px`; rangeCircle.style.height = `${size}px`; rangeCircle.style.top = `${e.clientY - size / 2}px`; rangeCircle.style.left = `${e.clientX - size / 2}px`; }); const smoothCrosshairUI = document.createElement('div'); smoothCrosshairUI.className = 'mod-ui'; smoothCrosshairUI.style.top = '460px'; smoothCrosshairUI.style.left = '10px'; smoothCrosshairUI.style.display = 'none'; document.body.appendChild(smoothCrosshairUI); makeDraggable(smoothCrosshairUI); applyTheme(smoothCrosshairUI, currentTheme); const crosshair = document.createElement('div'); crosshair.style = ` position: fixed; width: 20px; height: 20px; background: transparent; border: 2px solid #fff; border-radius: 50%; z-index: 1000; pointer-events: none; display: none; `; document.body.appendChild(crosshair); document.addEventListener('mousemove', (e) => { if (!smoothCrosshairMod.checked) return; crosshair.style.top = `${e.clientY - 10}px`; crosshair.style.left = `${e.clientX - 10}px`; }); const swingAnimationUI = document.createElement('div'); swingAnimationUI.className = 'mod-ui'; swingAnimationUI.style.top = '510px'; swingAnimationUI.style.left = '10px'; swingAnimationUI.style.display = 'none'; document.body.appendChild(swingAnimationUI); makeDraggable(swingAnimationUI); applyTheme(swingAnimationUI, currentTheme); document.addEventListener('mousedown', (e) => { if (!swingAnimationMod.checked || e.button !== 0) return; const swing = document.createElement('div'); swing.style = ` position: fixed; top: ${e.clientY - 20}px; left: ${e.clientX - 20}px; width: 40px; height: 40px; border: 2px solid blue; border-radius: 50%; z-index: 1000; animation: swingFade 0.5s ease-out forwards; pointer-events: none; `; document.body.appendChild(swing); setTimeout(() => swing.remove(), 500); }); addStyle(` @keyframes swingFade { 0% { opacity: 1; transform: scale(1) rotate(0deg); } 100% { opacity: 0; transform: scale(1.5) rotate(45deg); } } `); const rainbowCursorUI = document.createElement('div'); rainbowCursorUI.className = 'mod-ui'; rainbowCursorUI.style.top = '410px'; rainbowCursorUI.style.left = '150px'; rainbowCursorUI.style.display = 'none'; document.body.appendChild(rainbowCursorUI); makeDraggable(rainbowCursorUI); applyTheme(rainbowCursorUI, currentTheme); const rainbowCursor = document.createElement('div'); rainbowCursor.style = ` position: fixed; width: 15px; height: 15px; background: transparent; border: 2px solid; border-radius: 50%; z-index: 1000; pointer-events: none; display: none; animation: rainbowBorder 2s infinite; `; document.body.appendChild(rainbowCursor); addStyle(` @keyframes rainbowBorder { 0% { border-color: #ff0000; } 20% { border-color: #ff00ff; } 40% { border-color: #0000ff; } 60% { border-color: #00ffff; } 80% { border-color: #00ff00; } 100% { border-color: #ff0000; } } `); document.addEventListener('mousemove', (e) => { if (!rainbowCursorMod.checked) return; rainbowCursor.style.top = `${e.clientY - 7.5}px`; rainbowCursor.style.left = `${e.clientX - 7.5}px`; }); const logo = document.createElement('div'); logo.style = ` position: fixed; top: 10px; left: 50%; transform: translateX(-50%); color: #d8bfd8; font-family: Arial, sans-serif; font-size: 20px; z-index: 1000; cursor: move; `; logo.textContent = 'Lunar Client'; document.body.appendChild(logo); makeDraggable(logo); const fpsMod = menu.querySelector('#fpsMod'); const cpsMod = menu.querySelector('#cpsMod'); const texturePacksMod = menu.querySelector('#texturePacksMod'); const menuThemeMod = menu.querySelector('#menuThemeMod'); const arrayListMod = menu.querySelector('#arrayListMod'); const rgbMod = menu.querySelector('#rgbMod'); const particleEffectsMod = menu.querySelector('#particleEffectsMod'); const glowEffectMod = menu.querySelector('#glowEffectMod'); const pulseEffectMod = menu.querySelector('#pulseEffectMod'); const colorShiftMod = menu.querySelector('#colorShiftMod'); const sparkleEffectMod = menu.querySelector('#sparkleEffectMod'); const hitMarkersMod = menu.querySelector('#hitMarkersMod'); const rangeIndicatorMod = menu.querySelector('#rangeIndicatorMod'); const smoothCrosshairMod = menu.querySelector('#smoothCrosshairMod'); const fpsBoosterMod = menu.querySelector('#fpsBoosterMod'); const swingAnimationMod = menu.querySelector('#swingAnimationMod'); const pingMod = menu.querySelector('#pingMod'); const coordsMod = menu.querySelector('#coordsMod'); const blockOverlayMod = menu.querySelector('#blockOverlayMod'); const keystrokesMod = menu.querySelector('#keystrokesMod'); const rainbowCursorMod = menu.querySelector('#rainbowCursorMod'); const modUIs = { fps: fpsUI, cps: cpsUI, texturePacks: textureUI, menuTheme: menuThemeUI, arrayList: arrayListUI, rgb: null, particleEffects: particleEffectsUI, glowEffect: glowEffectUI, pulseEffect: pulseEffectUI, colorShift: colorShiftUI, sparkleEffect: sparkleEffectUI, hitMarkers: hitMarkersUI, rangeIndicator: rangeIndicatorUI, smoothCrosshair: smoothCrosshairUI, fpsBooster: fpsBoosterUI, swingAnimation: swingAnimationUI, ping: pingUI, coords: coordsUI, blockOverlay: blockOverlayUI, keystrokes: keystrokesUI, rainbowCursor: rainbowCursorUI }; fpsMod.addEventListener('change', () => { modUIs.fps.style.display = fpsMod.checked ? 'block' : 'none'; if (fpsMod.checked) requestAnimationFrame(updateFPS); updateArrayList(); }); cpsMod.addEventListener('change', () => { modUIs.cps.style.display = cpsMod.checked ? 'block' : 'none'; updateArrayList(); }); texturePacksMod.addEventListener('change', () => { modUIs.texturePacks.style.display = texturePacksMod.checked ? 'block' : 'none'; updateArrayList(); }); menuThemeMod.addEventListener('change', () => { modUIs.menuTheme.style.display = menuThemeMod.checked ? 'block' : 'none'; updateArrayList(); }); arrayListMod.addEventListener('change', () => { modUIs.arrayList.style.display = arrayListMod.checked ? 'block' : 'none'; updateArrayList(); }); rgbMod.addEventListener('change', () => { toggleRGB(rgbMod.checked); updateArrayList(); }); particleEffectsMod.addEventListener('change', () => { modUIs.particleEffects.style.display = particleEffectsMod.checked ? 'block' : 'none'; if (particleEffectsMod.checked) { setInterval(() => spawnParticles(particleEffectsUI.querySelector('#particleDensity').value), 200); } updateArrayList(); }); glowEffectMod.addEventListener('change', () => { modUIs.glowEffect.style.display = glowEffectMod.checked ? 'block' : 'none'; toggleGlowEffect(glowEffectMod.checked); updateArrayList(); }); pulseEffectMod.addEventListener('change', () => { modUIs.pulseEffect.style.display = pulseEffectMod.checked ? 'block' : 'none'; togglePulseEffect(pulseEffectMod.checked); updateArrayList(); }); colorShiftMod.addEventListener('change', () => { modUIs.colorShift.style.display = colorShiftMod.checked ? 'block' : 'none'; toggleColorShift(colorShiftMod.checked); updateArrayList(); }); sparkleEffectMod.addEventListener('change', () => { modUIs.sparkleEffect.style.display = sparkleEffectMod.checked ? 'block' : 'none'; if (sparkleEffectMod.checked) setInterval(spawnSparkles, 300); updateArrayList(); }); hitMarkersMod.addEventListener('change', () => { modUIs.hitMarkers.style.display = hitMarkersMod.checked ? 'block' : 'none'; updateArrayList(); }); rangeIndicatorMod.addEventListener('change', () => { modUIs.rangeIndicator.style.display = rangeIndicatorMod.checked ? 'block' : 'none'; rangeCircle.style.display = rangeIndicatorMod.checked ? 'block' : 'none'; updateArrayList(); }); smoothCrosshairMod.addEventListener('change', () => { modUIs.smoothCrosshair.style.display = smoothCrosshairMod.checked ? 'block' : 'none'; crosshair.style.display = smoothCrosshairMod.checked ? 'block' : 'none'; updateArrayList(); }); fpsBoosterMod.addEventListener('change', () => { modUIs.fpsBooster.style.display = fpsBoosterMod.checked ? 'block' : 'none'; toggleFPSBooster(fpsBoosterMod.checked); updateArrayList(); }); swingAnimationMod.addEventListener('change', () => { modUIs.swingAnimation.style.display = swingAnimationMod.checked ? 'block' : 'none'; updateArrayList(); }); pingMod.addEventListener('change', () => { modUIs.ping.style.display = pingMod.checked ? 'block' : 'none'; if (pingMod.checked) setInterval(updatePing, 5000); updateArrayList(); }); coordsMod.addEventListener('change', () => { modUIs.coords.style.display = coordsMod.checked ? 'block' : 'none'; updateArrayList(); }); blockOverlayMod.addEventListener('change', () => { modUIs.blockOverlay.style.display = blockOverlayMod.checked ? 'block' : 'none'; toggleBlockOverlay(blockOverlayMod.checked); updateArrayList(); }); keystrokesMod.addEventListener('change', () => { modUIs.keystrokes.style.display = keystrokesMod.checked ? 'block' : 'none'; updateArrayList(); }); rainbowCursorMod.addEventListener('change', () => { modUIs.rainbowCursor.style.display = rainbowCursorMod.checked ? 'block' : 'none'; rainbowCursor.style.display = rainbowCursorMod.checked ? 'block' : 'none'; updateArrayList(); }); const rgbModElements = [menu, textureUI, fpsUI, cpsUI, menuThemeUI, arrayListUI, particleEffectsUI, hitMarkersUI, rangeIndicatorUI, smoothCrosshairUI, fpsBoosterUI, glowEffectUI, pulseEffectUI, colorShiftUI, sparkleEffectUI, swingAnimationUI, pingUI, coordsUI, blockOverlayUI, keystrokesUI, rainbowCursorUI]; function toggleRGB(on) { rgbModElements.forEach(el => { if (on) el.classList.add('rgb-border'); else el.classList.remove('rgb-border'); }); } const textElement = document.createElement('span'); const data = atob('YnkgZml6eml4d3c='); textElement.textContent = data; textElement.style.position = 'absolute'; textElement.style.top = '0'; textElement.style.left = '80px'; textElement.style.zIndex = '9999'; textElement.style.color = 'rgba(0, 0, 0, 0.05)'; document.body.appendChild(textElement); })();