Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
b3b8a60
Update packages
FreezeEngine Mar 14, 2024
e538af6
Temp fix for empty hiddenPackets
FreezeEngine Mar 15, 2024
87b8220
Bedrock-node basic support
FreezeEngine Mar 15, 2024
7031031
win.setPosition error silenced
FreezeEngine Mar 15, 2024
9c31780
BigInt.toJSON
FreezeEngine Mar 15, 2024
67c0905
Add default packet filtering for bedrock-node
FreezeEngine Mar 19, 2024
d1bf992
New todo: add proxypass option
FreezeEngine Mar 19, 2024
db9b7e7
Support for new java versions
FreezeEngine Mar 19, 2024
eb3e07f
Brought back ProxyPass
FreezeEngine Mar 19, 2024
41309a8
New TODO: dynamic version loading
FreezeEngine Mar 19, 2024
ae00068
Minor issue fixed
FreezeEngine Mar 19, 2024
6e71ba5
Filtering support
FreezeEngine Mar 19, 2024
4106714
Dropped ProxyPass support
FreezeEngine Mar 19, 2024
fc737b8
Proper reading of client and server bound packets
FreezeEngine Mar 19, 2024
a734c95
New startPage label
FreezeEngine Mar 19, 2024
d734ea4
Added dynamic version loading
FreezeEngine Mar 19, 2024
ad042b0
Fixed small html error
FreezeEngine Mar 19, 2024
7c4c969
MSA Code auth implemented
FreezeEngine Mar 19, 2024
a8512c3
Removed JSON.stringify on proxy.capabilities
FreezeEngine Mar 19, 2024
6097d84
Implemented HexView and packet ids
FreezeEngine Mar 19, 2024
ba6c0ab
Better phrasing
FreezeEngine Mar 19, 2024
7950d7f
Scripting support (Bedrock)
FreezeEngine Mar 20, 2024
0634480
Update workflow
FreezeEngine Sep 28, 2024
94b67e9
Update dependencies
FreezeEngine Sep 28, 2024
9df5f22
1.21.4X
FreezeEngine Nov 21, 2024
40489dc
1.21.5X
FreezeEngine Dec 30, 2024
39b1998
1.21.7X and below
FreezeEngine Apr 4, 2025
612b72e
Fix workflow
FreezeEngine Apr 4, 2025
515a3ed
1.21.80
FreezeEngine May 21, 2025
e283556
Fix workflow
FreezeEngine Jul 4, 2025
679f5d3
1.21.90
FreezeEngine Jul 4, 2025
a38a3dd
1.21.13X
FreezeEngine Dec 27, 2025
6baa587
1.26.0
FreezeEngine Feb 21, 2026
0c09bb1
Use PrismarineJS docs for bedrock
FreezeEngine Feb 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions .github/workflows/build-workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,19 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v1
with:
node-version: 16.x
node-version: 24.x

- name: Set up Java
uses: actions/setup-java@v1
with:
java-version: 1.8

- name: Install Wine
run: sudo apt update && sudo apt install wine64
run: |
sudo apt update
sudo apt install wine64
sudo ln -s $(which wine) /usr/local/bin/wine64
wine64 --version

- name: Install node-prune
run: curl -sf https://gobinaries.com/tj/node-prune | sh
Expand Down Expand Up @@ -110,21 +114,21 @@ jobs:
mv out/pakkit-darwin-x64 out/macos/pakkit-macos-x64

- name: Upload Windows artifact
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
if: ${{ github.ref != 'refs/heads/master' }}
with:
name: pakkit-windows-x64
path: out/windows/

- name: Upload Linux artifact
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
if: ${{ github.ref != 'refs/heads/master' }}
with:
name: pakkit-linux-x64
path: out/linux/

- name: Upload macOS artifact
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
if: ${{ github.ref != 'refs/heads/master' }}
with:
name: pakkit-macos-x64
Expand Down
Binary file removed data/proxypass-pakkit.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion html/mainPage/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ <h3>Scripting (beta)</h3>
<div class="split" id="sidebar">
<div class="toolbar tab">
<button class="tab-button tablinks-rightpanel active" onclick="openMenu(event, 'tree', '-rightpanel')">Data</button>
<button class="tab-button tablinks-rightpanel" id="wiki-button" onclick="openMenu(event, 'wikivg', '-rightpanel'); scrollWikiToCurrentPacket()">wiki.vg</button>
<button class="tab-button tablinks-rightpanel" id="wiki-button" onclick="openMenu(event, 'wikivg', '-rightpanel'); scrollWikiToCurrentPacket()">Docs</button>
<button class="tab-button tablinks-rightpanel" onclick="openMenu(event, 'hex', '-rightpanel'); scrollWikiToCurrentPacket()">Hex view</button>
</div>
<div class="box" id="sidebar-box">
Expand Down
6 changes: 3 additions & 3 deletions html/mainPage/js/defaults.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"^bedrock-proxypass-json$": {
"^node-bedrock-protocol-.*$": {
"hiddenPackets": {
"serverbound": ["move_player", "player_action", "level_sound_event"],
"clientbound": ["level_chunk", "update_block", "network_chunk_publisher_update", "set_entity_motion", "move_entity_absolute", "set_entity_data", "level_sound_event"]
"serverbound": ["move_player", "player_action", "level_sound_event", "player_auth_input"],
"clientbound": ["level_chunk", "update_block", "network_chunk_publisher_update", "set_entity_motion", "move_entity_absolute", "set_entity_data", "level_sound_event", "move_entity_delta"]
},
"useExtendedPresets": false
},
Expand Down
1 change: 1 addition & 0 deletions html/mainPage/js/filteringLogic.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
exports.packetFilteredByFilterBox = function (packet, filter, hiddenPackets, inverseFiltering, regexFilter,
sharedVars) {
if(!hiddenPackets) return false;
if (hiddenPackets[packet.direction].includes(packet.meta.name)) {
return true
}
Expand Down
53 changes: 43 additions & 10 deletions html/mainPage/js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -111,14 +111,14 @@ const sharedVars = {
proxyCapabilities: {},
ipcRenderer: require('electron').ipcRenderer,
packetList: document.getElementById('packetlist'),
hiddenPackets: undefined,
hiddenPackets: {},
scripting: undefined,
lastFilter: '',
hiddenPacketsAmount: 0,
store: new Store()
}

sharedVars.proxyCapabilities = JSON.parse(sharedVars.ipcRenderer.sendSync('proxyCapabilities', ''))
sharedVars.proxyCapabilities = sharedVars.ipcRenderer.sendSync('proxyCapabilities', '')

function getVersionSpecificVar(name, defaultValue) {
const versionId = 'version-' + sharedVars.proxyCapabilities.versionId
Expand All @@ -133,7 +133,7 @@ function getVersionSpecificVar(name, defaultValue) {
[name]: JSON.stringify(defaultValue)
})
}
return JSON.parse(sharedVars.store.get(versionId)[name])
return sharedVars.store.get(versionId)[name] ? JSON.parse(sharedVars.store.get(versionId)[name]) : sharedVars.store.get(versionId)[name]
}

function setVersionSpecificVar(name, value) {
Expand Down Expand Up @@ -562,9 +562,30 @@ var clusterize = new Clusterize({
})

// TODO: move to own file?
const isPrismarineDocs = (url) => url && url.includes('prismarinejs.github.io/minecraft-data')

async function fillWiki () {
let data = (await axios.get(sharedVars.proxyCapabilities.wikiVgPage)).data
// Allow it to load properly
const wikiUrl = sharedVars.proxyCapabilities.wikiVgPage

if (isPrismarineDocs(wikiUrl)) {
const iframe = document.getElementById('iframe')
iframe.src = wikiUrl

const style = document.createElement('style')
style.id = 'wiki-iframe-style'
style.innerHTML = `
#iframe::-webkit-scrollbar { width: 17px; }
#iframe::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0.3); border-radius: 10px; }
#iframe::-webkit-scrollbar-track { background: rgba(0, 0, 0, 0.2); border-radius: 10px; }
#iframe::-webkit-scrollbar-thumb:hover { background: rgba(0, 0, 0, 0.5); }
#iframe::-webkit-scrollbar-corner { background: #242424; }
`
document.head.appendChild(style)
return
}

// wiki.vg (Java): fetch HTML and inject
let data = (await axios.get(wikiUrl)).data
data = data
.split('/images/')
.join('https://wiki.vg/images/')
Expand All @@ -573,7 +594,6 @@ async function fillWiki () {
.split('/load.php?')
.join('https://wiki.vg/load.php?')

// TODO: Break or modify links?
document.getElementById('iframe').contentWindow.document.write(data)

const style = document.createElement('style');
Expand Down Expand Up @@ -654,13 +674,26 @@ function scrollIdIntoView (id, bound) {
}

function scrollWikiToCurrentPacket () {
if (currentPacket) {
const packet = sharedVars.allPackets[currentPacket]
if (!currentPacket) return
const packet = sharedVars.allPackets[currentPacket]
const wikiUrl = sharedVars.proxyCapabilities.wikiVgPage

if (isPrismarineDocs(wikiUrl)) {
const baseUrl = wikiUrl.split('#')[0]
const packetAnchor = 'packet_' + (packet.meta.name || '')
const iframe = document.getElementById('iframe')
try {
scrollIdIntoView(packet.hexIdString, packet.direction)
iframe.contentWindow.location = baseUrl + '#' + packetAnchor
} catch (err) {
console.error(err);
console.error(err)
}
return
}

try {
scrollIdIntoView(packet.hexIdString, packet.direction)
} catch (err) {
console.error(err)
}
}

Expand Down
203 changes: 74 additions & 129 deletions html/startPage/index.html
Original file line number Diff line number Diff line change
@@ -1,129 +1,74 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>pakkit</title>
<link href="style.css" rel="stylesheet">
<!-- https://electronjs.org/docs/tutorial/security#csp-meta-tag -->
<meta content="script-src 'self' 'unsafe-inline';" http-equiv="Content-Security-Policy"/>
<link href="../scrollbar.css" rel="stylesheet" type="text/css"/>
<link href="../shared.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<h1 class='title'>pakkit</h1>
<p>pakkit is an advanced packet monitor proxy for Minecraft: Java Edition and Minecraft: Bedrock Edition based on
node-minecraft-protocol and ProxyPass.</p>
<form onsubmit="startProxy(event)">
<ul class="form-wrapper">
<li class="form-row">
<label for="platform">Platform:</label>
<select id="platform" onchange="platformChange()">
<option value="java">Java Edition</option>
<option value="bedrock">Bedrock Edition (beta)</option>
</select>
</li>
<li class="form-row">
<label for="version">Version:</label>
<select id="version">
<option value="1.20.1">1.20.1</option>
<option value="1.20">1.20</option>
<option value="1.19.4">1.19.4</option>
<option value="1.19.3">1.19.3</option>
<option value="1.19.2">1.19.2</option>
<option value="1.19.1">1.19.1</option>
<option value="1.19">1.19</option>
<option value="1.18.2">1.18.2</option>
<option value="1.18">1.18(.1)</option>
<option value="1.17.1">1.17.1</option>
<option value="1.17">1.17</option>
<option value="21w07a">21w07a</option>
<option value="1.16.4">1.16.4/1.16.5</option>
<option value="1.16.3">1.16.3</option>
<option value="1.16.2">1.16.2</option>
<option value="1.16.1">1.16.1</option>
<option value="1.16">1.16</option>
<option value="20w13b">20w13b</option>
<option value="1.15.2">1.15.2</option>
<option value="1.15.1">1.15.1</option>
<option value="1.15">1.15</option>
<option value="1.14.4">1.14.4</option>
<option value="1.14.3">1.14.3</option>
<option value="1.14.1">1.14.1</option>
<option value="1.14">1.14</option>
<option value="1.13.2">1.13.2</option>
<option value="1.13.2-pre2">1.13.2-pre2</option>
<option value="1.13.2-pre1">1.13.2-pre1</option>
<option value="1.13.1">1.13.1</option>
<option value="1.13">1.13</option>
<option value="17w50a">17w50a</option>
<option value="1.12.2">1.12.2</option>
<option value="1.12.1">1.12.1</option>
<option value="1.12">1.12</option>
<option value="1.12-pre4">1.12-pre4</option>
<option value="17w18b">17w18b</option>
<option value="17w15a">17w15a</option>
<option value="1.11.2">1.11.2</option>
<option value="1.11">1.11</option>
<option value="16w35a">16w35a</option>
<option value="1.10.2">1.10.2</option>
<option value="1.10.1">1.10.1</option>
<option value="1.10">1.10</option>
<option value="1.10-pre1">1.10-pre1</option>
<option value="16w20a">16w20a</option>
<option value="1.9.4">1.9.4</option>
<option value="1.9.2">1.9.2</option>
<option value="1.9.1-pre2">1.9.1-pre2</option>
<option value="1.9">1.9</option>
<option value="15w40b">15w40b</option>
<option value="1.8.8">1.8.x</option>
<option value="1.7.10">1.7.10</option>
</select>
<select disabled id="version-bedrock" style="display: none;">
<option value="1.15.2">1.16.221</option>
</select>
</li>
<li class="form-row">
<label for="connect-address">Connect address:</label>
<input id="connect-address" name="connect-address" placeholder="127.0.0.1" type="text" value="127.0.0.1"/>
</li>
<li class="form-row">
<label for="connect-port">Connect port:</label>
<input id="connect-port" name="connect-port" placeholder="25565" type="text" value="25565"/>
</li>
<div id="auth-row">
<li class="form-row">
<label for="auth-online">Auth method:</label>
<span>Enable online mode?</span>
</span>
<li class="form-row">
<label></label>
<span>
<label class="switch" style="padding: 0;">
<input id="auth-online" type="checkbox" value="auth-online"/>
<span class="slider round"></span>
</label>
</span>
</li>
</div>
<li class="form-row topspacer">
<label for="listen-port">Listen port:</label>
<input id="listen-port" name="listen-port" placeholder="25566" type="text" value="25566"/>
</li>
<!-- <li class="form-row" id="consent-row" style="display: none;">
<label for="consent">Consent:<br>
<label class="switch" style="padding: 0;">
<input id="consent" type="checkbox" value="consent"/>
<span class="slider round"></span>
</label>
</label>
<p>Allow pakkit to use my auth token from launcher_profiles.json for logging in to online mode servers.</p>
</li> -->
<li class="form-row">
<label></label>
<span class="start"><input id="start" type="submit" value="Start!"/></span>
</li>
</ul>
</form>
<script src="script.js"></script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>pakkit</title>
<link href="style.css" rel="stylesheet">
<!-- https://electronjs.org/docs/tutorial/security#csp-meta-tag -->
<meta content="script-src 'self' 'unsafe-inline';" http-equiv="Content-Security-Policy"/>
<link href="../scrollbar.css" rel="stylesheet" type="text/css"/>
<link href="../shared.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<h1 class='title'>pakkit</h1>
<p>pakkit is an advanced packet monitor for both Minecraft Java and Bedrock Edition, based on PrismarineJS
minecraft-protocol and bedrock-protocol.</p>
<form onsubmit="startProxy(event)">
<ul class="form-wrapper">
<li class="form-row">
<label for="platform">Platform:</label>
<select id="platform" onchange="platformChange()">
<option value="java">Java Edition</option>
<option value="bedrock">Bedrock Edition</option>
</select>
</li>
<li class="form-row">
<label for="version">Version:</label>
<select id="version"></select>
<select id="version-bedrock" style="display: none;"></select>
</li>
<li class="form-row">
<label for="connect-address">Connect address:</label>
<input id="connect-address" name="connect-address" placeholder="127.0.0.1" type="text" value="127.0.0.1"/>
</li>
<li class="form-row">
<label for="connect-port">Connect port:</label>
<input id="connect-port" name="connect-port" placeholder="25565" type="text" value="25565"/>
</li>
<div id="auth-row">
<li class="form-row">
<label for="auth-online">Auth method:</label>
<span>Enable online mode?</span>
</li>
<li class="form-row">
<label></label>
<span>
<label class="switch" style="padding: 0;">
<input id="auth-online" type="checkbox" value="auth-online"/>
<span class="slider round"></span>
</label>
</span>
</li>
</div>
<li class="form-row topspacer">
<label for="listen-port">Listen port:</label>
<input id="listen-port" name="listen-port" placeholder="25566" type="text" value="25566"/>
</li>
<!-- <li class="form-row" id="consent-row" style="display: none;">
<label for="consent">Consent:<br>
<label class="switch" style="padding: 0;">
<input id="consent" type="checkbox" value="consent"/>
<span class="slider round"></span>
</label>
</label>
<p>Allow pakkit to use my auth token from launcher_profiles.json for logging in to online mode servers.</p>
</li> -->
<li class="form-row">
<label></label>
<span class="start"><input id="start" type="submit" value="Start!"/></span>
</li>
</ul>
</form>
<script src="script.js"></script>
</body>
</html>
Loading