diff --git a/README.md b/README.md index 5ec290c..0eae348 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ A minimal, ready-to-use template for creating Hytale plugins with modern build t ## Features -✅ **Modern Build System** - Gradle with Kotlin DSL +✅ **Modern Build System** - Gradle with Groovy DSL ✅ **Automated Testing** - Custom Gradle plugin for one-command server testing ✅ **Java 25** - Latest Java features ✅ **ShadowJar** - Automatic dependency bundling @@ -51,9 +51,9 @@ Your plugin JAR will be in: `build/libs/TemplatePlugin-1.0.0.jar` When ready to customize, edit these files: -**`settings.gradle.kts`:** +**`settings.gradle`:** -```kotlin +```groovy rootProject.name = "your-plugin-name" ``` @@ -139,9 +139,9 @@ TemplatePlugin/ │ └── resources/ │ └── manifest.json # Plugin metadata ├── .gitignore # Git ignore rules -├── build.gradle.kts # Build configuration +├── build.gradle # Build configuration ├── gradle.properties # Project properties -├── settings.gradle.kts # Project settings +├── settings.gradle # Project settings ├── LICENSE # MIT License └── README.md # This file ``` @@ -200,9 +200,9 @@ rm -rf run/ ### Adding Dependencies -Edit `build.gradle.kts`: +Edit `build.gradle`: -```kotlin +```groovy dependencies { // Hytale API (provided by server) compileOnly(files("./HytaleServer.jar")) @@ -221,9 +221,9 @@ dependencies { **Usage:** -Edit `build.gradle.kts`: +Edit `build.gradle`: -```kotlin +```groovy runHytale { jarUrl = "url to hytale server jar" } @@ -322,7 +322,7 @@ GitHub Actions will automatically build and create a release with your plugin JA ### Server Won't Start -1. Check that `jarUrl` in `build.gradle.kts` is correct +1. Check that `jarUrl` in `build.gradle` is correct 2. Verify Java 25 is installed: `java -version` 3. Check logs in `run/logs/` diff --git a/build.gradle b/build.gradle index 1356cdf..ad87ae3 100644 --- a/build.gradle +++ b/build.gradle @@ -121,6 +121,33 @@ if (hasHytaleHome) { return programParameters } + def serverJar = file("$hytaleHome/install/$patchline/package/game/latest/Server/HytaleServer.jar") + def assetsZip = file("$hytaleHome/install/$patchline/package/game/latest/Assets.zip") + def shadowJarTask = tasks.named('shadowJar') + + tasks.register('runServerJar', JavaExec) { + dependsOn shadowJarTask + mainClass = 'com.hypixel.hytale.Main' + classpath = files(serverJar) + workingDir = serverRunDir.absolutePath + doFirst { + def modPaths = [shadowJarTask.get().archiveFile.get().asFile.absolutePath] + if (load_user_mods.toBoolean()) { + modPaths << "${hytaleHome}/UserData/Mods" + } + setArgs([ + '--allow-op', + '--disable-sentry', + "--assets=${assetsZip}", + "--mods=${modPaths.join(',')}" + ]) + } + } + + tasks.register('runServer') { + dependsOn 'runServerJar' + } + // Creates a run configuration in IDEA that will run the Hytale server with // your plugin and the default assets. idea.project.settings.runConfigurations { diff --git a/build.gradle.kts b/build.gradle.kts deleted file mode 100644 index 372dbb0..0000000 --- a/build.gradle.kts +++ /dev/null @@ -1,87 +0,0 @@ -plugins { - id("java-library") - id("com.gradleup.shadow") version "9.3.1" - id("run-hytale") -} - -group = findProperty("pluginGroup") as String? ?: "com.example" -version = findProperty("pluginVersion") as String? ?: "1.0.0" -description = findProperty("pluginDescription") as String? ?: "A Hytale plugin template" - -repositories { - mavenLocal() - mavenCentral() -} - -dependencies { - // Hytale Server API (provided by server at runtime) - compileOnly(files("./libs/HytaleServer.jar")) - - // Common dependencies (will be bundled in JAR) - implementation("com.google.code.gson:gson:2.10.1") - implementation("org.jetbrains:annotations:24.1.0") - - // Test dependencies - testImplementation("org.junit.jupiter:junit-jupiter:5.10.0") - testRuntimeOnly("org.junit.platform:junit-platform-launcher") -} - -// Configure server testing -runHytale { - jarUrl = "./libs/HytaleServer.jar" - assetsPath = "./libs/Assets.zip" -} - -tasks { - // Configure Java compilation - compileJava { - options.encoding = Charsets.UTF_8.name() - options.release = 25 - } - - // Configure resource processing - processResources { - filteringCharset = Charsets.UTF_8.name() - - // Replace placeholders in manifest.json - val props = mapOf( - "group" to project.group, - "version" to project.version, - "description" to project.description - ) - inputs.properties(props) - - filesMatching("manifest.json") { - expand(props) - } - } - - // Configure ShadowJar (bundle dependencies) - shadowJar { - archiveBaseName.set(rootProject.name) - archiveClassifier.set("") - - // Relocate dependencies to avoid conflicts - relocate("com.google.gson", "com.yourplugin.libs.gson") - - // Minimize JAR size (removes unused classes) - minimize() - } - - // Configure tests - test { - useJUnitPlatform() - } - - // Make build depend on shadowJar - build { - dependsOn(shadowJar) - } -} - -// Configure Java toolchain -java { - toolchain { - languageVersion.set(JavaLanguageVersion.of(25)) - } -} diff --git a/src/main/resources/manifest.json b/src/main/resources/manifest.json index 169a0cc..5c8357c 100644 --- a/src/main/resources/manifest.json +++ b/src/main/resources/manifest.json @@ -1,7 +1,7 @@ { "Group": "Example", "Name": "ExamplePlugin", - "Version": "0.0.2", + "Version": "0.0.3", "Description": "An example plugin for HyTale!", "Authors": [ { @@ -9,7 +9,7 @@ } ], "Website": "example.org", - "ServerVersion": "*", + "ServerVersion": "2026.02.17-255364b8e", "Dependencies": { },