Repository files navigation

AddonPatcher

The addon patcher is a tool that patches your addons to be more compatible with new versions of Skript.

The following is a list of changes in Skript this tool fixes, along with the exceptions generated by incompatible addons:

  • Parallel Script Loading #3924:
    • java.lang.NoSuchFieldError: currentScript
    • java.lang.NoSuchFieldError: currentSections
    • java.lang.NoSuchFieldError: currentLoops
    • java.lang.NoSuchFieldError: hasDelayBefore
  • Structure API #4108
    • java.lang.NoSuchMethodError: 'ch.njol.skript.config.Config ch.njol.skript.lang.parser.ParserInstance.getCurrentScript()'
    • java.lang.NoSuchMethodError: 'java.io.File ch.njol.skript.lang.Trigger.getScript()'
    • java.lang.NoSuchMethodError: 'void ch.njol.skript.lang.Trigger.<init>(java.io.File, java.lang.String, ch.njol.skript.lang.SkriptEvent, java.util.List)'

Variants

The addon patcher has 3 variants: Replacer, Agent and Java:

Agent (Recommended)

The Agent variant is a plugin that, when installed on your server, automatically patches each addon class used.

This variant requires you to run the server with a JDK instead of JRE.

Replacer

The Replacer variant is a plugin that, when installed on your server, automatically patches all addons the moment you start the server. The Replacer variant will modify your addon.jar file for the addons that require patching.

This variant does not fully work on Paper 1.19+. It can be used on those Paper versions, but requires you to restart your server (twice) after initially installing AddonPatcher, and when installing new addons.

Java

The Java variant is not a plugin: it is a standalone Java program that you can run to modify your addon.jar files, with the command java -jar AddonPatcher.jar <addon.jar> in a terminal / command prompt window in the folder with both your addon and AddonPatcher .jar files. Alternatively, you can run java -jar AddonPatcher.jar <folder> in a folder with AddonPatcher.jar and the given folder, to patch all addons in the given folder.

Compiling

Two possible commands, depending on which variant you want (if you want Java, flip a coin):

  • gradlew clean agentJar
  • gradlew clean replacerJar

The current build script isn't great, so the clean task beforehand is very much recommended. PRs improving the build script would be greatly appreciated.

About

Patch addons to make them compatible with new Skript versions

Resources

Stars

6 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

AddonPatcher

The addon patcher is a tool that patches your addons to be more compatible with new versions of Skript.

The following is a list of changes in Skript this tool fixes, along with the exceptions generated by incompatible addons:

  • Parallel Script Loading #3924:
    • java.lang.NoSuchFieldError: currentScript
    • java.lang.NoSuchFieldError: currentSections
    • java.lang.NoSuchFieldError: currentLoops
    • java.lang.NoSuchFieldError: hasDelayBefore
  • Structure API #4108
    • java.lang.NoSuchMethodError: 'ch.njol.skript.config.Config ch.njol.skript.lang.parser.ParserInstance.getCurrentScript()'
    • java.lang.NoSuchMethodError: 'java.io.File ch.njol.skript.lang.Trigger.getScript()'
    • java.lang.NoSuchMethodError: 'void ch.njol.skript.lang.Trigger.<init>(java.io.File, java.lang.String, ch.njol.skript.lang.SkriptEvent, java.util.List)'

Variants

The addon patcher has 3 variants: Replacer, Agent and Java:

Agent (Recommended)

The Agent variant is a plugin that, when installed on your server, automatically patches each addon class used.

This variant requires you to run the server with a JDK instead of JRE.

Replacer

The Replacer variant is a plugin that, when installed on your server, automatically patches all addons the moment you start the server. The Replacer variant will modify your addon.jar file for the addons that require patching.

This variant does not fully work on Paper 1.19+. It can be used on those Paper versions, but requires you to restart your server (twice) after initially installing AddonPatcher, and when installing new addons.

Java

The Java variant is not a plugin: it is a standalone Java program that you can run to modify your addon.jar files, with the command java -jar AddonPatcher.jar <addon.jar> in a terminal / command prompt window in the folder with both your addon and AddonPatcher .jar files. Alternatively, you can run java -jar AddonPatcher.jar <folder> in a folder with AddonPatcher.jar and the given folder, to patch all addons in the given folder.

Compiling

Two possible commands, depending on which variant you want (if you want Java, flip a coin):

  • gradlew clean agentJar
  • gradlew clean replacerJar

The current build script isn't great, so the clean task beforehand is very much recommended. PRs improving the build script would be greatly appreciated.

About

Patch addons to make them compatible with new Skript versions

Resources

Stars

6 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

AddonPatcher

The addon patcher is a tool that patches your addons to be more compatible with new versions of Skript.

The following is a list of changes in Skript this tool fixes, along with the exceptions generated by incompatible addons:

  • Parallel Script Loading #3924:
    • java.lang.NoSuchFieldError: currentScript
    • java.lang.NoSuchFieldError: currentSections
    • java.lang.NoSuchFieldError: currentLoops
    • java.lang.NoSuchFieldError: hasDelayBefore
  • Structure API #4108
    • java.lang.NoSuchMethodError: 'ch.njol.skript.config.Config ch.njol.skript.lang.parser.ParserInstance.getCurrentScript()'
    • java.lang.NoSuchMethodError: 'java.io.File ch.njol.skript.lang.Trigger.getScript()'
    • java.lang.NoSuchMethodError: 'void ch.njol.skript.lang.Trigger.<init>(java.io.File, java.lang.String, ch.njol.skript.lang.SkriptEvent, java.util.List)'

Variants

The addon patcher has 3 variants: Replacer, Agent and Java:

Agent (Recommended)

The Agent variant is a plugin that, when installed on your server, automatically patches each addon class used.

This variant requires you to run the server with a JDK instead of JRE.

Replacer

The Replacer variant is a plugin that, when installed on your server, automatically patches all addons the moment you start the server. The Replacer variant will modify your addon.jar file for the addons that require patching.

This variant does not fully work on Paper 1.19+. It can be used on those Paper versions, but requires you to restart your server (twice) after initially installing AddonPatcher, and when installing new addons.

Java

The Java variant is not a plugin: it is a standalone Java program that you can run to modify your addon.jar files, with the command java -jar AddonPatcher.jar <addon.jar> in a terminal / command prompt window in the folder with both your addon and AddonPatcher .jar files. Alternatively, you can run java -jar AddonPatcher.jar <folder> in a folder with AddonPatcher.jar and the given folder, to patch all addons in the given folder.

Compiling

Two possible commands, depending on which variant you want (if you want Java, flip a coin):

  • gradlew clean agentJar
  • gradlew clean replacerJar

The current build script isn't great, so the clean task beforehand is very much recommended. PRs improving the build script would be greatly appreciated.

About

Patch addons to make them compatible with new Skript versions

Resources

Stars

6 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

AddonPatcher

The addon patcher is a tool that patches your addons to be more compatible with new versions of Skript.

The following is a list of changes in Skript this tool fixes, along with the exceptions generated by incompatible addons:

  • Parallel Script Loading #3924:
    • java.lang.NoSuchFieldError: currentScript
    • java.lang.NoSuchFieldError: currentSections
    • java.lang.NoSuchFieldError: currentLoops
    • java.lang.NoSuchFieldError: hasDelayBefore
  • Structure API #4108
    • java.lang.NoSuchMethodError: 'ch.njol.skript.config.Config ch.njol.skript.lang.parser.ParserInstance.getCurrentScript()'
    • java.lang.NoSuchMethodError: 'java.io.File ch.njol.skript.lang.Trigger.getScript()'
    • java.lang.NoSuchMethodError: 'void ch.njol.skript.lang.Trigger.<init>(java.io.File, java.lang.String, ch.njol.skript.lang.SkriptEvent, java.util.List)'

Variants

The addon patcher has 3 variants: Replacer, Agent and Java:

Agent (Recommended)

The Agent variant is a plugin that, when installed on your server, automatically patches each addon class used.

This variant requires you to run the server with a JDK instead of JRE.

Replacer

The Replacer variant is a plugin that, when installed on your server, automatically patches all addons the moment you start the server. The Replacer variant will modify your addon.jar file for the addons that require patching.

This variant does not fully work on Paper 1.19+. It can be used on those Paper versions, but requires you to restart your server (twice) after initially installing AddonPatcher, and when installing new addons.

Java

The Java variant is not a plugin: it is a standalone Java program that you can run to modify your addon.jar files, with the command java -jar AddonPatcher.jar <addon.jar> in a terminal / command prompt window in the folder with both your addon and AddonPatcher .jar files. Alternatively, you can run java -jar AddonPatcher.jar <folder> in a folder with AddonPatcher.jar and the given folder, to patch all addons in the given folder.

Compiling

Two possible commands, depending on which variant you want (if you want Java, flip a coin):

  • gradlew clean agentJar
  • gradlew clean replacerJar

The current build script isn't great, so the clean task beforehand is very much recommended. PRs improving the build script would be greatly appreciated.

About

Patch addons to make them compatible with new Skript versions

Resources

Stars

6 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

AddonPatcher

The addon patcher is a tool that patches your addons to be more compatible with new versions of Skript.

The following is a list of changes in Skript this tool fixes, along with the exceptions generated by incompatible addons:

  • Parallel Script Loading #3924:
    • java.lang.NoSuchFieldError: currentScript
    • java.lang.NoSuchFieldError: currentSections
    • java.lang.NoSuchFieldError: currentLoops
    • java.lang.NoSuchFieldError: hasDelayBefore
  • Structure API #4108
    • java.lang.NoSuchMethodError: 'ch.njol.skript.config.Config ch.njol.skript.lang.parser.ParserInstance.getCurrentScript()'
    • java.lang.NoSuchMethodError: 'java.io.File ch.njol.skript.lang.Trigger.getScript()'
    • java.lang.NoSuchMethodError: 'void ch.njol.skript.lang.Trigger.<init>(java.io.File, java.lang.String, ch.njol.skript.lang.SkriptEvent, java.util.List)'

Variants

The addon patcher has 3 variants: Replacer, Agent and Java:

Agent (Recommended)

The Agent variant is a plugin that, when installed on your server, automatically patches each addon class used.

This variant requires you to run the server with a JDK instead of JRE.

Replacer

The Replacer variant is a plugin that, when installed on your server, automatically patches all addons the moment you start the server. The Replacer variant will modify your addon.jar file for the addons that require patching.

This variant does not fully work on Paper 1.19+. It can be used on those Paper versions, but requires you to restart your server (twice) after initially installing AddonPatcher, and when installing new addons.

Java

The Java variant is not a plugin: it is a standalone Java program that you can run to modify your addon.jar files, with the command java -jar AddonPatcher.jar <addon.jar> in a terminal / command prompt window in the folder with both your addon and AddonPatcher .jar files. Alternatively, you can run java -jar AddonPatcher.jar <folder> in a folder with AddonPatcher.jar and the given folder, to patch all addons in the given folder.

Compiling

Two possible commands, depending on which variant you want (if you want Java, flip a coin):

  • gradlew clean agentJar
  • gradlew clean replacerJar

The current build script isn't great, so the clean task beforehand is very much recommended. PRs improving the build script would be greatly appreciated.

About

Patch addons to make them compatible with new Skript versions

Resources

Stars

6 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

AddonPatcher

The addon patcher is a tool that patches your addons to be more compatible with new versions of Skript.

The following is a list of changes in Skript this tool fixes, along with the exceptions generated by incompatible addons:

  • Parallel Script Loading #3924:
    • java.lang.NoSuchFieldError: currentScript
    • java.lang.NoSuchFieldError: currentSections
    • java.lang.NoSuchFieldError: currentLoops
    • java.lang.NoSuchFieldError: hasDelayBefore
  • Structure API #4108
    • java.lang.NoSuchMethodError: 'ch.njol.skript.config.Config ch.njol.skript.lang.parser.ParserInstance.getCurrentScript()'
    • java.lang.NoSuchMethodError: 'java.io.File ch.njol.skript.lang.Trigger.getScript()'
    • java.lang.NoSuchMethodError: 'void ch.njol.skript.lang.Trigger.<init>(java.io.File, java.lang.String, ch.njol.skript.lang.SkriptEvent, java.util.List)'

Variants

The addon patcher has 3 variants: Replacer, Agent and Java:

Agent (Recommended)

The Agent variant is a plugin that, when installed on your server, automatically patches each addon class used.

This variant requires you to run the server with a JDK instead of JRE.

Replacer

The Replacer variant is a plugin that, when installed on your server, automatically patches all addons the moment you start the server. The Replacer variant will modify your addon.jar file for the addons that require patching.

This variant does not fully work on Paper 1.19+. It can be used on those Paper versions, but requires you to restart your server (twice) after initially installing AddonPatcher, and when installing new addons.

Java

The Java variant is not a plugin: it is a standalone Java program that you can run to modify your addon.jar files, with the command java -jar AddonPatcher.jar <addon.jar> in a terminal / command prompt window in the folder with both your addon and AddonPatcher .jar files. Alternatively, you can run java -jar AddonPatcher.jar <folder> in a folder with AddonPatcher.jar and the given folder, to patch all addons in the given folder.

Compiling

Two possible commands, depending on which variant you want (if you want Java, flip a coin):

  • gradlew clean agentJar
  • gradlew clean replacerJar

The current build script isn't great, so the clean task beforehand is very much recommended. PRs improving the build script would be greatly appreciated.

About

Patch addons to make them compatible with new Skript versions

Resources

Stars

6 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

AddonPatcher

The addon patcher is a tool that patches your addons to be more compatible with new versions of Skript.

The following is a list of changes in Skript this tool fixes, along with the exceptions generated by incompatible addons:

  • Parallel Script Loading #3924:
    • java.lang.NoSuchFieldError: currentScript
    • java.lang.NoSuchFieldError: currentSections
    • java.lang.NoSuchFieldError: currentLoops
    • java.lang.NoSuchFieldError: hasDelayBefore
  • Structure API #4108
    • java.lang.NoSuchMethodError: 'ch.njol.skript.config.Config ch.njol.skript.lang.parser.ParserInstance.getCurrentScript()'
    • java.lang.NoSuchMethodError: 'java.io.File ch.njol.skript.lang.Trigger.getScript()'
    • java.lang.NoSuchMethodError: 'void ch.njol.skript.lang.Trigger.<init>(java.io.File, java.lang.String, ch.njol.skript.lang.SkriptEvent, java.util.List)'

Variants

The addon patcher has 3 variants: Replacer, Agent and Java:

Agent (Recommended)

The Agent variant is a plugin that, when installed on your server, automatically patches each addon class used.

This variant requires you to run the server with a JDK instead of JRE.

Replacer

The Replacer variant is a plugin that, when installed on your server, automatically patches all addons the moment you start the server. The Replacer variant will modify your addon.jar file for the addons that require patching.

This variant does not fully work on Paper 1.19+. It can be used on those Paper versions, but requires you to restart your server (twice) after initially installing AddonPatcher, and when installing new addons.

Java

The Java variant is not a plugin: it is a standalone Java program that you can run to modify your addon.jar files, with the command java -jar AddonPatcher.jar <addon.jar> in a terminal / command prompt window in the folder with both your addon and AddonPatcher .jar files. Alternatively, you can run java -jar AddonPatcher.jar <folder> in a folder with AddonPatcher.jar and the given folder, to patch all addons in the given folder.

Compiling

Two possible commands, depending on which variant you want (if you want Java, flip a coin):

  • gradlew clean agentJar
  • gradlew clean replacerJar

The current build script isn't great, so the clean task beforehand is very much recommended. PRs improving the build script would be greatly appreciated.

About

Patch addons to make them compatible with new Skript versions

Resources

Stars

6 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

AddonPatcher

The addon patcher is a tool that patches your addons to be more compatible with new versions of Skript.

The following is a list of changes in Skript this tool fixes, along with the exceptions generated by incompatible addons:

  • Parallel Script Loading #3924:
    • java.lang.NoSuchFieldError: currentScript
    • java.lang.NoSuchFieldError: currentSections
    • java.lang.NoSuchFieldError: currentLoops
    • java.lang.NoSuchFieldError: hasDelayBefore
  • Structure API #4108
    • java.lang.NoSuchMethodError: 'ch.njol.skript.config.Config ch.njol.skript.lang.parser.ParserInstance.getCurrentScript()'
    • java.lang.NoSuchMethodError: 'java.io.File ch.njol.skript.lang.Trigger.getScript()'
    • java.lang.NoSuchMethodError: 'void ch.njol.skript.lang.Trigger.<init>(java.io.File, java.lang.String, ch.njol.skript.lang.SkriptEvent, java.util.List)'

Variants

The addon patcher has 3 variants: Replacer, Agent and Java:

Agent (Recommended)

The Agent variant is a plugin that, when installed on your server, automatically patches each addon class used.

This variant requires you to run the server with a JDK instead of JRE.

Replacer

The Replacer variant is a plugin that, when installed on your server, automatically patches all addons the moment you start the server. The Replacer variant will modify your addon.jar file for the addons that require patching.

This variant does not fully work on Paper 1.19+. It can be used on those Paper versions, but requires you to restart your server (twice) after initially installing AddonPatcher, and when installing new addons.

Java

The Java variant is not a plugin: it is a standalone Java program that you can run to modify your addon.jar files, with the command java -jar AddonPatcher.jar <addon.jar> in a terminal / command prompt window in the folder with both your addon and AddonPatcher .jar files. Alternatively, you can run java -jar AddonPatcher.jar <folder> in a folder with AddonPatcher.jar and the given folder, to patch all addons in the given folder.

Compiling

Two possible commands, depending on which variant you want (if you want Java, flip a coin):

  • gradlew clean agentJar
  • gradlew clean replacerJar

The current build script isn't great, so the clean task beforehand is very much recommended. PRs improving the build script would be greatly appreciated.

About

Patch addons to make them compatible with new Skript versions

Resources

Stars

6 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages