mirror of
https://github.com/BX-Team/DivineMC.git
synced 2025-12-19 14:59:25 +00:00
120 lines
8.1 KiB
Diff
120 lines
8.1 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com>
|
|
Date: Mon, 12 Jun 2023 00:23:38 +0300
|
|
Subject: [PATCH] Disable reload command by default
|
|
|
|
This is fully rewritten reload command, you can enable or disable it with -DDivineMC.EnableReloadCommand flag
|
|
Read this article why reload is VERY UNSAFE in Bukkit: https://madelinemiller.dev/blog/problem-with-reload/
|
|
|
|
diff --git a/src/main/java/org/bukkit/command/defaults/ReloadCommand.java b/src/main/java/org/bukkit/command/defaults/ReloadCommand.java
|
|
index bdfe68b386b5ca2878475e548d3c9a3808fce848..0a21f2138969f75425b720487e626aac796821d1 100644
|
|
--- a/src/main/java/org/bukkit/command/defaults/ReloadCommand.java
|
|
+++ b/src/main/java/org/bukkit/command/defaults/ReloadCommand.java
|
|
@@ -1,8 +1,7 @@
|
|
package org.bukkit.command.defaults;
|
|
|
|
-import java.util.Arrays;
|
|
-import java.util.Collections;
|
|
import java.util.List;
|
|
+
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.command.Command;
|
|
@@ -15,7 +14,7 @@ public class ReloadCommand extends BukkitCommand {
|
|
this.description = "Reloads the server configuration and plugins";
|
|
this.usageMessage = "/reload [permissions|commands|confirm]"; // Paper
|
|
this.setPermission("bukkit.command.reload");
|
|
- this.setAliases(Arrays.asList("rl"));
|
|
+ this.setAliases(List.of("rl"));
|
|
}
|
|
|
|
@org.jetbrains.annotations.ApiStatus.Internal // Paper
|
|
@@ -25,48 +24,53 @@ public class ReloadCommand extends BukkitCommand {
|
|
public boolean execute(@NotNull CommandSender sender, @NotNull String currentAlias, @NotNull String[] args) { // Paper
|
|
if (!testPermission(sender)) return true;
|
|
|
|
- // Paper start - Reload permissions.yml & require confirm
|
|
- boolean confirmed = System.getProperty("LetMeReload") != null;
|
|
- if (args.length == 1) {
|
|
- if (args[0].equalsIgnoreCase("permissions")) {
|
|
- Bukkit.getServer().reloadPermissions();
|
|
- Command.broadcastCommandMessage(sender, net.kyori.adventure.text.Component.text("Permissions successfully reloaded.", net.kyori.adventure.text.format.NamedTextColor.GREEN));
|
|
- return true;
|
|
- } else if ("commands".equalsIgnoreCase(args[0])) {
|
|
- if (Bukkit.getServer().reloadCommandAliases()) {
|
|
- Command.broadcastCommandMessage(sender, net.kyori.adventure.text.Component.text("Command aliases successfully reloaded.", net.kyori.adventure.text.format.NamedTextColor.GREEN));
|
|
+ // DivineMC start - disable reload command by default & add startup flag
|
|
+ if (System.getProperty("DivineMC.EnableReloadCommand") == null || false) {
|
|
+ sender.sendMessage(net.kyori.adventure.text.Component.text("Operation denied, command disabled.", net.kyori.adventure.text.format.NamedTextColor.RED ));
|
|
+ sender.sendMessage(net.kyori.adventure.text.Component.text("Reload command SHOULD NEVER be used in whatever circumstances.", net.kyori.adventure.text.format.NamedTextColor.YELLOW));
|
|
+ sender.sendMessage(net.kyori.adventure.text.Component.text("DivineMC has intentionally disabled it in order to stop you using it, instead of restarting your server.", net.kyori.adventure.text.format.NamedTextColor.YELLOW));
|
|
+ sender.sendMessage(net.kyori.adventure.text.Component.text("If you still want to enable reload command, add -DDivineMC.EnableReloadCommand=true flag to your startup arguments.", net.kyori.adventure.text.format.NamedTextColor.YELLOW));
|
|
+ sender.sendMessage(net.kyori.adventure.text.Component.text("---------------------------------------------", net.kyori.adventure.text.format.NamedTextColor.GREEN));
|
|
+ sender.sendMessage(net.kyori.adventure.text.Component.text("RESTART YOUR SERVER AND NEVER USE /reload", net.kyori.adventure.text.format.NamedTextColor.YELLOW));
|
|
+ sender.sendMessage(net.kyori.adventure.text.Component.text("To learn more, read this article: https://madelinemiller.dev/blog/problem-with-reload", net.kyori.adventure.text.format.NamedTextColor.GREEN));
|
|
+ } else {
|
|
+ if (args.length == 1) {
|
|
+ if (args[0].equalsIgnoreCase("permissions")) {
|
|
+ Bukkit.getServer().reloadPermissions();
|
|
+ Command.broadcastCommandMessage(sender, net.kyori.adventure.text.Component.text("Permissions successfully reloaded.", net.kyori.adventure.text.format.NamedTextColor.GREEN));
|
|
+ return true;
|
|
+ } else if ("commands".equalsIgnoreCase(args[0])) {
|
|
+ if (Bukkit.getServer().reloadCommandAliases()) {
|
|
+ Command.broadcastCommandMessage(sender, net.kyori.adventure.text.Component.text("Command aliases successfully reloaded.", net.kyori.adventure.text.format.NamedTextColor.GREEN));
|
|
+ } else {
|
|
+ Command.broadcastCommandMessage(sender, net.kyori.adventure.text.Component.text("An error occurred while trying to reload command aliases.", net.kyori.adventure.text.format.NamedTextColor.RED));
|
|
+ }
|
|
+ return true;
|
|
} else {
|
|
- Command.broadcastCommandMessage(sender, net.kyori.adventure.text.Component.text("An error occurred while trying to reload command aliases.", net.kyori.adventure.text.format.NamedTextColor.RED));
|
|
+ Command.broadcastCommandMessage(sender, net.kyori.adventure.text.Component.text("Usage: " + usageMessage, net.kyori.adventure.text.format.NamedTextColor.RED));
|
|
+ return true;
|
|
}
|
|
- return true;
|
|
- } else if ("confirm".equalsIgnoreCase(args[0])) {
|
|
- confirmed = true;
|
|
- } else {
|
|
- Command.broadcastCommandMessage(sender, net.kyori.adventure.text.Component.text("Usage: " + usageMessage, net.kyori.adventure.text.format.NamedTextColor.RED));
|
|
- return true;
|
|
}
|
|
- }
|
|
- if (!confirmed) {
|
|
- Command.broadcastCommandMessage(sender, net.kyori.adventure.text.Component.text("Are you sure you wish to reload your server? Doing so may cause bugs and memory leaks. It is recommended to restart instead of using /reload. To confirm, please type ", net.kyori.adventure.text.format.NamedTextColor.RED).append(net.kyori.adventure.text.Component.text("/reload confirm", net.kyori.adventure.text.format.NamedTextColor.YELLOW)));
|
|
- return true;
|
|
- }
|
|
- // Paper end
|
|
|
|
- Command.broadcastCommandMessage(sender, ChatColor.RED + "Please note that this command is not supported and may cause issues when using some plugins.");
|
|
- Command.broadcastCommandMessage(sender, ChatColor.RED + "If you encounter any issues please use the /stop command to restart your server.");
|
|
- // Paper start - lifecycle events
|
|
- try {
|
|
- Bukkit.reload();
|
|
- } catch (final IllegalStateException ex) {
|
|
- if (ex.getMessage().equals(RELOADING_DISABLED_MESSAGE)) {
|
|
- Command.broadcastCommandMessage(sender, ChatColor.RED + RELOADING_DISABLED_MESSAGE);
|
|
- return true;
|
|
+ Command.broadcastCommandMessage(sender, ChatColor.RED + "Please note that this command is not supported and may cause issues when using some plugins.");
|
|
+ Command.broadcastCommandMessage(sender, ChatColor.RED + "If you encounter any issues please use the /stop command to restart your server.");
|
|
+ // Paper start - lifecycle events
|
|
+ try {
|
|
+ Bukkit.reload();
|
|
+ } catch (final IllegalStateException ex) {
|
|
+ if (ex.getMessage().equals(RELOADING_DISABLED_MESSAGE)) {
|
|
+ Command.broadcastCommandMessage(sender, ChatColor.RED + RELOADING_DISABLED_MESSAGE);
|
|
+ return true;
|
|
+ }
|
|
}
|
|
+ // Paper end - lifecycle events
|
|
+ Command.broadcastCommandMessage(sender, ChatColor.GREEN + "Reload complete.");
|
|
+
|
|
+ return true;
|
|
}
|
|
- // Paper end - lifecycle events
|
|
- Command.broadcastCommandMessage(sender, ChatColor.GREEN + "Reload complete.");
|
|
|
|
return true;
|
|
+ // DivineMC end
|
|
}
|
|
|
|
@NotNull
|