@dimzxzzx07/mc-headless 1.0.0

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.
Files changed (100) hide show
  1. package/README.md +0 -0
  2. package/dist/core/ConfigHandler.d.ts +12 -0
  3. package/dist/core/ConfigHandler.d.ts.map +1 -0
  4. package/dist/core/ConfigHandler.js +118 -0
  5. package/dist/core/ConfigHandler.js.map +1 -0
  6. package/dist/core/JavaChecker.d.ts +8 -0
  7. package/dist/core/JavaChecker.d.ts.map +1 -0
  8. package/dist/core/JavaChecker.js +68 -0
  9. package/dist/core/JavaChecker.js.map +1 -0
  10. package/dist/core/MinecraftServer.d.ts +28 -0
  11. package/dist/core/MinecraftServer.d.ts.map +1 -0
  12. package/dist/core/MinecraftServer.js +312 -0
  13. package/dist/core/MinecraftServer.js.map +1 -0
  14. package/dist/core/ServerManager.d.ts +30 -0
  15. package/dist/core/ServerManager.d.ts.map +1 -0
  16. package/dist/core/ServerManager.js +203 -0
  17. package/dist/core/ServerManager.js.map +1 -0
  18. package/dist/engines/Downloader.d.ts +16 -0
  19. package/dist/engines/Downloader.d.ts.map +1 -0
  20. package/dist/engines/Downloader.js +159 -0
  21. package/dist/engines/Downloader.js.map +1 -0
  22. package/dist/engines/FabricEngine.d.ts +11 -0
  23. package/dist/engines/FabricEngine.d.ts.map +1 -0
  24. package/dist/engines/FabricEngine.js +70 -0
  25. package/dist/engines/FabricEngine.js.map +1 -0
  26. package/dist/engines/ForgeEngine.d.ts +11 -0
  27. package/dist/engines/ForgeEngine.d.ts.map +1 -0
  28. package/dist/engines/ForgeEngine.js +84 -0
  29. package/dist/engines/ForgeEngine.js.map +1 -0
  30. package/dist/engines/PaperEngine.d.ts +11 -0
  31. package/dist/engines/PaperEngine.d.ts.map +1 -0
  32. package/dist/engines/PaperEngine.js +88 -0
  33. package/dist/engines/PaperEngine.js.map +1 -0
  34. package/dist/engines/ServerEngine.d.ts +10 -0
  35. package/dist/engines/ServerEngine.d.ts.map +1 -0
  36. package/dist/engines/ServerEngine.js +3 -0
  37. package/dist/engines/ServerEngine.js.map +1 -0
  38. package/dist/engines/VanillaEngine.d.ts +11 -0
  39. package/dist/engines/VanillaEngine.d.ts.map +1 -0
  40. package/dist/engines/VanillaEngine.js +70 -0
  41. package/dist/engines/VanillaEngine.js.map +1 -0
  42. package/dist/index.d.ts +20 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +89 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/platforms/BedrockServer.d.ts +30 -0
  47. package/dist/platforms/BedrockServer.d.ts.map +1 -0
  48. package/dist/platforms/BedrockServer.js +301 -0
  49. package/dist/platforms/BedrockServer.js.map +1 -0
  50. package/dist/platforms/GeyserBridge.d.ts +9 -0
  51. package/dist/platforms/GeyserBridge.d.ts.map +1 -0
  52. package/dist/platforms/GeyserBridge.js +98 -0
  53. package/dist/platforms/GeyserBridge.js.map +1 -0
  54. package/dist/platforms/JavaServer.d.ts +27 -0
  55. package/dist/platforms/JavaServer.d.ts.map +1 -0
  56. package/dist/platforms/JavaServer.js +237 -0
  57. package/dist/platforms/JavaServer.js.map +1 -0
  58. package/dist/types/index.d.ts +80 -0
  59. package/dist/types/index.d.ts.map +1 -0
  60. package/dist/types/index.js +3 -0
  61. package/dist/types/index.js.map +1 -0
  62. package/dist/utils/FileUtils.d.ts +20 -0
  63. package/dist/utils/FileUtils.d.ts.map +1 -0
  64. package/dist/utils/FileUtils.js +172 -0
  65. package/dist/utils/FileUtils.js.map +1 -0
  66. package/dist/utils/Logger.d.ts +26 -0
  67. package/dist/utils/Logger.d.ts.map +1 -0
  68. package/dist/utils/Logger.js +91 -0
  69. package/dist/utils/Logger.js.map +1 -0
  70. package/dist/utils/PropertiesParser.d.ts +7 -0
  71. package/dist/utils/PropertiesParser.d.ts.map +1 -0
  72. package/dist/utils/PropertiesParser.js +124 -0
  73. package/dist/utils/PropertiesParser.js.map +1 -0
  74. package/dist/utils/SystemDetector.d.ts +14 -0
  75. package/dist/utils/SystemDetector.d.ts.map +1 -0
  76. package/dist/utils/SystemDetector.js +152 -0
  77. package/dist/utils/SystemDetector.js.map +1 -0
  78. package/package.json +51 -0
  79. package/src/core/ConfigHandler.ts +136 -0
  80. package/src/core/JavaChecker.ts +71 -0
  81. package/src/core/MinecraftServer.ts +326 -0
  82. package/src/core/ServerManager.ts +196 -0
  83. package/src/engines/Downloader.ts +144 -0
  84. package/src/engines/FabricEngine.ts +49 -0
  85. package/src/engines/ForgeEngine.ts +65 -0
  86. package/src/engines/PaperEngine.ts +68 -0
  87. package/src/engines/ServerEngine.ts +10 -0
  88. package/src/engines/VanillaEngine.ts +49 -0
  89. package/src/index.ts +83 -0
  90. package/src/platforms/BedrockServer.ts +311 -0
  91. package/src/platforms/GeyserBridge.ts +83 -0
  92. package/src/platforms/JavaServer.ts +241 -0
  93. package/src/scripts/detect-os.sh +56 -0
  94. package/src/scripts/install-java.sh +38 -0
  95. package/src/types/index.ts +89 -0
  96. package/src/utils/FileUtils.ts +162 -0
  97. package/src/utils/Logger.ts +97 -0
  98. package/src/utils/PropertiesParser.ts +126 -0
  99. package/src/utils/SystemDetector.ts +127 -0
  100. package/tsconfig.json +23 -0
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.PaperEngine = void 0;
37
+ const Downloader_1 = require("./Downloader");
38
+ const FileUtils_1 = require("../utils/FileUtils");
39
+ const PropertiesParser_1 = require("../utils/PropertiesParser");
40
+ const path = __importStar(require("path"));
41
+ class PaperEngine {
42
+ async download(config, serverDir) {
43
+ const downloadInfo = Downloader_1.Downloader.getPaperURL(config.version);
44
+ return Downloader_1.Downloader.downloadFile(downloadInfo, serverDir);
45
+ }
46
+ async prepare(config, serverDir) {
47
+ if (config.autoAcceptEula) {
48
+ await FileUtils_1.FileUtils.writeFile(path.join(serverDir, 'eula.txt'), 'eula=true');
49
+ }
50
+ const properties = PropertiesParser_1.PropertiesParser.generateServerProperties(config);
51
+ await FileUtils_1.FileUtils.writeProperties(path.join(serverDir, 'server.properties'), properties);
52
+ }
53
+ getJavaArgs(config) {
54
+ const args = [];
55
+ args.push(`-Xms${config.memory.init}`);
56
+ args.push(`-Xmx${config.memory.max}`);
57
+ if (config.memory.useAikarsFlags) {
58
+ args.push('-XX:+UseG1GC');
59
+ args.push('-XX:+ParallelRefProcEnabled');
60
+ args.push('-XX:MaxGCPauseMillis=200');
61
+ args.push('-XX:+UnlockExperimentalVMOptions');
62
+ args.push('-XX:+DisableExplicitGC');
63
+ args.push('-XX:+AlwaysPreTouch');
64
+ args.push('-XX:G1HeapWastePercent=5');
65
+ args.push('-XX:G1MixedGCCountTarget=4');
66
+ args.push('-XX:InitiatingHeapOccupancyPercent=15');
67
+ args.push('-XX:G1MixedGCLiveThresholdPercent=90');
68
+ args.push('-XX:G1RSetUpdatingPauseTimePercent=5');
69
+ args.push('-XX:SurvivorRatio=32');
70
+ args.push('-XX:+PerfDisableSharedMem');
71
+ args.push('-XX:MaxTenuringThreshold=1');
72
+ args.push('-Dusing.aikars.flags=https://mcflags.emc.gs');
73
+ args.push('-Daikars.new.flags=true');
74
+ }
75
+ return args;
76
+ }
77
+ getServerJar(jarPath) {
78
+ return jarPath;
79
+ }
80
+ getServerArgs() {
81
+ return ['nogui'];
82
+ }
83
+ getServerType() {
84
+ return 'paper';
85
+ }
86
+ }
87
+ exports.PaperEngine = PaperEngine;
88
+ //# sourceMappingURL=PaperEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaperEngine.js","sourceRoot":"","sources":["../../src/engines/PaperEngine.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,6CAA0C;AAC1C,kDAA+C;AAC/C,gEAA6D;AAC7D,2CAA6B;AAE7B,MAAa,WAAW;IACb,KAAK,CAAC,QAAQ,CAAC,MAAuB,EAAE,SAAiB;QAC5D,MAAM,YAAY,GAAG,uBAAU,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5D,OAAO,uBAAU,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,MAAuB,EAAE,SAAiB;QAC3D,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,qBAAS,CAAC,SAAS,CACrB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAChC,WAAW,CACd,CAAC;QACN,CAAC;QAED,MAAM,UAAU,GAAG,mCAAgB,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,qBAAS,CAAC,eAAe,CAC3B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,EACzC,UAAU,CACb,CAAC;IACN,CAAC;IAEM,WAAW,CAAC,MAAuB;QACtC,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAEtC,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACnD,IAAI,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YACzD,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,YAAY,CAAC,OAAe;QAC/B,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,aAAa;QAChB,OAAO,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAEM,aAAa;QAChB,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ;AA5DD,kCA4DC"}
@@ -0,0 +1,10 @@
1
+ import { MinecraftConfig } from '../types';
2
+ export interface ServerEngine {
3
+ download(config: MinecraftConfig, serverDir: string): Promise<string>;
4
+ prepare(config: MinecraftConfig, serverDir: string, jarPath?: string): Promise<void>;
5
+ getJavaArgs(config: MinecraftConfig): string[];
6
+ getServerJar(jarPath: string): string;
7
+ getServerArgs(): string[];
8
+ getServerType(): string;
9
+ }
10
+ //# sourceMappingURL=ServerEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerEngine.d.ts","sourceRoot":"","sources":["../../src/engines/ServerEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtE,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAAC;IAC/C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,aAAa,IAAI,MAAM,EAAE,CAAC;IAC1B,aAAa,IAAI,MAAM,CAAC;CAC3B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ServerEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerEngine.js","sourceRoot":"","sources":["../../src/engines/ServerEngine.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { ServerEngine } from './ServerEngine';
2
+ import { MinecraftConfig } from '../types';
3
+ export declare class VanillaEngine implements ServerEngine {
4
+ download(config: MinecraftConfig, serverDir: string): Promise<string>;
5
+ prepare(config: MinecraftConfig, serverDir: string): Promise<void>;
6
+ getJavaArgs(config: MinecraftConfig): string[];
7
+ getServerJar(jarPath: string): string;
8
+ getServerArgs(): string[];
9
+ getServerType(): string;
10
+ }
11
+ //# sourceMappingURL=VanillaEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VanillaEngine.d.ts","sourceRoot":"","sources":["../../src/engines/VanillaEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAM3C,qBAAa,aAAc,YAAW,YAAY;IACjC,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKrE,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAexE,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE;IAS9C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIrC,aAAa,IAAI,MAAM,EAAE;IAIzB,aAAa,IAAI,MAAM;CAGjC"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.VanillaEngine = void 0;
37
+ const Downloader_1 = require("./Downloader");
38
+ const FileUtils_1 = require("../utils/FileUtils");
39
+ const PropertiesParser_1 = require("../utils/PropertiesParser");
40
+ const path = __importStar(require("path"));
41
+ class VanillaEngine {
42
+ async download(config, serverDir) {
43
+ const downloadInfo = Downloader_1.Downloader.getVanillaURL(config.version);
44
+ return Downloader_1.Downloader.downloadFile(downloadInfo, serverDir);
45
+ }
46
+ async prepare(config, serverDir) {
47
+ if (config.autoAcceptEula) {
48
+ await FileUtils_1.FileUtils.writeFile(path.join(serverDir, 'eula.txt'), 'eula=true');
49
+ }
50
+ const properties = PropertiesParser_1.PropertiesParser.generateServerProperties(config);
51
+ await FileUtils_1.FileUtils.writeProperties(path.join(serverDir, 'server.properties'), properties);
52
+ }
53
+ getJavaArgs(config) {
54
+ const args = [];
55
+ args.push(`-Xms${config.memory.init}`);
56
+ args.push(`-Xmx${config.memory.max}`);
57
+ return args;
58
+ }
59
+ getServerJar(jarPath) {
60
+ return jarPath;
61
+ }
62
+ getServerArgs() {
63
+ return ['nogui'];
64
+ }
65
+ getServerType() {
66
+ return 'vanilla';
67
+ }
68
+ }
69
+ exports.VanillaEngine = VanillaEngine;
70
+ //# sourceMappingURL=VanillaEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VanillaEngine.js","sourceRoot":"","sources":["../../src/engines/VanillaEngine.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,6CAA0C;AAC1C,kDAA+C;AAC/C,gEAA6D;AAC7D,2CAA6B;AAE7B,MAAa,aAAa;IACf,KAAK,CAAC,QAAQ,CAAC,MAAuB,EAAE,SAAiB;QAC5D,MAAM,YAAY,GAAG,uBAAU,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,OAAO,uBAAU,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,MAAuB,EAAE,SAAiB;QAC3D,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,qBAAS,CAAC,SAAS,CACrB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAChC,WAAW,CACd,CAAC;QACN,CAAC;QAED,MAAM,UAAU,GAAG,mCAAgB,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,qBAAS,CAAC,eAAe,CAC3B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,EACzC,UAAU,CACb,CAAC;IACN,CAAC;IAEM,WAAW,CAAC,MAAuB;QACtC,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,YAAY,CAAC,OAAe;QAC/B,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,aAAa;QAChB,OAAO,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAEM,aAAa;QAChB,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ;AAzCD,sCAyCC"}
@@ -0,0 +1,20 @@
1
+ import { MinecraftServer } from './core/MinecraftServer';
2
+ export * from './core/MinecraftServer';
3
+ export * from './core/ConfigHandler';
4
+ export * from './core/JavaChecker';
5
+ export * from './core/ServerManager';
6
+ export * from './platforms/JavaServer';
7
+ export * from './platforms/BedrockServer';
8
+ export * from './platforms/GeyserBridge';
9
+ export * from './engines/Downloader';
10
+ export * from './engines/PaperEngine';
11
+ export * from './engines/VanillaEngine';
12
+ export * from './engines/ForgeEngine';
13
+ export * from './engines/FabricEngine';
14
+ export * from './utils/Logger';
15
+ export * from './utils/FileUtils';
16
+ export * from './utils/SystemDetector';
17
+ export * from './utils/PropertiesParser';
18
+ export * from './types';
19
+ export default MinecraftServer;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIzD,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,SAAS,CAAC;AAExB,eAAe,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ const MinecraftServer_1 = require("./core/MinecraftServer");
18
+ const Logger_1 = require("./utils/Logger");
19
+ const SystemDetector_1 = require("./utils/SystemDetector");
20
+ __exportStar(require("./core/MinecraftServer"), exports);
21
+ __exportStar(require("./core/ConfigHandler"), exports);
22
+ __exportStar(require("./core/JavaChecker"), exports);
23
+ __exportStar(require("./core/ServerManager"), exports);
24
+ __exportStar(require("./platforms/JavaServer"), exports);
25
+ __exportStar(require("./platforms/BedrockServer"), exports);
26
+ __exportStar(require("./platforms/GeyserBridge"), exports);
27
+ __exportStar(require("./engines/Downloader"), exports);
28
+ __exportStar(require("./engines/PaperEngine"), exports);
29
+ __exportStar(require("./engines/VanillaEngine"), exports);
30
+ __exportStar(require("./engines/ForgeEngine"), exports);
31
+ __exportStar(require("./engines/FabricEngine"), exports);
32
+ __exportStar(require("./utils/Logger"), exports);
33
+ __exportStar(require("./utils/FileUtils"), exports);
34
+ __exportStar(require("./utils/SystemDetector"), exports);
35
+ __exportStar(require("./utils/PropertiesParser"), exports);
36
+ __exportStar(require("./types"), exports);
37
+ exports.default = MinecraftServer_1.MinecraftServer;
38
+ if (require.main === module) {
39
+ const logger = Logger_1.Logger.getInstance();
40
+ logger.setLogLevel(Logger_1.LogLevel.INFO);
41
+ const systemInfo = SystemDetector_1.SystemDetector.getSystemInfo();
42
+ logger.info('System Information:', systemInfo);
43
+ const server = new MinecraftServer_1.MinecraftServer({
44
+ platform: 'java',
45
+ version: '1.20.1',
46
+ type: 'paper',
47
+ memory: {
48
+ init: '1G',
49
+ max: '2G',
50
+ useAikarsFlags: true
51
+ },
52
+ world: {
53
+ difficulty: 'normal',
54
+ hardcore: false,
55
+ gamemode: 'survival',
56
+ maxPlayers: 10,
57
+ viewDistance: 10,
58
+ levelName: 'world'
59
+ }
60
+ });
61
+ server.on('ready', (info) => {
62
+ logger.success(`
63
+ Mc Headless - Powered By Dimzxzzx07
64
+ Address: ${info.ip}:${info.port}
65
+ Version: ${info.version} ${info.type}
66
+ Players: 0/${info.maxPlayers}
67
+ `);
68
+ });
69
+ server.on('player-join', (player) => {
70
+ logger.info(`Player joined: ${player.name}`);
71
+ });
72
+ server.on('player-leave', (name) => {
73
+ logger.info(`Player left: ${name}`);
74
+ });
75
+ server.start().catch(error => {
76
+ logger.error('Failed to start server:', error);
77
+ });
78
+ process.on('SIGINT', async () => {
79
+ logger.info('Received SIGINT, stopping server...');
80
+ await server.stop();
81
+ process.exit(0);
82
+ });
83
+ process.on('SIGTERM', async () => {
84
+ logger.info('Received SIGTERM, stopping server...');
85
+ await server.stop();
86
+ process.exit(0);
87
+ });
88
+ }
89
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAAyD;AACzD,2CAAkD;AAClD,2DAAwD;AAExD,yDAAuC;AACvC,uDAAqC;AACrC,qDAAmC;AACnC,uDAAqC;AACrC,yDAAuC;AACvC,4DAA0C;AAC1C,2DAAyC;AACzC,uDAAqC;AACrC,wDAAsC;AACtC,0DAAwC;AACxC,wDAAsC;AACtC,yDAAuC;AACvC,iDAA+B;AAC/B,oDAAkC;AAClC,yDAAuC;AACvC,2DAAyC;AACzC,0CAAwB;AAExB,kBAAe,iCAAe,CAAC;AAE/B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,eAAM,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,CAAC,WAAW,CAAC,iBAAQ,CAAC,IAAI,CAAC,CAAC;IAElC,MAAM,UAAU,GAAG,+BAAc,CAAC,aAAa,EAAE,CAAC;IAClD,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,IAAI,iCAAe,CAAC;QAC/B,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE;YACJ,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,IAAI;YACT,cAAc,EAAE,IAAI;SACvB;QACD,KAAK,EAAE;YACH,UAAU,EAAE,QAAQ;YACpB,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,UAAU;YACpB,UAAU,EAAE,EAAE;YACd,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE,OAAO;SACrB;KACJ,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,CAAC,OAAO,CAAC;;gBAEP,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI;gBACpB,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI;kBACvB,IAAI,CAAC,UAAU;SACxB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;QAChC,MAAM,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE;QAC/B,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACzB,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC5B,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACnD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACpD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { EventEmitter } from 'events';
2
+ import { MinecraftConfig, ServerInfo, Player } from '../types';
3
+ export declare class BedrockServer extends EventEmitter {
4
+ private config;
5
+ private logger;
6
+ private process;
7
+ private serverInfo;
8
+ private players;
9
+ private startTime;
10
+ private serverDir;
11
+ private serverExecutable;
12
+ constructor(config: MinecraftConfig, serverDir: string);
13
+ download(): Promise<string>;
14
+ private getPlatform;
15
+ private getDownloadUrl;
16
+ private extract;
17
+ private findExecutable;
18
+ prepare(): Promise<void>;
19
+ start(): Promise<ServerInfo>;
20
+ private setupEventHandlers;
21
+ private handlePlayerJoin;
22
+ private handlePlayerLeave;
23
+ private monitorResources;
24
+ sendCommand(command: string): void;
25
+ stop(): Promise<void>;
26
+ getInfo(): ServerInfo;
27
+ getPlayers(): Player[];
28
+ isRunning(): boolean;
29
+ }
30
+ //# sourceMappingURL=BedrockServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BedrockServer.d.ts","sourceRoot":"","sources":["../../src/platforms/BedrockServer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAK/D,qBAAa,aAAc,SAAQ,YAAY;IAC3C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAc;gBAE1B,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM;IAqBzC,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAwCxC,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,cAAc;YAcR,OAAO;IAmBrB,OAAO,CAAC,cAAc;IAkBT,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBxB,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC;IAuBzC,OAAO,CAAC,kBAAkB;IAqC1B,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,gBAAgB;IAiBjB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBrB,OAAO,IAAI,UAAU;IAIrB,UAAU,IAAI,MAAM,EAAE;IAItB,SAAS,IAAI,OAAO;CAG9B"}
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.BedrockServer = void 0;
40
+ const child_process_1 = require("child_process");
41
+ const events_1 = require("events");
42
+ const fs = __importStar(require("fs-extra"));
43
+ const path = __importStar(require("path"));
44
+ const os = __importStar(require("os"));
45
+ const axios_1 = __importDefault(require("axios"));
46
+ const tar = __importStar(require("tar"));
47
+ const pidusage_1 = __importDefault(require("pidusage"));
48
+ const AdmZip = require('adm-zip');
49
+ const Logger_1 = require("../utils/Logger");
50
+ const FileUtils_1 = require("../utils/FileUtils");
51
+ const PropertiesParser_1 = require("../utils/PropertiesParser");
52
+ class BedrockServer extends events_1.EventEmitter {
53
+ config;
54
+ logger;
55
+ process = null;
56
+ serverInfo;
57
+ players = new Map();
58
+ startTime = null;
59
+ serverDir;
60
+ serverExecutable = '';
61
+ constructor(config, serverDir) {
62
+ super();
63
+ this.config = config;
64
+ this.serverDir = serverDir;
65
+ this.logger = Logger_1.Logger.getInstance();
66
+ this.serverInfo = {
67
+ pid: 0,
68
+ ip: this.config.network.ip,
69
+ port: this.config.network.bedrockPort || 19132,
70
+ version: this.config.version,
71
+ type: 'bedrock',
72
+ platform: 'bedrock',
73
+ players: 0,
74
+ maxPlayers: this.config.world.maxPlayers,
75
+ uptime: 0,
76
+ memory: { used: 0, max: 0 },
77
+ status: 'stopped'
78
+ };
79
+ }
80
+ async download() {
81
+ this.logger.info('Downloading Bedrock server...');
82
+ const platform = this.getPlatform();
83
+ const downloadUrl = this.getDownloadUrl(platform);
84
+ const fileName = `bedrock-server-${this.config.version}.zip`;
85
+ const downloadPath = path.join(this.serverDir, fileName);
86
+ const writer = fs.createWriteStream(downloadPath);
87
+ const response = await (0, axios_1.default)({
88
+ method: 'GET',
89
+ url: downloadUrl,
90
+ responseType: 'stream'
91
+ });
92
+ const totalLength = response.headers['content-length'];
93
+ let downloadedLength = 0;
94
+ response.data.on('data', (chunk) => {
95
+ downloadedLength += chunk.length;
96
+ if (totalLength) {
97
+ const progress = (downloadedLength / parseInt(totalLength) * 100).toFixed(2);
98
+ process.stdout.write(`\rDownloading: ${progress}%`);
99
+ }
100
+ });
101
+ response.data.pipe(writer);
102
+ return new Promise((resolve, reject) => {
103
+ writer.on('finish', async () => {
104
+ process.stdout.write('\n');
105
+ this.logger.success('Download complete');
106
+ await this.extract(downloadPath);
107
+ resolve(downloadPath);
108
+ });
109
+ writer.on('error', reject);
110
+ });
111
+ }
112
+ getPlatform() {
113
+ const arch = os.arch();
114
+ const platform = os.platform();
115
+ if (platform === 'linux') {
116
+ if (arch === 'x64')
117
+ return 'linux-x86_64';
118
+ if (arch === 'arm64')
119
+ return 'linux-arm64';
120
+ if (arch === 'arm')
121
+ return 'linux-arm32';
122
+ }
123
+ else if (platform === 'win32') {
124
+ return 'windows-x86_64';
125
+ }
126
+ throw new Error(`Unsupported platform: ${platform} ${arch}`);
127
+ }
128
+ getDownloadUrl(platform) {
129
+ const version = this.config.version;
130
+ const baseUrl = 'https://www.minecraft.net/bedrockdedicatedserver/bin-linux';
131
+ const urls = {
132
+ 'linux-x86_64': `${baseUrl}/bedrock-server-${version}.zip`,
133
+ 'linux-arm64': `${baseUrl}-arm64/bedrock-server-${version}.zip`,
134
+ 'linux-arm32': `${baseUrl}-arm32/bedrock-server-${version}.zip`,
135
+ 'windows-x86_64': `https://www.minecraft.net/bedrockdedicatedserver/bin-win64/bedrock-server-${version}.zip`
136
+ };
137
+ return urls[platform];
138
+ }
139
+ async extract(zipPath) {
140
+ this.logger.info('Extracting Bedrock server...');
141
+ if (zipPath.endsWith('.zip')) {
142
+ const zip = new AdmZip(zipPath);
143
+ zip.extractAllTo(this.serverDir, true);
144
+ }
145
+ else if (zipPath.endsWith('.tar.gz')) {
146
+ await tar.extract({
147
+ file: zipPath,
148
+ cwd: this.serverDir
149
+ });
150
+ }
151
+ await fs.remove(zipPath);
152
+ this.logger.success('Extraction complete');
153
+ this.findExecutable();
154
+ }
155
+ findExecutable() {
156
+ const possibleNames = ['bedrock_server', 'bedrock_server.exe', 'bedrock_server-arm64', 'bedrock_server-arm32'];
157
+ for (const name of possibleNames) {
158
+ const exePath = path.join(this.serverDir, name);
159
+ if (fs.existsSync(exePath)) {
160
+ this.serverExecutable = exePath;
161
+ fs.chmodSync(exePath, 0o755);
162
+ this.logger.debug(`Found executable: ${name}`);
163
+ break;
164
+ }
165
+ }
166
+ if (!this.serverExecutable) {
167
+ throw new Error('Could not find Bedrock server executable');
168
+ }
169
+ }
170
+ async prepare() {
171
+ this.logger.info('Preparing Bedrock server...');
172
+ const properties = PropertiesParser_1.PropertiesParser.generateBedrockProperties(this.config);
173
+ const serverPropsPath = path.join(this.serverDir, 'server.properties');
174
+ await FileUtils_1.FileUtils.writeProperties(serverPropsPath, properties);
175
+ const permissionsPath = path.join(this.serverDir, 'permissions.json');
176
+ if (!await FileUtils_1.FileUtils.fileExists(permissionsPath)) {
177
+ await FileUtils_1.FileUtils.writeFile(permissionsPath, JSON.stringify([], null, 2));
178
+ }
179
+ const whitelistPath = path.join(this.serverDir, 'whitelist.json');
180
+ if (!await FileUtils_1.FileUtils.fileExists(whitelistPath)) {
181
+ await FileUtils_1.FileUtils.writeFile(whitelistPath, JSON.stringify([], null, 2));
182
+ }
183
+ this.logger.success('Bedrock server prepared');
184
+ }
185
+ async start() {
186
+ if (!this.serverExecutable) {
187
+ this.findExecutable();
188
+ }
189
+ this.logger.info(`Launching Bedrock server: ${this.serverExecutable}`);
190
+ this.process = (0, child_process_1.spawn)(this.serverExecutable, [], {
191
+ cwd: this.serverDir,
192
+ stdio: 'pipe'
193
+ });
194
+ this.serverInfo.pid = this.process.pid;
195
+ this.serverInfo.status = 'starting';
196
+ this.startTime = new Date();
197
+ this.setupEventHandlers();
198
+ this.monitorResources();
199
+ return this.serverInfo;
200
+ }
201
+ setupEventHandlers() {
202
+ this.process.stdout.on('data', (data) => {
203
+ const output = data.toString();
204
+ process.stdout.write(`[Bedrock] ${output}`);
205
+ if (output.includes('Server started')) {
206
+ this.serverInfo.status = 'running';
207
+ this.logger.success('Bedrock server started successfully!');
208
+ this.emit('ready', this.serverInfo);
209
+ }
210
+ if (output.includes('Player connected:')) {
211
+ const match = output.match(/Player connected: (\w+)/);
212
+ if (match) {
213
+ this.handlePlayerJoin(match[1]);
214
+ }
215
+ }
216
+ if (output.includes('Player disconnected:')) {
217
+ const match = output.match(/Player disconnected: (\w+)/);
218
+ if (match) {
219
+ this.handlePlayerLeave(match[1]);
220
+ }
221
+ }
222
+ });
223
+ this.process.stderr.on('data', (data) => {
224
+ process.stderr.write(`[Bedrock Error] ${data.toString()}`);
225
+ });
226
+ this.process.on('exit', (code) => {
227
+ this.serverInfo.status = 'stopped';
228
+ this.logger.warning(`Bedrock server stopped with code ${code}`);
229
+ this.emit('stop', { code });
230
+ });
231
+ }
232
+ handlePlayerJoin(name) {
233
+ const player = {
234
+ name,
235
+ uuid: '',
236
+ ip: '',
237
+ ping: 0,
238
+ connectedAt: new Date()
239
+ };
240
+ this.players.set(name, player);
241
+ this.serverInfo.players = this.players.size;
242
+ this.emit('player-join', player);
243
+ }
244
+ handlePlayerLeave(name) {
245
+ this.players.delete(name);
246
+ this.serverInfo.players = this.players.size;
247
+ this.emit('player-leave', name);
248
+ }
249
+ monitorResources() {
250
+ setInterval(async () => {
251
+ if (this.serverInfo.status === 'running' && this.process) {
252
+ try {
253
+ const stats = await (0, pidusage_1.default)(this.process.pid);
254
+ this.serverInfo.memory = {
255
+ used: Math.round(stats.memory / 1024 / 1024),
256
+ max: 0
257
+ };
258
+ this.serverInfo.uptime = Math.floor((Date.now() - (this.startTime?.getTime() || 0)) / 1000);
259
+ this.emit('resource', this.serverInfo);
260
+ }
261
+ catch { }
262
+ }
263
+ }, 5000);
264
+ }
265
+ sendCommand(command) {
266
+ if (!this.process || this.serverInfo.status !== 'running') {
267
+ throw new Error('Server not running');
268
+ }
269
+ this.process.stdin.write(command + '\n');
270
+ this.logger.debug(`Command sent: ${command}`);
271
+ }
272
+ stop() {
273
+ return new Promise((resolve) => {
274
+ if (!this.process) {
275
+ resolve();
276
+ return;
277
+ }
278
+ this.logger.info('Stopping Bedrock server...');
279
+ this.serverInfo.status = 'stopping';
280
+ this.sendCommand('stop');
281
+ setTimeout(() => {
282
+ if (this.process) {
283
+ this.process.kill();
284
+ this.process = null;
285
+ }
286
+ resolve();
287
+ }, 5000);
288
+ });
289
+ }
290
+ getInfo() {
291
+ return this.serverInfo;
292
+ }
293
+ getPlayers() {
294
+ return Array.from(this.players.values());
295
+ }
296
+ isRunning() {
297
+ return this.serverInfo.status === 'running';
298
+ }
299
+ }
300
+ exports.BedrockServer = BedrockServer;
301
+ //# sourceMappingURL=BedrockServer.js.map