commit 65c654d6e7df42f75fddc69413dfcbd08af833f3 Author: 2vb Date: Wed Jun 5 00:09:06 2024 +0000 Initial commit diff --git a/.gitea/workflows/maven.yml b/.gitea/workflows/maven.yml new file mode 100644 index 0000000..e7a8985 --- /dev/null +++ b/.gitea/workflows/maven.yml @@ -0,0 +1,28 @@ +name: Build plugin + +on: + push: + branches: ["main"] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: "21" + distribution: "temurin" + cache: maven + - name: Install Maven + uses: https://github.com/stCarolas/setup-maven@v4 + - name: Build with Maven + run: mvn -B package --file pom.xml + - run: mkdir staging && cp target/*.jar staging + - uses: actions/upload-artifact@v3 + with: + name: compiled-jar + path: staging + retention-days: 90 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b75666a --- /dev/null +++ b/.gitignore @@ -0,0 +1,118 @@ +# User-specific stuff +.idea/ + +*.iml +*.ipr +*.iws + +# IntelliJ +out/ + +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +target/ + +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next + +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar +.flattened-pom.xml + +# Common working directory +run/ + +.settings/ +.classpath +.factorypath +.project \ No newline at end of file diff --git a/.run/SGM [build].run.xml b/.run/SGM [build].run.xml new file mode 100644 index 0000000..3981488 --- /dev/null +++ b/.run/SGM [build].run.xml @@ -0,0 +1,33 @@ + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..be149bd --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# SGM + +### Simple Game Manager \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..ae7adb9 --- /dev/null +++ b/pom.xml @@ -0,0 +1,152 @@ + + + 4.0.0 + + xyz.twovb + sgm + ${git.branch} + jar + + SGM + + + 17 + UTF-8 + ${project.groupId}.${project.artifactId}.${project.name} + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + + + + io.github.git-commit-id + git-commit-id-maven-plugin + 5.0.0 + + + get-the-git-infos + + revision + + initialize + + + + false + project.build.outputDirectory/git.properties + + ^git.branch$ + ^git.build.(time|version)$ + ^git.commit.id.(abbrev|full)$ + ^git.commit.message.short$ + + full + + + + org.apache.maven.plugins + maven-shade-plugin + 3.4.1 + + + shade + package + + shade + + + + + + + xyz.twovb.toolbox + ${project.groupId}.${project.artifactId}.toolbox + + + + + + + + src/main/resources + true + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + sonatype-oss-snapshots1 + https://s01.oss.sonatype.org/content/repositories/snapshots/ + + + panda-repository + https://repo.panda-lang.org/releases + + + placeholderapi + https://repo.extendedclip.com/content/repositories/placeholderapi/ + + + twovb-repo + 2vb :3 + https://maven.twovb.xyz/releases + + + + + + io.papermc.paper + paper-api + 1.20.6-R0.1-SNAPSHOT + provided + + + org.projectlombok + lombok + 1.18.30 + provided + + + org.jetbrains + annotations + 24.0.1 + provided + + + dev.rollczi + litecommands-bukkit + 3.4.1 + + + me.clip + placeholderapi + 2.11.5 + provided + + + xyz.twovb + Toolbox + 0.1 + + + + diff --git a/src/main/java/xyz/twovb/sgm/SGM.java b/src/main/java/xyz/twovb/sgm/SGM.java new file mode 100644 index 0000000..91c5055 --- /dev/null +++ b/src/main/java/xyz/twovb/sgm/SGM.java @@ -0,0 +1,96 @@ +package xyz.twovb.sgm; + +import dev.rollczi.litecommands.bukkit.LiteBukkitMessages; +import dev.rollczi.litecommands.bukkit.LiteCommandsBukkit; +import lombok.Getter; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; +import xyz.twovb.sgm.commands.impl.SGMCommand; +import xyz.twovb.sgm.commands.handlers.InvalidArgsHandler; +import xyz.twovb.sgm.commands.handlers.NoPermissionsHandler; +import xyz.twovb.sgm.listeners.TestListener; +import xyz.twovb.toolbox.managers.ConfigManager; +import xyz.twovb.toolbox.managers.PlaceholderManager; +import xyz.twovb.toolbox.managers.DatabaseManager; +import xyz.twovb.toolbox.utils.ToolLogger; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.Objects; + +public final class SGM extends JavaPlugin { + + @Getter + private static SGM instance; + private FileConfiguration BuildInfo; + + @Getter + private FileConfiguration Messages; + @Getter + private ToolLogger toolLogger; + private ConfigManager configManager; + @Getter + private DatabaseManager databaseManager; + + + @Override + public void onEnable() { + instance = this; + toolLogger = new ToolLogger(this); + configManager = new ConfigManager(this); + Messages = configManager.loadConfig("messages.yml"); + this.saveDefaultConfig(); + BuildInfo = new YamlConfiguration(); + try { + BuildInfo.load(Objects.requireNonNull(this.getTextResource("build-info.yml"))); + } catch (IOException | InvalidConfigurationException ignored) {} + registerCommands(); + registerPlaceholders(); + connectToDatabase(); + } + + private void connectToDatabase() { + databaseManager = new DatabaseManager(); + try { + databaseManager.connect(DatabaseManager.DatabaseType.SQLITE, this, "sgm"); + toolLogger.log("Connected to database"); + } catch (SQLException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + private void registerPlaceholders() { + PlaceholderManager pm = new PlaceholderManager(); + pm.registerPlaceholder("%commit.id%", BuildInfo.getString("commit.id")); + pm.registerPlaceholder("%commit.branch%", BuildInfo.getString("commit.branch")); + pm.registerPlaceholder("%commit.message%", BuildInfo.getString("commit.message")); + pm.registerPlaceholder("%name%", this.getName()); + } + + private void registerCommands() { + LiteCommandsBukkit.builder() + .settings(settings -> settings.fallbackPrefix("sgm").nativePermissions(false)) + .commands(new SGMCommand()) + .invalidUsage(new InvalidArgsHandler()) + .missingPermission(new NoPermissionsHandler()) + .message(LiteBukkitMessages.PLAYER_NOT_FOUND, input -> Messages.getString("commands.invalid-player").replace("%player%", input)) + .message(LiteBukkitMessages.PLAYER_ONLY, input -> Messages.getString("commands.player-only")) + .build(); + } + + private void registerListeners() { + PluginManager pm = getServer().getPluginManager(); + pm.registerEvents(new TestListener(), this); + } + + + @Override + public void onDisable() { + + } + + +} diff --git a/src/main/java/xyz/twovb/sgm/commands/handlers/InvalidArgsHandler.java b/src/main/java/xyz/twovb/sgm/commands/handlers/InvalidArgsHandler.java new file mode 100644 index 0000000..c707a29 --- /dev/null +++ b/src/main/java/xyz/twovb/sgm/commands/handlers/InvalidArgsHandler.java @@ -0,0 +1,44 @@ +package xyz.twovb.sgm.commands.handlers; + +import dev.rollczi.litecommands.handler.result.ResultHandlerChain; +import dev.rollczi.litecommands.invalidusage.InvalidUsage; +import dev.rollczi.litecommands.invalidusage.InvalidUsageHandler; +import dev.rollczi.litecommands.invocation.Invocation; +import dev.rollczi.litecommands.schematic.Schematic; +import org.bukkit.command.CommandSender; + +import xyz.twovb.sgm.SGM; +import xyz.twovb.toolbox.managers.PlaceholderManager; +import xyz.twovb.toolbox.utils.ChatUtils; + + +import java.util.List; + +public class InvalidArgsHandler implements InvalidUsageHandler { + @Override + public void handle(Invocation invocation, InvalidUsage result, ResultHandlerChain chain) { + CommandSender sender = invocation.sender(); + Schematic schematic = result.getSchematic(); + String message = SGM.getInstance().getMessages().getString("commands.wrong-args"); + StringBuilder builder = new StringBuilder(); + builder.insert(0, "\n"); + if (schematic.isOnlyFirst()) { + message = message.replace("%usage%", "\n&8 - &7" + schematic.first()); + } else { + List schemes = schematic.all(); + for (int i = 0; i < schemes.size(); i++) { + String scheme = schemes.get(i); + + // Append the formatted scheme entry + builder.append("&8 - &7").append(scheme); + + // Check if the current element is not the last one + if (i < schemes.size() - 1) { + builder.append("\n"); // Append newline if not the last element + } + } + message = message.replace("%usage%", builder.toString()); + } + sender.sendMessage(ChatUtils.translate(PlaceholderManager.setPlaceholders(message, sender))); + } +} \ No newline at end of file diff --git a/src/main/java/xyz/twovb/sgm/commands/handlers/NoPermissionsHandler.java b/src/main/java/xyz/twovb/sgm/commands/handlers/NoPermissionsHandler.java new file mode 100644 index 0000000..b89f1d4 --- /dev/null +++ b/src/main/java/xyz/twovb/sgm/commands/handlers/NoPermissionsHandler.java @@ -0,0 +1,18 @@ +package xyz.twovb.sgm.commands.handlers; + +import dev.rollczi.litecommands.handler.result.ResultHandlerChain; +import dev.rollczi.litecommands.invocation.Invocation; +import dev.rollczi.litecommands.permission.MissingPermissions; +import dev.rollczi.litecommands.permission.MissingPermissionsHandler; +import org.bukkit.command.CommandSender; + +import xyz.twovb.sgm.SGM; + +public class NoPermissionsHandler implements MissingPermissionsHandler { + @Override + public void handle(Invocation invocation, MissingPermissions missingPermissions, ResultHandlerChain chain) { + String permissions = missingPermissions.asJoinedText(); + CommandSender sender = invocation.sender(); + sender.sendMessage(SGM.getInstance().getMessages().getString("commands.no-permissions").replace("%permission%", permissions)); + } +} diff --git a/src/main/java/xyz/twovb/sgm/commands/impl/SGMCommand.java b/src/main/java/xyz/twovb/sgm/commands/impl/SGMCommand.java new file mode 100644 index 0000000..e092ae5 --- /dev/null +++ b/src/main/java/xyz/twovb/sgm/commands/impl/SGMCommand.java @@ -0,0 +1,27 @@ +package xyz.twovb.sgm.commands.impl; + +import dev.rollczi.litecommands.annotations.command.Command; +import dev.rollczi.litecommands.annotations.context.Context; +import dev.rollczi.litecommands.annotations.execute.Execute; +import org.bukkit.command.CommandSender; + +import xyz.twovb.$REPO_NAME_LOWER.SGM +import xyz.twovb.toolbox.managers.PlaceholderManager; +import xyz.twovb.toolbox.utils.ChatUtils; + +@Command(name = "sgm") +public class SGMCommand { + + @Execute + void command(@Context CommandSender sender) { + StringBuilder builder = new StringBuilder(); + builder.insert(0, SGM.getInstance().getMessages().getString("main-command.lines.1")); + builder.append("\n"); + builder.append(SGM.getInstance().getMessages().getString("main-command.lines.2")); + builder.append("\n"); + builder.append(SGM.getInstance().getMessages().getString("main-command.lines.3")); + String string = builder.toString(); + sender.sendMessage(ChatUtils.translate(PlaceholderManager.setPlaceholders(string, sender))); + } + +} diff --git a/src/main/java/xyz/twovb/sgm/listeners/TestListener.java b/src/main/java/xyz/twovb/sgm/listeners/TestListener.java new file mode 100644 index 0000000..35a8e06 --- /dev/null +++ b/src/main/java/xyz/twovb/sgm/listeners/TestListener.java @@ -0,0 +1,16 @@ +package xyz.twovb.sgm.listeners; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +public class TestListener implements Listener { + + @EventHandler + public void onLogin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + player.sendMessage("Hello " + player.getName()); + } + +} \ No newline at end of file diff --git a/src/main/resources/build-info.yml b/src/main/resources/build-info.yml new file mode 100644 index 0000000..6db31ad --- /dev/null +++ b/src/main/resources/build-info.yml @@ -0,0 +1,5 @@ +commit: + branch: ${git.branch} + build-time: ${git.build.time} + id: ${git.commit.id.abbrev} + message: ${git.commit.message.short} \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml new file mode 100644 index 0000000..f30c430 --- /dev/null +++ b/src/main/resources/messages.yml @@ -0,0 +1,10 @@ +main-command: + lines: + 1: "&e%name%&7 - Build:&e %commit.id%" + 2: "&7Branch:&e %commit.branch%" + 3: "&7Commit Message:&e %commit.message%" +commands: + invalid-player: "&7Player &e%player%&f not found." + player-only: "&7You must be a player to run this command." + no-permissions: "&7You do not have the required permission &e%permission%&7 to do this." + wrong-args: "&7Invalid command usage. %usage%" \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..f458f7e --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,6 @@ +name: '${project.name}' +version: 'Git-${git.commit.id.abbrev}-${project.version}' +main: '${project.mainClass}' +author: '2vb' +api-version: '1.20' +softdepend: [PlaceholderAPI] \ No newline at end of file