specprotocol 1.4.4 → 1.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DEFAULT_PROTOCOL_VERSION = exports.MAX_SUPPORTED_PROTOCOL_VERSION = exports.MIN_SUPPORTED_PROTOCOL_VERSION = void 0;
7
+ exports.resolvePacketId = resolvePacketId;
8
+ exports.resolveProtocolInfo = resolveProtocolInfo;
9
+ const minecraft_data_1 = __importDefault(require("minecraft-data"));
10
+ exports.MIN_SUPPORTED_PROTOCOL_VERSION = 47; // 1.8.x
11
+ const latestReleaseEntry = minecraft_data_1.default.versions.pc
12
+ .filter((entry) => entry.usesNetty && isRelease(entry) && entry.version >= exports.MIN_SUPPORTED_PROTOCOL_VERSION)
13
+ .sort((a, b) => {
14
+ if (a.version !== b.version)
15
+ return b.version - a.version;
16
+ return b.dataVersion - a.dataVersion;
17
+ })[0];
18
+ exports.MAX_SUPPORTED_PROTOCOL_VERSION = latestReleaseEntry?.version ?? 769;
19
+ exports.DEFAULT_PROTOCOL_VERSION = exports.MAX_SUPPORTED_PROTOCOL_VERSION;
20
+ function isRelease(entry) {
21
+ return entry.releaseType !== 'snapshot' && entry.releaseType !== 'old_snapshot';
22
+ }
23
+ function isPatchVersion(version) {
24
+ return /^1\.\d+\.\d+$/.test(version);
25
+ }
26
+ function parseMaybeProtocolNumber(input) {
27
+ if (!/^\d+$/.test(input))
28
+ return null;
29
+ const parsed = Number.parseInt(input, 10);
30
+ return Number.isFinite(parsed) ? parsed : null;
31
+ }
32
+ function findPreferredEntryForProtocol(protocol) {
33
+ const byProtocol = minecraft_data_1.default.postNettyVersionsByProtocolVersion.pc[String(protocol)] ?? [];
34
+ const filtered = byProtocol.filter((entry) => entry.usesNetty && isRelease(entry));
35
+ if (filtered.length === 0)
36
+ return null;
37
+ const stablePatch = filtered.find((entry) => isPatchVersion(entry.minecraftVersion));
38
+ return stablePatch ?? filtered[0] ?? null;
39
+ }
40
+ function resolveVersionInput(input) {
41
+ if (input === undefined) {
42
+ const latest = findPreferredEntryForProtocol(exports.DEFAULT_PROTOCOL_VERSION);
43
+ if (!latest)
44
+ throw new Error(`Default protocol ${exports.DEFAULT_PROTOCOL_VERSION} could not be resolved`);
45
+ return latest;
46
+ }
47
+ if (typeof input === 'number') {
48
+ const resolved = findPreferredEntryForProtocol(input);
49
+ if (!resolved)
50
+ throw new Error(`Unsupported protocol version: ${input}`);
51
+ return resolved;
52
+ }
53
+ const normalized = input.trim();
54
+ const maybeProtocol = parseMaybeProtocolNumber(normalized);
55
+ if (maybeProtocol !== null) {
56
+ const resolved = findPreferredEntryForProtocol(maybeProtocol);
57
+ if (!resolved)
58
+ throw new Error(`Unsupported protocol version: ${normalized}`);
59
+ return resolved;
60
+ }
61
+ const exact = minecraft_data_1.default.versionsByMinecraftVersion.pc[normalized];
62
+ if (exact && exact.usesNetty && isRelease(exact)) {
63
+ return exact;
64
+ }
65
+ const prefix = normalized.endsWith('.x') ? normalized.slice(0, -2) : normalized;
66
+ const releases = minecraft_data_1.default.versions.pc.filter((entry) => entry.usesNetty &&
67
+ isRelease(entry) &&
68
+ entry.version >= exports.MIN_SUPPORTED_PROTOCOL_VERSION &&
69
+ entry.version <= exports.MAX_SUPPORTED_PROTOCOL_VERSION);
70
+ const candidates = releases.filter((entry) => entry.minecraftVersion === prefix ||
71
+ entry.minecraftVersion.startsWith(`${prefix}.`) ||
72
+ entry.majorVersion === prefix);
73
+ if (candidates.length === 0) {
74
+ throw new Error(`Unsupported Minecraft version: ${input}`);
75
+ }
76
+ candidates.sort((a, b) => {
77
+ if (a.version !== b.version)
78
+ return b.version - a.version;
79
+ return b.dataVersion - a.dataVersion;
80
+ });
81
+ const stablePatch = candidates.find((entry) => isPatchVersion(entry.minecraftVersion));
82
+ return stablePatch ?? candidates[0];
83
+ }
84
+ function extractStateMappings(stateDef) {
85
+ const empty = { toClient: {}, toServer: {} };
86
+ if (!stateDef)
87
+ return empty;
88
+ const extract = (packetDef) => {
89
+ const mapperNode = packetDef?.[1]?.[0];
90
+ const mappings = mapperNode?.type?.[1]?.mappings;
91
+ if (!mappings)
92
+ return {};
93
+ const out = {};
94
+ for (const [hex, name] of Object.entries(mappings)) {
95
+ if (typeof name !== 'string')
96
+ continue;
97
+ const parsed = Number.parseInt(hex, 16);
98
+ if (!Number.isNaN(parsed))
99
+ out[name] = parsed;
100
+ }
101
+ return out;
102
+ };
103
+ return {
104
+ toClient: extract(stateDef?.toClient?.types?.packet),
105
+ toServer: extract(stateDef?.toServer?.types?.packet),
106
+ };
107
+ }
108
+ function resolvePacketId(packetMap, candidates) {
109
+ for (const name of candidates) {
110
+ const found = packetMap[name];
111
+ if (found !== undefined)
112
+ return found;
113
+ }
114
+ return undefined;
115
+ }
116
+ function resolveProtocolInfo(input) {
117
+ const entry = resolveVersionInput(input);
118
+ if (entry.version < exports.MIN_SUPPORTED_PROTOCOL_VERSION ||
119
+ entry.version > exports.MAX_SUPPORTED_PROTOCOL_VERSION) {
120
+ throw new Error(`Protocol ${entry.version} (${entry.minecraftVersion}) is out of supported range ` +
121
+ `${exports.MIN_SUPPORTED_PROTOCOL_VERSION}-${exports.MAX_SUPPORTED_PROTOCOL_VERSION}`);
122
+ }
123
+ const data = (0, minecraft_data_1.default)(entry.version);
124
+ const login = extractStateMappings(data.protocol?.login);
125
+ const play = extractStateMappings(data.protocol?.play);
126
+ const configuration = data.protocol?.configuration
127
+ ? extractStateMappings(data.protocol.configuration)
128
+ : undefined;
129
+ return {
130
+ protocolVersion: entry.version,
131
+ minecraftVersion: entry.minecraftVersion,
132
+ majorVersion: entry.majorVersion,
133
+ packetMappings: { login, play, configuration },
134
+ supportsConfigurationState: configuration !== undefined,
135
+ };
136
+ }
137
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/protocol/version.ts"],"names":[],"mappings":"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"}
package/docs/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # 📚 SpecProtocol Dokümantasyonu
2
2
 
3
- SpecProtocol, Minecraft Java Edition 1.21.4 için sıfırdan yazılmış bir bot framework'üdür.
3
+ SpecProtocol, Minecraft Java Edition 1.8-1.21.x aralığı için sıfırdan yazılmış bir bot framework'üdür.
4
4
 
5
5
  ## İçindekiler
6
6
 
@@ -95,7 +95,7 @@ import {
95
95
  } from 'specprotocol';
96
96
  ```
97
97
 
98
- ### Play (1.21.4)
98
+ ### Play (version-adaptive)
99
99
 
100
100
  **Serverbound (Client → Server):**
101
101
 
@@ -6,7 +6,7 @@
6
6
  npm install specprotocol
7
7
  ```
8
8
 
9
- > **Gereksinimler:** Node.js ≥ 18, Minecraft Java Edition 1.21.4 sunucusu
9
+ > **Gereksinimler:** Node.js ≥ 18, Minecraft Java Edition 1.8-1.21.x sunucusu
10
10
 
11
11
  ## Hızlı Başlangıç
12
12
 
@@ -101,7 +101,7 @@ src/
101
101
  │ └── states/
102
102
  │ ├── handshake.ts # Handshake paketi
103
103
  │ ├── login.ts # Login state paketleri
104
- │ └── play.ts # Play state paketleri (1.21.4 packet ID'leri)
104
+ │ └── play.ts # Play state paketleri (version-adaptive packet ID'leri)
105
105
 
106
106
  ├── auth/
107
107
  │ ├── offline.ts # Offline UUID generation (MD5-based v3)
package/package.json CHANGED
@@ -1,15 +1,13 @@
1
1
  {
2
2
  "name": "specprotocol",
3
- "version": "1.4.4",
4
- "description": "A Minecraft bot framework built from scratch in TypeScript — Mineflayer alternative with full protocol support for Java Edition 1.21.4",
3
+ "version": "1.4.5",
4
+ "description": "A Minecraft bot framework built from scratch in TypeScript with dynamic packet mapping for Java Edition 1.8-1.21.x",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "type": "commonjs",
8
8
  "scripts": {
9
9
  "build": "tsc",
10
10
  "dev": "tsc --watch",
11
- "test": "vitest run",
12
- "test:watch": "vitest",
13
11
  "lint": "tsc --noEmit",
14
12
  "prepublishOnly": "npm run build",
15
13
  "example:basic": "npx tsx examples/basic-bot.ts",
@@ -39,13 +37,15 @@
39
37
  "@types/node": "^25.3.3",
40
38
  "eslint": "^10.0.2",
41
39
  "tsx": "^4.7.0",
42
- "typescript": "^5.9.3",
43
- "vitest": "^4.0.18"
40
+ "typescript": "^5.9.3"
44
41
  },
45
42
  "files": [
46
43
  "dist/",
47
44
  "docs/",
48
45
  "README.md",
49
46
  "LICENSE"
50
- ]
47
+ ],
48
+ "dependencies": {
49
+ "minecraft-data": "^3.105.0"
50
+ }
51
51
  }