{"id":65633,"date":"2026-06-03T21:33:49","date_gmt":"2026-06-03T18:33:49","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/eternalscript\/"},"modified":"2026-06-03T21:33:49","modified_gmt":"2026-06-03T18:33:49","slug":"eternalscript","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/eternalscript\/","title":{"rendered":"EternalScript"},"content":{"rendered":"<p>## EternalScript: A Kotlin Scripting Plugin for Minecraft Paper Servers<\/p>\n<p>EternalScript allows you to dynamically load and manage code at runtime on your Minecraft Paper server without requiring restarts. It supports diverse customization features like script lifecycle management, event handling, and custom commands.<\/p>\n<p>### Commands<\/p>\n<p>Here are the available commands for EternalScript:<\/p>\n<p>* `\/es compile`: Compiles and loads all scripts within the configured script folder.<br \/>\n* `\/es clear`: Unloads all currently loaded scripts.<br \/>\n* `\/es config`: Reloads the plugin configuration.<br \/>\n* `\/es call [script] [function]`: Calls a function within a specified script.<br \/>\n* `\/es load [script]`: Loads a specific script file (e.g., `\/es load &#8220;\/hello.kt&#8221;`).<br \/>\n* `\/es unload [script]`: Unloads a specific script file (e.g., `\/es unload &#8220;\/hello.kt&#8221;`).<br \/>\n* `\/es list`: Lists all currently loaded scripts.<\/p>\n<p>### Script Lifecycle<\/p>\n<p>Control how your scripts behave, including performing initial setup when loaded and cleaning up resources when unloaded.<\/p>\n<p>&#8220;`kotlin<br \/>\nenable {<br \/>\n    \/\/ This code runs when the script is loaded\/enabled.<br \/>\n    Bukkit.broadcastMessage(&#8220;Eternal Script: Script loaded!&#8221;)<br \/>\n}<\/p>\n<p>disable {<br \/>\n    \/\/ This code runs when the script is unloaded\/disabled.<br \/>\n    Bukkit.broadcastMessage(&#8220;Eternal Script: Script unloaded!&#8221;)<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>### Event Handling<\/p>\n<p>Easily register and handle events directly within your scripts to add custom logic.<\/p>\n<p>&#8220;`kotlin<br \/>\nimport org.bukkit.Bukkit<br \/>\nimport org.bukkit.event.player.PlayerJoinEvent<br \/>\nimport org.bukkit.event.player.PlayerQuitEvent<\/p>\n<p>event<PlayerJoinEvent> { event -><br \/>\n    Bukkit.broadcastMessage(&#8220;${event.player.name} joined the server!&#8221;)<br \/>\n}<\/p>\n<p>event<PlayerQuitEvent> { event -><br \/>\n    Bukkit.broadcastMessage(&#8220;${event.player.name} left the server.&#8221;)<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>### Custom Commands<\/p>\n<p>Define and register your own in-game commands directly from your scripts.<\/p>\n<p>&#8220;`kotlin<br \/>\nimport org.bukkit.Bukkit<\/p>\n<p>command(&#8220;test-command&#8221;) {<br \/>\n    \/\/ Players need this permission to execute the command.<br \/>\n    permission = &#8220;eternals.command.test&#8221;<br \/>\n    executor = { sender, label, args -><br \/>\n        \/\/ This code runs when the command is executed.<br \/>\n        Bukkit.broadcastMessage(&#8220;Command executed by: ${sender.name}&#8221;)<br \/>\n    }<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>### Script Inclusion\/Exclusion Rules<\/p>\n<p>Control which scripts the plugin processes.<\/p>\n<p>* `*.kt | *.kts`: Includes all Kotlin files (`.kt`) and Kotlin script files (`.kts`).<br \/>\n* `-*\/ *.kt | -*.kt`: Ignores specific folders or files (e.g., excludes scripts in subfolders or specific files).<br \/>\n* `!*\/* .kt | !*.kt`: Loads specific folders or files synchronously (e.g., processes them before other scripts at server startup).<\/p>\n<p>### Installation<\/p>\n<p>It&#8217;s quick and easy to get EternalScript up and running on your server:<\/p>\n<p>1.  Download the latest version of **EternalScript** from Modrinth.<br \/>\n2.  Upload the downloaded file to your Minecraft server&#8217;s `plugins` folder.<br \/>\n3.  Start or restart your server to load EternalScript.<\/p>\n<p>### Getting Started<\/p>\n<p>Experience the power of EternalScript by writing and running your first Kotlin script:<\/p>\n<p>1.  After installation, a `plugins\/EternalScript\/scripts\/` folder will be created.<br \/>\n2.  Write your Kotlin script file with a `.kt` extension inside this `scripts` folder.<br \/>\n3.  From the server console, you can use the `\/es load &#8220;\/[script].kt&#8221;` command to load a specific script, or `\/es compile` to load all scripts within the folder.<\/p>\n<p>### Simple &#8220;Hello World&#8221; Example<\/p>\n<p>Create a `hello.kt` file in the `plugins\/EternalScript\/scripts\/` folder and enter the following content:<\/p>\n<p>&#8220;`kotlin<br \/>\n\/\/ plugins\/EternalScript\/scripts\/hello.kt<\/p>\n<p>enable {<br \/>\n    Bukkit.broadcastMessage(&#8220;Hello, world!&#8221;)<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>Then, execute `\/es load &#8220;\/hello.kt&#8221;` from the server console, and you&#8217;ll see the message appear in the game chat.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A scripting plugin for Minecraft Paper servers that dynamically loads and unloads Kotlin scripts at runtime.<\/p>\n","protected":false},"featured_media":65634,"template":"","meta":{"_minecraft_slug":"eternalscript","_minecraft_project_id":"qcSpvUov","_minecraft_author":"VectorTransformation","_minecraft_license":"MIT","_minecraft_downloads":113,"_minecraft_follows":0,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"eternalscript.zip","_minecraft_size_bytes":300014212,"_minecraft_version_count":8,"_minecraft_updated_at":"2026-05-15T19:22:47.166705Z","_minecraft_date_created":"2025-06-17T09:31:16.842515Z","_minecraft_date_modified":"2026-01-02T22:15:24.072331Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/eternalscript","_minecraft_icon_attachment_id":65634,"_minecraft_imported_at":"2026-06-03T18:33:50+00:00","_minecraft_import_hash":"d7e992ff8986a7fe3c5e6234d8fb497a","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[126,127,123,92],"mod_loader":[132],"minecraft_version":[38,81],"class_list":["post-65633","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-management","mod_category-paper","mod_category-technology","mod_category-utility","mod_loader-paper","minecraft_version-1-21-4","minecraft_version-1-21-8"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>EternalScript - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/eternalscript\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"EternalScript - Minecraft\" \/>\n<meta property=\"og:description\" content=\"A scripting plugin for Minecraft Paper servers that dynamically loads and unloads Kotlin scripts at runtime.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/eternalscript\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/eternalscript\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/eternalscript\\\/\",\"name\":\"EternalScript - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/eternalscript\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/eternalscript\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/eternalscript-icon-7513f0d1b129abb68f56d246c700be20d9cbd13a.png\",\"datePublished\":\"2026-06-03T18:33:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/eternalscript\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/eternalscript\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/eternalscript\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/eternalscript-icon-7513f0d1b129abb68f56d246c700be20d9cbd13a.png\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/eternalscript-icon-7513f0d1b129abb68f56d246c700be20d9cbd13a.png\",\"width\":100,\"height\":100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/eternalscript\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"EternalScript\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"EternalScript - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/eternalscript\/","og_locale":"en_US","og_type":"article","og_title":"EternalScript - Minecraft","og_description":"A scripting plugin for Minecraft Paper servers that dynamically loads and unloads Kotlin scripts at runtime.","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/eternalscript\/","og_site_name":"Minecraft","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/eternalscript\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/eternalscript\/","name":"EternalScript - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/eternalscript\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/eternalscript\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/eternalscript-icon-7513f0d1b129abb68f56d246c700be20d9cbd13a.png","datePublished":"2026-06-03T18:33:49+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/eternalscript\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/eternalscript\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/eternalscript\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/eternalscript-icon-7513f0d1b129abb68f56d246c700be20d9cbd13a.png","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/eternalscript-icon-7513f0d1b129abb68f56d246c700be20d9cbd13a.png","width":100,"height":100},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/eternalscript\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"EternalScript"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/65633","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media\/65634"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=65633"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=65633"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=65633"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=65633"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}