This repository was archived by the owner on Aug 12, 2025. It is now read-only.

Dev - #12

Merged
mzcydev merged 18 commits into
masterfrom
dev
Jul 23, 2025
Merged

Dev#12
mzcydev merged 18 commits into
masterfrom
dev

Conversation

@mzcydev

Copy link
Copy Markdown
Member

No description provided.

mzcydev added 18 commits July 22, 2025 15:22
…s and implement a standalone, thread-safe scheduling system
…anager, DebugPrinter, DebugScope, and Tracer classes
CopilotAI review requested due to automatic review settings July 23, 2025 10:59
@mzcydev
mzcydev merged commit 5fde67e into masterJul 23, 2025
1 check failed

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a comprehensive "dev" environment with significant additions to the plugin framework, including new UI systems, database management, performance monitoring, and plugin integrations. The changes primarily focus on adding modern development tooling and architectural patterns to the existing NextForge framework.

Key changes include:

  • Complete UI system with inventory management, layouts, and support components
  • Performance monitoring and profiling infrastructure
  • Database abstraction layer with support for multiple database types (SQL, MongoDB, Redis)
  • Plugin bridge system for third-party integrations (Vault, PlaceholderAPI, LuckPerms)

Reviewed Changes

Copilot reviewed 92 out of 94 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
plugin.ymlAdded Vault as soft dependency
ChatPagination.javaRemoved legacy chat pagination utility
NextForgePlugin.javaIntegrated new UI and database managers, performance monitoring
Multiple UI filesComplete UI framework with components, layouts, inventory management
Multiple database filesDatabase abstraction layer with repository patterns
Multiple performance filesPerformance monitoring and profiling system
Multiple bridge filesPlugin integration framework
Comments suppressed due to low confidence (2)

src/main/java/gg/nextforge/performance/TickListener.java:1

  • The package declaration 'gg.nextforge.performance.listener' does not match the file location. The file is in 'src/main/java/gg/nextforge/performance/' but the package suggests it should be in a 'listener' subdirectory.
package gg.nextforge.performance.listener;

src/main/java/gg/nextforge/bridge/impl/LuckPermsBridge.java:1

  • The package declaration should be 'gg.nextforge.bridge.impl' to match the file location, not 'gg.nextforge.bridge'.
package gg.nextforge.bridge;

Comment on lines +49 to +52
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Calling unregister(this) on the handler list will not work as expected because 'this' refers to the anonymous listener, not a registered handler. This could cause memory leaks as the event handler may not be properly unregistered.

Suggested change
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);
InventoryCloseEvent.getHandlerList().unregister(listener);
}
}
};
Bukkit.getPluginManager().registerEvents(listener, plugin);

Copilot uses AI. Check for mistakes.
Comment on lines +43 to +47
@org.bukkit.event.EventHandler
public void onSwitch(PlayerItemHeldEvent event) {
// Optional: clear hotbar on slot switch if desired
}

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The onSwitch method is empty and only contains a comment. Consider either implementing the functionality or removing the empty method to reduce code clutter.

Suggested change
@org.bukkit.event.EventHandler
publicvoidonSwitch(PlayerItemHeldEventevent) {
// Optional: clear hotbar on slot switch if desired
}

Copilot uses AI. Check for mistakes.
sqlConnection = DriverManager.getConnection(connectionString);
break;
case MONGODB:
String uri = (connectionString);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The parentheses around 'connectionString' are unnecessary and should be removed for cleaner code.

Suggested change
Stringuri = (connectionString);
Stringuri = connectionString;

Copilot uses AI. Check for mistakes.
@@ -0,0 +1,27 @@
package gg.nextforge.performance;

import gg.nextforge.performance.listener.TickListener;

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The import path 'gg.nextforge.performance.listener.TickListener' is incorrect. Based on the file structure, it should be 'gg.nextforge.performance.TickListener' since TickListener.java is directly in the performance package.

Suggested change
importgg.nextforge.performance.listener.TickListener;
importgg.nextforge.performance.TickListener;

Copilot uses AI. Check for mistakes.
activeTasks.put(id, scheduled);
return scheduled;
private long ticksToMillis(long ticks) {
return ticks * 50L; // 20 ticks = 1 second

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The conversion factor should be a named constant instead of a magic number. Consider defining 'private static final long MILLIS_PER_TICK = 50L;' for better maintainability.

Suggested change
returnticks * 50L; // 20 ticks = 1 second
returnticks * MILLIS_PER_TICK; // 20 ticks = 1 second

Copilot uses AI. Check for mistakes.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mzcydev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} 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
This repository was archived by the owner on Aug 12, 2025. It is now read-only.

Dev - #12

Merged
mzcydev merged 18 commits into
masterfrom
dev
Jul 23, 2025
Merged

Dev#12
mzcydev merged 18 commits into
masterfrom
dev

Conversation

@mzcydev

Copy link
Copy Markdown
Member

No description provided.

mzcydev added 18 commits July 22, 2025 15:22
…s and implement a standalone, thread-safe scheduling system
…anager, DebugPrinter, DebugScope, and Tracer classes
CopilotAI review requested due to automatic review settings July 23, 2025 10:59
@mzcydev
mzcydev merged commit 5fde67e into masterJul 23, 2025
1 check failed

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a comprehensive "dev" environment with significant additions to the plugin framework, including new UI systems, database management, performance monitoring, and plugin integrations. The changes primarily focus on adding modern development tooling and architectural patterns to the existing NextForge framework.

Key changes include:

  • Complete UI system with inventory management, layouts, and support components
  • Performance monitoring and profiling infrastructure
  • Database abstraction layer with support for multiple database types (SQL, MongoDB, Redis)
  • Plugin bridge system for third-party integrations (Vault, PlaceholderAPI, LuckPerms)

Reviewed Changes

Copilot reviewed 92 out of 94 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
plugin.ymlAdded Vault as soft dependency
ChatPagination.javaRemoved legacy chat pagination utility
NextForgePlugin.javaIntegrated new UI and database managers, performance monitoring
Multiple UI filesComplete UI framework with components, layouts, inventory management
Multiple database filesDatabase abstraction layer with repository patterns
Multiple performance filesPerformance monitoring and profiling system
Multiple bridge filesPlugin integration framework
Comments suppressed due to low confidence (2)

src/main/java/gg/nextforge/performance/TickListener.java:1

  • The package declaration 'gg.nextforge.performance.listener' does not match the file location. The file is in 'src/main/java/gg/nextforge/performance/' but the package suggests it should be in a 'listener' subdirectory.
package gg.nextforge.performance.listener;

src/main/java/gg/nextforge/bridge/impl/LuckPermsBridge.java:1

  • The package declaration should be 'gg.nextforge.bridge.impl' to match the file location, not 'gg.nextforge.bridge'.
package gg.nextforge.bridge;

Comment on lines +49 to +52
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Calling unregister(this) on the handler list will not work as expected because 'this' refers to the anonymous listener, not a registered handler. This could cause memory leaks as the event handler may not be properly unregistered.

Suggested change
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);
InventoryCloseEvent.getHandlerList().unregister(listener);
}
}
};
Bukkit.getPluginManager().registerEvents(listener, plugin);

Copilot uses AI. Check for mistakes.
Comment on lines +43 to +47
@org.bukkit.event.EventHandler
public void onSwitch(PlayerItemHeldEvent event) {
// Optional: clear hotbar on slot switch if desired
}

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The onSwitch method is empty and only contains a comment. Consider either implementing the functionality or removing the empty method to reduce code clutter.

Suggested change
@org.bukkit.event.EventHandler
publicvoidonSwitch(PlayerItemHeldEventevent) {
// Optional: clear hotbar on slot switch if desired
}

Copilot uses AI. Check for mistakes.
sqlConnection = DriverManager.getConnection(connectionString);
break;
case MONGODB:
String uri = (connectionString);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The parentheses around 'connectionString' are unnecessary and should be removed for cleaner code.

Suggested change
Stringuri = (connectionString);
Stringuri = connectionString;

Copilot uses AI. Check for mistakes.
@@ -0,0 +1,27 @@
package gg.nextforge.performance;

import gg.nextforge.performance.listener.TickListener;

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The import path 'gg.nextforge.performance.listener.TickListener' is incorrect. Based on the file structure, it should be 'gg.nextforge.performance.TickListener' since TickListener.java is directly in the performance package.

Suggested change
importgg.nextforge.performance.listener.TickListener;
importgg.nextforge.performance.TickListener;

Copilot uses AI. Check for mistakes.
activeTasks.put(id, scheduled);
return scheduled;
private long ticksToMillis(long ticks) {
return ticks * 50L; // 20 ticks = 1 second

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The conversion factor should be a named constant instead of a magic number. Consider defining 'private static final long MILLIS_PER_TICK = 50L;' for better maintainability.

Suggested change
returnticks * 50L; // 20 ticks = 1 second
returnticks * MILLIS_PER_TICK; // 20 ticks = 1 second

Copilot uses AI. Check for mistakes.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

Dev - #12

Merged
mzcydev merged 18 commits into
masterfrom
dev
Jul 23, 2025
Merged

Dev#12
mzcydev merged 18 commits into
masterfrom
dev

Conversation

@mzcydev

Copy link
Copy Markdown
Member

No description provided.

mzcydev added 18 commits July 22, 2025 15:22
…s and implement a standalone, thread-safe scheduling system
…anager, DebugPrinter, DebugScope, and Tracer classes
CopilotAI review requested due to automatic review settings July 23, 2025 10:59
@mzcydev
mzcydev merged commit 5fde67e into masterJul 23, 2025
1 check failed

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a comprehensive "dev" environment with significant additions to the plugin framework, including new UI systems, database management, performance monitoring, and plugin integrations. The changes primarily focus on adding modern development tooling and architectural patterns to the existing NextForge framework.

Key changes include:

  • Complete UI system with inventory management, layouts, and support components
  • Performance monitoring and profiling infrastructure
  • Database abstraction layer with support for multiple database types (SQL, MongoDB, Redis)
  • Plugin bridge system for third-party integrations (Vault, PlaceholderAPI, LuckPerms)

Reviewed Changes

Copilot reviewed 92 out of 94 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
plugin.ymlAdded Vault as soft dependency
ChatPagination.javaRemoved legacy chat pagination utility
NextForgePlugin.javaIntegrated new UI and database managers, performance monitoring
Multiple UI filesComplete UI framework with components, layouts, inventory management
Multiple database filesDatabase abstraction layer with repository patterns
Multiple performance filesPerformance monitoring and profiling system
Multiple bridge filesPlugin integration framework
Comments suppressed due to low confidence (2)

src/main/java/gg/nextforge/performance/TickListener.java:1

  • The package declaration 'gg.nextforge.performance.listener' does not match the file location. The file is in 'src/main/java/gg/nextforge/performance/' but the package suggests it should be in a 'listener' subdirectory.
package gg.nextforge.performance.listener;

src/main/java/gg/nextforge/bridge/impl/LuckPermsBridge.java:1

  • The package declaration should be 'gg.nextforge.bridge.impl' to match the file location, not 'gg.nextforge.bridge'.
package gg.nextforge.bridge;

Comment on lines +49 to +52
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Calling unregister(this) on the handler list will not work as expected because 'this' refers to the anonymous listener, not a registered handler. This could cause memory leaks as the event handler may not be properly unregistered.

Suggested change
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);
InventoryCloseEvent.getHandlerList().unregister(listener);
}
}
};
Bukkit.getPluginManager().registerEvents(listener, plugin);

Copilot uses AI. Check for mistakes.
Comment on lines +43 to +47
@org.bukkit.event.EventHandler
public void onSwitch(PlayerItemHeldEvent event) {
// Optional: clear hotbar on slot switch if desired
}

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The onSwitch method is empty and only contains a comment. Consider either implementing the functionality or removing the empty method to reduce code clutter.

Suggested change
@org.bukkit.event.EventHandler
publicvoidonSwitch(PlayerItemHeldEventevent) {
// Optional: clear hotbar on slot switch if desired
}

Copilot uses AI. Check for mistakes.
sqlConnection = DriverManager.getConnection(connectionString);
break;
case MONGODB:
String uri = (connectionString);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The parentheses around 'connectionString' are unnecessary and should be removed for cleaner code.

Suggested change
Stringuri = (connectionString);
Stringuri = connectionString;

Copilot uses AI. Check for mistakes.
@@ -0,0 +1,27 @@
package gg.nextforge.performance;

import gg.nextforge.performance.listener.TickListener;

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The import path 'gg.nextforge.performance.listener.TickListener' is incorrect. Based on the file structure, it should be 'gg.nextforge.performance.TickListener' since TickListener.java is directly in the performance package.

Suggested change
importgg.nextforge.performance.listener.TickListener;
importgg.nextforge.performance.TickListener;

Copilot uses AI. Check for mistakes.
activeTasks.put(id, scheduled);
return scheduled;
private long ticksToMillis(long ticks) {
return ticks * 50L; // 20 ticks = 1 second

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The conversion factor should be a named constant instead of a magic number. Consider defining 'private static final long MILLIS_PER_TICK = 50L;' for better maintainability.

Suggested change
returnticks * 50L; // 20 ticks = 1 second
returnticks * MILLIS_PER_TICK; // 20 ticks = 1 second

Copilot uses AI. Check for mistakes.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

Dev - #12

Merged
mzcydev merged 18 commits into
masterfrom
dev
Jul 23, 2025
Merged

Dev#12
mzcydev merged 18 commits into
masterfrom
dev

Conversation

@mzcydev

Copy link
Copy Markdown
Member

No description provided.

mzcydev added 18 commits July 22, 2025 15:22
…s and implement a standalone, thread-safe scheduling system
…anager, DebugPrinter, DebugScope, and Tracer classes
CopilotAI review requested due to automatic review settings July 23, 2025 10:59
@mzcydev
mzcydev merged commit 5fde67e into masterJul 23, 2025
1 check failed

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a comprehensive "dev" environment with significant additions to the plugin framework, including new UI systems, database management, performance monitoring, and plugin integrations. The changes primarily focus on adding modern development tooling and architectural patterns to the existing NextForge framework.

Key changes include:

  • Complete UI system with inventory management, layouts, and support components
  • Performance monitoring and profiling infrastructure
  • Database abstraction layer with support for multiple database types (SQL, MongoDB, Redis)
  • Plugin bridge system for third-party integrations (Vault, PlaceholderAPI, LuckPerms)

Reviewed Changes

Copilot reviewed 92 out of 94 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
plugin.ymlAdded Vault as soft dependency
ChatPagination.javaRemoved legacy chat pagination utility
NextForgePlugin.javaIntegrated new UI and database managers, performance monitoring
Multiple UI filesComplete UI framework with components, layouts, inventory management
Multiple database filesDatabase abstraction layer with repository patterns
Multiple performance filesPerformance monitoring and profiling system
Multiple bridge filesPlugin integration framework
Comments suppressed due to low confidence (2)

src/main/java/gg/nextforge/performance/TickListener.java:1

  • The package declaration 'gg.nextforge.performance.listener' does not match the file location. The file is in 'src/main/java/gg/nextforge/performance/' but the package suggests it should be in a 'listener' subdirectory.
package gg.nextforge.performance.listener;

src/main/java/gg/nextforge/bridge/impl/LuckPermsBridge.java:1

  • The package declaration should be 'gg.nextforge.bridge.impl' to match the file location, not 'gg.nextforge.bridge'.
package gg.nextforge.bridge;

Comment on lines +49 to +52
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Calling unregister(this) on the handler list will not work as expected because 'this' refers to the anonymous listener, not a registered handler. This could cause memory leaks as the event handler may not be properly unregistered.

Suggested change
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);
InventoryCloseEvent.getHandlerList().unregister(listener);
}
}
};
Bukkit.getPluginManager().registerEvents(listener, plugin);

Copilot uses AI. Check for mistakes.
Comment on lines +43 to +47
@org.bukkit.event.EventHandler
public void onSwitch(PlayerItemHeldEvent event) {
// Optional: clear hotbar on slot switch if desired
}

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The onSwitch method is empty and only contains a comment. Consider either implementing the functionality or removing the empty method to reduce code clutter.

Suggested change
@org.bukkit.event.EventHandler
publicvoidonSwitch(PlayerItemHeldEventevent) {
// Optional: clear hotbar on slot switch if desired
}

Copilot uses AI. Check for mistakes.
sqlConnection = DriverManager.getConnection(connectionString);
break;
case MONGODB:
String uri = (connectionString);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The parentheses around 'connectionString' are unnecessary and should be removed for cleaner code.

Suggested change
Stringuri = (connectionString);
Stringuri = connectionString;

Copilot uses AI. Check for mistakes.
@@ -0,0 +1,27 @@
package gg.nextforge.performance;

import gg.nextforge.performance.listener.TickListener;

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The import path 'gg.nextforge.performance.listener.TickListener' is incorrect. Based on the file structure, it should be 'gg.nextforge.performance.TickListener' since TickListener.java is directly in the performance package.

Suggested change
importgg.nextforge.performance.listener.TickListener;
importgg.nextforge.performance.TickListener;

Copilot uses AI. Check for mistakes.
activeTasks.put(id, scheduled);
return scheduled;
private long ticksToMillis(long ticks) {
return ticks * 50L; // 20 ticks = 1 second

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The conversion factor should be a named constant instead of a magic number. Consider defining 'private static final long MILLIS_PER_TICK = 50L;' for better maintainability.

Suggested change
returnticks * 50L; // 20 ticks = 1 second
returnticks * MILLIS_PER_TICK; // 20 ticks = 1 second

Copilot uses AI. Check for mistakes.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mzcydev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } 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
This repository was archived by the owner on Aug 12, 2025. It is now read-only.

Dev - #12

Merged
mzcydev merged 18 commits into
masterfrom
dev
Jul 23, 2025
Merged

Dev#12
mzcydev merged 18 commits into
masterfrom
dev

Conversation

@mzcydev

Copy link
Copy Markdown
Member

No description provided.

mzcydev added 18 commits July 22, 2025 15:22
…s and implement a standalone, thread-safe scheduling system
…anager, DebugPrinter, DebugScope, and Tracer classes
CopilotAI review requested due to automatic review settings July 23, 2025 10:59
@mzcydev
mzcydev merged commit 5fde67e into masterJul 23, 2025
1 check failed

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a comprehensive "dev" environment with significant additions to the plugin framework, including new UI systems, database management, performance monitoring, and plugin integrations. The changes primarily focus on adding modern development tooling and architectural patterns to the existing NextForge framework.

Key changes include:

  • Complete UI system with inventory management, layouts, and support components
  • Performance monitoring and profiling infrastructure
  • Database abstraction layer with support for multiple database types (SQL, MongoDB, Redis)
  • Plugin bridge system for third-party integrations (Vault, PlaceholderAPI, LuckPerms)

Reviewed Changes

Copilot reviewed 92 out of 94 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
plugin.ymlAdded Vault as soft dependency
ChatPagination.javaRemoved legacy chat pagination utility
NextForgePlugin.javaIntegrated new UI and database managers, performance monitoring
Multiple UI filesComplete UI framework with components, layouts, inventory management
Multiple database filesDatabase abstraction layer with repository patterns
Multiple performance filesPerformance monitoring and profiling system
Multiple bridge filesPlugin integration framework
Comments suppressed due to low confidence (2)

src/main/java/gg/nextforge/performance/TickListener.java:1

  • The package declaration 'gg.nextforge.performance.listener' does not match the file location. The file is in 'src/main/java/gg/nextforge/performance/' but the package suggests it should be in a 'listener' subdirectory.
package gg.nextforge.performance.listener;

src/main/java/gg/nextforge/bridge/impl/LuckPermsBridge.java:1

  • The package declaration should be 'gg.nextforge.bridge.impl' to match the file location, not 'gg.nextforge.bridge'.
package gg.nextforge.bridge;

Comment on lines +49 to +52
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Calling unregister(this) on the handler list will not work as expected because 'this' refers to the anonymous listener, not a registered handler. This could cause memory leaks as the event handler may not be properly unregistered.

Suggested change
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);
InventoryCloseEvent.getHandlerList().unregister(listener);
}
}
};
Bukkit.getPluginManager().registerEvents(listener, plugin);

Copilot uses AI. Check for mistakes.
Comment on lines +43 to +47
@org.bukkit.event.EventHandler
public void onSwitch(PlayerItemHeldEvent event) {
// Optional: clear hotbar on slot switch if desired
}

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The onSwitch method is empty and only contains a comment. Consider either implementing the functionality or removing the empty method to reduce code clutter.

Suggested change
@org.bukkit.event.EventHandler
publicvoidonSwitch(PlayerItemHeldEventevent) {
// Optional: clear hotbar on slot switch if desired
}

Copilot uses AI. Check for mistakes.
sqlConnection = DriverManager.getConnection(connectionString);
break;
case MONGODB:
String uri = (connectionString);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The parentheses around 'connectionString' are unnecessary and should be removed for cleaner code.

Suggested change
Stringuri = (connectionString);
Stringuri = connectionString;

Copilot uses AI. Check for mistakes.
@@ -0,0 +1,27 @@
package gg.nextforge.performance;

import gg.nextforge.performance.listener.TickListener;

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The import path 'gg.nextforge.performance.listener.TickListener' is incorrect. Based on the file structure, it should be 'gg.nextforge.performance.TickListener' since TickListener.java is directly in the performance package.

Suggested change
importgg.nextforge.performance.listener.TickListener;
importgg.nextforge.performance.TickListener;

Copilot uses AI. Check for mistakes.
activeTasks.put(id, scheduled);
return scheduled;
private long ticksToMillis(long ticks) {
return ticks * 50L; // 20 ticks = 1 second

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The conversion factor should be a named constant instead of a magic number. Consider defining 'private static final long MILLIS_PER_TICK = 50L;' for better maintainability.

Suggested change
returnticks * 50L; // 20 ticks = 1 second
returnticks * MILLIS_PER_TICK; // 20 ticks = 1 second

Copilot uses AI. Check for mistakes.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

Dev - #12

Merged
mzcydev merged 18 commits into
masterfrom
dev
Jul 23, 2025
Merged

Dev#12
mzcydev merged 18 commits into
masterfrom
dev

Conversation

@mzcydev

Copy link
Copy Markdown
Member

No description provided.

mzcydev added 18 commits July 22, 2025 15:22
…s and implement a standalone, thread-safe scheduling system
…anager, DebugPrinter, DebugScope, and Tracer classes
CopilotAI review requested due to automatic review settings July 23, 2025 10:59
@mzcydev
mzcydev merged commit 5fde67e into masterJul 23, 2025
1 check failed

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a comprehensive "dev" environment with significant additions to the plugin framework, including new UI systems, database management, performance monitoring, and plugin integrations. The changes primarily focus on adding modern development tooling and architectural patterns to the existing NextForge framework.

Key changes include:

  • Complete UI system with inventory management, layouts, and support components
  • Performance monitoring and profiling infrastructure
  • Database abstraction layer with support for multiple database types (SQL, MongoDB, Redis)
  • Plugin bridge system for third-party integrations (Vault, PlaceholderAPI, LuckPerms)

Reviewed Changes

Copilot reviewed 92 out of 94 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
plugin.ymlAdded Vault as soft dependency
ChatPagination.javaRemoved legacy chat pagination utility
NextForgePlugin.javaIntegrated new UI and database managers, performance monitoring
Multiple UI filesComplete UI framework with components, layouts, inventory management
Multiple database filesDatabase abstraction layer with repository patterns
Multiple performance filesPerformance monitoring and profiling system
Multiple bridge filesPlugin integration framework
Comments suppressed due to low confidence (2)

src/main/java/gg/nextforge/performance/TickListener.java:1

  • The package declaration 'gg.nextforge.performance.listener' does not match the file location. The file is in 'src/main/java/gg/nextforge/performance/' but the package suggests it should be in a 'listener' subdirectory.
package gg.nextforge.performance.listener;

src/main/java/gg/nextforge/bridge/impl/LuckPermsBridge.java:1

  • The package declaration should be 'gg.nextforge.bridge.impl' to match the file location, not 'gg.nextforge.bridge'.
package gg.nextforge.bridge;

Comment on lines +49 to +52
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Calling unregister(this) on the handler list will not work as expected because 'this' refers to the anonymous listener, not a registered handler. This could cause memory leaks as the event handler may not be properly unregistered.

Suggested change
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);
InventoryCloseEvent.getHandlerList().unregister(listener);
}
}
};
Bukkit.getPluginManager().registerEvents(listener, plugin);

Copilot uses AI. Check for mistakes.
Comment on lines +43 to +47
@org.bukkit.event.EventHandler
public void onSwitch(PlayerItemHeldEvent event) {
// Optional: clear hotbar on slot switch if desired
}

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The onSwitch method is empty and only contains a comment. Consider either implementing the functionality or removing the empty method to reduce code clutter.

Suggested change
@org.bukkit.event.EventHandler
publicvoidonSwitch(PlayerItemHeldEventevent) {
// Optional: clear hotbar on slot switch if desired
}

Copilot uses AI. Check for mistakes.
sqlConnection = DriverManager.getConnection(connectionString);
break;
case MONGODB:
String uri = (connectionString);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The parentheses around 'connectionString' are unnecessary and should be removed for cleaner code.

Suggested change
Stringuri = (connectionString);
Stringuri = connectionString;

Copilot uses AI. Check for mistakes.
@@ -0,0 +1,27 @@
package gg.nextforge.performance;

import gg.nextforge.performance.listener.TickListener;

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The import path 'gg.nextforge.performance.listener.TickListener' is incorrect. Based on the file structure, it should be 'gg.nextforge.performance.TickListener' since TickListener.java is directly in the performance package.

Suggested change
importgg.nextforge.performance.listener.TickListener;
importgg.nextforge.performance.TickListener;

Copilot uses AI. Check for mistakes.
activeTasks.put(id, scheduled);
return scheduled;
private long ticksToMillis(long ticks) {
return ticks * 50L; // 20 ticks = 1 second

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The conversion factor should be a named constant instead of a magic number. Consider defining 'private static final long MILLIS_PER_TICK = 50L;' for better maintainability.

Suggested change
returnticks * 50L; // 20 ticks = 1 second
returnticks * MILLIS_PER_TICK; // 20 ticks = 1 second

Copilot uses AI. Check for mistakes.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mzcydev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Aug 12, 2025. It is now read-only.

Dev - #12

Merged
mzcydev merged 18 commits into
masterfrom
dev
Jul 23, 2025
Merged

Dev#12
mzcydev merged 18 commits into
masterfrom
dev

Conversation

@mzcydev

Copy link
Copy Markdown
Member

No description provided.

mzcydev added 18 commits July 22, 2025 15:22
…s and implement a standalone, thread-safe scheduling system
…anager, DebugPrinter, DebugScope, and Tracer classes
CopilotAI review requested due to automatic review settings July 23, 2025 10:59
@mzcydev
mzcydev merged commit 5fde67e into masterJul 23, 2025
1 check failed

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a comprehensive "dev" environment with significant additions to the plugin framework, including new UI systems, database management, performance monitoring, and plugin integrations. The changes primarily focus on adding modern development tooling and architectural patterns to the existing NextForge framework.

Key changes include:

  • Complete UI system with inventory management, layouts, and support components
  • Performance monitoring and profiling infrastructure
  • Database abstraction layer with support for multiple database types (SQL, MongoDB, Redis)
  • Plugin bridge system for third-party integrations (Vault, PlaceholderAPI, LuckPerms)

Reviewed Changes

Copilot reviewed 92 out of 94 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
plugin.ymlAdded Vault as soft dependency
ChatPagination.javaRemoved legacy chat pagination utility
NextForgePlugin.javaIntegrated new UI and database managers, performance monitoring
Multiple UI filesComplete UI framework with components, layouts, inventory management
Multiple database filesDatabase abstraction layer with repository patterns
Multiple performance filesPerformance monitoring and profiling system
Multiple bridge filesPlugin integration framework
Comments suppressed due to low confidence (2)

src/main/java/gg/nextforge/performance/TickListener.java:1

  • The package declaration 'gg.nextforge.performance.listener' does not match the file location. The file is in 'src/main/java/gg/nextforge/performance/' but the package suggests it should be in a 'listener' subdirectory.
package gg.nextforge.performance.listener;

src/main/java/gg/nextforge/bridge/impl/LuckPermsBridge.java:1

  • The package declaration should be 'gg.nextforge.bridge.impl' to match the file location, not 'gg.nextforge.bridge'.
package gg.nextforge.bridge;

Comment on lines +49 to +52
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Calling unregister(this) on the handler list will not work as expected because 'this' refers to the anonymous listener, not a registered handler. This could cause memory leaks as the event handler may not be properly unregistered.

Suggested change
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);
InventoryCloseEvent.getHandlerList().unregister(listener);
}
}
};
Bukkit.getPluginManager().registerEvents(listener, plugin);

Copilot uses AI. Check for mistakes.
Comment on lines +43 to +47
@org.bukkit.event.EventHandler
public void onSwitch(PlayerItemHeldEvent event) {
// Optional: clear hotbar on slot switch if desired
}

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The onSwitch method is empty and only contains a comment. Consider either implementing the functionality or removing the empty method to reduce code clutter.

Suggested change
@org.bukkit.event.EventHandler
publicvoidonSwitch(PlayerItemHeldEventevent) {
// Optional: clear hotbar on slot switch if desired
}

Copilot uses AI. Check for mistakes.
sqlConnection = DriverManager.getConnection(connectionString);
break;
case MONGODB:
String uri = (connectionString);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The parentheses around 'connectionString' are unnecessary and should be removed for cleaner code.

Suggested change
Stringuri = (connectionString);
Stringuri = connectionString;

Copilot uses AI. Check for mistakes.
@@ -0,0 +1,27 @@
package gg.nextforge.performance;

import gg.nextforge.performance.listener.TickListener;

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The import path 'gg.nextforge.performance.listener.TickListener' is incorrect. Based on the file structure, it should be 'gg.nextforge.performance.TickListener' since TickListener.java is directly in the performance package.

Suggested change
importgg.nextforge.performance.listener.TickListener;
importgg.nextforge.performance.TickListener;

Copilot uses AI. Check for mistakes.
activeTasks.put(id, scheduled);
return scheduled;
private long ticksToMillis(long ticks) {
return ticks * 50L; // 20 ticks = 1 second

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The conversion factor should be a named constant instead of a magic number. Consider defining 'private static final long MILLIS_PER_TICK = 50L;' for better maintainability.

Suggested change
returnticks * 50L; // 20 ticks = 1 second
returnticks * MILLIS_PER_TICK; // 20 ticks = 1 second

Copilot uses AI. Check for mistakes.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

Dev - #12

Merged
mzcydev merged 18 commits into
masterfrom
dev
Jul 23, 2025
Merged

Dev#12
mzcydev merged 18 commits into
masterfrom
dev

Conversation

@mzcydev

Copy link
Copy Markdown
Member

No description provided.

mzcydev added 18 commits July 22, 2025 15:22
…s and implement a standalone, thread-safe scheduling system
…anager, DebugPrinter, DebugScope, and Tracer classes
CopilotAI review requested due to automatic review settings July 23, 2025 10:59
@mzcydev
mzcydev merged commit 5fde67e into masterJul 23, 2025
1 check failed

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a comprehensive "dev" environment with significant additions to the plugin framework, including new UI systems, database management, performance monitoring, and plugin integrations. The changes primarily focus on adding modern development tooling and architectural patterns to the existing NextForge framework.

Key changes include:

  • Complete UI system with inventory management, layouts, and support components
  • Performance monitoring and profiling infrastructure
  • Database abstraction layer with support for multiple database types (SQL, MongoDB, Redis)
  • Plugin bridge system for third-party integrations (Vault, PlaceholderAPI, LuckPerms)

Reviewed Changes

Copilot reviewed 92 out of 94 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
plugin.ymlAdded Vault as soft dependency
ChatPagination.javaRemoved legacy chat pagination utility
NextForgePlugin.javaIntegrated new UI and database managers, performance monitoring
Multiple UI filesComplete UI framework with components, layouts, inventory management
Multiple database filesDatabase abstraction layer with repository patterns
Multiple performance filesPerformance monitoring and profiling system
Multiple bridge filesPlugin integration framework
Comments suppressed due to low confidence (2)

src/main/java/gg/nextforge/performance/TickListener.java:1

  • The package declaration 'gg.nextforge.performance.listener' does not match the file location. The file is in 'src/main/java/gg/nextforge/performance/' but the package suggests it should be in a 'listener' subdirectory.
package gg.nextforge.performance.listener;

src/main/java/gg/nextforge/bridge/impl/LuckPermsBridge.java:1

  • The package declaration should be 'gg.nextforge.bridge.impl' to match the file location, not 'gg.nextforge.bridge'.
package gg.nextforge.bridge;

Comment on lines +49 to +52
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Calling unregister(this) on the handler list will not work as expected because 'this' refers to the anonymous listener, not a registered handler. This could cause memory leaks as the event handler may not be properly unregistered.

Suggested change
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
}, plugin);
InventoryCloseEvent.getHandlerList().unregister(listener);
}
}
};
Bukkit.getPluginManager().registerEvents(listener, plugin);

Copilot uses AI. Check for mistakes.
Comment on lines +43 to +47
@org.bukkit.event.EventHandler
public void onSwitch(PlayerItemHeldEvent event) {
// Optional: clear hotbar on slot switch if desired
}

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The onSwitch method is empty and only contains a comment. Consider either implementing the functionality or removing the empty method to reduce code clutter.

Suggested change
@org.bukkit.event.EventHandler
publicvoidonSwitch(PlayerItemHeldEventevent) {
// Optional: clear hotbar on slot switch if desired
}

Copilot uses AI. Check for mistakes.
sqlConnection = DriverManager.getConnection(connectionString);
break;
case MONGODB:
String uri = (connectionString);

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The parentheses around 'connectionString' are unnecessary and should be removed for cleaner code.

Suggested change
Stringuri = (connectionString);
Stringuri = connectionString;

Copilot uses AI. Check for mistakes.
@@ -0,0 +1,27 @@
package gg.nextforge.performance;

import gg.nextforge.performance.listener.TickListener;

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The import path 'gg.nextforge.performance.listener.TickListener' is incorrect. Based on the file structure, it should be 'gg.nextforge.performance.TickListener' since TickListener.java is directly in the performance package.

Suggested change
importgg.nextforge.performance.listener.TickListener;
importgg.nextforge.performance.TickListener;

Copilot uses AI. Check for mistakes.
activeTasks.put(id, scheduled);
return scheduled;
private long ticksToMillis(long ticks) {
return ticks * 50L; // 20 ticks = 1 second

CopilotAIJul 23, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The conversion factor should be a named constant instead of a magic number. Consider defining 'private static final long MILLIS_PER_TICK = 50L;' for better maintainability.

Suggested change
returnticks * 50L; // 20 ticks = 1 second
returnticks * MILLIS_PER_TICK; // 20 ticks = 1 second

Copilot uses AI. Check for mistakes.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mzcydev