Compare commits

...
13 Commits
48 changed files with 569 additions and 401 deletions

No files matched your search

+13
View File
@@ -1,6 +1,19 @@
# Maintenance Changelog
This file contains update logs for this project. The top may contain a `Unreleased` section, gathering update logs for a future update during development.
## 5.1.1 - October 17th 2026
### Changed
- Velocity/Bungee: Timer commands now accept `global` as the server argument, with an optional mode: `/maintenance starttimer global [mode] <time>`, `/maintenance scheduletimer global [mode] <time> <duration>`, `/maintenance endtimer global <time>`
- Timer durations now also accept days, e.g. `2d` or `1d12h`
- Folia: Now supports timers
### Fixed
- Folia: Fixed the update check stalling the global region thread
- Velocity/Bungee: Fixed the `redis.enabled` confg key
- Velocity/Bungee: `/maintenance reload` now keeps the maintenance status from Redis instead of overriding it with the local config
- Velocity/Bungee: Fixed `/maintenance aborttimer` tab completion not suggesting servers with running timers
---
## 5.1.0 - May 17th 2026
+2 -2
View File
@@ -7,13 +7,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v6
- name: Set up JDK 21
uses: actions/setup-java@v5
uses: actions/setup-java@v6
with:
java-version: 21
distribution: 'temurin'
+2 -2
View File
@@ -8,6 +8,6 @@ repositories {
dependencies {
// version must be manually kept in sync with the one in root project settings.gradle.kts
implementation("com.gradleup.shadow:shadow-gradle-plugin:9.4.1")
implementation("com.gradleup.nmcp:com.gradleup.nmcp.gradle.plugin:1.4.4")
implementation("com.gradleup.shadow:shadow-gradle-plugin:9.6.1")
implementation("com.gradleup.nmcp:com.gradleup.nmcp.gradle.plugin:1.6.2")
}
+1 -1
View File
@@ -4,7 +4,7 @@ import org.gradle.api.plugins.JavaPlugin.TEST_RUNTIME_ONLY_CONFIGURATION_NAME
plugins {
base
id("maintenance.build-logic")
id("com.gradleup.nmcp.aggregation") version "1.4.4"
id("com.gradleup.nmcp.aggregation") version "1.6.2"
}
allprojects {
+1 -4
View File
@@ -6,10 +6,7 @@ dependencies {
tasks {
shadowJar {
relocate("net.kyori", "eu.kennytv.maintenance.lib.kyori") {
exclude("net.kyori", "adventure-bom")
exclude("com.google.code.gson", "gson")
}
relocate("net.kyori", "eu.kennytv.maintenance.lib.kyori")
}
}
@@ -58,6 +58,11 @@ public final class SettingsProxy extends Settings {
if (!hasRedis() && redisSection.getBoolean("enabled")) {
connectToRedis(redisSection.getString("uri"));
}
if (hasRedis()) {
maintenance = redisHandler.loadMaintenanceStatus();
activeMode = normalizeMode(redisHandler.loadGlobalMode());
maintenanceServers = redisHandler.loadMaintenanceServers();
}
final Object fallback = config.getObject("fallback");
fallbackServers = fallback instanceof String s ? Collections.singletonList(s) : config.getStringList("fallback", Collections.emptyList());
@@ -100,12 +105,7 @@ public final class SettingsProxy extends Settings {
e.printStackTrace();
redisHandler.close();
redisHandler = null;
return;
}
maintenance = redisHandler.loadMaintenanceStatus();
activeMode = normalizeMode(redisHandler.loadGlobalMode());
maintenanceServers = redisHandler.loadMaintenanceServers();
}
public boolean isMaintenance(final String serverName) {
@@ -287,7 +287,7 @@ public final class SettingsProxy extends Settings {
}
public List<String> getCommandsOnMaintenanceEnable(final Server server) {
final List<String> enableCommands = commandsOnMaintenanceEnable.getOrDefault("all", new ArrayList<>());
final List<String> enableCommands = new ArrayList<>(commandsOnMaintenanceEnable.getOrDefault("all", Collections.emptyList()));
final List<String> serverEnableCommands = commandsOnMaintenanceEnable.get(server.getName().toLowerCase(Locale.ROOT));
if (serverEnableCommands != null) {
enableCommands.addAll(serverEnableCommands);
@@ -296,7 +296,7 @@ public final class SettingsProxy extends Settings {
}
public List<String> getCommandsOnMaintenanceDisable(final Server server) {
final List<String> disableCommands = commandsOnMaintenanceDisable.getOrDefault("all", new ArrayList<>());
final List<String> disableCommands = new ArrayList<>(commandsOnMaintenanceDisable.getOrDefault("all", Collections.emptyList()));
final List<String> serverDisableCommands = commandsOnMaintenanceDisable.get(server.getName().toLowerCase(Locale.ROOT));
if (serverDisableCommands != null) {
disableCommands.addAll(serverDisableCommands);
@@ -20,6 +20,8 @@ package eu.kennytv.maintenance.core.proxy.command;
import eu.kennytv.maintenance.core.command.CommandInfo;
import eu.kennytv.maintenance.core.proxy.MaintenanceProxyPlugin;
import eu.kennytv.maintenance.core.proxy.SettingsProxy;
import java.util.ArrayList;
import java.util.List;
public abstract class ProxyCommandInfo extends CommandInfo {
protected final MaintenanceProxyPlugin plugin;
@@ -33,4 +35,10 @@ public abstract class ProxyCommandInfo extends CommandInfo {
protected SettingsProxy getSettings() {
return plugin.getSettingsProxy();
}
protected List<String> getModesCompletion() {
final List<String> modes = new ArrayList<>(getSettings().getPingMessages().getKeys());
modes.remove("default");
return modes;
}
}
@@ -22,8 +22,10 @@ import eu.kennytv.maintenance.core.proxy.MaintenanceProxyPlugin;
import eu.kennytv.maintenance.core.proxy.command.ProxyCommandInfo;
import eu.kennytv.maintenance.core.util.SenderInfo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
public final class AbortSingleTimerCommand extends ProxyCommandInfo {
@@ -67,6 +69,17 @@ public final class AbortSingleTimerCommand extends ProxyCommandInfo {
@Override
public List<String> getTabCompletion(final SenderInfo sender, final String[] args) {
return args.length == 2 && sender.hasMaintenancePermission("singleserver.timer") ? plugin.getCommandManager().getServersCompletion(args[1]) : Collections.emptyList();
if (args.length != 2 || !sender.hasMaintenancePermission("singleserver.timer")) {
return Collections.emptyList();
}
final String prefix = args[1].toLowerCase(Locale.ROOT);
final List<String> list = new ArrayList<>();
for (final String server : plugin.getServerTasks().keySet()) {
if (server.toLowerCase(Locale.ROOT).startsWith(prefix)) {
list.add(server);
}
}
return list;
}
}
@@ -24,6 +24,7 @@ import eu.kennytv.maintenance.core.runnable.MaintenanceRunnableBase;
import eu.kennytv.maintenance.core.util.DiscordWebhook;
import eu.kennytv.maintenance.core.util.SenderInfo;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
@@ -43,59 +44,82 @@ public final class SingleEndtimerCommand extends ProxyCommandInfo {
@Override
public void execute(final SenderInfo sender, final String[] args) {
if (args.length == 2) {
if (checkPermission(sender, "timer")) return;
final Duration duration = plugin.getCommandManager().parseDurationAndCheckTask(sender, args[1]);
if (duration == null) {
sender.send(getHelpMessage());
return;
}
if (!plugin.isMaintenance()) {
sender.send(getMessage("alreadyDisabled"));
return;
}
plugin.startMaintenanceRunnable(duration, false);
final Component message = getMessage("endtimerStarted", "%TIME%", plugin.getRunnable().getTime());
sender.send(message);
plugin.sendWebhookMessage("webhookEndtimerStarted", DiscordWebhook.EventType.ENDTIMER_STARTED,
"%TIME%", plugin.getRunnable().getTime(),
"%TIMESTAMP%", plugin.getTargetTimestamp(duration));
endGlobal(sender, args[1]);
} else if (args.length == 3) {
if (checkPermission(sender, "singleserver.timer")) return;
final Duration duration = plugin.getCommandManager().parseDurationAndCheckTask(sender, args[2], false);
if (duration == null) {
sender.send(getHelpMessage());
return;
if (args[1].equalsIgnoreCase("global")) {
endGlobal(sender, args[2]);
} else {
endSingle(sender, args[1], args[2]);
}
final Server server = plugin.getCommandManager().checkSingleTimerServerArg(sender, args[1]);
if (server == null) return;
if (!plugin.isMaintenance(server)) {
sender.send(getMessage("singleServerAlreadyDisabled", "%SERVER%", server.getName()));
return;
}
final MaintenanceRunnableBase runnable = plugin.startSingleMaintenanceRunnable(server, duration, false);
final Component message = getMessage(
"singleEndtimerStarted",
"%TIME%", runnable.getTime(),
"%SERVER%", server.getName()
);
sender.send(message);
plugin.sendWebhookMessage("webhookSingleEndtimerStarted", DiscordWebhook.EventType.ENDTIMER_STARTED,
"%TIME%", runnable.getTime(),
"%SERVER%", server.getName(),
"%TIMESTAMP%", plugin.getTargetTimestamp(duration));
} else {
sender.send(getHelpMessage());
}
}
private void endGlobal(final SenderInfo sender, final String durationArg) {
if (checkPermission(sender, "timer")) return;
final Duration duration = plugin.getCommandManager().parseDurationAndCheckTask(sender, durationArg);
if (duration == null) {
sender.send(getHelpMessage());
return;
}
if (!plugin.isMaintenance()) {
sender.send(getMessage("alreadyDisabled"));
return;
}
plugin.startMaintenanceRunnable(duration, false);
final Component message = getMessage("endtimerStarted", "%TIME%", plugin.getRunnable().getTime());
sender.send(message);
plugin.sendWebhookMessage("webhookEndtimerStarted", DiscordWebhook.EventType.ENDTIMER_STARTED,
"%TIME%", plugin.getRunnable().getTime(),
"%TIMESTAMP%", plugin.getTargetTimestamp(duration));
}
private void endSingle(final SenderInfo sender, final String serverArg, final String durationArg) {
if (checkPermission(sender, "singleserver.timer")) return;
final Duration duration = plugin.getCommandManager().parseDurationAndCheckTask(sender, durationArg, false);
if (duration == null) {
sender.send(getHelpMessage());
return;
}
final Server server = plugin.getCommandManager().checkSingleTimerServerArg(sender, serverArg);
if (server == null) return;
if (!plugin.isMaintenance(server)) {
sender.send(getMessage("singleServerAlreadyDisabled", "%SERVER%", server.getName()));
return;
}
final MaintenanceRunnableBase runnable = plugin.startSingleMaintenanceRunnable(server, duration, false);
final Component message = getMessage(
"singleEndtimerStarted",
"%TIME%", runnable.getTime(),
"%SERVER%", server.getName()
);
sender.send(message);
plugin.sendWebhookMessage("webhookSingleEndtimerStarted", DiscordWebhook.EventType.ENDTIMER_STARTED,
"%TIME%", runnable.getTime(),
"%SERVER%", server.getName(),
"%TIMESTAMP%", plugin.getTargetTimestamp(duration));
}
@Override
public List<String> getTabCompletion(final SenderInfo sender, final String[] args) {
return args.length == 2 && sender.hasMaintenancePermission("singleserver.timer") ? plugin.getCommandManager().getMaintenanceServersCompletion(args[1].toLowerCase(Locale.ROOT)) : Collections.emptyList();
if (args.length != 2) {
return Collections.emptyList();
}
final List<String> suggestions = new ArrayList<>();
if (sender.hasMaintenancePermission("timer") && plugin.isMaintenance()) {
suggestions.add("global");
}
if (sender.hasMaintenancePermission("singleserver.timer")) {
suggestions.addAll(plugin.getCommandManager().getMaintenanceServersCompletion(args[1].toLowerCase(Locale.ROOT)));
}
return suggestions;
}
}
@@ -23,9 +23,11 @@ import eu.kennytv.maintenance.core.proxy.command.ProxyCommandInfo;
import eu.kennytv.maintenance.core.runnable.MaintenanceRunnableBase;
import eu.kennytv.maintenance.core.util.SenderInfo;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import org.jetbrains.annotations.Nullable;
public final class SingleScheduleTimerCommand extends ProxyCommandInfo {
@@ -41,69 +43,89 @@ public final class SingleScheduleTimerCommand extends ProxyCommandInfo {
@Override
public void execute(final SenderInfo sender, final String[] args) {
if (args.length == 3) {
if (checkPermission(sender, "timer")) return;
final Duration enableIn = plugin.getCommandManager().parseDurationAndCheckTask(sender, args[1]);
final Duration duration = plugin.getCommandManager().parseDurationAndCheckTask(sender, args[2], false);
if (enableIn == null || duration == null) {
sender.send(getHelpMessage());
return;
}
if (plugin.isMaintenance()) {
sender.send(getMessage("alreadyEnabled"));
return;
}
plugin.scheduleMaintenanceRunnable(enableIn, duration);
sender.send(getMessage(
"scheduletimerStarted",
"%TIME%", plugin.getRunnable().getTime(),
"%DURATION%", plugin.getFormattedTime((int) duration.getSeconds())
));
scheduleGlobal(sender, null, args[1], args[2]);
} else if (args.length == 4 || args.length == 5) {
if (checkPermission(sender, "singleserver.timer")) return;
final String mode = args.length == 5 ? args[2] : null;
final String enableInArg = args.length == 5 ? args[3] : args[2];
final String durationArg = args.length == 5 ? args[4] : args[3];
final Duration enableIn = plugin.getCommandManager().parseDurationAndCheckTask(sender, enableInArg, false);
final Duration duration = plugin.getCommandManager().parseDurationAndCheckTask(sender, durationArg, false);
if (enableIn == null || duration == null) {
sender.send(getHelpMessage());
return;
if (args[1].equalsIgnoreCase("global")) {
scheduleGlobal(sender, mode, enableInArg, durationArg);
} else {
scheduleSingle(sender, args[1], mode, enableInArg, durationArg);
}
final Server server = plugin.getCommandManager().checkSingleTimerServerArg(sender, args[1]);
if (server == null) return;
if (plugin.isMaintenance(server)) {
sender.send(getMessage("singleServerAlreadyEnabled", "%SERVER%", server.getName()));
return;
}
final MaintenanceRunnableBase runnable = plugin.scheduleSingleMaintenanceRunnable(server, enableIn, duration, mode);
sender.send(getMessage(
"singleScheduletimerStarted",
"%TIME%", runnable.getTime(),
"%DURATION%", plugin.getFormattedTime((int) duration.getSeconds()),
"%SERVER%", server.getName()
));
} else {
sender.send(getHelpMessage());
}
}
private void scheduleGlobal(final SenderInfo sender, @Nullable final String mode, final String enableInArg, final String durationArg) {
if (checkPermission(sender, "timer")) return;
final Duration enableIn = plugin.getCommandManager().parseDurationAndCheckTask(sender, enableInArg);
final Duration duration = plugin.getCommandManager().parseDurationAndCheckTask(sender, durationArg, false);
if (enableIn == null || duration == null) {
sender.send(getHelpMessage());
return;
}
if (plugin.isMaintenance()) {
sender.send(getMessage("alreadyEnabled"));
return;
}
plugin.scheduleMaintenanceRunnable(enableIn, duration, mode);
sender.send(getMessage(
"scheduletimerStarted",
"%TIME%", plugin.getRunnable().getTime(),
"%DURATION%", plugin.getFormattedTime((int) duration.getSeconds())
));
}
private void scheduleSingle(final SenderInfo sender, final String serverArg, @Nullable final String mode,
final String enableInArg, final String durationArg) {
if (checkPermission(sender, "singleserver.timer")) return;
final Duration enableIn = plugin.getCommandManager().parseDurationAndCheckTask(sender, enableInArg, false);
final Duration duration = plugin.getCommandManager().parseDurationAndCheckTask(sender, durationArg, false);
if (enableIn == null || duration == null) {
sender.send(getHelpMessage());
return;
}
final Server server = plugin.getCommandManager().checkSingleTimerServerArg(sender, serverArg);
if (server == null) return;
if (plugin.isMaintenance(server)) {
sender.send(getMessage("singleServerAlreadyEnabled", "%SERVER%", server.getName()));
return;
}
final MaintenanceRunnableBase runnable = plugin.scheduleSingleMaintenanceRunnable(server, enableIn, duration, mode);
sender.send(getMessage(
"singleScheduletimerStarted",
"%TIME%", runnable.getTime(),
"%DURATION%", plugin.getFormattedTime((int) duration.getSeconds()),
"%SERVER%", server.getName()
));
}
@Override
public List<String> getTabCompletion(final SenderInfo sender, final String[] args) {
if (!sender.hasMaintenancePermission("singleserver.timer")) {
return Collections.emptyList();
}
if (args.length == 2) {
return plugin.getCommandManager().getServersCompletion(args[1].toLowerCase(Locale.ROOT));
final List<String> suggestions = new ArrayList<>();
if (sender.hasMaintenancePermission("timer")) {
suggestions.add("global");
}
if (sender.hasMaintenancePermission("singleserver.timer")) {
suggestions.addAll(plugin.getCommandManager().getServersCompletion(args[1].toLowerCase(Locale.ROOT)));
}
return suggestions;
}
if (args.length == 3 && plugin.getServer(args[1]) != null) {
final List<String> modes = new java.util.ArrayList<>(getSettings().getPingMessages().getKeys());
modes.remove("default");
return modes;
if (args.length == 3) {
if (args[1].equalsIgnoreCase("global")) {
return sender.hasMaintenancePermission("timer") ? getModesCompletion() : Collections.emptyList();
}
if (sender.hasMaintenancePermission("singleserver.timer") && plugin.getServer(args[1]) != null) {
return getModesCompletion();
}
}
return Collections.emptyList();
}
@@ -24,10 +24,12 @@ import eu.kennytv.maintenance.core.runnable.MaintenanceRunnableBase;
import eu.kennytv.maintenance.core.util.DiscordWebhook;
import eu.kennytv.maintenance.core.util.SenderInfo;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import net.kyori.adventure.text.Component;
import org.jetbrains.annotations.Nullable;
public final class SingleStarttimerCommand extends ProxyCommandInfo {
@@ -43,70 +45,89 @@ public final class SingleStarttimerCommand extends ProxyCommandInfo {
@Override
public void execute(final SenderInfo sender, final String[] args) {
if (args.length == 2) {
if (checkPermission(sender, "timer")) return;
final Duration duration = plugin.getCommandManager().parseDurationAndCheckTask(sender, args[1]);
if (duration == null) {
sender.send(getHelpMessage());
return;
}
if (plugin.isMaintenance()) {
sender.send(getMessage("alreadyEnabled"));
return;
}
plugin.startMaintenanceRunnable(duration, true);
final Component message = getMessage("starttimerStarted", "%TIME%", plugin.getRunnable().getTime());
sender.send(message);
plugin.sendWebhookMessage("webhookStarttimerStarted", DiscordWebhook.EventType.STARTTIMER_STARTED,
"%TIME%", plugin.getRunnable().getTime(),
"%TIMESTAMP%", plugin.getTargetTimestamp(duration));
startGlobal(sender, null, args[1]);
} else if (args.length == 3 || args.length == 4) {
if (checkPermission(sender, "singleserver.timer")) return;
final String mode = args.length == 4 ? args[2] : null;
final String durationArg = args.length == 4 ? args[3] : args[2];
final Duration duration = plugin.getCommandManager().parseDurationAndCheckTask(sender, durationArg, false);
if (duration == null) {
sender.send(getHelpMessage());
return;
if (args[1].equalsIgnoreCase("global")) {
startGlobal(sender, mode, durationArg);
} else {
startSingle(sender, args[1], mode, durationArg);
}
final Server server = plugin.getCommandManager().checkSingleTimerServerArg(sender, args[1]);
if (server == null) return;
if (plugin.isMaintenance(server)) {
sender.send(getMessage("singleServerAlreadyEnabled", "%SERVER%", server.getName()));
return;
}
final MaintenanceRunnableBase runnable = plugin.startSingleMaintenanceRunnable(server, duration, true, mode);
final Component message = getMessage(
"singleStarttimerStarted",
"%TIME%", runnable.getTime(),
"%SERVER%", server.getName()
);
sender.send(message);
plugin.sendWebhookMessage("webhookSingleStarttimerStarted", DiscordWebhook.EventType.STARTTIMER_STARTED,
"%TIME%", runnable.getTime(),
"%SERVER%", server.getName(),
"%TIMESTAMP%", plugin.getTargetTimestamp(duration));
} else {
sender.send(getHelpMessage());
}
}
private void startGlobal(final SenderInfo sender, @Nullable final String mode, final String durationArg) {
if (checkPermission(sender, "timer")) return;
final Duration duration = plugin.getCommandManager().parseDurationAndCheckTask(sender, durationArg);
if (duration == null) {
sender.send(getHelpMessage());
return;
}
if (plugin.isMaintenance()) {
sender.send(getMessage("alreadyEnabled"));
return;
}
plugin.startMaintenanceRunnable(duration, true, mode);
final Component message = getMessage("starttimerStarted", "%TIME%", plugin.getRunnable().getTime());
sender.send(message);
plugin.sendWebhookMessage("webhookStarttimerStarted", DiscordWebhook.EventType.STARTTIMER_STARTED,
"%TIME%", plugin.getRunnable().getTime(),
"%TIMESTAMP%", plugin.getTargetTimestamp(duration));
}
private void startSingle(final SenderInfo sender, final String serverArg, @Nullable final String mode, final String durationArg) {
if (checkPermission(sender, "singleserver.timer")) return;
final Duration duration = plugin.getCommandManager().parseDurationAndCheckTask(sender, durationArg, false);
if (duration == null) {
sender.send(getHelpMessage());
return;
}
final Server server = plugin.getCommandManager().checkSingleTimerServerArg(sender, serverArg);
if (server == null) return;
if (plugin.isMaintenance(server)) {
sender.send(getMessage("singleServerAlreadyEnabled", "%SERVER%", server.getName()));
return;
}
final MaintenanceRunnableBase runnable = plugin.startSingleMaintenanceRunnable(server, duration, true, mode);
final Component message = getMessage(
"singleStarttimerStarted",
"%TIME%", runnable.getTime(),
"%SERVER%", server.getName()
);
sender.send(message);
plugin.sendWebhookMessage("webhookSingleStarttimerStarted", DiscordWebhook.EventType.STARTTIMER_STARTED,
"%TIME%", runnable.getTime(),
"%SERVER%", server.getName(),
"%TIMESTAMP%", plugin.getTargetTimestamp(duration));
}
@Override
public List<String> getTabCompletion(final SenderInfo sender, final String[] args) {
if (!sender.hasMaintenancePermission("singleserver.timer")) {
return Collections.emptyList();
}
if (args.length == 2) {
return plugin.getCommandManager().getServersCompletion(args[1].toLowerCase(Locale.ROOT));
final List<String> suggestions = new ArrayList<>();
if (sender.hasMaintenancePermission("timer")) {
suggestions.add("global");
}
if (sender.hasMaintenancePermission("singleserver.timer")) {
suggestions.addAll(plugin.getCommandManager().getServersCompletion(args[1].toLowerCase(Locale.ROOT)));
}
return suggestions;
}
if (args.length == 3 && plugin.getServer(args[1]) != null) {
final List<String> modes = new java.util.ArrayList<>(getSettings().getPingMessages().getKeys());
modes.remove("default");
return modes;
if (args.length == 3) {
if (args[1].equalsIgnoreCase("global")) {
return sender.hasMaintenancePermission("timer") ? getModesCompletion() : Collections.emptyList();
}
if (sender.hasMaintenancePermission("singleserver.timer") && plugin.getServer(args[1]) != null) {
return getModesCompletion();
}
}
return Collections.emptyList();
}
@@ -17,7 +17,7 @@
*/
package eu.kennytv.maintenance.core.proxy.runnable;
import eu.kennytv.maintenance.api.proxy.MaintenanceProxy;
import eu.kennytv.maintenance.core.proxy.MaintenanceProxyPlugin;
import eu.kennytv.maintenance.api.proxy.Server;
import eu.kennytv.maintenance.core.MaintenancePlugin;
import eu.kennytv.maintenance.core.Settings;
@@ -43,7 +43,12 @@ public class SingleMaintenanceRunnable extends MaintenanceRunnableBase {
@Override
protected void finish() {
((MaintenanceProxy) plugin).setMaintenanceToServer(server, enable, mode);
final MaintenanceProxyPlugin proxyPlugin = (MaintenanceProxyPlugin) plugin;
proxyPlugin.setMaintenanceToServer(server, enable, mode);
// Make sure no-ops have the platform task cancelled as well
if (proxyPlugin.getServerTasks().remove(server.getName(), this)) {
getTask().cancel();
}
}
@Override
@@ -200,7 +200,11 @@ public abstract class MaintenancePlugin implements Maintenance {
}
public void startMaintenanceRunnable(final Duration duration, final boolean enable) {
runnable = new MaintenanceRunnable(this, settings, (int) duration.getSeconds(), enable);
startMaintenanceRunnable(duration, enable, null);
}
public void startMaintenanceRunnable(final Duration duration, final boolean enable, @Nullable final String mode) {
runnable = new MaintenanceRunnable(this, settings, (int) duration.getSeconds(), enable, mode);
// Save the endtimer to be able to continue it after a server stop
if (settings.isSaveEndtimerOnStop() && !runnable.shouldEnable()) {
settings.setSavedEndtimer(System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(runnable.getSecondsLeft()));
@@ -208,7 +212,11 @@ public abstract class MaintenancePlugin implements Maintenance {
}
public void scheduleMaintenanceRunnable(final Duration enableIn, final Duration maintenanceDuration) {
runnable = new MaintenanceScheduleRunnable(this, settings, (int) enableIn.getSeconds(), (int) maintenanceDuration.getSeconds());
scheduleMaintenanceRunnable(enableIn, maintenanceDuration, null);
}
public void scheduleMaintenanceRunnable(final Duration enableIn, final Duration maintenanceDuration, @Nullable final String mode) {
runnable = new MaintenanceScheduleRunnable(this, settings, (int) enableIn.getSeconds(), (int) maintenanceDuration.getSeconds(), mode);
}
public boolean updateAvailable() {
@@ -298,6 +306,8 @@ public abstract class MaintenancePlugin implements Maintenance {
private void checkNewestVersion() throws Exception {
final URLConnection connection = URI.create("https://hangar.papermc.io/api/v1/projects/Maintenance/latestrelease").toURL().openConnection();
connection.setRequestProperty("User-Agent", "Maintenance/" + getVersion());
connection.setConnectTimeout(5_000);
connection.setReadTimeout(10_000);
try (final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
final String newVersionString = reader.readLine();
final Version newVersion = new Version(newVersionString);
@@ -47,7 +47,7 @@ import org.jetbrains.annotations.Nullable;
public class Settings implements eu.kennytv.maintenance.api.Settings {
public static final String NEW_LINE_REPLACEMENT = "<br>";
private static final int CONFIG_VERSION = 11;
private static final int CONFIG_VERSION = 12;
private static final int LANGUAGE_VERSION = 5;
protected final MaintenancePlugin plugin;
private final Map<UUID, String> whitelistedPlayers = new HashMap<>();
@@ -175,6 +175,9 @@ public class Settings implements eu.kennytv.maintenance.api.Settings {
if (file.exists()) return;
try (final InputStream in = plugin.getResource(fileName)) {
if (in == null) {
throw new IOException("No bundled language file " + fileName);
}
Files.copy(in, file.toPath());
} catch (final IOException e) {
plugin.getLogger().warning("Unable to provide language " + languageName);
@@ -336,6 +339,10 @@ public class Settings implements eu.kennytv.maintenance.api.Settings {
config.set("proxied-maintenance-servers", migratedServers);
}
}
if (version < 12) {
// Fix typo in the shipped config key :>
config.move("redis.enables", "redis.enabled");
}
createFile("config-new.yml", "config.yml");
final File file = new File(plugin.getDataFolder(), "config-new.yml");
@@ -132,6 +132,24 @@ public abstract class MaintenanceCommand {
return info != null && info.hasPermission(sender) ? info.getTabCompletion(sender, args) : Collections.emptyList();
}
/**
* Converts a user given time like {@code 2d}, {@code 2d12h}, {@code 1h5m}, or {@code 30s} to an ISO-8601 duration string.
* Days are supported in addition to hours, minutes, and seconds.
*
* @return ISO duration string
*/
private static String toIsoDuration(final String time) {
final String upper = time.toUpperCase(Locale.ROOT);
final int dayIndex = upper.indexOf('D');
if (dayIndex == -1) {
return "PT" + upper;
}
final String days = upper.substring(0, dayIndex + 1);
final String rest = upper.substring(dayIndex + 1);
return rest.isEmpty() ? "P" + days : "P" + days + "T" + rest;
}
public @Nullable Duration parseDurationAndCheckTask(final SenderInfo sender, final String time, final boolean taskCheck) {
final Duration duration;
if (plugin.isNumeric(time)) {
@@ -139,8 +157,7 @@ public abstract class MaintenanceCommand {
duration = Duration.ofMinutes(Integer.parseInt(time));
} else {
try {
// Only accept hours, minutes, and seconds
duration = Duration.parse("PT" + time.toUpperCase(Locale.ROOT));
duration = Duration.parse(toIsoDuration(time));
} catch (final DateTimeParseException e) {
return null;
}
@@ -37,6 +37,7 @@ public final class MaintenanceDump {
configuration = new LinkedHashMap<>(settings.getConfig().getValues());
addDBSettings("redis", "enabled");
redact("webhook", "url");
configuration.put("whitelisted-players", settings.getWhitelistedPlayers());
configuration.put("icon-exists", new File(plugin.getDataFolder(), "maintenance-icon.png").exists());
@@ -45,6 +46,20 @@ public final class MaintenanceDump {
plugins = jsonObject;
}
private void redact(final String key, final String... subKeys) {
final Object o = configuration.get(key);
if (o instanceof Map) {
final Map<String, Object> map = new LinkedHashMap<>(((Map<String, Object>) o));
for (final String subKey : subKeys) {
final Object value = map.get(subKey);
if (value != null) {
map.put(subKey, value.toString().isEmpty() ? "" : "<redacted>");
}
}
configuration.put(key, map);
}
}
private void addDBSettings(final String key, final String... allowedSubKeys) {
final Set<String> allowedSubKeysSet = Set.of(allowedSubKeys);
final Object o = configuration.get(key);
@@ -20,16 +20,23 @@ package eu.kennytv.maintenance.core.runnable;
import eu.kennytv.maintenance.core.MaintenancePlugin;
import eu.kennytv.maintenance.core.Settings;
import net.kyori.adventure.text.Component;
import org.jetbrains.annotations.Nullable;
public class MaintenanceRunnable extends MaintenanceRunnableBase {
protected final String mode;
public MaintenanceRunnable(final MaintenancePlugin plugin, final Settings settings, final int seconds, final boolean enable) {
this(plugin, settings, seconds, enable, null);
}
public MaintenanceRunnable(final MaintenancePlugin plugin, final Settings settings, final int seconds, final boolean enable, @Nullable final String mode) {
super(plugin, settings, seconds, enable);
this.mode = mode;
}
@Override
protected void finish() {
plugin.setMaintenance(enable);
plugin.setMaintenance(enable, mode);
}
@Override
@@ -21,12 +21,17 @@ import eu.kennytv.maintenance.core.MaintenancePlugin;
import eu.kennytv.maintenance.core.Settings;
import java.time.Duration;
import net.kyori.adventure.text.Component;
import org.jetbrains.annotations.Nullable;
public final class MaintenanceScheduleRunnable extends MaintenanceRunnable {
private final int maintenanceDuration;
public MaintenanceScheduleRunnable(final MaintenancePlugin plugin, final Settings settings, final int secondsToEnable, final int maintenanceDuration) {
super(plugin, settings, secondsToEnable, true);
this(plugin, settings, secondsToEnable, maintenanceDuration, null);
}
public MaintenanceScheduleRunnable(final MaintenancePlugin plugin, final Settings settings, final int secondsToEnable, final int maintenanceDuration, @Nullable final String mode) {
super(plugin, settings, secondsToEnable, true, mode);
this.maintenanceDuration = maintenanceDuration;
}
+2 -2
View File
@@ -147,7 +147,7 @@ webhook:
# have the same maintenance status (global as well as per server) and whitelisted players,
# so you won't have to update these on every proxy by hand.
redis:
enables: false
enabled: false
# Make sure your Redis instance is properly protected.
# URI format: redis[s]://[[username][:password]@][host][:port][/db-number]
# E.g. an SSL connection to a password protected redis could look like this: "rediss://user:password@127.0.0.1:6379"
@@ -159,4 +159,4 @@ redis:
update-checks: true
# Used for autoupdating the config, do not change this value.
config-version: 11
config-version: 12
+3 -3
View File
@@ -104,9 +104,9 @@ helpWhitelistAdd: "<gold>/maintenance add <nom/uuid> <gray>(Afegeix el jugador a
helpWhitelistRemove: "<gold>/maintenance remove <nom/uuid> <gray>(Elimina el jugador de la llista de permitits del manteniment)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [servidor] <gray>(Si està actiu, cancel·la el temporitzador del servidor)"
helpSingleEndtimer: "<gold>/maintenance endtimer [servidor] <desactivar en> <gray>(Després del temps indicat, es desactivarà el manteniment al servidor)"
helpSingleStarttimer: "<gold>/maintenance starttimer [servidor] <activar en> <gray>(Després del temps indicat, s'activarà el manteniment al servidor)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [servidor] <activar en> <durada del manteniment> <gray>(Programa l'activació del manteniment al servidor)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpStatus: "<gold>/maintenance status <gray>(Mostra tots els servidors proxy en manteniment)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
+3 -3
View File
@@ -104,9 +104,9 @@ helpWhitelistAdd: "<gold>/maintenance add <name/uuid> <gray>(Tilføjer spilleren
helpWhitelistRemove: "<gold>/maintenance remove <name/uuid> <gray>(Sletter spilleren fra vedligeholdelseshvidlisten)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [server] <gray>(Hvis timeren kører, vil den blive afbrudt)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpStatus: "<gold>/maintenance status <gray>(Viser alle proxyservere, der har Vedligeholdelsestilstand aktiveret)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
+13 -13
View File
@@ -7,7 +7,7 @@ noPermission: "<red>Du hast nicht die erforderliche Berechtigung, um diesen Befe
kickmessage: "<red>Der Server befindet sich momentan im Wartungsmodus!<br>Bitte versuche es später nochmal!"
maintenanceActivated: "<prefix><gold>Der Wartungsmodus ist jetzt aktiviert."
maintenanceDeactivated: "<prefix><gold>Der Wartungsmodus ist nun deaktiviert."
maintenanceStatusOn: "<prefix><gold>Wartungsmodus ist momentan <green>aktiviert<gold>."
maintenanceStatusOn: "<prefix><gold>Wartungsmodus ist derzeit <green>aktiviert<gold>."
maintenanceStatusOff: "<prefix><gold>Wartungsmodus ist momentan <red>deaktiviert<gold>."
maintenanceStatusOnWithEndTimer: "<prefix><gold>Wartungsmodus ist momentan <green>aktiviert <grey>und wird deaktiviert in <gold>%TIME%."
maintenanceStatusOffWithStartTimer: "<prefix><gold>Wartungsmodus ist momentan <red>deaktiviert <grey>und wird aktiviert in <gold>%TIME%."
@@ -104,21 +104,21 @@ helpWhitelistAdd: "<gold>/maintenance add <Name/UUID> <gray>(Whitelistet einen S
helpWhitelistRemove: "<gold>/maintenance remove <Name/UUID> <gray>(Entfernt einen Spieler aus der Wartungsmodus Whitelist)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [Server] <gray>(Falls momentan ein Timer läuft, wird dieser abgebrochen)"
helpSingleEndtimer: "<gold>/maintenance endtimer [Server] <Deaktiviere in> <gray>(Sobald der Timer, bspw. 1h5m, abläuft wird der Wartungsmodus deaktiviert)"
helpSingleStarttimer: "<gold>/maintenance starttimer [Server] [Modus] <Aktiviere in> <gray>(Sobald der Timer, bspw. 1h5m, abläuft wird der Wartungsmodus aktiviert)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [Server] [Modus] <Starte in> <Wartungsdauer> <gray>(Sobald der Timer, bspw. 1h5m, abläuft wird der Wartungsmodus für die gegebene Länge aktiviert)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Aktiviert/deaktiviert den Wartungsmodus global oder auf einem bestimmten Server mit optionalem Anzeigemodus beim Aktivieren)"
helpStatus: "<gold>/maintenance status <gray>(Zeigt alle Server an, auf denen momentan der Wartungsmodus aktiviert ist)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
#For timer webhooks, %TIMESTAMP% is a Unix timestamp for use in Discord timestamp tags, e.g. <t:%TIMESTAMP%:R>.
webhookMaintenanceActivated: "**Maintenance mode enabled.**"
webhookMaintenanceDeactivated: "**Maintenance mode disabled.**"
webhookStarttimerStarted: "Maintenance mode will be enabled <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookEndtimerStarted: "Maintenance mode will be disabled <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookJoinNotification: "Blocked join: `%PLAYER%` tried to join during maintenance."
webhookSingleMaintenanceActivated: "Maintenance mode enabled on `%SERVER%`."
webhookSingleMaintenanceDeactivated: "Maintenance mode disabled on `%SERVER%`."
webhookSingleStarttimerStarted: "Maintenance mode will be enabled on `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookSingleEndtimerStarted: "Maintenance mode will be disabled on `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookMaintenanceActivated: "**Wartungsmodus aktiviert.**"
webhookMaintenanceDeactivated: "**Wartungsmodus deaktiviert.**"
webhookStarttimerStarted: "Der Wartungsmodus wird aktiviert in <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookEndtimerStarted: "Der Wartungsmodus wird deaktiviert in <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookJoinNotification: "Beitritt gesperrt: `%PLAYER%` hat versucht, während den Wartungsarbeiten beizutreten."
webhookSingleMaintenanceActivated: "Der Wartungsmodus wurde aktiviert auf `%SERVER%`."
webhookSingleMaintenanceDeactivated: "Der Wartungsmodus wurde deaktiviert auf `%SERVER%`."
webhookSingleStarttimerStarted: "Der Wartungsmodus wird aktiviert auf `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookSingleEndtimerStarted: "Der Wartungsmodus wird deaktiviert auf `%SERVER%` <t:%TIMESTAMP%:R>(`%TIME%`)."
#Used for autoupdating the language file, do not change this value.
language-version: 4
+3 -3
View File
@@ -104,9 +104,9 @@ helpWhitelistAdd: "<gold>/maintenance add <name/uuid> <gray>(Adds the player to
helpWhitelistRemove: "<gold>/maintenance remove <name/uuid> <gray>(Removes the player from the maintenance whitelist)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [server] <gray>(If running, the current timer will be aborted)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpStatus: "<gold>/maintenance status <gray>(Lists all proxied servers, that are currently under maintenance)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
+35 -35
View File
@@ -5,40 +5,40 @@
prefix: "<dark_gray>[<yellow>Maintenance<dark_gray>] "
noPermission: "<prefix><dark_red>No tienes permiso para ejecutar este comando."
kickmessage: "<red>¡El servidor se encuentra en mantenimiento!<br>¡Intentalo de nuevo más tarde!"
maintenanceActivated: "<prefix><gold>Mantenimiento <gray>activado."
maintenanceDeactivated: "<prefix><gold>Modo mantenimiento desactivado."
maintenanceStatusOn: "<prefix><gold>Maintenance mode is currently <green>enabled<gold>."
maintenanceStatusOff: "<prefix><gold>Maintenance mode is currently <red>disabled<gold>."
maintenanceStatusOnWithEndTimer: "<prefix><gold>Maintenance mode is currently <green>enabled <grey>and will be disabled in <gold>%TIME%."
maintenanceStatusOffWithStartTimer: "<prefix><gold>Maintenance mode is currently <red>disabled <grey>and will be enabled in <gold>%TIME%."
alreadyEnabled: "<prefix><gray>¡Modo mantenimiento se encuentra habilitado!"
alreadyDisabled: "<prefix><gray>¡Modo mantenimiento se encuentra deshabilitado!"
maintenanceActivated: "<prefix><gold>Modo Mantenimiento activado."
maintenanceDeactivated: "<prefix><gold>Modo Mantenimiento desactivado."
maintenanceStatusOn: "<prefix><gold>El modo de mantenimiento está actualmente <green>activado<gold>."
maintenanceStatusOff: "<prefix><gold>El modo de mantenimiento está actualmente <red>desactivado<gold>."
maintenanceStatusOnWithEndTimer: "<prefix><gold>El modo de mantenimiento está actualmente <green>habilitado <grey>y se desactivará en <gold>%TIME%."
maintenanceStatusOffWithStartTimer: "<prefix><gold>El modo de mantenimiento está actualmente <red>desactivado <grey>y se activará en <gold>%TIME%."
alreadyEnabled: "<prefix><red>¡Modo mantenimiento ya está activado!"
alreadyDisabled: "<prefix><red>¡Modo mantenimiento ya está desactivado!"
endtimerBroadcast: "<prefix><gray>El modo mantenimiento se desactivará en <gold>%TIME%<gray>."
endtimerStarted: "<prefix><gray>Temporizador iniciado: El modo mantenimiento se desactivará en <gold>%TIME%<gray>."
starttimerBroadcast: "<prefix><gray>El modo mantenimiento se habilitara en <gold>%TIME%<gray>."
starttimerStarted: "<prefix><gray>Temporizador iniciado: El modo mantenimiento se activará en <gold>%TIME%<gray>."
scheduletimerBroadcast: "<prefix><gray>Maintenance mode will be enabled in <gold>%TIME% <gray>and will last for <gold>%DURATION%<gray>."
endtimerStarted: "<prefix><green>Temporizador iniciado: <gray>El modo mantenimiento se desactivará en <gold>%TIME%<gray>."
starttimerBroadcast: "<prefix><gray>El modo mantenimiento se activará en <gold>%TIME%<gray>."
starttimerStarted: "<prefix><green>Temporizador iniciado: <gray>El modo mantenimiento se activará en <gold>%TIME%<gray>."
scheduletimerBroadcast: "<prefix><gray>Temporizador iniciado: El modo mantenimiento se activará en <gold>%TIME% <gray>y durará <gold>%DURATION%<gray>."
scheduletimerStarted: "<prefix><gray>Temporizador iniciado: El modo mantenimiento se activará en <gold>%TIME% <gray>y durará <gold>%DURATION%<gray>."
timerAlreadyRunning: "<prefix><red>¡Ya hay un temporizador programado!"
timerNotRunning: "<prefix>Actualmente no hay ningún temporizador."
timerNotRunning: "<prefix><red>Actualmente no hay ningún temporizador."
timerCancelled: "<prefix><red>El Temporizador actual ha sido deshabilitado."
timerTooLong: "<prefix><gray>El numero debe ser menor a 40320 <dark_gray>(<gold>28 días<dark_gray>)"
timerMotdDisabled: "<prefix><red>Tienes que configurar <green>'enable-timerspecific-messages'<red> en la configuración en <green>'true'<red>, si quieres usar / editar motdspecers específicos."
timerTooLong: "<prefix><red>¡La duración debe ser menor a 28 días!"
timerMotdDisabled: "<prefix><red>Debes configurar 'enable-timerspecific-messages' en la configuración a 'true', si quieres usar/editar motds por temporizador."
motdTimer: "%HOURS%:%MINUTES%:%SECONDS%"
motdTimerNotRunning: "-"
joinNotification: "<prefix><red>%PLAYER% <gray>Intenta unirse al servidor."
joinNotification: "<prefix><yellow>%PLAYER% <red>intentó unirse al servidor."
motdList: "<prefix><gray>Lista de motds de mantenimiento:"
motdListEmpty: "<prefix><red>¡No tienes ningún motd(s) de mantenimiento establecido!"
reload: "<prefix><green>Configuracion recargada"
removedMotd: "<prefix><green>Numero de motd eliminado <gold>%INDEX%<green>."
removeMotdError: "<prefix>&Solo tienes un motd, por lo que no puedes eliminar ninguno!"
setMotd: "<prefix><green>Establecer linea <gold>%LINE%<green> sobre <gold>%INDEX%<green>. Para mantenimiento para %MOTD%"
setReason: "<prefix><green>Set maintenance reason to: <yellow>%REASON%"
setReason: "<prefix><green>Se estableció el motivo de mantenimiento a: <yellow>%REASON%"
setMotdIndexError: "<prefix><green>Actualmente tiene <gold>%MOTDS%<green> Motd(s<dark_gray>), por lo que debe elegir un número entre 1 y %NEWAMOUNT%."
setMotdLineError: "<prefix><gray>El segundo argumento tiene que ser el numero de línea.(1 ó 2<dark_gray>)!"
updateDownloading: "<prefix><green>Descargando actualización..."
updateFailed: "<prefix><red>Actualizacion fallida!"
updateFinished: "<prefix><green>La actualización fue exitosa!, debes reiniciar el servidor!"
updateFinished: "<prefix><green><bold>The update was successful! To prevent issues with tasks and to complete the update, you have to restart the server!"
whitelistedPlayers: "<prefix><gold>Jugadores en lista blanca:"
whitelistedPlayersFormat: "<gray>- <green>%NAME% <dark_gray>(<gray>%UUID%<dark_gray>)"
whitelistAdded: "<prefix><green>%PLAYER% <gray>Añadido a la lista de mantenimiento!"
@@ -73,8 +73,8 @@ singleServerAlreadyDisabled: "<prefix><gray>El modo mantenimiento se encuentra d
singleServerMaintenanceList: "<prefix><gray>Servidores proxy, que tienen habilitado el mantenimiento:"
singleServerMaintenanceListEmpty: "<prefix><gray>No hay servidores proxy que están en mantenimiento."
singleServerMaintenanceListEntry: "<dark_grey>- <aqua>%SERVER%"
singleServerMaintenanceListEntryWithStartTimer: "<dark_grey>- <grey>%SERVER% <yellow>starting in <gold>%TIME%"
singleServerMaintenanceListEntryWithEndTimer: "<dark_grey>- <aqua>%SERVER% <yellow>ending in <gold>%TIME%"
singleServerMaintenanceListEntryWithStartTimer: "<dark_grey>- <yellow>Abriendo <grey>%SERVER% <yellow>en <gold>%TIME%"
singleServerMaintenanceListEntryWithEndTimer: "<dark_grey>- <yellow>Cerrando <aqua>%SERVER% <yellow>en <gold>%TIME%"
second: "Segundo"
seconds: "Segundos"
minute: "Minuto"
@@ -85,7 +85,7 @@ helpHeader: "<dark_gray>========[ <yellow>%NAME% <dark_gray>| <yellow>%PAGE%/%MA
helpPageNotFound: "<prefix><gray>No hay pagina con ese número."
helpNextPage: "<gray>Utilice <aqua>/maintenance help %PAGE% <gray>Para pasar a la siguiente ventana de ayuda."
helpAbortTimer: "<gold>/maintenance aborttimer <dark_gray>(<gray>Si se ejecuta, se abortará el temporizador actual<dark_gray>)"
helpEndtimer: "<gold>/maintenance endtimer <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpEndtimer: "<gold>/maintenance endtimer <disable in> <gray> (Después del tiempo establecido, ej. 1h5m, el modo de mantenimiento será desactivado)"
helpStarttimer: "<gold>/maintenance starttimer <enable in> <gray>(Después del tiempo indicado, ej: 1h5m, El modo mantenimiento se habilita.)"
helpScheduleTimer: "<gold>/maintenance scheduletimer <enable in> <maintenance duration> <gray>(Después del tiempo indicado, ej. 1h5m, el modo mantenimiento se habilitará.)"
helpDebug: "<gold>/maintenance debug <gray>(Activa algunos registros de depuración)"
@@ -94,9 +94,9 @@ helpHelp: "<gold>/maintenance help [page] <dark_gray>(<gray>Muestra la pagina de
helpMotd: "<gold>/maintenance motd [timer] <dark_gray>(<gray>Enumera los motivos de mantenimiento establecidos actualmente. Si se especifica el 'temporizador', se muestran los motivos del temporizador<dark_gray>)"
helpRemoveMotd: "<gold>/maintenance removemotd [timer] <index> <dark_gray>(<gray>Elimina un mantenimiento motd. Si se usa 'timer' como argumento, se eliminará un pingmessage de temporizador específico<dark_gray>)"
helpSetMotd: "<gold>/maintenance setmotd [timer] <index> <1/2> <message> <dark_gray>(<gray>Establece un motd para el modo de mantenimiento. Si usa 'timer' como argumento, se establecerá un mensaje de ping específico para el tiempo<dark_gray>)"
helpSetReason: "<gold>/maintenance setreason <reason/none> <gray>(Sets or clears the %REASON% placeholder value)"
helpSetReason: "<gold>/maintenance setreason <reason/none> <gray>(Configura o reestablece el valor por defecto de %REASON%)"
helpReload: "<gold>/maintenance reload <dark_gray>(<gray>Vuelve a cargar el archivo de configuración, el archivo de la lista blanca y el ícono del servidor<dark_gray>)"
helpGlobalStatus: "<gold>/maintenance status <gray>(Shows the current maintenance status and any running timers)"
helpGlobalStatus: "<gold>/maintenance status <gray>(Muestra el estado de mantenimiento actual y cualquier temporizador activo)"
helpToggle: "<gold>/maintenance <on/off> [mode] <gray>(Habilita/desactiva el modo de mantenimiento con un modo de visualización opcional al habilitar)"
helpUpdate: "<gold>/maintenance update <dark_gray>(<gray>Descarga de forma remota la versión más reciente del complemento en su servidor<dark_gray>)"
helpWhitelist: "<gold>/maintenance whitelist <dark_gray>(<gray>Muestra todos los jugadores en lista blanca para el modo de mantenimiento<dark_gray>)"
@@ -104,21 +104,21 @@ helpWhitelistAdd: "<gold>/maintenance add <name/uuid> <dark_gray>(<gray>Agrega a
helpWhitelistRemove: "<gold>/maintenance remove <name/uuid> <dark_gray>(<gray>Quita al jugador de la lista blanca de mantenimiento<dark_gray>)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [servidor] <dark_gray>(<gray>Si está funcionando, se abortará el temporizador actual<dark_gray>)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server] <disable in> <gray>(Después del tiempo indicado, ej. 1h5m, El modo mantenimiento se deshabilitará.)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server] <enable in> <gray>(Después del tiempo indicado, ej: 1h5m, El modo mantenimiento se habilitará.)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server] <enable in> <maintenance duration> <gray>(Después del tiempo indicado, ej: 1h5m, el modo mantenimiento se habilitará.)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [servidor|global] [mode] <gray> (Habilita/desactiva el modo de mantenimiento globalmente o en un servidor específico con un modo de visualización opcional al habilitar)"
helpStatus: "<gold>/maintenance status <dark_gray>(<gray>Enumera todos los servidores proxy, que están actualmente en mantenimiento<dark_gray>)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
#For timer webhooks, %TIMESTAMP% is a Unix timestamp for use in Discord timestamp tags, e.g. <t:%TIMESTAMP%:R>.
webhookMaintenanceActivated: "**Maintenance mode enabled.**"
webhookMaintenanceDeactivated: "**Maintenance mode disabled.**"
webhookStarttimerStarted: "Maintenance mode will be enabled <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookEndtimerStarted: "Maintenance mode will be disabled <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookJoinNotification: "Blocked join: `%PLAYER%` tried to join during maintenance."
webhookSingleMaintenanceActivated: "Maintenance mode enabled on `%SERVER%`."
webhookSingleMaintenanceDeactivated: "Maintenance mode disabled on `%SERVER%`."
webhookSingleStarttimerStarted: "Maintenance mode will be enabled on `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookSingleEndtimerStarted: "Maintenance mode will be disabled on `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookMaintenanceActivated: "**Modo de mantenimiento activado.**"
webhookMaintenanceDeactivated: "**Modo de mantenimiento desactivado.**"
webhookStarttimerStarted: "<prefix><gray>El modo mantenimiento se activará en <gold>%TIME%<gray>`)."
webhookEndtimerStarted: "<prefix><gray>El modo mantenimiento se desactivará en <gold>%TIME%<gray>`)."
webhookJoinNotification: "Bloqueado: `%PLAYER%` intentó unirse durante el mantenimiento."
webhookSingleMaintenanceActivated: "Modo de mantenimiento activado en %SERVER%`."
webhookSingleMaintenanceDeactivated: "Modo de mantenimiento desactivado en `%SERVER%`."
webhookSingleStarttimerStarted: "El modo de mantenimiento se activará en `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookSingleEndtimerStarted: "El modo de mantenimiento se desactivará en `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
#Used for autoupdating the language file, do not change this value.
language-version: 5
+23 -23
View File
@@ -7,10 +7,10 @@ noPermission: "<red>Vous n'avez pas la permission d'exécuter cette commande."
kickmessage: "<red>Le serveur est actuellement en maintenance !<br>Réessayez plus tard !"
maintenanceActivated: "<prefix><gold>Le mode maintenance est maintenant activé."
maintenanceDeactivated: "<prefix><gold>Le mode maintenance est maintenant désactivé."
maintenanceStatusOn: "<prefix><gold>Maintenance mode is currently <green>enabled<gold>."
maintenanceStatusOff: "<prefix><gold>Maintenance mode is currently <red>disabled<gold>."
maintenanceStatusOnWithEndTimer: "<prefix><gold>Maintenance mode is currently <green>enabled <grey>and will be disabled in <gold>%TIME%."
maintenanceStatusOffWithStartTimer: "<prefix><gold>Maintenance mode is currently <red>disabled <grey>and will be enabled in <gold>%TIME%."
maintenanceStatusOn: "<prefix><gold>Le mode maintenance est actuellement <green>activé<gold>."
maintenanceStatusOff: "<prefix><gold>Le mode maintenance est actuellement <red>désactivé<gold>."
maintenanceStatusOnWithEndTimer: "<prefix><gold>Le mode maintenance est actuellement <green>activé<grey> et sera désactivé dans <gold>%TIME%"
maintenanceStatusOffWithStartTimer: "<prefix><gold>Le mode maintenance est actuellement <red>désactivé<grey> et sera activé dans <gold>%TIME%"
alreadyEnabled: "<prefix><red>La maintenance est déjà activée !"
alreadyDisabled: "<prefix><red>La maintenance est déjà désactivée !"
endtimerBroadcast: "<prefix><gray>Le mode maintenance sera désactivé dans <gold>%TIME%<gray>."
@@ -33,7 +33,7 @@ reload: "<prefix><green>Fichier de configuration, liste blanche (whitelist) des
removedMotd: "<prefix><green>Numéro de motd supprimé %INDEX%."
removeMotdError: "<prefix><red>Vous n’avez qu’un motd, vous ne pouvez donc pas en supprimer !"
setMotd: "<prefix><green>Ligne %LINE% du motd %INDEX%. fixée à %MOTD%"
setReason: "<prefix><green>Set maintenance reason to: <yellow>%REASON%"
setReason: "<prefix><green>Raison de la maintenance configurée à : <yellow>%REASON%"
setMotdIndexError: "<prefix><red>Vous avez actuellement %MOTDS% motd(s), vous devez donc choisir un nombre compris entre 1 et %NEWAMOUNT%."
setMotdLineError: "<prefix><red>Le deuxième argument doit être le numéro de ligne (1 ou 2) !"
updateDownloading: "<prefix><red><bold>Téléchargement de la mise à jour..."
@@ -73,8 +73,8 @@ singleServerAlreadyDisabled: "<prefix><red>La maintenance est déjà désactivé
singleServerMaintenanceList: "<prefix><gray>Serveurs proxy ayant la maintenance activée :"
singleServerMaintenanceListEmpty: "<prefix><gray>Il n'y a pas de serveurs proxy en maintenance."
singleServerMaintenanceListEntry: "<dark_grey>- <aqua>%SERVER%"
singleServerMaintenanceListEntryWithStartTimer: "<dark_grey>- <grey>%SERVER% <yellow>starting in <gold>%TIME%"
singleServerMaintenanceListEntryWithEndTimer: "<dark_grey>- <aqua>%SERVER% <yellow>ending in <gold>%TIME%"
singleServerMaintenanceListEntryWithStartTimer: "<dark_grey>- <grey>%SERVER% <yellow>comme dans <gold>%TIME%"
singleServerMaintenanceListEntryWithEndTimer: "<dark_grey>- <aqua>%SERVER% <yellow>termine dans <gold>%TIME%"
second: "seconde"
seconds: "secondes"
minute: "minute"
@@ -94,31 +94,31 @@ helpHelp: "<gold>/maintenance help [page] <gray>(Montre cette belle fenêtre d'a
helpMotd: "<gold>/maintenance motd [timer] <gray>(Répertorie les paramètres de maintenance actuellement définis. Si vous spécifiez 'timer', les mots de la minuterie seront affichés)"
helpRemoveMotd: "<gold>/maintenance removemotd [timer] <index> <gray>(Supprime un motd de maintenance. Si vous utilisez 'timer' comme argument, un message ping spécifique au temporisateur sera supprimé)"
helpSetMotd: "<gold>/maintenance setmotd [timer] <index> <1/2> <message> <gray>(Définit un motd pour le mode maintenance. Si vous utilisez 'timer' comme argument, un message ping spécifique à un temporisateur sera défini)"
helpSetReason: "<gold>/maintenance setreason <reason/none> <gray>(Sets or clears the %REASON% placeholder value)"
helpSetReason: "<gold>/maintenance setreason <reason/none> <gray>(définit ou efface la valeur du placeholder %REASON%)"
helpReload: "<gold>/maintenance reload <gray>(Recharge le fichier de configuration, la liste blanche, le fichier de langue et l'icône du serveur)"
helpGlobalStatus: "<gold>/maintenance status <gray>(Shows the current maintenance status and any running timers)"
helpToggle: "<gold>/maintenance <on/off> [mode] <gray>(Enables/disables maintenance mode with an optional display mode when enabling)"
helpGlobalStatus: "<gold>/maintenance status <gray>(Affiche les états de maintenance et les minuteurs actifs)"
helpToggle: "<gold>/maintenance <on/off> [mode] <gray>(Active/désactive le mode maintenance)"
helpUpdate: "<gold>/maintenance update <gray>(Télécharge la dernière version du plugin sur votre serveur)"
helpWhitelist: "<gold>/maintenance whitelist <gray>(Affiche les joueurs de la liste blanche pour le mode maintenance)"
helpWhitelistAdd: "<gold>/maintenance add <name/uuid> <gray>(Ajoute un joueur à la liste blanche de maintenance afin qu'il puisse rejoindre le serveur même si la maintenance est activée)"
helpWhitelistRemove: "<gold>/maintenance remove <name/uuid> <gray>(Supprime un joueur de la liste blanche de maintenance)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [server] <gray>(Si en cours d'exécution, le minuteur actuel sera abandonné)"
helpSingleEndtimer: "<gold>/maintenance endtimer [serveur] <activer dans> <gray>(Après le temps imparti, ex. 1h5m, le mode maintenance sera désactiver)"
helpSingleStarttimer: "<gold>/maintenance starttimer [serveur] <activer dans> <gray>(Après le temps imparti, ex. 1h5m, le mode maintenance sera activé)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [serveur] <activer dans> <durée de maintenance> <gray>(Après le temps imparti, ex. 1h5m, le mode maintenance sera activé)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Active/désactive le mode maintenance globalement, ou sur un serveur spécifique avec un mode d'affichage facultatif lors de l'activation)"
helpStatus: "<gold>/maintenance status <gray>(Répertorie tous les serveurs mandatés actuellement en maintenance)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
#For timer webhooks, %TIMESTAMP% is a Unix timestamp for use in Discord timestamp tags, e.g. <t:%TIMESTAMP%:R>.
webhookMaintenanceActivated: "**Maintenance mode enabled.**"
webhookMaintenanceDeactivated: "**Maintenance mode disabled.**"
webhookStarttimerStarted: "Maintenance mode will be enabled <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookEndtimerStarted: "Maintenance mode will be disabled <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookJoinNotification: "Blocked join: `%PLAYER%` tried to join during maintenance."
webhookSingleMaintenanceActivated: "Maintenance mode enabled on `%SERVER%`."
webhookSingleMaintenanceDeactivated: "Maintenance mode disabled on `%SERVER%`."
webhookSingleStarttimerStarted: "Maintenance mode will be enabled on `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookSingleEndtimerStarted: "Maintenance mode will be disabled on `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookMaintenanceActivated: "\n\n**Mode maintenance activé.**"
webhookMaintenanceDeactivated: "\n\n**Mode maintenance désactivé.**"
webhookStarttimerStarted: "Le mode maintenance sera activé dans <t:%TIMESTAMP%:R>(`%TIME%`)."
webhookEndtimerStarted: "Le mode maintenance sera désactivé dans <t:%TIMESTAMP%:R>(`%TIME%`)."
webhookJoinNotification: "Connexion bloquée : `%PLAYER%` a cherché à rejoindre durant une maintenance."
webhookSingleMaintenanceActivated: "Mode maintenance activé sur `%SERVER%`."
webhookSingleMaintenanceDeactivated: "Mode maintenance désactivé sur `%SERVER%`."
webhookSingleStarttimerStarted: "Le mode maintenance sera activé sur `%SERVER%` <t:%TIMESTAMP%:R>(`%TIME%`)."
webhookSingleEndtimerStarted: "Le mode maintenance sera désactivé sur `%SERVER%` <t:%TIMESTAMP%:R>(`%TIME%`)."
#Used for autoupdating the language file, do not change this value.
language-version: 5
+3 -3
View File
@@ -104,9 +104,9 @@ helpWhitelistAdd: "<gold>/maintenance add <name/uuid> <gray>(Hozzáadja a játé
helpWhitelistRemove: "<gold>/maintenance remove <name/uuid> <gray>(Kitörli a játékost a karbantartás fehérlistáról)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [server] <gray>(Ha van karbantartás,akkor figyelmen kívül veszi az időzítőt)"
helpSingleEndtimer: "<gold>/maintenance endtimer [szerver] <disable in> <gray>(Azután a megadott időben pl. 1h5m, a karbantartásnak vége lesz a megadott szerveren)"
helpSingleStarttimer: "<gold>/maintenance starttimer [szerver] <enable in> <gray>(Azután a megadott időben pl. 1h5m, a karbantartás elkezedödik a megadott szerveren)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [szerver] <enable in> <maintenance duration> <gray>(Azután a megadott időben pl. 1h5m, a karbantartás elkezdödik a megadott szerveren)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpStatus: "<gold>/maintenance status <gray>(Kiírja az összes proxy szervert, ami karbantartás alatt van)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
+3 -3
View File
@@ -104,9 +104,9 @@ helpWhitelistAdd: "<gold>/maintenance add <name/uuid> <gray>(Aggiunge il giocato
helpWhitelistRemove: "<gold>/maintenance remove <name/uuid> <gray>(Rimuovi il giocatore dalla whitelist della manutenzione)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [server] <gray>(Se attivo, il timer attuale verrà fermato)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server] <tempo di disattivazione> <gray>(Dopo il tempo specificato, es. 1h5m, la modalità manutenzione verrà disattivata)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server] <tempo di attivazione> <gray>(Dopo il tempo specificato, es. 1h5m, la modalità manutenzione verrà attivata)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server] <tempo di attivazione> <durata manutenzione> <gray>(Dopo il tempo specificato, es. 1h5m, la modalità manutenzione verrà attivata e durerà per il tempo indicato)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpStatus: "<gold>/maintenance status <gray>(Elenca tutti i server sotto proxy che hanno la modalità manutenzione attiva)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
+3 -3
View File
@@ -104,9 +104,9 @@ helpWhitelistAdd: "<gold>/maintenance add <name/uuid> <gray>(メンテナンス
helpWhitelistRemove: "<gold>/maintenance remove <name/uuid> <gray>(メンテナンスのホワイトリストからプレーヤーを削除します。)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [server] <gray>(もし、タイマーが実行中の場合、現在のタイマーを中止します。)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server] <disable in> <gray>(指定された時間(例えば1時間5分)が経過すると、メンテナンス・モードは無効になる)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server] <enable in> <gray>(指定された時間(例えば1時間5分)が経過すると、メンテナンス・モードが有効になる)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server] <enable in> <maintenance duration> <gray>(指定された時間(例えば1時間5分)が経過すると、メンテナンス・モードが有効になる)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpStatus: "<gold>/maintenance status <gray>(現在メンテナンス中のプロキシサーバーをすべてリストアップします。)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
+3 -3
View File
@@ -104,9 +104,9 @@ helpWhitelistAdd: "<gold>/maintenance add <name/uuid> <gray>(Adds the player to
helpWhitelistRemove: "<gold>/maintenance remove <name/uuid> <gray>(Removes the player from the maintenance whitelist)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [server] <gray>(If running, the current timer will be aborted)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpStatus: "<gold>/maintenance status <gray>(Lists all proxied servers, that are currently under maintenance)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
+28 -28
View File
@@ -7,10 +7,10 @@ noPermission: "<red>Nie posiadasz permisji na użycie tej komendy."
kickmessage: "<red>Serwer jest w trakcie przerwy technicznej!<br>Spróbuj ponownie później!"
maintenanceActivated: "<prefix><gold>Tryb konserwacji włączony."
maintenanceDeactivated: "<prefix><gold>Tryb konserwacji wyłączony."
maintenanceStatusOn: "<prefix><gold>Maintenance mode is currently <green>enabled<gold>."
maintenanceStatusOff: "<prefix><gold>Maintenance mode is currently <red>disabled<gold>."
maintenanceStatusOnWithEndTimer: "<prefix><gold>Maintenance mode is currently <green>enabled <grey>and will be disabled in <gold>%TIME%."
maintenanceStatusOffWithStartTimer: "<prefix><gold>Maintenance mode is currently <red>disabled <grey>and will be enabled in <gold>%TIME%."
maintenanceStatusOn: "<prefix><gold>Tryb konserwacji jest obecnie <green>włączony<gold>."
maintenanceStatusOff: "<prefix><gold>Tryb konserwacji jest obecnie <red>wyłączony<gold>."
maintenanceStatusOnWithEndTimer: "<prefix><gold>Tryb konserwacji jest obecnie <green>włączony <grey>i zostanie wyłączony za <gold>%TIME%."
maintenanceStatusOffWithStartTimer: "<prefix><gold>Tryb konserwacji jest obecnie <red>wyłączony <grey>i zostanie włączony za <gold>%TIME%."
alreadyEnabled: "<prefix><red>Tryb konserwacji jest już włączony!"
alreadyDisabled: "<prefix><red>Tryb konserwacji jest już wyłączony!"
endtimerBroadcast: "<prefix><gray>Przerwa techniczna zostanie zakończona za <gold>%TIME%<gray>."
@@ -22,7 +22,7 @@ scheduletimerStarted: "<prefix><green>Rozpoczęto timer: <gray>Przerwa techniczn
timerAlreadyRunning: "<prefix><red>Timer został już zaplanowany!"
timerNotRunning: "<prefix><red>Aktualnie nie ma żadnego działającego timera."
timerCancelled: "<prefix><red>Bieżący timer został anulowany."
timerTooLong: "<prefix><red>Liczba musi być mniejsza niż 40320 (28 dni)!"
timerTooLong: "<prefix><red>Podany czas musi być krótszy niż 28 dni!"
timerMotdDisabled: "<prefix><red>Musisz ustawić 'enable-timerspecific-messages' w konfiguracji na 'true', jeśli chcesz używać motd z timerem."
motdTimer: "%HOURS%:%MINUTES%:%SECONDS%"
motdTimerNotRunning: "-"
@@ -33,7 +33,7 @@ reload: "<prefix><green>Ponownie załadowano plik konfiguracji, białą listę,
removedMotd: "<prefix><green>Usunięto motd numer %INDEX%."
removeMotdError: "<prefix><red>Masz tylko jedno motd, którego nie możesz usunąć!"
setMotd: "<prefix><green>Ustawiono wiersz %LINE% od %INDEX%. motd konserwacji na %MOTD%"
setReason: "<prefix><green>Set maintenance reason to: <yellow>%REASON%"
setReason: "<prefix><green>Ustawiono powód konserwacji na: <yellow>%REASON%"
setMotdIndexError: "<prefix><red>Masz aktualnie %MOTDS% motd, więc musisz wybrać liczbę między 1 a %NEWAMOUNT%."
setMotdLineError: "<prefix><red>Drugi argument musi być numerem lini (1 lub 2)!"
updateDownloading: "<prefix><red><bold>Pobieranie aktualizacji..."
@@ -49,7 +49,7 @@ whitelistEmpty: "<prefix><red>Biała lista konserwacji jest pusta! Użyj <yellow
playerNotFound: "<prefix><red>Ten gracz nigdy nie grał na serwerze."
playerNotFoundUuid: "<prefix><red>Nie można znaleźć gracza z tym uuid."
playerNotOnline: "<prefix><red>Nie ma gracza online z tym nickiem."
offlinePlayerFetchError: "<prefix><red>There was an error while fetching offline player. Please try again later."
offlinePlayerFetchError: "<prefix><red>Wystąpił błąd podczas pobierania gracza offline. Spróbuj ponownie później."
invalidUuid: "<prefix><red>Nieprawidłowy format uuid!"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
sentToWaitingServer: "<prefix><red>Zostałeś wysłany do poczekalni!"
@@ -73,8 +73,8 @@ singleServerAlreadyDisabled: "<prefix><red>Tryb konserwacji jest już wyłączon
singleServerMaintenanceList: "<prefix><gray>Serwery z włączonym trybem konserwacji:"
singleServerMaintenanceListEmpty: "<prefix><gray>Brak serwerów pod nadzorem."
singleServerMaintenanceListEntry: "<dark_grey>- <aqua>%SERVER%"
singleServerMaintenanceListEntryWithStartTimer: "<dark_grey>- <grey>%SERVER% <yellow>starting in <gold>%TIME%"
singleServerMaintenanceListEntryWithEndTimer: "<dark_grey>- <aqua>%SERVER% <yellow>ending in <gold>%TIME%"
singleServerMaintenanceListEntryWithStartTimer: "<dark_grey>- <grey>%SERVER% <yellow>zaczyna się za <gold>%TIME%"
singleServerMaintenanceListEntryWithEndTimer: "<dark_grey>- <aqua>%SERVER% <yellow>kończy się za <gold>%TIME%"
second: "sekunda"
seconds: "sekund"
minute: "minuta"
@@ -85,40 +85,40 @@ helpHeader: "<dark_gray>========[ <yellow>%NAME% <dark_gray>| <yellow>%PAGE%/%MA
helpPageNotFound: "<prefix><red>Strona z tym numerem nie istnieje!"
helpNextPage: "<gray>Użyj <aqua>/maintenance help %PAGE% <gray>aby przejść do następnej strony pomocy."
helpAbortTimer: "<gold>/maintenance aborttimer <gray>(Jeśli aktywny, timer zostanie anulowany)"
helpEndtimer: "<gold>/maintenance endtimer <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpStarttimer: "<gold>/maintenance starttimer <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpScheduleTimer: "<gold>/maintenance scheduletimer <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpEndtimer: "<gold>/maintenance endtimer <czas> <gray>(Po podanym czasie, np. 1h5m, tryb konserwacji zostanie wyłączony)"
helpStarttimer: "<gold>/maintenance starttimer <czas> <gray>(Po podanym czasie, np. 1h5m, tryb konserwacji zostanie włączony)"
helpScheduleTimer: "<gold>/maintenance scheduletimer <czas do włączenia> <czas trwania> <gray>(Po podanym czasie, np. 1h5m, tryb konserwacji zostanie włączony)"
helpDebug: "<gold>/maintenance debug <gray>(Włacza logowanie dodatkowych informcji do debugowania)"
helpDump: "<gold>/maintenance dump <gray>(Daje informacje o serwerze, używane do raportowania błędów)"
helpHelp: "<gold>/maintenance help [strona] <gray>(Pokazuje tą piękną stronę pomocy)"
helpMotd: "<gold>/maintenance motd [timer] <gray>(Wyświetla aktualnie ustawione motd. Jeśli wstawiono 'timer', motd z timerem zostaną pokazane)"
helpRemoveMotd: "<gold>/maintenance removemotd [timer] <index> <gray>(Usuwa motd konserwacji. Jeśli wstawiono 'timer', motd z timerem zostanie usunięte)"
helpSetMotd: "<gold>/maintenance setmotd [timer] <index> <1/2> <wiadomość> <gray>(Ustawia motd konserwacji. Jeśli wstawiono 'timer', motd z timerem zostanie ustawione)"
helpSetReason: "<gold>/maintenance setreason <reason/none> <gray>(Sets or clears the %REASON% placeholder value)"
helpSetReason: "<gold>/maintenance setreason <powód/none> <gray>(Ustawia albo usuwa powód trybu konserwacji w wiadomościach. Wpisz \"none\" jako powód, aby wyczyścić)"
helpReload: "<gold>/maintenance reload <gray>(Przeładowuje plik konfiguracji, białej listy i ikonę serwera)"
helpGlobalStatus: "<gold>/maintenance status <gray>(Shows the current maintenance status and any running timers)"
helpToggle: "<gold>/maintenance <on/off> [mode] <gray>(Enables/disables maintenance mode with an optional display mode when enabling)"
helpGlobalStatus: "<gold>/maintenance status <gray>(Pokazuje status trybu konserwacji i wszystkie minutniki)"
helpToggle: "<gold>/maintenance <on/off> [tryb] <gray>(Włącza/Wyłącza tryb konserwacji, opcjonalnie z trybem podanym podczas włączania)"
helpUpdate: "<gold>/maintenance update <gray>(Pobiera najnowszą wersję plugina)"
helpWhitelist: "<gold>/maintenance whitelist <gray>(Pokazuje białą listę trybu konserwacji)"
helpWhitelistAdd: "<gold>/maintenance add <nazwa/uuid> <gray>(Dodaje gracza do listy konserwacji, aby mogli dołączyć do serwera w trakcie konserwacji)"
helpWhitelistRemove: "<gold>/maintenance remove <nazwa/uuid> <gray>(Usuwa gracza z listy trybu konserwacji)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [serwer] <gray>(Jeśli aktywny, timer zostanie anulowany)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [serwer/global] [tryb] <gray>(Włącza/Wyłącza tryb konserwacji globalnie lub na podanym serwerze, opcjonalnie z trybem podanym podczas włączania)"
helpStatus: "<gold>/maintenance status <gray>(Wyświetla wszystkie serwery w trybie konserwacji)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
#For timer webhooks, %TIMESTAMP% is a Unix timestamp for use in Discord timestamp tags, e.g. <t:%TIMESTAMP%:R>.
webhookMaintenanceActivated: "**Maintenance mode enabled.**"
webhookMaintenanceDeactivated: "**Maintenance mode disabled.**"
webhookStarttimerStarted: "Maintenance mode will be enabled <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookEndtimerStarted: "Maintenance mode will be disabled <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookJoinNotification: "Blocked join: `%PLAYER%` tried to join during maintenance."
webhookSingleMaintenanceActivated: "Maintenance mode enabled on `%SERVER%`."
webhookSingleMaintenanceDeactivated: "Maintenance mode disabled on `%SERVER%`."
webhookSingleStarttimerStarted: "Maintenance mode will be enabled on `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookSingleEndtimerStarted: "Maintenance mode will be disabled on `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookMaintenanceActivated: "**Tryb konserwacji włączony.**"
webhookMaintenanceDeactivated: "**Tryb konserwacji wyłączony.**"
webhookStarttimerStarted: "Tryb konserwacji zostanie włączony <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookEndtimerStarted: "Tryb konserwacji zostanie wyłączony <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookJoinNotification: "Zablokowano dołączenie: `%PLAYER%` próbował(a) dołączyć podczas konserwacji."
webhookSingleMaintenanceActivated: "Tryb konserwacji włączony dla `%SERVER%`."
webhookSingleMaintenanceDeactivated: "Tryb konserwacji wyłączony dla `%SERVER%`."
webhookSingleStarttimerStarted: "Tryb konserwacji zostanie włączony dla `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookSingleEndtimerStarted: "Tryb konserwacji zostanie wyłączony dla `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
#Used for autoupdating the language file, do not change this value.
language-version: 5
+22 -22
View File
@@ -7,10 +7,10 @@ noPermission: "<red>Você não tem permissão para executar esse comando."
kickmessage: "<red>O servidor está em manutenção!<br>Tente novamente mais tarde!"
maintenanceActivated: "<prefix><gold>O modo de manutenção agora está ativado."
maintenanceDeactivated: "<prefix><gold>O modo de manutenção agora está desativado."
maintenanceStatusOn: "<prefix><gold>Maintenance mode is currently <green>enabled<gold>."
maintenanceStatusOff: "<prefix><gold>Maintenance mode is currently <red>disabled<gold>."
maintenanceStatusOnWithEndTimer: "<prefix><gold>Maintenance mode is currently <green>enabled <grey>and will be disabled in <gold>%TIME%."
maintenanceStatusOffWithStartTimer: "<prefix><gold>Maintenance mode is currently <red>disabled <grey>and will be enabled in <gold>%TIME%."
maintenanceStatusOn: "<prefix><gold>O modo de manutenção está atualmente <green>ativo<gold>."
maintenanceStatusOff: "<prefix><gold>O modo de manutenção está atualmente <red>desativado<gold>."
maintenanceStatusOnWithEndTimer: "<prefix><gold>O modo de manutenção está atualmente <green>habilitado <grey>e será desabilitado em <gold>%TIME%."
maintenanceStatusOffWithStartTimer: "<prefix><gold>O modo de manutenção está atualmente <red>desabilitado <grey>e será habilitado em <gold>%TIME%."
alreadyEnabled: "<prefix><red>A manutenção já está ativada!"
alreadyDisabled: "<prefix><red>A manutenção já está desativada!"
endtimerBroadcast: "<prefix><gray>O modo de manutenção será desativado em <gold>%TIME%<gray>."
@@ -33,7 +33,7 @@ reload: "<prefix><green>Recarregou a configuração, lista de jogadores com perm
removedMotd: "<prefix><green>Motd número %INDEX% removida."
removeMotdError: "<prefix><red>Você possui apenas uma motd, portanto, não pode remover nenhuma!"
setMotd: "<prefix><green>Definiu a linha %LINE% da motd de manutenção %INDEX% para %MOTD%"
setReason: "<prefix><green>Set maintenance reason to: <yellow>%REASON%"
setReason: "<prefix><green>Definir motivo de manutenção para: <yellow>%REASON%"
setMotdIndexError: "<prefix><red>No momento, você possui %MOTDS% motds, portanto, deve escolher um número entre 1 e %NEWAMOUNT%."
setMotdLineError: "<prefix><red>O segundo argumento deve ser o número da linha (1 ou 2)!"
updateDownloading: "<prefix><red><bold>Baixando atualização..."
@@ -73,8 +73,8 @@ singleServerAlreadyDisabled: "<prefix><red>A manutenção já está desativada n
singleServerMaintenanceList: "<prefix><gray>Servidores proxy com manutenção ativada:"
singleServerMaintenanceListEmpty: "<prefix><gray>Não há servidores proxy em manutenção no momento."
singleServerMaintenanceListEntry: "<dark_grey>- <aqua>%SERVER%"
singleServerMaintenanceListEntryWithStartTimer: "<dark_grey>- <grey>%SERVER% <yellow>starting in <gold>%TIME%"
singleServerMaintenanceListEntryWithEndTimer: "<dark_grey>- <aqua>%SERVER% <yellow>ending in <gold>%TIME%"
singleServerMaintenanceListEntryWithStartTimer: "<dark_grey>- <grey>%SERVER% <yellow>iniciando em <gold>%TIME%"
singleServerMaintenanceListEntryWithEndTimer: "<dark_grey>- <aqua>%SERVER% <yellow>terminando em <gold>%TIME%"
second: "segundo"
seconds: "segundos"
minute: "minuto"
@@ -94,31 +94,31 @@ helpHelp: "<gold>/maintenance help [página] <gray>(Mostra esta bela janela de a
helpMotd: "<gold>/maintenance motd [temporizador] <gray>(Lista as motds de manutenção atualmente definidas. Se 'temporizador' for especificado, as motds de temporizador serão mostradas)"
helpRemoveMotd: "<gold>/maintenance removemotd [temporizador] <índice> <gray>(Remove uma motd de manutenção. Se usar 'temporizador' como argumento, uma mensagem de ping específica do temporizador será removida)"
helpSetMotd: "<gold>/maintenance setmotd [temporizador] <índice> <1/2> <mensagem> <gray>(Define uma motd para o modo de manutenção. Se usar 'temporizador' como argumento, uma mensagem de ping específica do temporizador será definida)"
helpSetReason: "<gold>/maintenance setreason <reason/none> <gray>(Sets or clears the %REASON% placeholder value)"
helpSetReason: "<gold>/maintenance setreason <reason/none> <gray>(Define ou limpa o valor %REASON% comum)"
helpReload: "<gold>/maintenance reload <gray>(Recarrega o arquivo de configuração, arquivo de lista branca e o ícone do servidor)"
helpGlobalStatus: "<gold>/maintenance status <gray>(Shows the current maintenance status and any running timers)"
helpToggle: "<gold>/maintenance <on/off> [mode] <gray>(Enables/disables maintenance mode with an optional display mode when enabling)"
helpGlobalStatus: "<gold>/maintenance status <gray>(Mostra o estado atual da manutenção e qualquer timer em execução)"
helpToggle: "<gold>/maintenance <on/off> [mode] <gray>(Ativa/desativa modo de manutenção com modo de exibição opcional quando ativado)"
helpUpdate: "<gold>/maintenance update <gray>(Baixa remotamente a versão mais recente do plugin para o seu servidor)"
helpWhitelist: "<gold>/maintenance whitelist <gray>(Mostra todos os jogadores na lista branca para o modo de manutenção)"
helpWhitelistAdd: "<gold>/maintenance add <nome/uuid> <gray>(Adiciona o jogador à lista branca de manutenção, permitindo que eles entrem no servidor mesmo com a manutenção ativada)"
helpWhitelistRemove: "<gold>/maintenance remove <nome/uuid> <gray>(Remove o jogador da lista branca de manutenção)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [servidor] <gray>(Se estiver em execução, o temporizador atual será abortado)"
helpSingleEndtimer: "<gold>/maintenance endtimer [servidor] <desabilitar em> <gray>(Depois do tempo fornecido, exemplo: 1h5m, o modo manutenção será desabilitado)"
helpSingleStarttimer: "<gold>/maintenance starttimer [servidor] <habilitar em> <gray>(Depois do tempo fornecido, exemplo: 1h5m, o modo de manutenção será habilitado)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [servidor] <habilitar em> <duração da manutenção> <gray>(Depois do tempo fornecido, exemplo: 1h5m, o modo de manutenção será habilitado)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Ativa/desativa modo de manutenção globalmente ou em um servidor especifico com um modo de exibição opcional quando ativado)"
helpStatus: "<gold>/maintenance status <gray>(Lista todos os servidores proxy que estão atualmente em manutenção)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
#For timer webhooks, %TIMESTAMP% is a Unix timestamp for use in Discord timestamp tags, e.g. <t:%TIMESTAMP%:R>.
webhookMaintenanceActivated: "**Maintenance mode enabled.**"
webhookMaintenanceDeactivated: "**Maintenance mode disabled.**"
webhookStarttimerStarted: "Maintenance mode will be enabled <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookEndtimerStarted: "Maintenance mode will be disabled <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookJoinNotification: "Blocked join: `%PLAYER%` tried to join during maintenance."
webhookSingleMaintenanceActivated: "Maintenance mode enabled on `%SERVER%`."
webhookSingleMaintenanceDeactivated: "Maintenance mode disabled on `%SERVER%`."
webhookSingleStarttimerStarted: "Maintenance mode will be enabled on `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookMaintenanceActivated: "**Modo de manutenção ativado.**"
webhookMaintenanceDeactivated: "**Modo de manutenção desativado.**"
webhookStarttimerStarted: "Manutenção será ativada em <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookEndtimerStarted: "Manutenção será desativada em <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookJoinNotification: "Entrada bloqueada: `%PLAYER%` tentou conectar durante a manutenção."
webhookSingleMaintenanceActivated: "Manutenção será ativada em `%SERVER%`."
webhookSingleMaintenanceDeactivated: "Manutenção será desativada em `%SERVER%`."
webhookSingleStarttimerStarted: ""
webhookSingleEndtimerStarted: "Maintenance mode will be disabled on `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
#Used for autoupdating the language file, do not change this value.
language-version: 5
+23 -23
View File
@@ -7,10 +7,10 @@ noPermission: "<red>У вас нет разрешения на выполнен
kickmessage: "<red>Сервер закрыт на технические работы!<br>Попробуйте позже!"
maintenanceActivated: "<prefix><gold>Режим технических работ включен."
maintenanceDeactivated: "<prefix><gold>Режим технических работ выключен."
maintenanceStatusOn: "<prefix><gold>Maintenance mode is currently <green>enabled<gold>."
maintenanceStatusOff: "<prefix><gold>Maintenance mode is currently <red>disabled<gold>."
maintenanceStatusOnWithEndTimer: "<prefix><gold>Maintenance mode is currently <green>enabled <grey>and will be disabled in <gold>%TIME%."
maintenanceStatusOffWithStartTimer: "<prefix><gold>Maintenance mode is currently <red>disabled <grey>and will be enabled in <gold>%TIME%."
maintenanceStatusOn: "<prefix><gold>Режим обслуживания уже <green>включён<gold>."
maintenanceStatusOff: "<prefix><gold>Режим обслуживания уже <red>выключен<gold>."
maintenanceStatusOnWithEndTimer: "<prefix><gold>Режим обслуживания уже <green>включён<grey> и будет выключен через - <gold>%TIME%."
maintenanceStatusOffWithStartTimer: "<prefix><gold>Режим обслуживания уже <red>Выключен<grey> и будет включен через - <gold>%TIME%."
alreadyEnabled: "<prefix><red>Режим технических работ уже включён!"
alreadyDisabled: "<prefix><red>Режим технических работ не был включен!"
endtimerBroadcast: "<prefix><gray>Сервер будет открыт через <gold>%TIME%<gray>."
@@ -33,7 +33,7 @@ reload: "<prefix><green>Плагин успешно перезагружен!"
removedMotd: "<prefix><green>Удалена титульная строка с индексом %INDEX%."
removeMotdError: "<prefix><red>У вас должна оставаться хотя бы одна титульная строка!"
setMotd: "<prefix><green>Титульная строка %LINE% с индексом %INDEX% успешно изменена на %MOTD%"
setReason: "<prefix><green>Set maintenance reason to: <yellow>%REASON%"
setReason: "<prefix><green> Проводятся технические работы: <yellow>%REASON%"
setMotdIndexError: "<prefix><red>Неверный индекс, допустимые значения: 1 - %NEWAMOUNT%."
setMotdLineError: "<prefix><red>Вторым аргументом должен быть номер строки (1 или 2)!"
updateDownloading: "<prefix><red><bold>Загрузка обновления..."
@@ -73,8 +73,8 @@ singleServerAlreadyDisabled: "<red>Режим технических работ
singleServerMaintenanceList: "<gray>Сервера на которых включен режим технических работ:"
singleServerMaintenanceListEmpty: "<gray>Сервера на которых включен режим технических работ: <white>пусто"
singleServerMaintenanceListEntry: "<dark_grey>- <aqua>%SERVER%"
singleServerMaintenanceListEntryWithStartTimer: "<dark_grey>- <grey>%SERVER% <yellow>starting in <gold>%TIME%"
singleServerMaintenanceListEntryWithEndTimer: "<dark_grey>- <aqua>%SERVER% <yellow>ending in <gold>%TIME%"
singleServerMaintenanceListEntryWithStartTimer: "<dark_grey>- <grey>%SERVER% <yellow> Запуститься через <gold>%TIME%"
singleServerMaintenanceListEntryWithEndTimer: "<dark_grey>- <aqua>%SERVER%<yellow> Закончится через <gold>%TIME%"
second: "секунду"
seconds: "секунд"
minute: "минуту"
@@ -94,31 +94,31 @@ helpHelp: "<gold>/maintenance help [страница] <gray>- <white>Отобр
helpMotd: "<gold>/maintenance motd <timer> <gray>- <white>Отобразить список титульных сообщений."
helpRemoveMotd: "<gold>/maintenance removemotd <timer> [индекс] <gray>- <white>Удалить титульное сообщение."
helpSetMotd: "<gold>/maintenance setmotd <timer> [индекс] [1|2] [сообщение] <gray>- <white>Добавить новое титульное сообщение."
helpSetReason: "<gold>/maintenance setreason <reason/none> <gray>(Sets or clears the %REASON% placeholder value)"
helpSetReason: "<gold>/maintenance setreason <причина/ничего> <gray>(Установить или убрать %REASON% для отображения)"
helpReload: "<gold>/maintenance reload <gray>- <white>Перезагрузить плагин."
helpGlobalStatus: "<gold>/maintenance status <gray>(Shows the current maintenance status and any running timers)"
helpToggle: "<gold>/maintenance <on/off> [mode] <gray>(Enables/disables maintenance mode with an optional display mode when enabling)"
helpGlobalStatus: "<gold>/maintenance status <gray>(Показывает текущее состояние технического обслуживания и все запущенные таймеры)"
helpToggle: "<gold>/maintenance <on/off> [mode] <gray> (Включает/выключает режим обслуживания с дополнительным режимом отображения при включении)"
helpUpdate: "<gold>/maintenance update <gray>- <white>Обновить плагин."
helpWhitelist: "<gold>/maintenance whitelist <gray>- <white>Отобразить всех игроков из белого списка."
helpWhitelistAdd: "<gold>/maintenance add [ник|uuid] <gray>- <white>Добавить игрока в белый список."
helpWhitelistRemove: "<gold>/maintenance remove [ник|uuid] <gray>- <white>Удалить игрока из белого списка."
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [сервер] <gray>- <white>Остановить таймер включения/выключения режима технических работ."
helpSingleEndtimer: "<gold>/maintenance endtimer [сервер] <disable in> <gray>(По истечению заданного времени, например 1h5m, режим технических работ будет выключен)"
helpSingleStarttimer: "<gold>/maintenance starttimer [сервер] <enable in> <gray>(По истечению заданного времени, например 1h5m, режим технических работ будет включен)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [сервер] <enable in> <maintenance duration> <gray>(По истечению заданного времени, например 1h5m, режим технических работ будет включен)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray> (включает/отключает режим обслуживания глобально или на определенном сервере с дополнительным режимом отображения при включении)"
helpStatus: "<gold>/maintenance status <gray>- <white>Список всех серверов закрытых на технические работы."
#Discord webhook messages. These use Discord markdown, not MiniMessage.
#For timer webhooks, %TIMESTAMP% is a Unix timestamp for use in Discord timestamp tags, e.g. <t:%TIMESTAMP%:R>.
webhookMaintenanceActivated: "**Maintenance mode enabled.**"
webhookMaintenanceDeactivated: "**Maintenance mode disabled.**"
webhookStarttimerStarted: "Maintenance mode will be enabled <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookEndtimerStarted: "Maintenance mode will be disabled <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookJoinNotification: "Blocked join: `%PLAYER%` tried to join during maintenance."
webhookSingleMaintenanceActivated: "Maintenance mode enabled on `%SERVER%`."
webhookSingleMaintenanceDeactivated: "Maintenance mode disabled on `%SERVER%`."
webhookSingleStarttimerStarted: "Maintenance mode will be enabled on `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookSingleEndtimerStarted: "Maintenance mode will be disabled on `%SERVER%` <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookMaintenanceActivated: "**Режим обслуживания включён.**"
webhookMaintenanceDeactivated: "**Режим обслуживания выключен**"
webhookStarttimerStarted: "Режим обслуживания будет включен через <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookEndtimerStarted: "Режим обслуживания будет отключён через <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookJoinNotification: "Заблокировано соединение: `%PLAYER%` пытался присоединиться во время обслуживания."
webhookSingleMaintenanceActivated: "Режим обслуживания включен на `%SERVER% `."
webhookSingleMaintenanceDeactivated: "Режим обслуживания отключен на `%SERVER%`."
webhookSingleStarttimerStarted: "Режим обслуживания будет включен на `%SERVER%` в <t:%TIMESTAMP%:R> (`%TIME%`)."
webhookSingleEndtimerStarted: "Режим обслуживания будет выключен на `%SERVER%` в <t:%TIMESTAMP%:R> (`%TIME%`)."
#Used for autoupdating the language file, do not change this value.
language-version: 5
+3 -3
View File
@@ -104,9 +104,9 @@ helpWhitelistAdd: "<gold>/maintenance add <namn/uuid> <gray>(Lägger till en spe
helpWhitelistRemove: "<gold>/maintenance remove <namn/uuid> <gray>(Tar bort spelaren från vitlistan för underhållsläget)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [server] <gray>(Vid utfärdandet av detta kommando kommer den nuvarande timern bli avbruten)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpStatus: "<gold>/maintenance status <gray>(Listar alla proxiade servrar som är i underhåll)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
+3 -3
View File
@@ -104,9 +104,9 @@ helpWhitelistAdd: "<gold>/maintenance add <isim/uuid> <gray>(Oyuncuyu bakım bey
helpWhitelistRemove: "<gold>/maintenance remove <isim/uuid> <gray>(Oyuncuyu bakım beyaz listesinden kaldırır)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [sunucu] <gray>(Çalışıyorsa, mevcut zamanlayıcı iptal edilecektir.)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server] <disable in> <gray>(Belirtilen süreden sonra, Örnek: 1h5m, bakım modu deaktif olacaktır)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server] <enable in> <gray>(Belirtilen süreden sonra, Örnek: 1h5m, bakım modu aktif olacaktır)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server] <enable in> <maintenance duration> <gray>(Belirtilen süreden sonra, Örnek: 1h5m, bakım modu deaktif olacaktır)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpStatus: "<gold>/maintenance status <gray>(Şu anda bakımda olan tüm sunucuları listeler)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
+3 -3
View File
@@ -104,9 +104,9 @@ helpWhitelistAdd: "<gold>/maintenance add [ник|uuid] <gray>- <white>Дода
helpWhitelistRemove: "<gold>/maintenance remove [ник|uuid] <gray>- <white>Видалити гравця із білого листа."
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [сервер] <gray>- <white>Зупинити таймер увімкнення/вимкнення режиму технічних робіт."
helpSingleEndtimer: "<gold>/maintenance endtimer [server] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpStatus: "<gold>/maintenance status <gray>- <white>Список всіх серверів, закритих на технічні роботи."
#Discord webhook messages. These use Discord markdown, not MiniMessage.
+3 -3
View File
@@ -104,9 +104,9 @@ helpWhitelistAdd: "<gold>/maintenance add <Tên Người Chơi/UUID> <gray>(Thê
helpWhitelistRemove: "<gold>/maintenance remove <Tên Người Chơi/UUID> <gray>(Xóa Người Chơi khỏi danh sách trắng bảo trì)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [server] <gray>(Nếu chạy, bộ đếm thời gian hiện tại sẽ bị hủy bỏ)"
helpSingleEndtimer: "<gold>/maintenance endtimer [máy chủ] <khoảng thời gian sẽ tắt sau> <gray>(Sau khoảng thời gian được cho, ví dụ 1h5m (1 giờ 5 phút), chế độ bảo trì sẽ được tắt)"
helpSingleStarttimer: "<gold>/maintenance starttimer [máy chủ] <khoảng thời gian sẽ bật sau> <gray>(Sau khoảng thời gian được cho, ví dụ 1h5m (1 giờ 5 phút), chế độ bảo trì sẽ được bật)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [máy chủ] <khoảng thời gian sẽ được bật sau> <khoảng thời gian bảo trì> <gray>(Sau khoảng thời gian được cho, ví dụ 1h5m (1 giờ 5 phút), chế độ bảo trì sẽ được bật)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpStatus: "<gold>/maintenance status <gray>(Liệt kê tất cả các máy chủ proxy hiện đang được bảo trì)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
+3 -3
View File
@@ -104,9 +104,9 @@ helpWhitelistAdd: "<gold>/maintenance add <name/uuid> <gray>(将玩家加入维
helpWhitelistRemove: "<gold>/maintenance remove <name/uuid> <gray>(将玩家从维护玩家白名单中移除)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [server] <gray>(中止指定服务器开启的计时器)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server] <disable in> <gray>(在指定时间后关闭指定服务器的维护模式,例如\"1h5m\")"
helpSingleStarttimer: "<gold>/maintenance starttimer [server] <enable in> <gray>(在指定时间后开启指定服务器的维护模式,例如\"1h5m\")"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer <enable in> <maintenance duration> <gray>(在指定时间后开启指定服务器的维护模式直到指定时长结束,例如\"1h5m\")"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpStatus: "<gold>/maintenance status <gray>(列出当前正在维护的所有服务器)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
+3 -3
View File
@@ -104,9 +104,9 @@ helpWhitelistAdd: "<gold>/maintenance add <名稱/uuid> <gray>(將玩家新增
helpWhitelistRemove: "<gold>/maintenance remove <名稱/uuid> <gray>(將玩家從維護白名單中移除)"
#Messages for the Bungee/Velocity part, you can ignore them if you use the plugin on Paper/Sponge
helpAbortSingleTimer: "<gold>/maintenance aborttimer [伺服器] <gray>(如果正在執行,目前的計時器將會被中止)"
helpSingleEndtimer: "<gold>/maintenance endtimer [伺服器] <停用時間> <gray>(經過指定的時間後,例如 1 小時 5 分鐘,維護模式將會被停用)"
helpSingleStarttimer: "<gold>/maintenance starttimer [伺服器] <啟用時間> <gray>(經過指定的時間後,例如 1 小時 5 分鐘,維護模式將會被啟用)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [伺服器] <啟用時間> <維護持續時間> <gray>(經過指定的時間後,例如 1 小時 5 分鐘,維護模式將會被啟用)"
helpSingleEndtimer: "<gold>/maintenance endtimer [server|global] <disable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be disabled)"
helpSingleStarttimer: "<gold>/maintenance starttimer [server|global] [mode] <enable in> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleScheduleTimer: "<gold>/maintenance scheduletimer [server|global] [mode] <enable in> <maintenance duration> <gray>(After the given time, e.g. 1h5m, maintenance mode will be enabled)"
helpSingleToggle: "<gold>/maintenance <on/off> [server|global] [mode] <gray>(Enables/disables maintenance mode globally or on a specific server with an optional display mode when enabling)"
helpStatus: "<gold>/maintenance status <gray>(列出目前正在維護的所有代理伺服器)"
#Discord webhook messages. These use Discord markdown, not MiniMessage.
@@ -119,8 +119,9 @@ class ConfigTest {
assertFalse(config.contains("test"));
assertTrue(config.getComments().containsKey("fallback"));
assertTrue(config.getComments().containsKey("player-count-message.enable-timer-specific-message"));
assertFalse(config.contains("redis.enabled"));
assertFalse(config.getSection("redis").contains("enabled"));
assertTrue(config.contains("redis.enabled"));
assertFalse(config.contains("redis.nonexistent"));
assertFalse(config.getSection("redis").contains("nonexistent"));
config.set("test", "abc");
config.remove("fallback");
+1 -1
View File
@@ -1,4 +1,4 @@
projectVersion=5.1.0
projectVersion=5.1.1
# Gradle properties
org.gradle.daemon=true
+5 -5
View File
@@ -2,11 +2,11 @@ metadata.format.version = "1.1"
[versions]
jedis = "7.5.0"
jedis = "8.0.1"
bstats = "3.2.1"
# Provided on good platforms, shaded in Bungee
adventure = "4.26.1"
adventure = "5.2.0"
adventurePlatform = "4.4.1"
# Provided
@@ -16,15 +16,15 @@ snakeyaml = "1.23"
jetbrainsAnnotations = "26.1.0"
authlib = "1.5.25"
luckperms = "5.3"
luckperms = "5.5"
serverlistplus = "3.5.0"
paper = "1.21.11-R0.1-SNAPSHOT"
bungee = "1.21-R0.4-SNAPSHOT"
bungee = "26.1-R0.1-SNAPSHOT"
sponge = "17.0.0"
velocity = "3.4.0"
junitVer = "6.0.3"
junitVer = "6.1.3"
[libraries]
Binary file not shown.
+4 -2
View File
@@ -1,8 +1,10 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=bafc141b619ad6350fd975fc903156dd5c151998cc8b058e8c1044ab5f7b031f
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip
distributionSha256Sum=bafd5ce9cfaea0fbccfdc8439a1ac42fbd4cd9c89dc9a988228d8a2639a58e6c
distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.0-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Vendored
+1 -1
View File
@@ -57,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/2d6327017519d23b96af35865dc997fcb544fb40/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
Vendored
+10 -21
View File
@@ -23,8 +23,8 @@
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Set local scope for the variables, and ensure extensions are enabled
setlocal EnableExtensions
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@@ -51,7 +51,7 @@ echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
"%COMSPEC%" /c exit 1
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
@@ -65,7 +65,7 @@ echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
"%COMSPEC%" /c exit 1
:execute
@rem Setup the command line
@@ -73,21 +73,10 @@ goto fail
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
@rem endlocal doesn't take effect until after the line is parsed and variables are expanded
@rem which allows us to clear the local environment before executing the java command
endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel
:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
:exitWithErrorLevel
@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts
"%COMSPEC%" /c exit %ERRORLEVEL%
@@ -101,9 +101,9 @@ public final class MaintenancePaperPlugin extends MaintenancePlugin {
@Override
public Task startMaintenanceRunnable(final Runnable runnable) {
if (FOLIA) {
throw new UnsupportedOperationException("Scheduling tasks is not yet supported on Folia");
return new PaperTask(getServer().getGlobalRegionScheduler().runAtFixedRate(plugin, task -> runnable.run(), 1, 20));
}
return new PaperTask(getServer().getScheduler().scheduleSyncRepeatingTask(plugin, runnable, 0, 20));
return new PaperTask(getServer().getScheduler().runTaskTimer(plugin, runnable, 0, 20));
}
@Override
@@ -119,15 +119,18 @@ public final class MaintenancePaperPlugin extends MaintenancePlugin {
}
@Override
public void sync(Runnable runnable) {
public void sync(final Runnable runnable) {
if (FOLIA) {
getServer().getGlobalRegionScheduler().run(plugin, task -> runnable.run());
return;
}
getServer().getScheduler().runTask(plugin, runnable);
}
@Override
public void async(final Runnable runnable) {
if (FOLIA) {
// Preliminary Folia support
runnable.run();
getServer().getAsyncScheduler().runNow(plugin, task -> runnable.run());
return;
}
getServer().getScheduler().runTaskAsynchronously(plugin, runnable);
@@ -147,7 +150,11 @@ public final class MaintenancePaperPlugin extends MaintenancePlugin {
protected void kickPlayers() {
for (final Player p : getServer().getOnlinePlayers()) {
if (!hasPermission(p, "bypass") && !settings.isWhitelisted(p.getUniqueId())) {
p.kick(settings.getKickMessage());
if (FOLIA) {
p.getScheduler().run(plugin, task -> p.kick(settings.getKickMessage()), null);
} else {
p.kick(settings.getKickMessage());
}
}
}
}
@@ -18,17 +18,22 @@
package eu.kennytv.maintenance.paper.util;
import eu.kennytv.maintenance.core.util.Task;
import org.bukkit.Bukkit;
import io.papermc.paper.threadedregions.scheduler.ScheduledTask;
import org.bukkit.scheduler.BukkitTask;
public final class PaperTask implements Task {
private final int id;
private final Runnable cancelAction;
public PaperTask(final int id) {
this.id = id;
public PaperTask(final BukkitTask task) {
this.cancelAction = task::cancel;
}
public PaperTask(final ScheduledTask task) {
this.cancelAction = task::cancel;
}
@Override
public void cancel() {
Bukkit.getScheduler().cancelTask(id);
cancelAction.run();
}
}
+2 -2
View File
@@ -15,8 +15,8 @@ pluginManagement {
plugins {
id("net.kyori.blossom") version "2.2.0"
id("org.jetbrains.gradle.plugin.idea-ext") version "1.4.1"
id("com.gradleup.shadow") version "9.4.1"
id("com.gradleup.nmcp") version "1.4.4"
id("com.gradleup.shadow") version "9.6.1"
id("com.gradleup.nmcp") version "1.6.2"
}
}