@lunnos/hyt 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 (66) hide show
  1. package/README.md +131 -0
  2. package/dist/commands/build.d.ts +3 -0
  3. package/dist/commands/build.d.ts.map +1 -0
  4. package/dist/commands/build.js +74 -0
  5. package/dist/commands/build.js.map +1 -0
  6. package/dist/commands/dev.d.ts +3 -0
  7. package/dist/commands/dev.d.ts.map +1 -0
  8. package/dist/commands/dev.js +179 -0
  9. package/dist/commands/dev.js.map +1 -0
  10. package/dist/commands/init.d.ts +3 -0
  11. package/dist/commands/init.d.ts.map +1 -0
  12. package/dist/commands/init.js +269 -0
  13. package/dist/commands/init.js.map +1 -0
  14. package/dist/commands/setup.d.ts +3 -0
  15. package/dist/commands/setup.d.ts.map +1 -0
  16. package/dist/commands/setup.js +164 -0
  17. package/dist/commands/setup.js.map +1 -0
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +20 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/utils/config.d.ts +11 -0
  23. package/dist/utils/config.d.ts.map +1 -0
  24. package/dist/utils/config.js +39 -0
  25. package/dist/utils/config.js.map +1 -0
  26. package/dist/utils/download.d.ts +9 -0
  27. package/dist/utils/download.d.ts.map +1 -0
  28. package/dist/utils/download.js +89 -0
  29. package/dist/utils/download.js.map +1 -0
  30. package/dist/utils/errors.d.ts +13 -0
  31. package/dist/utils/errors.d.ts.map +1 -0
  32. package/dist/utils/errors.js +25 -0
  33. package/dist/utils/errors.js.map +1 -0
  34. package/dist/utils/gradle.d.ts +7 -0
  35. package/dist/utils/gradle.d.ts.map +1 -0
  36. package/dist/utils/gradle.js +50 -0
  37. package/dist/utils/gradle.js.map +1 -0
  38. package/dist/utils/hytale.d.ts +5 -0
  39. package/dist/utils/hytale.d.ts.map +1 -0
  40. package/dist/utils/hytale.js +84 -0
  41. package/dist/utils/hytale.js.map +1 -0
  42. package/dist/utils/java.d.ts +7 -0
  43. package/dist/utils/java.d.ts.map +1 -0
  44. package/dist/utils/java.js +53 -0
  45. package/dist/utils/java.js.map +1 -0
  46. package/dist/utils/javaDownload.d.ts +9 -0
  47. package/dist/utils/javaDownload.d.ts.map +1 -0
  48. package/dist/utils/javaDownload.js +185 -0
  49. package/dist/utils/javaDownload.js.map +1 -0
  50. package/dist/utils/paths.d.ts +9 -0
  51. package/dist/utils/paths.d.ts.map +1 -0
  52. package/dist/utils/paths.js +19 -0
  53. package/dist/utils/paths.js.map +1 -0
  54. package/dist/utils/server.d.ts +16 -0
  55. package/dist/utils/server.d.ts.map +1 -0
  56. package/dist/utils/server.js +70 -0
  57. package/dist/utils/server.js.map +1 -0
  58. package/dist/utils/ui.d.ts +12 -0
  59. package/dist/utils/ui.d.ts.map +1 -0
  60. package/dist/utils/ui.js +22 -0
  61. package/dist/utils/ui.js.map +1 -0
  62. package/dist/utils/watcher.d.ts +10 -0
  63. package/dist/utils/watcher.d.ts.map +1 -0
  64. package/dist/utils/watcher.js +45 -0
  65. package/dist/utils/watcher.js.map +1 -0
  66. package/package.json +44 -0
package/README.md ADDED
@@ -0,0 +1,131 @@
1
+ # HYT - Hytale Development Tool
2
+
3
+ A command-line interface for Hytale plugin development that automates project setup, building, and hot-reload development workflows.
4
+
5
+ ## Features
6
+
7
+ **Quick Setup**
8
+ - Automatic Java 25 detection and installation
9
+ - Hytale installation discovery
10
+ - Configuration management
11
+
12
+ **Project Initialization**
13
+ - Scaffolds new plugin projects from template
14
+ - Decompiles Hytale server JAR for reference sources (CFR)
15
+ - Configures Gradle build system
16
+ - Git repository initialization
17
+
18
+ **Build System**
19
+ - Gradle wrapper integration
20
+ - One-command builds
21
+ - Automatic JAR output to mods folder
22
+
23
+ **Development Mode**
24
+ - File watching with automatic rebuild on changes
25
+ - Hot-reload server restart
26
+ - Integrated Hytale server management
27
+ - Live feedback with progress indicators
28
+
29
+ ## Requirements
30
+
31
+ - Node.js 18 or higher
32
+ - Java 25 (auto-installed if missing)
33
+ - Hytale installation
34
+
35
+ ## Installation
36
+
37
+ ```bash
38
+ npm install -g @lunnos/hyt
39
+ ```
40
+
41
+ After installation, the `hyt` command will be available globally.
42
+
43
+ ## Usage
44
+
45
+ ### Initial Setup
46
+
47
+ Configure Java and Hytale paths:
48
+
49
+ ```bash
50
+ hyt setup
51
+ ```
52
+
53
+ Options:
54
+ - `--java-path <path>` - Specify Java executable manually
55
+ - `--hytale-path <path>` - Specify Hytale installation manually
56
+
57
+ ### Create New Plugin
58
+
59
+ ```bash
60
+ hyt init my-plugin
61
+ ```
62
+
63
+ This creates a complete project structure with:
64
+ - Plugin source template
65
+ - Hytale server files
66
+ - Decompiled reference sources
67
+ - Gradle build configuration
68
+
69
+ Options:
70
+ - `--skip-cfr` - Skip decompiler download
71
+ - `--skip-git` - Skip git initialization
72
+
73
+ ### Build Plugin
74
+
75
+ ```bash
76
+ cd my-plugin/Server/Plugins/my-plugin
77
+ hyt build
78
+ ```
79
+
80
+ Options:
81
+ - `--copy` - Automatically copy JAR to mods folder
82
+
83
+ ### Development Mode
84
+
85
+ Start file watching with hot reload:
86
+
87
+ ```bash
88
+ cd my-plugin/Server/Plugins/my-plugin
89
+ hyt dev
90
+ ```
91
+
92
+ This will:
93
+ 1. Build your plugin
94
+ 2. Start the Hytale server
95
+ 3. Watch for file changes
96
+ 4. Rebuild and restart on save
97
+
98
+ Options:
99
+ - `--no-initial-build` - Skip initial build
100
+
101
+ ## Project Structure
102
+
103
+ ```
104
+ my-plugin/
105
+ ā”œā”€ā”€ Assets.zip # Hytale game assets
106
+ ā”œā”€ā”€ mods/ # Compiled plugin JARs
107
+ └── Server/
108
+ ā”œā”€ā”€ HytaleServer.jar
109
+ └── Plugins/
110
+ └── my-plugin/ # Your plugin source
111
+ ā”œā”€ā”€ app/
112
+ │ └── src/
113
+ ā”œā”€ā”€ gradle/
114
+ ā”œā”€ā”€ gradlew
115
+ └── build.gradle
116
+ ```
117
+
118
+ ## Configuration
119
+
120
+ Configuration is stored in `~/.hyt/config.json`:
121
+
122
+ ```json
123
+ {
124
+ "javaPath": "/path/to/java",
125
+ "hytaleInstallPath": "/path/to/hytale"
126
+ }
127
+ ```
128
+
129
+ ## License
130
+
131
+ MIT
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function buildCommand(): Command;
3
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,YAAY,IAAI,OAAO,CA4EtC"}
@@ -0,0 +1,74 @@
1
+ import { Command } from 'commander';
2
+ import fs from 'fs/promises';
3
+ import path from 'path';
4
+ import { runGradleBuild, hasGradleWrapper } from '../utils/gradle.js';
5
+ import { getBuildOutputDir } from '../utils/paths.js';
6
+ import { startSpinner, success, error, info } from '../utils/ui.js';
7
+ import { GradleError } from '../utils/errors.js';
8
+ export function buildCommand() {
9
+ return new Command('build')
10
+ .description('Build your Hytale plugin')
11
+ .option('--copy', 'Copy built JAR to mods folder after build')
12
+ .action(async (options) => {
13
+ try {
14
+ const projectDir = process.cwd();
15
+ console.log('\nšŸ”Ø Building Hytale plugin...\n');
16
+ // Check if we're in a valid plugin directory
17
+ if (!(await hasGradleWrapper(projectDir))) {
18
+ throw new GradleError('No Gradle wrapper found in current directory.\n' +
19
+ 'Make sure you are in your plugin directory (e.g., Server/Plugins/your-plugin/)');
20
+ }
21
+ // Run Gradle build
22
+ info('Running Gradle build...\n');
23
+ await runGradleBuild(projectDir);
24
+ // Find the built JAR
25
+ const buildOutputDir = getBuildOutputDir(path.join(projectDir, 'app'));
26
+ let jarFile = null;
27
+ try {
28
+ const files = await fs.readdir(buildOutputDir);
29
+ jarFile = files.find(f => f.endsWith('.jar') && !f.includes('-sources')) || null;
30
+ }
31
+ catch {
32
+ // Build output dir might not exist if build failed
33
+ }
34
+ if (!jarFile) {
35
+ throw new GradleError('Build completed but no JAR file found.\n' +
36
+ `Expected location: ${buildOutputDir}`);
37
+ }
38
+ const jarPath = path.join(buildOutputDir, jarFile);
39
+ success(`\n✨ Build successful!`);
40
+ console.log(`\nšŸ“¦ Output: ${jarPath}`);
41
+ // Copy to mods folder if requested
42
+ if (options.copy) {
43
+ const copySpinner = startSpinner('Copying JAR to mods folder...');
44
+ // Navigate up to find mods folder
45
+ // Expected structure: project/Server/Plugins/plugin-name/ (we're here)
46
+ // Mods folder: project/mods/
47
+ const modsDir = path.resolve(projectDir, '..', '..', '..', 'mods');
48
+ try {
49
+ await fs.access(modsDir);
50
+ const destPath = path.join(modsDir, jarFile);
51
+ await fs.copyFile(jarPath, destPath);
52
+ copySpinner.succeed(`Copied to ${destPath}`);
53
+ }
54
+ catch {
55
+ copySpinner.fail('Could not find mods folder. Copy manually.');
56
+ }
57
+ }
58
+ else {
59
+ console.log(`\nšŸ’” Tip: Use --copy to automatically copy the JAR to the mods folder`);
60
+ }
61
+ console.log(`\nšŸš€ To deploy: Copy the JAR to your Server/mods/ folder`);
62
+ }
63
+ catch (err) {
64
+ if (err instanceof GradleError) {
65
+ error(err.message);
66
+ }
67
+ else {
68
+ error(`Build failed: ${err.message}`);
69
+ }
70
+ process.exit(1);
71
+ }
72
+ });
73
+ }
74
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function devCommand(): Command;
3
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,UAAU,IAAI,OAAO,CAyKpC"}
@@ -0,0 +1,179 @@
1
+ import { Command } from 'commander';
2
+ import path from 'path';
3
+ import fs from 'fs/promises';
4
+ import { loadConfig } from '../utils/config.js';
5
+ import { runGradleBuild, hasGradleWrapper } from '../utils/gradle.js';
6
+ import { getBuildOutputDir } from '../utils/paths.js';
7
+ import { watchFiles, stopWatcher } from '../utils/watcher.js';
8
+ import { launchHytaleServer, stopHytaleServer, restartHytaleServer, isServerRunning } from '../utils/server.js';
9
+ import { startSpinner, success, error, info, warn } from '../utils/ui.js';
10
+ import { ConfigError, GradleError, HytaleError } from '../utils/errors.js';
11
+ let isRebuilding = false;
12
+ let watcher = null;
13
+ export function devCommand() {
14
+ return new Command('dev')
15
+ .description('Start development mode with hot reload')
16
+ .option('--no-initial-build', 'Skip initial build on startup')
17
+ .action(async (options) => {
18
+ try {
19
+ console.log('\nšŸ”„ Starting development mode...\n');
20
+ // Verify setup has been run
21
+ const config = await loadConfig();
22
+ if (!config) {
23
+ throw new ConfigError('HYT is not configured. Please run "hyt setup" first.');
24
+ }
25
+ // Check if we're in a valid plugin directory
26
+ const projectDir = process.cwd();
27
+ if (!(await hasGradleWrapper(projectDir))) {
28
+ throw new GradleError('No Gradle wrapper found in current directory.\n' +
29
+ 'Make sure you are in your plugin directory (e.g., Server/Plugins/your-plugin/)');
30
+ }
31
+ // Determine project structure
32
+ // Expected: we're in project/Server/Plugins/plugin-name/
33
+ // Project root: ../../../
34
+ // Server dir: ../../
35
+ const projectRoot = path.resolve(projectDir, '..', '..', '..');
36
+ const serverDir = path.resolve(projectDir, '..', '..');
37
+ const modsDir = path.join(projectRoot, 'mods');
38
+ const serverJarPath = path.join(serverDir, 'HytaleServer.jar');
39
+ const assetsPath = path.join(projectRoot, 'Assets.zip');
40
+ // Verify required files exist
41
+ try {
42
+ await fs.access(serverJarPath);
43
+ await fs.access(assetsPath);
44
+ }
45
+ catch {
46
+ throw new HytaleError('Hytale server files not found.\n' +
47
+ `Expected structure:\n` +
48
+ ` - Server/HytaleServer.jar\n` +
49
+ ` - Assets.zip\n` +
50
+ `Make sure you ran "hyt init" to create the project structure.`);
51
+ }
52
+ // Initial build
53
+ if (options.initialBuild !== false) {
54
+ info('Running initial build...\n');
55
+ try {
56
+ await runGradleBuild(projectDir);
57
+ success('āœ” Initial build complete\n');
58
+ }
59
+ catch (err) {
60
+ throw new GradleError('Initial build failed. Fix the errors and try again.');
61
+ }
62
+ // Copy JAR to mods folder
63
+ await copyJarToMods(projectDir, modsDir);
64
+ }
65
+ // Start Hytale server
66
+ info('Starting Hytale server...\n');
67
+ const serverOptions = {
68
+ javaPath: config.javaPath,
69
+ serverJarPath,
70
+ assetsPath,
71
+ workingDir: projectRoot,
72
+ };
73
+ try {
74
+ await launchHytaleServer(serverOptions);
75
+ success('āœ” Hytale server started\n');
76
+ console.log('šŸ“ Once the server console is ready, run the authentication command:');
77
+ console.log(' /auth login device\n');
78
+ }
79
+ catch (err) {
80
+ throw new HytaleError(`Failed to start server: ${err.message}`);
81
+ }
82
+ // Start watching for file changes
83
+ info('šŸ‘€ Watching for file changes...\n');
84
+ console.log('Press Ctrl+C to stop development mode\n');
85
+ const srcDir = path.join(projectDir, 'app', 'src');
86
+ watcher = watchFiles(srcDir, {
87
+ onFileChange: async (filePath) => {
88
+ if (isRebuilding) {
89
+ return; // Avoid concurrent rebuilds
90
+ }
91
+ isRebuilding = true;
92
+ const fileName = path.basename(filePath);
93
+ console.log(`\nšŸ“ File changed: ${fileName}`);
94
+ try {
95
+ // Rebuild
96
+ const buildSpinner = startSpinner('Rebuilding...');
97
+ await runGradleBuild(projectDir);
98
+ buildSpinner.succeed('Build complete');
99
+ // Copy new JAR
100
+ await copyJarToMods(projectDir, modsDir);
101
+ // Restart server
102
+ if (isServerRunning()) {
103
+ const restartSpinner = startSpinner('Restarting server...');
104
+ await restartHytaleServer(serverOptions);
105
+ restartSpinner.succeed('Server restarted');
106
+ console.log('šŸ’” Remember to authenticate: /auth login device\n');
107
+ }
108
+ else {
109
+ warn('Server not running, starting it...');
110
+ await launchHytaleServer(serverOptions);
111
+ console.log('šŸ’” Remember to authenticate: /auth login device\n');
112
+ }
113
+ success('✨ Hot reload complete!\n');
114
+ }
115
+ catch (err) {
116
+ if (err instanceof GradleError) {
117
+ error(`Build failed: ${err.message}`);
118
+ }
119
+ else {
120
+ error(`Hot reload failed: ${err.message}`);
121
+ }
122
+ info('Fix the errors and save again to rebuild.\n');
123
+ }
124
+ finally {
125
+ isRebuilding = false;
126
+ }
127
+ },
128
+ });
129
+ // Handle graceful shutdown
130
+ const cleanup = async () => {
131
+ console.log('\n\nšŸ›‘ Shutting down...');
132
+ if (watcher) {
133
+ await stopWatcher(watcher);
134
+ watcher = null;
135
+ }
136
+ await stopHytaleServer();
137
+ console.log('āœ” Development mode stopped\n');
138
+ process.exit(0);
139
+ };
140
+ process.on('SIGINT', cleanup);
141
+ process.on('SIGTERM', cleanup);
142
+ // Keep process alive
143
+ await new Promise(() => { });
144
+ }
145
+ catch (err) {
146
+ if (err instanceof ConfigError || err instanceof GradleError || err instanceof HytaleError) {
147
+ error(err.message);
148
+ }
149
+ else {
150
+ error(`Dev mode failed: ${err.message}`);
151
+ }
152
+ // Cleanup on error
153
+ if (watcher) {
154
+ await stopWatcher(watcher);
155
+ }
156
+ await stopHytaleServer();
157
+ process.exit(1);
158
+ }
159
+ });
160
+ }
161
+ async function copyJarToMods(projectDir, modsDir) {
162
+ const buildOutputDir = getBuildOutputDir(path.join(projectDir, 'app'));
163
+ try {
164
+ await fs.mkdir(modsDir, { recursive: true });
165
+ const files = await fs.readdir(buildOutputDir);
166
+ const jarFile = files.find(f => f.endsWith('.jar') && !f.includes('-sources'));
167
+ if (!jarFile) {
168
+ throw new Error('JAR file not found in build output');
169
+ }
170
+ const srcPath = path.join(buildOutputDir, jarFile);
171
+ const destPath = path.join(modsDir, jarFile);
172
+ await fs.copyFile(srcPath, destPath);
173
+ info(`āœ” Copied ${jarFile} to mods/`);
174
+ }
175
+ catch (err) {
176
+ throw new GradleError(`Failed to copy JAR: ${err.message}`);
177
+ }
178
+ }
179
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function initCommand(): Command;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,WAAW,IAAI,OAAO,CAyNrC"}