diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 9ab1b7e..854d4a3 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -3,7 +3,6 @@
---
-- [ ] The main commit(s) reference the Fibery ticket via a `TASK-NNNN` prefix in the commit message subject
- [ ] Include a human-readable description of what the pull request is trying to accomplish
- [ ] The CI build passes
---
@@ -19,8 +18,6 @@
---
- [ ] Classes and public methods have documentation (that doesn't just repeat the technical subject in English)
-- [ ] Logging is implemented to monitor feature usage and troubleshoot problems in production
-- [ ] These ReWiki pages are affected by this change and will be adapted:
---
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index ed9d2f5..86ff88d 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -10,7 +10,15 @@ on:
jobs:
build:
- uses: ResilientGroup/MavenSetup/.github/workflows/build.yml@1.9.0
- with:
- javadoc-project-name: PowerCamera
- secrets: inherit
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up JDK 21
+ uses: actions/setup-java@v3
+ with:
+ java-version: '21'
+ distribution: 'temurin'
+ cache: maven
+ - name: Build with Maven
+ run: mvn -B package --file pom.xml
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 21c8da3..8b8ef67 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,11 +17,15 @@
- 0.9.0
+ 0.9.1
-SNAPSHOT
+
+ svenar-repo
+ https://repo.svenar.nl/
+
reload-repo
https://nexus.reloadkube.managedservices.resilient-teched.com/repository/reload/
@@ -44,12 +48,14 @@
io.papermc.paper
paper-api
- 1.20.4-R0.1-20241030.192207-176
+ 1.21.5-R0.1-SNAPSHOT
provided
-
+
+ clean compile package
+ ${project.name}
org.apache.maven.plugins
diff --git a/src/main/java/nl/svenar/powercamera/PowerCamera.java b/src/main/java/nl/svenar/powercamera/PowerCamera.java
index ec3bcc5..b4e3216 100644
--- a/src/main/java/nl/svenar/powercamera/PowerCamera.java
+++ b/src/main/java/nl/svenar/powercamera/PowerCamera.java
@@ -26,7 +26,7 @@ public class PowerCamera extends JavaPlugin {
public static final String WEBSITE_URL = "https://svenar.nl/powercamera";
- public static final List DONATION_URLS = Arrays.asList("https://ko-fi.com/svenar", "https://patreon.com/svenar");
+ public static final String DONATION_URL = "https://ko-fi.com/svenar";
// public Map playerSelectedCamera = new HashMap<>(); // Selected camera name
// public Map playerCameraMode = new HashMap<>(); // When the player is viewing the camera (/pc start & /pc preview)
@@ -76,7 +76,7 @@ public void onEnable() {
setupConfig();
getLogger().info("Enabled " + getPluginDescriptionFile().getName() + " v" + getPluginDescriptionFile().getVersion());
- getLogger().info("If you'd like to donate, please visit " + DONATION_URLS.get(0) + " or " + DONATION_URLS.get(1));
+ getLogger().info("If you'd like to donate, please visit " + DONATION_URL);
int pluginId = 9107;
@SuppressWarnings("unused")
@@ -145,11 +145,6 @@ private void setupConfig() {
}
newPoints.add(point);
-// if (point.contains(":")) {
-// newPoints.add(point);
-// } else {
-// newPoints.add("location:" + point);
-// }
}
configCameras.getConfig().set("cameras." + cameraName + ".points", newPoints);
}
diff --git a/src/main/java/nl/svenar/powercamera/commands/subcommand/SubcommandStartOther.java b/src/main/java/nl/svenar/powercamera/commands/subcommand/SubcommandStartOther.java
index 9f5db25..046be88 100644
--- a/src/main/java/nl/svenar/powercamera/commands/subcommand/SubcommandStartOther.java
+++ b/src/main/java/nl/svenar/powercamera/commands/subcommand/SubcommandStartOther.java
@@ -1,18 +1,26 @@
package nl.svenar.powercamera.commands.subcommand;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.Location;
+import org.bukkit.command.BlockCommandSender;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
import nl.svenar.powercamera.CameraHandler;
import nl.svenar.powercamera.PowerCamera;
import nl.svenar.powercamera.commands.PowerCameraCommand;
import nl.svenar.powercamera.commands.structure.CommandExecutionContext;
import nl.svenar.powercamera.data.CameraMode;
import nl.svenar.powercamera.data.PlayerCameraData;
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-@SuppressWarnings({"PMD.AvoidLiteralsInIfCondition", "PMD.CommentRequired", "PMD.LocalVariableCouldBeFinal", "PMD.MethodArgumentCouldBeFinal"})
+@SuppressWarnings({ "PMD.AvoidLiteralsInIfCondition", "PMD.CommentRequired", "PMD.LocalVariableCouldBeFinal",
+ "PMD.MethodArgumentCouldBeFinal" })
public class SubcommandStartOther extends PowerCameraCommand {
public SubcommandStartOther(PowerCamera plugin, String commandName) {
@@ -22,7 +30,8 @@ public SubcommandStartOther(PowerCamera plugin, String commandName) {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if (args.length != 2) {
- sendMessage(sender, ChatColor.DARK_RED + "Usage: /" + commandLabel + " startother ");
+ sendMessage(sender,
+ ChatColor.DARK_RED + "Usage: /" + commandLabel + " startother ");
return false;
}
@@ -34,27 +43,77 @@ public boolean onCommand(CommandSender sender, Command cmd, String commandLabel,
return false;
}
- Player targetPlayer = Bukkit.getPlayer(targetName);
+ List targetPlayers = getPlayersFromSelector(sender, targetName);
- if (targetPlayer == null) {
- sendMessage(sender, ChatColor.DARK_RED + "Player '" + targetName + "' not found or is offline!");
+ if (targetPlayers.isEmpty()) {
+ sendMessage(sender, ChatColor.DARK_RED + "No matching players found for selector '" + targetName + "'");
return false;
}
- PlayerCameraData cameraData = plugin.getPlayerData().get(targetPlayer);
+ for (Player targetPlayer : targetPlayers) {
+ PlayerCameraData cameraData = plugin.getPlayerData().get(targetPlayer);
- if (cameraData.getCameraMode() != CameraMode.NONE) {
- sendMessage(sender, ChatColor.DARK_RED + "Player '" + targetPlayer.getName() + "' already has a camera active!");
- return false;
- }
+ if (cameraData.getCameraMode() != CameraMode.NONE) {
+ sendMessage(sender,
+ ChatColor.DARK_RED + "Player '" + targetPlayer.getName() + "' already has a camera active!");
+ continue;
+ }
- if (this.plugin.getConfigCameras().cameraExists(cameraName)) {
- cameraData.setCameraHandler(new CameraHandler(plugin, targetPlayer, cameraName).generatePath().start());
- sender.sendMessage(plugin.getPluginChatPrefix() + ChatColor.GREEN + "Playing '" + cameraName + "' on player: " + targetPlayer.getName());
- } else {
- sendMessage(sender, ChatColor.RED + "Camera '" + cameraName + "' not found!");
+ if (this.plugin.getConfigCameras().cameraExists(cameraName)) {
+ cameraData.setCameraHandler(new CameraHandler(plugin, targetPlayer, cameraName).generatePath().start());
+ sender.sendMessage(plugin.getPluginChatPrefix() + ChatColor.GREEN + "Playing '" + cameraName
+ + "' on player: " + targetPlayer.getName());
+ } else {
+ sendMessage(sender, ChatColor.RED + "Camera '" + cameraName + "' not found!");
+ break;
+ }
}
return false;
}
+
+ private List getPlayersFromSelector(CommandSender sender, String selector) {
+ selector = selector.replace("@", "").toLowerCase();
+
+ if (selector.equals("a")) {
+ // All online players
+ return new ArrayList<>(Bukkit.getOnlinePlayers());
+ }
+
+ if (selector.equals("r")) {
+ // Random online player
+ List players = new ArrayList<>(Bukkit.getOnlinePlayers());
+ if (!players.isEmpty()) {
+ return List.of(players.get(new Random().nextInt(players.size())));
+ }
+ return List.of();
+ }
+
+ if (selector.equals("p")) {
+ // Nearest player to the command block or sender
+ if (sender instanceof BlockCommandSender blockSender) {
+ Location blockLocation = blockSender.getBlock().getLocation();
+ double closestDistance = Double.MAX_VALUE;
+ Player closestPlayer = null;
+
+ for (Player player : Bukkit.getOnlinePlayers()) {
+ double distance = player.getLocation().distanceSquared(blockLocation);
+ if (distance < closestDistance) {
+ closestDistance = distance;
+ closestPlayer = player;
+ }
+ }
+
+ return closestPlayer != null ? List.of(closestPlayer) : List.of();
+ }
+
+ if (sender instanceof Player player) {
+ return List.of(player);
+ }
+ }
+
+ Player namedPlayer = Bukkit.getPlayer(selector);
+ return namedPlayer != null ? List.of(namedPlayer) : List.of();
+ }
+
}