commands = Map.of(
+ "wirelessredstone", commandManager,
+ "wradmin", adminCommandManager
+ );
+
+ commands.forEach((commandName, executor) -> {
+ var command = getCommand(commandName);
+ if (command != null) {
+ command.setExecutor(executor);
+ command.setTabCompleter((TabCompleter) executor);
+ } else {
+ wrLogger.warning("Command '" + commandName + "' is missing from plugin.yml.");
+ }
+ });
+ }
+
+ public static StorageConfiguration getStorage() {
+ if (storageManager == null || storageManager.getStorage() == null) {
+ throw new IllegalStateException("StorageManager or StorageConfiguration is not initialized!");
}
+ return storageManager.getStorage();
+ }
+
- String serverImplementation = "Spigot";
- if (Bukkit.getVersion().contains("Paper")) {
- serverImplementation = "Paper";
- } else if (Bukkit.getVersion().contains("Taco")) {
- serverImplementation = "TacoSpigot";
+ private void loadWorldEditIntegration() {
+ if (getServer().getPluginManager().isPluginEnabled("WorldEdit")) {
+ new WorldEditLoader();
+ wrLogger.info("WorldEdit integration enabled.");
+ } else {
+ wrLogger.warning("WorldEdit not found. Skipping integration.");
}
+ }
- Sentry.getStoredClient().addTag("MC_version", version);
- Sentry.getStoredClient().addTag("MC_implementation", serverImplementation);
+ private void checkForUpdates() {
+ if (!config.getUpdateCheck()) return;
+
+ UpdateChecker.init(this).requestUpdateCheck().whenComplete((result, throwable) -> {
+ if (throwable == null && result.updateAvailable()) {
+ wrLogger.info("An update is available: Version " + result.getNewestVersion());
+ }
+ });
}
- /**
- * Re-initialize strings. This can be used to switch languages after a config change.
- *
- * Removes reference to stringManager and place a new reference.
- */
- public void resetStrings() {
- stringManager = null;
- stringManager = new StringManager(config.getLanguage());
+ private int countSigns(Class> signType) {
+ if (storageManager == null || storageManager.getAllSigns() == null) return 0;
+ return (int) storageManager.getAllSigns().stream()
+ .filter(signType::isInstance)
+ .count();
}
-}
+}
\ No newline at end of file
diff --git a/core/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminAddOwner.java b/core/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminAddOwner.java
index 23b9fe6f..04e3b36e 100644
--- a/core/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminAddOwner.java
+++ b/core/src/main/java/net/licks92/wirelessredstone/commands/Admin/AdminAddOwner.java
@@ -8,41 +8,84 @@
import net.licks92.wirelessredstone.WirelessRedstone;
import org.bukkit.command.CommandSender;
-@CommandInfo(description = "Add owner to WirlessChannel", usage = " ", aliases = {"addowner"},
+@CommandInfo(
+ description = "Add owner to WirelessChannel",
+ usage = " ",
+ aliases = {"addowner"},
tabCompletion = {WirelessCommandTabCompletion.CHANNEL, WirelessCommandTabCompletion.PLAYER},
- permission = "addOwner", canUseInConsole = true, canUseInCommandBlock = false)
+ permission = "addOwner",
+ canUseInConsole = true,
+ canUseInCommandBlock = false
+)
public class AdminAddOwner extends WirelessCommand {
+ /**
+ * Handles the execution of the "addowner" command, which adds a player as an owner
+ * to a specified wireless channel. The command ensures proper validation of arguments,
+ * permissions, and checks before adding the owner.
+ *
+ * @param sender The entity executing the command. This could be a player, console, or other valid command sender.
+ * @param args An array of command arguments. The first argument is the channel name,
+ * and the second is the player's name to be added as an owner.
+ */
@Override
public void onCommand(CommandSender sender, String[] args) {
- if (args.length < 2) {
- Utils.sendFeedback(WirelessRedstone.getStrings().commandTooFewArguments, sender, true);
+ // Validate arguments
+ if (args == null || args.length < 2) {
+ Utils.sendFeedback(WirelessRedstone.getStrings().commandTooFewArguments, sender, true, null, false);
return;
}
String channelName = args[0];
String playerName = args[1];
+ // Validate sender permissions and channel access
if (!hasAccessToChannel(sender, channelName)) {
- Utils.sendFeedback(WirelessRedstone.getStrings().permissionChannelAccess, sender, true);
+ Utils.sendFeedback(WirelessRedstone.getStrings().permissionChannelAccess, sender, true, null, false);
return;
}
+ // Fetch the channel by name
WirelessChannel channel = WirelessRedstone.getStorageManager().getChannel(channelName);
if (channel == null) {
- Utils.sendFeedback(WirelessRedstone.getStrings().channelNotFound, sender, true);
+ Utils.sendFeedback(WirelessRedstone.getStrings().channelNotFound(channelName), sender, true, null, false);
return;
}
+ // Check if the specified player is already an owner
if (channel.getOwners().contains(playerName)) {
- Utils.sendFeedback(WirelessRedstone.getStrings().channelAlreadyOwner, sender, true);
+ Utils.sendFeedback(WirelessRedstone.getStrings().channelAlreadyOwner(playerName), sender, true, null, false);
return;
}
- channel.addOwner(playerName);
- WirelessRedstone.getStorage().updateChannel(channelName, channel);
+ // Attempt to add the owner to the channel
+ if (addOwnerToChannel(channel, playerName)) {
+ WirelessRedstone.getStorage().updateChannel(channelName, channel);
- WirelessRedstone.getWRLogger().info("Channel " + channelName + " has been updated. Player " + playerName + " has been added to the owner list.");
- Utils.sendFeedback(WirelessRedstone.getStrings().channelOwnerAdded.replaceAll("%%PLAYERNAME", playerName), sender, false);
+ // Notify the sender of successful addition
+ Utils.sendFeedback(
+ WirelessRedstone.getStrings().channelOwnerAdded(playerName, channelName), sender, false, null, false);
+ } else {
+ // Notify the sender of failure
+ Utils.sendFeedback("Failed to add the owner. Please try again later.", sender, true, null, false);
+ }
+ }
+
+ /**
+ * Adds an owner to the channel if not already an owner.
+ *
+ * @param channel The WirelessChannel object.
+ * @param playerName The name of the player to add.
+ * @return True if the player was successfully added, false otherwise.
+ */
+ private boolean addOwnerToChannel(WirelessChannel channel, String playerName) {
+ try {
+ channel.addOwner(playerName); // Add the player as an owner
+ return true;
+ } catch (IllegalStateException e) {
+ WirelessRedstone.getWRLogger()
+ .warning("Failed to add '" + playerName + "' as an owner: " + e.getMessage());
+ return false;
+ }
}
-}
+}
\ No newline at end of file
diff --git a/core/src/main/java/net/licks92/wirelessredstone/commands/Create.java b/core/src/main/java/net/licks92/wirelessredstone/commands/Create.java
index 1e6b03ef..6f682518 100644
--- a/core/src/main/java/net/licks92/wirelessredstone/commands/Create.java
+++ b/core/src/main/java/net/licks92/wirelessredstone/commands/Create.java
@@ -23,13 +23,13 @@ public void onCommand(CommandSender sender, String[] args) {
return;
}
- if (Utils.getType(args[1]) == null) {
+ if (Utils.getType(args[1], sign.getLine(2)) == null) {
Utils.sendFeedback(WirelessRedstone.getStrings().commandIncorrectSignType, sender, true);
return;
}
String cname = args[0];
- SignType type = Utils.getType(args[1]);
+ SignType type = Utils.getType(args[1], sign.getLine(2));
if (type == null) {
Utils.sendFeedback(WirelessRedstone.getStrings().commandIncorrectSignType, sender, true);
diff --git a/core/src/main/java/net/licks92/wirelessredstone/commands/Info.java b/core/src/main/java/net/licks92/wirelessredstone/commands/Info.java
index 4a880a75..4b47a657 100644
--- a/core/src/main/java/net/licks92/wirelessredstone/commands/Info.java
+++ b/core/src/main/java/net/licks92/wirelessredstone/commands/Info.java
@@ -33,7 +33,7 @@ public void onCommand(CommandSender sender, String[] args) {
SignType signType = null;
if (args.length >= 2)
- signType = Utils.getType(args[1]);
+ signType = Utils.getType(args[1], sign.getLine(2));
if (signType == null) {
Utils.sendFeedback(ChatColor.GRAY + "---- " + ChatColor.GREEN + "WirelessChannel " + channel.getName() + ChatColor.GRAY + " ----",
diff --git a/core/src/main/java/net/licks92/wirelessredstone/commands/WirelessCommand.java b/core/src/main/java/net/licks92/wirelessredstone/commands/WirelessCommand.java
index 357f2ca2..1e788f56 100644
--- a/core/src/main/java/net/licks92/wirelessredstone/commands/WirelessCommand.java
+++ b/core/src/main/java/net/licks92/wirelessredstone/commands/WirelessCommand.java
@@ -9,7 +9,10 @@ public abstract class WirelessCommand {
public abstract void onCommand(CommandSender sender, String[] args);
public boolean hasAccessToChannel(CommandSender sender, String channelName) {
- return !(sender instanceof Player) || WirelessRedstone.getSignManager().hasAccessToChannel((Player) sender, channelName); //If it's console or commandBlock, it has access to channel.
+ if (sender instanceof Player) {
+ WirelessRedstone.getSignManager().hasAccessToChannel((Player) sender, channelName);
+ }
+ return true; //If it's console or commandBlock, it has access to channel.
}
}
diff --git a/core/src/main/java/net/licks92/wirelessredstone/listeners/BlockListener.java b/core/src/main/java/net/licks92/wirelessredstone/listeners/BlockListener.java
index c68442ae..4cb268cb 100644
--- a/core/src/main/java/net/licks92/wirelessredstone/listeners/BlockListener.java
+++ b/core/src/main/java/net/licks92/wirelessredstone/listeners/BlockListener.java
@@ -85,7 +85,7 @@ public void on(BlockPhysicsEvent event) {
@EventHandler
public void on(final SignChangeEvent event) {
- SignType signType = Utils.getSignType(event.getLine(0));
+ SignType signType = Utils.getType(event.getLine(0), sign.getLine(2));
if (signType == null) {
return;
}
@@ -112,7 +112,7 @@ public void on(final SignChangeEvent event) {
return;
}
- signType = Utils.getSignType(event.getLine(0), event.getLine(2));
+ signType = Utils.getType(event.getLine(0), event.getLine(2));
if (event.getLine(1).equalsIgnoreCase("")) {
handlePlaceCancelled(event.getBlock());
@@ -156,17 +156,16 @@ public void on(final SignChangeEvent event) {
//TODO: #registerSign Implement error message if failed
final int finalDelay = delay;
Bukkit.getScheduler().runTask(WirelessRedstone.getInstance(), () -> {
- if (!(event.getBlock().getState() instanceof Sign)) {
+ if (!(event.getBlock().getState() instanceof Sign sign)) {
return;
}
- Sign sign = (Sign) event.getBlock().getState();
BlockFace signDirection = InternalProvider.getCompatBlockData().getSignRotation(event.getBlock());
int result = WirelessRedstone.getSignManager().registerSign(
channelName,
event.getBlock(),
- Utils.getSignType(sign.getLine(0), sign.getLine(2)),
+ Utils.getType(sign.getLine(0), sign.getLine(2)),
signDirection,
Collections.singletonList(event.getPlayer().getUniqueId().toString()),
finalDelay
@@ -207,7 +206,7 @@ public void on(BlockBreakEvent event) {
if (event.getBlock().getState() instanceof Sign) {
Sign sign = (Sign) event.getBlock().getState();
- SignType signType = Utils.getSignType(sign.getLine(0));
+ SignType signType = Utils.getType(sign.getLine(0), sign.getLine(2));
if (signType == null) {
return;
}
@@ -335,7 +334,7 @@ private void updateRedstonePower(Sign sign, boolean powered, boolean skipLocatio
WirelessRedstone.getWRLogger().debug("Redstone power update (" + powered + "): " + sign.getLocation());
}
- if (Utils.getSignType(sign.getLine(0)) != SignType.TRANSMITTER)
+ if (Utils.getType(sign.getLine(0), sign.getLine(2)) != SignType.TRANSMITTER)
return;
if (sign.getLine(1).equalsIgnoreCase(""))
diff --git a/core/src/main/java/net/licks92/wirelessredstone/listeners/PlayerListener.java b/core/src/main/java/net/licks92/wirelessredstone/listeners/PlayerListener.java
index b3b3501a..ffa8f219 100644
--- a/core/src/main/java/net/licks92/wirelessredstone/listeners/PlayerListener.java
+++ b/core/src/main/java/net/licks92/wirelessredstone/listeners/PlayerListener.java
@@ -40,7 +40,7 @@ public void on(PlayerInteractEvent event) {
}
Sign sign = (Sign) event.getClickedBlock().getState();
- SignType signType = Utils.getSignType(sign.getLine(0));
+ SignType signType = Utils.getType(sign.getLine(0), sign.getLine(2));
if (signType == null) {
return;
}
@@ -67,7 +67,7 @@ public void on(PlayerInteractEvent event) {
return;
}
- signType = Utils.getSignType(sign.getLine(0), sign.getLine(2));
+ signType = Utils.getType(sign.getLine(0), sign.getLine(2));
if (sign.getLine(1).equalsIgnoreCase("")) {
handlePlaceCancelled(event.getClickedBlock());
@@ -108,7 +108,7 @@ public void on(PlayerInteractEvent event) {
int result = WirelessRedstone.getSignManager().registerSign(
sign.getLine(1),
event.getClickedBlock(),
- Utils.getSignType(sign.getLine(0), sign.getLine(2)),
+ Utils.getType(sign.getLine(0), sign.getLine(2)),
signDirection,
Collections.singletonList(event.getPlayer().getUniqueId().toString()),
delay
diff --git a/core/src/main/resources/plugin.yml b/core/src/main/resources/plugin.yml
index 46498899..37033564 100644
--- a/core/src/main/resources/plugin.yml
+++ b/core/src/main/resources/plugin.yml
@@ -1,6 +1,6 @@
name: WirelessRedstone
main: net.licks92.wirelessredstone.WirelessRedstone
-api-version: 1.13
+api-version: 1.20.6
website: http://dev.bukkit.org/server-mods/wireless-redstone/
authors: [licks92, Bart_0110]
version: ${project.version}
diff --git a/dist/pom.xml b/dist/pom.xml
index 4e039877..9d6bf306 100644
--- a/dist/pom.xml
+++ b/dist/pom.xml
@@ -23,7 +23,7 @@
org.apache.maven.plugins
maven-shade-plugin
- 3.2.1
+ 3.6.0
package
diff --git a/pom.xml b/pom.xml
index 8b088e50..2fc5de63 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,14 +16,14 @@
4.0.4
UTF-8
- 1.8
- 1.8
+ 21
+ 21
- 1.14.3
+ 1.20.6
${project.mcversion}-R0.1-SNAPSHOT
- 0.9.0
+ 0.10.2
- 1.7.23
+ 8.3.0
https://7c45ccc4745f428f81d577b15c84b840@sentry.io/1509557
@@ -48,7 +48,7 @@
org.jetbrains
annotations
- 13.0
+ 26.0.2
\ No newline at end of file
diff --git a/spigot_1_13/pom.xml b/spigot_1_13/pom.xml
index 6e1f379b..dbeea66b 100644
--- a/spigot_1_13/pom.xml
+++ b/spigot_1_13/pom.xml
@@ -21,10 +21,10 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.8.1
+ 3.14.0
- 1.8
- 1.8
+ 22
+ 22
@@ -34,7 +34,7 @@
org.spigotmc
spigot-api
- ${project.cbversion}
+ 1.13.2-R0.1-SNAPSHOT
provided
diff --git a/spigot_1_8/pom.xml b/spigot_1_8/pom.xml
index a124a1d4..186433c7 100644
--- a/spigot_1_8/pom.xml
+++ b/spigot_1_8/pom.xml
@@ -21,10 +21,10 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.8.1
+ 3.14.0
- 1.8
- 1.8
+ 22
+ 22
diff --git a/worldedit_6/pom.xml b/worldedit_6/pom.xml
index 5277a8ed..0de40ebd 100644
--- a/worldedit_6/pom.xml
+++ b/worldedit_6/pom.xml
@@ -21,10 +21,10 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.8.1
+ 3.14.0
- 1.8
- 1.8
+ 22
+ 22
@@ -32,9 +32,9 @@
- org.spigotmc
- spigot-api
- 1.12.2-R0.1-SNAPSHOT
+ io.papermc.paper
+ paper-api
+ 1.21.4-R0.1-SNAPSHOT
provided
@@ -47,28 +47,33 @@
com.sk89q.worldedit
worldedit-core
- 6.1
+ 7.3.10
provided
com.sk89q.worldedit
worldedit-bukkit
- 6.1
+ 7.3.10
provided
+
+ org.yaml
+ snakeyaml
+ 2.4
+
- spigot-repo
- https://hub.spigotmc.org/nexus/content/groups/public/
+ papermc
+ https://repo.papermc.io/repository/maven-public/
-
+
sk89q-repo
- http://maven.sk89q.com/repo/
+ https://maven.enginehub.org/repo/
diff --git a/worldedit_7/pom.xml b/worldedit_7/pom.xml
index 7c9f903e..a23c9e3b 100644
--- a/worldedit_7/pom.xml
+++ b/worldedit_7/pom.xml
@@ -21,10 +21,10 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.8.1
+ 3.14.0
- 1.8
- 1.8
+ 21
+ 21
@@ -32,9 +32,9 @@
- org.spigotmc
- spigot-api
- ${project.cbversion}
+ io.papermc.paper
+ paper-api
+ 1.21.4-R0.1-SNAPSHOT
provided
@@ -47,13 +47,13 @@
com.sk89q.worldedit
worldedit-core
- 7.0.0
+ 7.3.10
provided
com.sk89q.worldedit
worldedit-bukkit
- 7.0.0
+ 7.3.10
provided
@@ -61,14 +61,14 @@
- spigot-repo
- https://hub.spigotmc.org/nexus/content/groups/public/
+ papermc
+ https://repo.papermc.io/repository/maven-public/
- sk89q-repo
- http://maven.sk89q.com/repo/
+ enginehub
+ https://maven.enginehub.org/repo/
\ No newline at end of file