#!/bin/sh # Name: PaperMC Plugin Environment Creator # Description: Creates a PaperMC plugin project structure with Gradle and a basic event listener # Author: bacalhau echo "### PaperMC Plugin Environment Creator ### Choose a project name: " # Reads the project name read PROJECT_NAME echo "Choose a package name (e.g., io.papermc.$PROJECT_NAME): " read PACKAGE_NAME # Converts package name to folder structure PACKAGE_PATH="$(echo "$PACKAGE_NAME" | tr '.' '/')" # Creates directories mkdir -p "$PROJECT_NAME/src/main/java/$PACKAGE_PATH" mkdir -p "$PROJECT_NAME/src/main/resources" # Writes settings.gradle.kts echo "rootProject.name = \"$PROJECT_NAME\"" > "$PROJECT_NAME/settings.gradle.kts" # Writes build.gradle.kts echo "plugins { id(\"java\") } repositories { maven { name = \"papermc\" url = uri(\"https://repo.papermc.io/repository/maven-public/\") } } dependencies { compileOnly(\"io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT\") } java { toolchain.languageVersion.set(JavaLanguageVersion.of(21)) }" > "$PROJECT_NAME/build.gradle.kts" # Writes plugin.yml echo "name: $PROJECT_NAME main: $PACKAGE_NAME.$PROJECT_NAME version: 1.0 api-version: 1.20" > "$PROJECT_NAME/src/main/resources/plugin.yml" # Writes Main class echo "package $PACKAGE_NAME; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.plugin.java.JavaPlugin; public class $PROJECT_NAME extends JavaPlugin implements Listener { @Override public void onEnable() { Bukkit.getPluginManager().registerEvents(this, this); } @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { event.getPlayer().sendMessage(Component.text(\"Hello, \" + event.getPlayer().getName() + \"!\")); } }" > "$PROJECT_NAME/src/main/java/$PACKAGE_PATH/$PROJECT_NAME.java" # Lists the project structure tree "$PROJECT_NAME"