Skip to content

RealIP Fabric support - #40

Merged
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric
Mar 9, 2021
Merged

RealIP Fabric support#40
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric

Conversation

@Draylar

Copy link
Copy Markdown

Hello, I have arrived with Fabric support. This PR has been sanity-checked by at least 2 individuals (one of which was me), and both of us were able to successfully reproduce TCP Shield functionality on a dedicated server with the full DNS setup.

PR Overview

build.gradle:
Fabric does not provide networking hooks as early as the handshake-phase, so I had to pull in Mixin. To use Mixin, I also had to pull in the full Minecraft dependency. I use the Fabric Loom plugin to achieve this (it is essentially a standard Fabric mod buildscript at this point).

Initialization

Similar to the startup listeners & initializers in the other modules, the Fabric folder now has an initializer named TCPShieldFabric. This class is loaded by the fabric.mod.json file and sets up the Fabric packet handler.

Handshake Handling

To handle handshakes, I placed a mixin in ServerHandshakeNetworkHandler#onHandshake, which calls the Fabric packet handler with the abstracted packet & player data.

Implementation Notes

Config:
Fabric does not ship a standard configuration library, so I wrote a simple custom parser in FabricConfigImpl.


We have confirmed clients cannot connect to the server IP directly, while the domain setup with TCPShield works great. The server properly identities the clients IP. Finally, I have also confirmed the client does not have access to the server's true IP (but reports being connected to TCPShield instead):

If there are any changes you would like me to make, please let me know. Thank you in advance!

@paulzhng
paulzhng self-requested a review March 9, 2021 09:29

@paulzhngpaulzhng 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.

First if all, thanks for this great contribution. We're always thankful for such wonderful contributions.

Before approving this PR, there are still some minor (arguably nit-picky) points which need adjustment.

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/resources/fabric.mod.json Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
@paulzhng
paulzhng self-requested a review March 9, 2021 17:11
@Draylar

Draylar commented Mar 9, 2021

Copy link
Copy Markdown
Author

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Fabric does no version abstraction, so the most you can do is hope it just works:tm:. That being said, I tested the mod on 1.14.4, 1.15, and 1.16.5 (the only major versions Fabric supports outside snapshots), and it worked on all 3. This will only break if Mojang changes early networking code.

  • latest commit changes Minecraft dependency field to wildcard and removes Fabric API dependency, so the jar will work in pretty much any scenario now.

@paulzhngpaulzhng 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.

Absolutely amazing work done here. Looking forward to include this in v2.5.
I took the freedom and updated the README.

@paulzhng
paulzhng merged commit 740e648 into TCPShield:v2.5Mar 9, 2021
@paulzhngpaulzhng mentioned this pull request Mar 9, 2021
Draylar added a commit to Draylar/RealIP that referenced this pull request Oct 7, 2022
This commit introduces Fabric support for the TCPShield RealIP plugin. We use Loom version 0.6 and Minecraft version 1.16.5 to support building with Java 8 alongside the other plugin loader implementations.
Configuration loading is done with simple YAML parsing, as Fabric does not ship a default configuration library.
For information on FabricPacket#setPacketHostname no-op, visit TCPShield#40 (comment).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Draylar@paulzhng
, '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" + '
RealIP Fabric support by Draylar · Pull Request #40 · TCPShield/RealIP · GitHub
Skip to content

RealIP Fabric support - #40

Merged
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric
Mar 9, 2021
Merged

RealIP Fabric support#40
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric

Conversation

@Draylar

Copy link
Copy Markdown

Hello, I have arrived with Fabric support. This PR has been sanity-checked by at least 2 individuals (one of which was me), and both of us were able to successfully reproduce TCP Shield functionality on a dedicated server with the full DNS setup.

PR Overview

build.gradle:
Fabric does not provide networking hooks as early as the handshake-phase, so I had to pull in Mixin. To use Mixin, I also had to pull in the full Minecraft dependency. I use the Fabric Loom plugin to achieve this (it is essentially a standard Fabric mod buildscript at this point).

Initialization

Similar to the startup listeners & initializers in the other modules, the Fabric folder now has an initializer named TCPShieldFabric. This class is loaded by the fabric.mod.json file and sets up the Fabric packet handler.

Handshake Handling

To handle handshakes, I placed a mixin in ServerHandshakeNetworkHandler#onHandshake, which calls the Fabric packet handler with the abstracted packet & player data.

Implementation Notes

Config:
Fabric does not ship a standard configuration library, so I wrote a simple custom parser in FabricConfigImpl.


We have confirmed clients cannot connect to the server IP directly, while the domain setup with TCPShield works great. The server properly identities the clients IP. Finally, I have also confirmed the client does not have access to the server's true IP (but reports being connected to TCPShield instead):

If there are any changes you would like me to make, please let me know. Thank you in advance!

@paulzhng
paulzhng self-requested a review March 9, 2021 09:29

@paulzhngpaulzhng 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.

First if all, thanks for this great contribution. We're always thankful for such wonderful contributions.

Before approving this PR, there are still some minor (arguably nit-picky) points which need adjustment.

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/resources/fabric.mod.json Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
@paulzhng
paulzhng self-requested a review March 9, 2021 17:11
@Draylar

Draylar commented Mar 9, 2021

Copy link
Copy Markdown
Author

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Fabric does no version abstraction, so the most you can do is hope it just works:tm:. That being said, I tested the mod on 1.14.4, 1.15, and 1.16.5 (the only major versions Fabric supports outside snapshots), and it worked on all 3. This will only break if Mojang changes early networking code.

  • latest commit changes Minecraft dependency field to wildcard and removes Fabric API dependency, so the jar will work in pretty much any scenario now.

@paulzhngpaulzhng 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.

Absolutely amazing work done here. Looking forward to include this in v2.5.
I took the freedom and updated the README.

@paulzhng
paulzhng merged commit 740e648 into TCPShield:v2.5Mar 9, 2021
@paulzhngpaulzhng mentioned this pull request Mar 9, 2021
Draylar added a commit to Draylar/RealIP that referenced this pull request Oct 7, 2022
This commit introduces Fabric support for the TCPShield RealIP plugin. We use Loom version 0.6 and Minecraft version 1.16.5 to support building with Java 8 alongside the other plugin loader implementations.
Configuration loading is done with simple YAML parsing, as Fabric does not ship a default configuration library.
For information on FabricPacket#setPacketHostname no-op, visit TCPShield#40 (comment).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Draylar@paulzhng
, '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('^' + ".*" + ' RealIP Fabric support by Draylar · Pull Request #40 · TCPShield/RealIP · GitHub
Skip to content

RealIP Fabric support - #40

Merged
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric
Mar 9, 2021
Merged

RealIP Fabric support#40
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric

Conversation

@Draylar

Copy link
Copy Markdown

Hello, I have arrived with Fabric support. This PR has been sanity-checked by at least 2 individuals (one of which was me), and both of us were able to successfully reproduce TCP Shield functionality on a dedicated server with the full DNS setup.

PR Overview

build.gradle:
Fabric does not provide networking hooks as early as the handshake-phase, so I had to pull in Mixin. To use Mixin, I also had to pull in the full Minecraft dependency. I use the Fabric Loom plugin to achieve this (it is essentially a standard Fabric mod buildscript at this point).

Initialization

Similar to the startup listeners & initializers in the other modules, the Fabric folder now has an initializer named TCPShieldFabric. This class is loaded by the fabric.mod.json file and sets up the Fabric packet handler.

Handshake Handling

To handle handshakes, I placed a mixin in ServerHandshakeNetworkHandler#onHandshake, which calls the Fabric packet handler with the abstracted packet & player data.

Implementation Notes

Config:
Fabric does not ship a standard configuration library, so I wrote a simple custom parser in FabricConfigImpl.


We have confirmed clients cannot connect to the server IP directly, while the domain setup with TCPShield works great. The server properly identities the clients IP. Finally, I have also confirmed the client does not have access to the server's true IP (but reports being connected to TCPShield instead):

If there are any changes you would like me to make, please let me know. Thank you in advance!

@paulzhng
paulzhng self-requested a review March 9, 2021 09:29

@paulzhngpaulzhng 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.

First if all, thanks for this great contribution. We're always thankful for such wonderful contributions.

Before approving this PR, there are still some minor (arguably nit-picky) points which need adjustment.

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/resources/fabric.mod.json Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
@paulzhng
paulzhng self-requested a review March 9, 2021 17:11
@Draylar

Draylar commented Mar 9, 2021

Copy link
Copy Markdown
Author

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Fabric does no version abstraction, so the most you can do is hope it just works:tm:. That being said, I tested the mod on 1.14.4, 1.15, and 1.16.5 (the only major versions Fabric supports outside snapshots), and it worked on all 3. This will only break if Mojang changes early networking code.

  • latest commit changes Minecraft dependency field to wildcard and removes Fabric API dependency, so the jar will work in pretty much any scenario now.

@paulzhngpaulzhng 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.

Absolutely amazing work done here. Looking forward to include this in v2.5.
I took the freedom and updated the README.

@paulzhng
paulzhng merged commit 740e648 into TCPShield:v2.5Mar 9, 2021
@paulzhngpaulzhng mentioned this pull request Mar 9, 2021
Draylar added a commit to Draylar/RealIP that referenced this pull request Oct 7, 2022
This commit introduces Fabric support for the TCPShield RealIP plugin. We use Loom version 0.6 and Minecraft version 1.16.5 to support building with Java 8 alongside the other plugin loader implementations.
Configuration loading is done with simple YAML parsing, as Fabric does not ship a default configuration library.
For information on FabricPacket#setPacketHostname no-op, visit TCPShield#40 (comment).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Draylar@paulzhng
, '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('^' + ".*" + ' RealIP Fabric support by Draylar · Pull Request #40 · TCPShield/RealIP · GitHub
Skip to content

RealIP Fabric support - #40

Merged
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric
Mar 9, 2021
Merged

RealIP Fabric support#40
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric

Conversation

@Draylar

Copy link
Copy Markdown

Hello, I have arrived with Fabric support. This PR has been sanity-checked by at least 2 individuals (one of which was me), and both of us were able to successfully reproduce TCP Shield functionality on a dedicated server with the full DNS setup.

PR Overview

build.gradle:
Fabric does not provide networking hooks as early as the handshake-phase, so I had to pull in Mixin. To use Mixin, I also had to pull in the full Minecraft dependency. I use the Fabric Loom plugin to achieve this (it is essentially a standard Fabric mod buildscript at this point).

Initialization

Similar to the startup listeners & initializers in the other modules, the Fabric folder now has an initializer named TCPShieldFabric. This class is loaded by the fabric.mod.json file and sets up the Fabric packet handler.

Handshake Handling

To handle handshakes, I placed a mixin in ServerHandshakeNetworkHandler#onHandshake, which calls the Fabric packet handler with the abstracted packet & player data.

Implementation Notes

Config:
Fabric does not ship a standard configuration library, so I wrote a simple custom parser in FabricConfigImpl.


We have confirmed clients cannot connect to the server IP directly, while the domain setup with TCPShield works great. The server properly identities the clients IP. Finally, I have also confirmed the client does not have access to the server's true IP (but reports being connected to TCPShield instead):

If there are any changes you would like me to make, please let me know. Thank you in advance!

@paulzhng
paulzhng self-requested a review March 9, 2021 09:29

@paulzhngpaulzhng 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.

First if all, thanks for this great contribution. We're always thankful for such wonderful contributions.

Before approving this PR, there are still some minor (arguably nit-picky) points which need adjustment.

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/resources/fabric.mod.json Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
@paulzhng
paulzhng self-requested a review March 9, 2021 17:11
@Draylar

Draylar commented Mar 9, 2021

Copy link
Copy Markdown
Author

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Fabric does no version abstraction, so the most you can do is hope it just works:tm:. That being said, I tested the mod on 1.14.4, 1.15, and 1.16.5 (the only major versions Fabric supports outside snapshots), and it worked on all 3. This will only break if Mojang changes early networking code.

  • latest commit changes Minecraft dependency field to wildcard and removes Fabric API dependency, so the jar will work in pretty much any scenario now.

@paulzhngpaulzhng 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.

Absolutely amazing work done here. Looking forward to include this in v2.5.
I took the freedom and updated the README.

@paulzhng
paulzhng merged commit 740e648 into TCPShield:v2.5Mar 9, 2021
@paulzhngpaulzhng mentioned this pull request Mar 9, 2021
Draylar added a commit to Draylar/RealIP that referenced this pull request Oct 7, 2022
This commit introduces Fabric support for the TCPShield RealIP plugin. We use Loom version 0.6 and Minecraft version 1.16.5 to support building with Java 8 alongside the other plugin loader implementations.
Configuration loading is done with simple YAML parsing, as Fabric does not ship a default configuration library.
For information on FabricPacket#setPacketHostname no-op, visit TCPShield#40 (comment).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Draylar@paulzhng
, '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" + ' RealIP Fabric support by Draylar · Pull Request #40 · TCPShield/RealIP · GitHub
Skip to content

RealIP Fabric support - #40

Merged
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric
Mar 9, 2021
Merged

RealIP Fabric support#40
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric

Conversation

@Draylar

Copy link
Copy Markdown

Hello, I have arrived with Fabric support. This PR has been sanity-checked by at least 2 individuals (one of which was me), and both of us were able to successfully reproduce TCP Shield functionality on a dedicated server with the full DNS setup.

PR Overview

build.gradle:
Fabric does not provide networking hooks as early as the handshake-phase, so I had to pull in Mixin. To use Mixin, I also had to pull in the full Minecraft dependency. I use the Fabric Loom plugin to achieve this (it is essentially a standard Fabric mod buildscript at this point).

Initialization

Similar to the startup listeners & initializers in the other modules, the Fabric folder now has an initializer named TCPShieldFabric. This class is loaded by the fabric.mod.json file and sets up the Fabric packet handler.

Handshake Handling

To handle handshakes, I placed a mixin in ServerHandshakeNetworkHandler#onHandshake, which calls the Fabric packet handler with the abstracted packet & player data.

Implementation Notes

Config:
Fabric does not ship a standard configuration library, so I wrote a simple custom parser in FabricConfigImpl.


We have confirmed clients cannot connect to the server IP directly, while the domain setup with TCPShield works great. The server properly identities the clients IP. Finally, I have also confirmed the client does not have access to the server's true IP (but reports being connected to TCPShield instead):

If there are any changes you would like me to make, please let me know. Thank you in advance!

@paulzhng
paulzhng self-requested a review March 9, 2021 09:29

@paulzhngpaulzhng 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.

First if all, thanks for this great contribution. We're always thankful for such wonderful contributions.

Before approving this PR, there are still some minor (arguably nit-picky) points which need adjustment.

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/resources/fabric.mod.json Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
@paulzhng
paulzhng self-requested a review March 9, 2021 17:11
@Draylar

Draylar commented Mar 9, 2021

Copy link
Copy Markdown
Author

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Fabric does no version abstraction, so the most you can do is hope it just works:tm:. That being said, I tested the mod on 1.14.4, 1.15, and 1.16.5 (the only major versions Fabric supports outside snapshots), and it worked on all 3. This will only break if Mojang changes early networking code.

  • latest commit changes Minecraft dependency field to wildcard and removes Fabric API dependency, so the jar will work in pretty much any scenario now.

@paulzhngpaulzhng 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.

Absolutely amazing work done here. Looking forward to include this in v2.5.
I took the freedom and updated the README.

@paulzhng
paulzhng merged commit 740e648 into TCPShield:v2.5Mar 9, 2021
@paulzhngpaulzhng mentioned this pull request Mar 9, 2021
Draylar added a commit to Draylar/RealIP that referenced this pull request Oct 7, 2022
This commit introduces Fabric support for the TCPShield RealIP plugin. We use Loom version 0.6 and Minecraft version 1.16.5 to support building with Java 8 alongside the other plugin loader implementations.
Configuration loading is done with simple YAML parsing, as Fabric does not ship a default configuration library.
For information on FabricPacket#setPacketHostname no-op, visit TCPShield#40 (comment).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Draylar@paulzhng
, '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('^' + ".*" + ' RealIP Fabric support by Draylar · Pull Request #40 · TCPShield/RealIP · GitHub
Skip to content

RealIP Fabric support - #40

Merged
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric
Mar 9, 2021
Merged

RealIP Fabric support#40
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric

Conversation

@Draylar

Copy link
Copy Markdown

Hello, I have arrived with Fabric support. This PR has been sanity-checked by at least 2 individuals (one of which was me), and both of us were able to successfully reproduce TCP Shield functionality on a dedicated server with the full DNS setup.

PR Overview

build.gradle:
Fabric does not provide networking hooks as early as the handshake-phase, so I had to pull in Mixin. To use Mixin, I also had to pull in the full Minecraft dependency. I use the Fabric Loom plugin to achieve this (it is essentially a standard Fabric mod buildscript at this point).

Initialization

Similar to the startup listeners & initializers in the other modules, the Fabric folder now has an initializer named TCPShieldFabric. This class is loaded by the fabric.mod.json file and sets up the Fabric packet handler.

Handshake Handling

To handle handshakes, I placed a mixin in ServerHandshakeNetworkHandler#onHandshake, which calls the Fabric packet handler with the abstracted packet & player data.

Implementation Notes

Config:
Fabric does not ship a standard configuration library, so I wrote a simple custom parser in FabricConfigImpl.


We have confirmed clients cannot connect to the server IP directly, while the domain setup with TCPShield works great. The server properly identities the clients IP. Finally, I have also confirmed the client does not have access to the server's true IP (but reports being connected to TCPShield instead):

If there are any changes you would like me to make, please let me know. Thank you in advance!

@paulzhng
paulzhng self-requested a review March 9, 2021 09:29

@paulzhngpaulzhng 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.

First if all, thanks for this great contribution. We're always thankful for such wonderful contributions.

Before approving this PR, there are still some minor (arguably nit-picky) points which need adjustment.

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/resources/fabric.mod.json Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
@paulzhng
paulzhng self-requested a review March 9, 2021 17:11
@Draylar

Draylar commented Mar 9, 2021

Copy link
Copy Markdown
Author

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Fabric does no version abstraction, so the most you can do is hope it just works:tm:. That being said, I tested the mod on 1.14.4, 1.15, and 1.16.5 (the only major versions Fabric supports outside snapshots), and it worked on all 3. This will only break if Mojang changes early networking code.

  • latest commit changes Minecraft dependency field to wildcard and removes Fabric API dependency, so the jar will work in pretty much any scenario now.

@paulzhngpaulzhng 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.

Absolutely amazing work done here. Looking forward to include this in v2.5.
I took the freedom and updated the README.

@paulzhng
paulzhng merged commit 740e648 into TCPShield:v2.5Mar 9, 2021
@paulzhngpaulzhng mentioned this pull request Mar 9, 2021
Draylar added a commit to Draylar/RealIP that referenced this pull request Oct 7, 2022
This commit introduces Fabric support for the TCPShield RealIP plugin. We use Loom version 0.6 and Minecraft version 1.16.5 to support building with Java 8 alongside the other plugin loader implementations.
Configuration loading is done with simple YAML parsing, as Fabric does not ship a default configuration library.
For information on FabricPacket#setPacketHostname no-op, visit TCPShield#40 (comment).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Draylar@paulzhng
, '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('^' + ".*" + ' RealIP Fabric support by Draylar · Pull Request #40 · TCPShield/RealIP · GitHub
Skip to content

RealIP Fabric support - #40

Merged
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric
Mar 9, 2021
Merged

RealIP Fabric support#40
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric

Conversation

@Draylar

Copy link
Copy Markdown

Hello, I have arrived with Fabric support. This PR has been sanity-checked by at least 2 individuals (one of which was me), and both of us were able to successfully reproduce TCP Shield functionality on a dedicated server with the full DNS setup.

PR Overview

build.gradle:
Fabric does not provide networking hooks as early as the handshake-phase, so I had to pull in Mixin. To use Mixin, I also had to pull in the full Minecraft dependency. I use the Fabric Loom plugin to achieve this (it is essentially a standard Fabric mod buildscript at this point).

Initialization

Similar to the startup listeners & initializers in the other modules, the Fabric folder now has an initializer named TCPShieldFabric. This class is loaded by the fabric.mod.json file and sets up the Fabric packet handler.

Handshake Handling

To handle handshakes, I placed a mixin in ServerHandshakeNetworkHandler#onHandshake, which calls the Fabric packet handler with the abstracted packet & player data.

Implementation Notes

Config:
Fabric does not ship a standard configuration library, so I wrote a simple custom parser in FabricConfigImpl.


We have confirmed clients cannot connect to the server IP directly, while the domain setup with TCPShield works great. The server properly identities the clients IP. Finally, I have also confirmed the client does not have access to the server's true IP (but reports being connected to TCPShield instead):

If there are any changes you would like me to make, please let me know. Thank you in advance!

@paulzhng
paulzhng self-requested a review March 9, 2021 09:29

@paulzhngpaulzhng 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.

First if all, thanks for this great contribution. We're always thankful for such wonderful contributions.

Before approving this PR, there are still some minor (arguably nit-picky) points which need adjustment.

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/resources/fabric.mod.json Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
@paulzhng
paulzhng self-requested a review March 9, 2021 17:11
@Draylar

Draylar commented Mar 9, 2021

Copy link
Copy Markdown
Author

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Fabric does no version abstraction, so the most you can do is hope it just works:tm:. That being said, I tested the mod on 1.14.4, 1.15, and 1.16.5 (the only major versions Fabric supports outside snapshots), and it worked on all 3. This will only break if Mojang changes early networking code.

  • latest commit changes Minecraft dependency field to wildcard and removes Fabric API dependency, so the jar will work in pretty much any scenario now.

@paulzhngpaulzhng 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.

Absolutely amazing work done here. Looking forward to include this in v2.5.
I took the freedom and updated the README.

@paulzhng
paulzhng merged commit 740e648 into TCPShield:v2.5Mar 9, 2021
@paulzhngpaulzhng mentioned this pull request Mar 9, 2021
Draylar added a commit to Draylar/RealIP that referenced this pull request Oct 7, 2022
This commit introduces Fabric support for the TCPShield RealIP plugin. We use Loom version 0.6 and Minecraft version 1.16.5 to support building with Java 8 alongside the other plugin loader implementations.
Configuration loading is done with simple YAML parsing, as Fabric does not ship a default configuration library.
For information on FabricPacket#setPacketHostname no-op, visit TCPShield#40 (comment).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Draylar@paulzhng
, '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); } })(); })(); RealIP Fabric support by Draylar · Pull Request #40 · TCPShield/RealIP · GitHub
Skip to content

RealIP Fabric support - #40

Merged
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric
Mar 9, 2021
Merged

RealIP Fabric support#40
paulzhng merged 10 commits into
TCPShield:v2.5from
Draylar:fabric

Conversation

@Draylar

Copy link
Copy Markdown

Hello, I have arrived with Fabric support. This PR has been sanity-checked by at least 2 individuals (one of which was me), and both of us were able to successfully reproduce TCP Shield functionality on a dedicated server with the full DNS setup.

PR Overview

build.gradle:
Fabric does not provide networking hooks as early as the handshake-phase, so I had to pull in Mixin. To use Mixin, I also had to pull in the full Minecraft dependency. I use the Fabric Loom plugin to achieve this (it is essentially a standard Fabric mod buildscript at this point).

Initialization

Similar to the startup listeners & initializers in the other modules, the Fabric folder now has an initializer named TCPShieldFabric. This class is loaded by the fabric.mod.json file and sets up the Fabric packet handler.

Handshake Handling

To handle handshakes, I placed a mixin in ServerHandshakeNetworkHandler#onHandshake, which calls the Fabric packet handler with the abstracted packet & player data.

Implementation Notes

Config:
Fabric does not ship a standard configuration library, so I wrote a simple custom parser in FabricConfigImpl.


We have confirmed clients cannot connect to the server IP directly, while the domain setup with TCPShield works great. The server properly identities the clients IP. Finally, I have also confirmed the client does not have access to the server's true IP (but reports being connected to TCPShield instead):

If there are any changes you would like me to make, please let me know. Thank you in advance!

@paulzhng
paulzhng self-requested a review March 9, 2021 09:29

@paulzhngpaulzhng 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.

First if all, thanks for this great contribution. We're always thankful for such wonderful contributions.

Before approving this PR, there are still some minor (arguably nit-picky) points which need adjustment.

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/TCPShieldFabric.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
Comment threadsrc/main/resources/fabric.mod.json Outdated
Comment threadsrc/main/java/net/tcpshield/tcpshield/fabric/impl/FabricConfigImpl.java Outdated
@paulzhng
paulzhng self-requested a review March 9, 2021 17:11
@Draylar

Draylar commented Mar 9, 2021

Copy link
Copy Markdown
Author

Also, as a question: How is this implementation able to work over multiple versions (so others than 1.16)? Is the limit you've set artificial or necessary?

Fabric does no version abstraction, so the most you can do is hope it just works:tm:. That being said, I tested the mod on 1.14.4, 1.15, and 1.16.5 (the only major versions Fabric supports outside snapshots), and it worked on all 3. This will only break if Mojang changes early networking code.

  • latest commit changes Minecraft dependency field to wildcard and removes Fabric API dependency, so the jar will work in pretty much any scenario now.

@paulzhngpaulzhng 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.

Absolutely amazing work done here. Looking forward to include this in v2.5.
I took the freedom and updated the README.

@paulzhng
paulzhng merged commit 740e648 into TCPShield:v2.5Mar 9, 2021
@paulzhngpaulzhng mentioned this pull request Mar 9, 2021
Draylar added a commit to Draylar/RealIP that referenced this pull request Oct 7, 2022
This commit introduces Fabric support for the TCPShield RealIP plugin. We use Loom version 0.6 and Minecraft version 1.16.5 to support building with Java 8 alongside the other plugin loader implementations.
Configuration loading is done with simple YAML parsing, as Fabric does not ship a default configuration library.
For information on FabricPacket#setPacketHostname no-op, visit TCPShield#40 (comment).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Draylar@paulzhng