Greasy Fork

Greasy Fork is available in English.

jeb_

Changes avatar appearance based on Minecraft Easter eggs.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         jeb_
// @namespace    http://tampermonkey.net/
// @version      1.5
// @description  Changes avatar appearance based on Minecraft Easter eggs.
// @author       Alpha
// @match        https://skribbl.io/*
// @grant        none
// @icon         https://imgur.com/rVFiCSD.gif
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    const colorSteps = 8;
    const cycleSpeedMs = 250;
    const lookupIntervalMs = 500;

    let cycleInterval = null;
    let currentStep = 0;

    function cleanName(rawName) {
        return rawName.replace(' (You)', '').trim();
    }

    function applyEffectsToAllPlayers() {
        const playerNameElems = document.querySelectorAll('.player-name');

        playerNameElems.forEach(playerNameElem => {
            const rawName = playerNameElem.textContent.trim();
            const name = cleanName(rawName);

            const container = playerNameElem.closest('div.player');
            if (!container) return;

            const colorElem = container.querySelector('div.player-avatar-container > div > div.color');
            const specialElem = container.querySelector('div.player-avatar-container > div > div.special');
            const avatarContainer = container.querySelector('.player-avatar-container');

            if (name === 'jeb_' && colorElem) {
                const xPosition = -100 * currentStep;
                colorElem.style.backgroundPosition = `${xPosition}% 0%`;
                specialElem.style.display = `block`;
                specialElem.style.backgroundPosition = `-900% 0%`;
            }

            if ((name === 'Dinnerbone' || name === 'Grumm') && avatarContainer) {
                avatarContainer.style.transform = 'rotateX(180deg)';
                avatarContainer.style.top = '2px';
                container.style.zIndex = '999';
            }

            if (name === 'Toast' && specialElem) {
                specialElem.style.display = `block`;
                specialElem.style.backgroundPosition = `-800% 0%`;
            }
        });

        currentStep = (currentStep + 1) % colorSteps;
    }

    function startCycling() {
        if (!cycleInterval) {
            cycleInterval = setInterval(applyEffectsToAllPlayers, cycleSpeedMs);
        }
    }

    function waitForPlayers() {
        const check = setInterval(() => {
            if (document.querySelector('.player-name')) {
                startCycling();
                clearInterval(check);
            }
        }, lookupIntervalMs);
    }

    window.addEventListener('load', waitForPlayers);
})();