Skip to content

Commit eb12161

Browse files
authored
Merge pull request #19 from PowerNetworkHub/feature/player_selectors
Feature/player selectors
2 parents 1dcc81c + 993de0b commit eb12161

File tree

5 files changed

+102
-37
lines changed

5 files changed

+102
-37
lines changed

.github/pull_request_template.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
---
55
<!-- Git and GitHub -->
6-
- [ ] The main commit(s) reference the Fibery ticket via a `TASK-NNNN` prefix in the commit message subject
76
- [ ] Include a human-readable description of what the pull request is trying to accomplish
87
- [ ] The CI build passes
98
---
@@ -19,8 +18,6 @@
1918
---
2019
<!-- Documentation -->
2120
- [ ] Classes and public methods have documentation (that doesn't just repeat the technical subject in English)
22-
- [ ] Logging is implemented to monitor feature usage and troubleshoot problems in production
23-
- [ ] These ReWiki pages are affected by this change and will be adapted:
2421
<!-- END Global settings -->
2522
---
2623
<!-- Support matrix -->

.github/workflows/build.yml

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,15 @@ on:
1010

1111
jobs:
1212
build:
13-
uses: ResilientGroup/MavenSetup/.github/workflows/[email protected]
14-
with:
15-
javadoc-project-name: PowerCamera
16-
secrets: inherit
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- uses: actions/checkout@v3
17+
- name: Set up JDK 21
18+
uses: actions/setup-java@v3
19+
with:
20+
java-version: '21'
21+
distribution: 'temurin'
22+
cache: maven
23+
- name: Build with Maven
24+
run: mvn -B package --file pom.xml

pom.xml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,15 @@
1717

1818
<properties>
1919
<!-- project version -->
20-
<revision>0.9.0</revision>
20+
<revision>0.9.1</revision>
2121
<changelist>-SNAPSHOT</changelist>
2222
</properties>
2323

2424
<repositories>
25+
<repository>
26+
<id>svenar-repo</id>
27+
<url>https://repo.svenar.nl/</url>
28+
</repository>
2529
<repository>
2630
<id>reload-repo</id>
2731
<url>https://nexus.reloadkube.managedservices.resilient-teched.com/repository/reload/</url>
@@ -44,12 +48,14 @@
4448
<dependency>
4549
<groupId>io.papermc.paper</groupId>
4650
<artifactId>paper-api</artifactId>
47-
<version>1.20.4-R0.1-20241030.192207-176</version>
51+
<version>1.21.5-R0.1-SNAPSHOT</version>
4852
<scope>provided</scope>
4953
</dependency>
5054
</dependencies>
5155

52-
<build>
56+
<build>
57+
<defaultGoal>clean compile package</defaultGoal>
58+
<finalName>${project.name}</finalName>
5359
<plugins>
5460
<plugin>
5561
<groupId>org.apache.maven.plugins</groupId>

src/main/java/nl/svenar/powercamera/PowerCamera.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class PowerCamera extends JavaPlugin {
2626

2727
public static final String WEBSITE_URL = "https://svenar.nl/powercamera";
2828

29-
public static final List<String> DONATION_URLS = Arrays.asList("https://ko-fi.com/svenar", "https://patreon.com/svenar");
29+
public static final String DONATION_URL = "https://ko-fi.com/svenar";
3030

3131
// public Map<UUID, String> playerSelectedCamera = new HashMap<>(); // Selected camera name
3232
// public Map<UUID, CameraMode> playerCameraMode = new HashMap<>(); // When the player is viewing the camera (/pc start & /pc preview)
@@ -76,7 +76,7 @@ public void onEnable() {
7676
setupConfig();
7777

7878
getLogger().info("Enabled " + getPluginDescriptionFile().getName() + " v" + getPluginDescriptionFile().getVersion());
79-
getLogger().info("If you'd like to donate, please visit " + DONATION_URLS.get(0) + " or " + DONATION_URLS.get(1));
79+
getLogger().info("If you'd like to donate, please visit " + DONATION_URL);
8080

8181
int pluginId = 9107;
8282
@SuppressWarnings("unused")
@@ -145,11 +145,6 @@ private void setupConfig() {
145145
}
146146

147147
newPoints.add(point);
148-
// if (point.contains(":")) {
149-
// newPoints.add(point);
150-
// } else {
151-
// newPoints.add("location:" + point);
152-
// }
153148
}
154149
configCameras.getConfig().set("cameras." + cameraName + ".points", newPoints);
155150
}
Lines changed: 79 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,26 @@
11
package nl.svenar.powercamera.commands.subcommand;
22

3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.Random;
6+
7+
import org.bukkit.Bukkit;
8+
import org.bukkit.ChatColor;
9+
import org.bukkit.Location;
10+
import org.bukkit.command.BlockCommandSender;
11+
import org.bukkit.command.Command;
12+
import org.bukkit.command.CommandSender;
13+
import org.bukkit.entity.Player;
14+
315
import nl.svenar.powercamera.CameraHandler;
416
import nl.svenar.powercamera.PowerCamera;
517
import nl.svenar.powercamera.commands.PowerCameraCommand;
618
import nl.svenar.powercamera.commands.structure.CommandExecutionContext;
719
import nl.svenar.powercamera.data.CameraMode;
820
import nl.svenar.powercamera.data.PlayerCameraData;
9-
import org.bukkit.Bukkit;
10-
import org.bukkit.ChatColor;
11-
import org.bukkit.command.Command;
12-
import org.bukkit.command.CommandSender;
13-
import org.bukkit.entity.Player;
1421

15-
@SuppressWarnings({"PMD.AvoidLiteralsInIfCondition", "PMD.CommentRequired", "PMD.LocalVariableCouldBeFinal", "PMD.MethodArgumentCouldBeFinal"})
22+
@SuppressWarnings({ "PMD.AvoidLiteralsInIfCondition", "PMD.CommentRequired", "PMD.LocalVariableCouldBeFinal",
23+
"PMD.MethodArgumentCouldBeFinal" })
1624
public class SubcommandStartOther extends PowerCameraCommand {
1725

1826
public SubcommandStartOther(PowerCamera plugin, String commandName) {
@@ -22,7 +30,8 @@ public SubcommandStartOther(PowerCamera plugin, String commandName) {
2230
@Override
2331
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
2432
if (args.length != 2) {
25-
sendMessage(sender, ChatColor.DARK_RED + "Usage: /" + commandLabel + " startother <playername> <cameraname>");
33+
sendMessage(sender,
34+
ChatColor.DARK_RED + "Usage: /" + commandLabel + " startother <playername> <cameraname>");
2635
return false;
2736
}
2837

@@ -34,27 +43,77 @@ public boolean onCommand(CommandSender sender, Command cmd, String commandLabel,
3443
return false;
3544
}
3645

37-
Player targetPlayer = Bukkit.getPlayer(targetName);
46+
List<Player> targetPlayers = getPlayersFromSelector(sender, targetName);
3847

39-
if (targetPlayer == null) {
40-
sendMessage(sender, ChatColor.DARK_RED + "Player '" + targetName + "' not found or is offline!");
48+
if (targetPlayers.isEmpty()) {
49+
sendMessage(sender, ChatColor.DARK_RED + "No matching players found for selector '" + targetName + "'");
4150
return false;
4251
}
4352

44-
PlayerCameraData cameraData = plugin.getPlayerData().get(targetPlayer);
53+
for (Player targetPlayer : targetPlayers) {
54+
PlayerCameraData cameraData = plugin.getPlayerData().get(targetPlayer);
4555

46-
if (cameraData.getCameraMode() != CameraMode.NONE) {
47-
sendMessage(sender, ChatColor.DARK_RED + "Player '" + targetPlayer.getName() + "' already has a camera active!");
48-
return false;
49-
}
56+
if (cameraData.getCameraMode() != CameraMode.NONE) {
57+
sendMessage(sender,
58+
ChatColor.DARK_RED + "Player '" + targetPlayer.getName() + "' already has a camera active!");
59+
continue;
60+
}
5061

51-
if (this.plugin.getConfigCameras().cameraExists(cameraName)) {
52-
cameraData.setCameraHandler(new CameraHandler(plugin, targetPlayer, cameraName).generatePath().start());
53-
sender.sendMessage(plugin.getPluginChatPrefix() + ChatColor.GREEN + "Playing '" + cameraName + "' on player: " + targetPlayer.getName());
54-
} else {
55-
sendMessage(sender, ChatColor.RED + "Camera '" + cameraName + "' not found!");
62+
if (this.plugin.getConfigCameras().cameraExists(cameraName)) {
63+
cameraData.setCameraHandler(new CameraHandler(plugin, targetPlayer, cameraName).generatePath().start());
64+
sender.sendMessage(plugin.getPluginChatPrefix() + ChatColor.GREEN + "Playing '" + cameraName
65+
+ "' on player: " + targetPlayer.getName());
66+
} else {
67+
sendMessage(sender, ChatColor.RED + "Camera '" + cameraName + "' not found!");
68+
break;
69+
}
5670
}
5771

5872
return false;
5973
}
74+
75+
private List<Player> getPlayersFromSelector(CommandSender sender, String selector) {
76+
selector = selector.replace("@", "").toLowerCase();
77+
78+
if (selector.equals("a")) {
79+
// All online players
80+
return new ArrayList<>(Bukkit.getOnlinePlayers());
81+
}
82+
83+
if (selector.equals("r")) {
84+
// Random online player
85+
List<Player> players = new ArrayList<>(Bukkit.getOnlinePlayers());
86+
if (!players.isEmpty()) {
87+
return List.of(players.get(new Random().nextInt(players.size())));
88+
}
89+
return List.of();
90+
}
91+
92+
if (selector.equals("p")) {
93+
// Nearest player to the command block or sender
94+
if (sender instanceof BlockCommandSender blockSender) {
95+
Location blockLocation = blockSender.getBlock().getLocation();
96+
double closestDistance = Double.MAX_VALUE;
97+
Player closestPlayer = null;
98+
99+
for (Player player : Bukkit.getOnlinePlayers()) {
100+
double distance = player.getLocation().distanceSquared(blockLocation);
101+
if (distance < closestDistance) {
102+
closestDistance = distance;
103+
closestPlayer = player;
104+
}
105+
}
106+
107+
return closestPlayer != null ? List.of(closestPlayer) : List.of();
108+
}
109+
110+
if (sender instanceof Player player) {
111+
return List.of(player);
112+
}
113+
}
114+
115+
Player namedPlayer = Bukkit.getPlayer(selector);
116+
return namedPlayer != null ? List.of(namedPlayer) : List.of();
117+
}
118+
60119
}

0 commit comments

Comments
 (0)