Skip to content

Commit 21c5394

Browse files
committed
Improved the maintenance command to mostly support future planned maintenances
1 parent 8b83a3b commit 21c5394

File tree

1 file changed

+141
-33
lines changed

1 file changed

+141
-33
lines changed

src/main/java/dev/lars/utilsmanager/features/maintenance/MaintenanceCommand.java

Lines changed: 141 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -53,33 +53,119 @@ public void execute(@NotNull CommandSourceStack stack, @NotNull String[] args) {
5353
.append(Component.text("Nothing changed! Maintenance is currently activated!", NamedTextColor.RED)));
5454
}
5555
} else {
56-
ServerSettingsAPI.getApi().enableMaintenance("", null, null, null);
57-
if (LanguageAPI.getApi().getLanguage(player) == 2) {
58-
player.sendMessage(Statements.getPrefix()
59-
.append(Component.text("Die Wartung hat begonnen.", NamedTextColor.GREEN)));
56+
if (ServerSettingsAPI.getApi().getMaintenanceStart() == null) {
57+
ServerSettingsAPI.getApi().enableMaintenance("", null, null, null);
58+
if (LanguageAPI.getApi().getLanguage(player) == 2) {
59+
player.sendMessage(Statements.getPrefix()
60+
.append(Component.text("Die Wartung hat begonnen.", NamedTextColor.GREEN)));
61+
} else {
62+
player.sendMessage(Statements.getPrefix()
63+
.append(Component.text("Maintenance was started.", NamedTextColor.GREEN)));
64+
}
65+
for (Player onlinePlayer : getOnlinePlayers()) {
66+
if (onlinePlayer.isOp() || RankAPI.getApi().getRankId(onlinePlayer) > 7) continue;
67+
if (LanguageAPI.getApi().getLanguage(onlinePlayer) == 2) {
68+
onlinePlayer.kick(Component.text("Der Server ist nun in Wartung! Bitte warten Sie, bis es weitere Informationen gibt."));
69+
} else {
70+
onlinePlayer.kick(Component.text("The server is in maintenance! Please wait until there is more information."));
71+
}
72+
}
6073
} else {
61-
player.sendMessage(Statements.getPrefix()
62-
.append(Component.text("Maintenance was started.", NamedTextColor.GREEN)));
63-
}
64-
for (Player onlinePlayer : getOnlinePlayers()) {
65-
if (onlinePlayer.isOp() || RankAPI.getApi().getRankId(onlinePlayer) > 7) continue;
66-
if (LanguageAPI.getApi().getLanguage(onlinePlayer) == 2) {
67-
onlinePlayer.kick(Component.text("Der Server ist nun in Wartung! Bitte warten Sie, bis es weitere Informationen gibt."));
74+
ServerSettingsAPI.getApi().setMaintenanceEnabled(true);
75+
if (LanguageAPI.getApi().getLanguage(player) == 2) {
76+
player.sendMessage(Statements.getPrefix()
77+
.append(Component.text("Die Wartung hat nun frühzeitiger begonnen als geplant.", NamedTextColor.GREEN)));
6878
} else {
69-
onlinePlayer.kick(Component.text("The server is in maintenance! Please wait until there is more information."));
79+
player.sendMessage(Statements.getPrefix()
80+
.append(Component.text("Maintenance was started earlier than planned.", NamedTextColor.GREEN)));
81+
}
82+
for (Player onlinePlayer : getOnlinePlayers()) {
83+
if (onlinePlayer.isOp() || RankAPI.getApi().getRankId(onlinePlayer) > 7) continue;
84+
if (LanguageAPI.getApi().getLanguage(onlinePlayer) == 2) {
85+
onlinePlayer.kick(Component.text("Der Server ist nun in Wartung! Bitte warten Sie, bis es weitere Informationen gibt."));
86+
} else {
87+
onlinePlayer.kick(Component.text("The server is in maintenance! Please wait until there is more information."));
88+
}
7089
}
7190
}
7291
}
7392
break;
7493
}
7594
case "off": {
7695
if (!ServerSettingsAPI.getApi().isMaintenanceEnabled()) {
77-
if (LanguageAPI.getApi().getLanguage(player) == 2) {
78-
player.sendMessage(Statements.getPrefix()
79-
.append(Component.text("Nichts hat sich geändert! Aktuell sind keine Wartungen!", NamedTextColor.RED)));
96+
Instant maintenanceStart = ServerSettingsAPI.getApi().getMaintenanceStart();
97+
if (maintenanceStart == null) {
98+
if (LanguageAPI.getApi().getLanguage(player) == 2) {player.sendMessage(Statements.getPrefix()
99+
.append(Component.text("Nichts hat sich geändert! Aktuell sind keine Wartungen!", NamedTextColor.RED)));} else {player.sendMessage(Statements.getPrefix()
100+
.append(Component.text("Nothing changed! There is currently no maintenance!", NamedTextColor.RED)));}
80101
} else {
81-
player.sendMessage(Statements.getPrefix()
82-
.append(Component.text("Nothing changed! There is currently no maintenance!", NamedTextColor.RED)));
102+
103+
Instant maintenanceEnd = ServerSettingsAPI.getApi().getMaintenanceEstimatedEnd();
104+
Instant maintenanceDeadline = ServerSettingsAPI.getApi().getMaintenanceDeadline();
105+
Instant now = Instant.now();
106+
107+
ServerSettingsAPI.getApi().disableMaintenance();
108+
if (LanguageAPI.getApi().getLanguage(player) == 2) {
109+
player.sendMessage(Statements.getPrefix()
110+
.append(Component.text("Die geplante Wartung wurde abgebrochen.", NamedTextColor.WHITE)));
111+
112+
long startDuration = Math.abs(Duration.between(maintenanceStart, now).getSeconds());
113+
Component formattedStart = FormatNumbers.formatDuration(startDuration);
114+
player.sendMessage(Statements.getPrefix()
115+
.append(Component.text("Die Wartung hätte in ", NamedTextColor.GRAY))
116+
.append(formattedStart)
117+
.append(Component.text(" begonnen.", NamedTextColor.GRAY)));
118+
119+
if (maintenanceEnd != null) {
120+
long endDuration = Duration.between(maintenanceStart, maintenanceEnd).getSeconds();
121+
Component formattedEnd = FormatNumbers.formatDuration(Math.abs(endDuration));
122+
123+
player.sendMessage(Statements.getPrefix()
124+
.append(Component.text("Die Wartung sollte voraussichtlich ", NamedTextColor.BLUE))
125+
.append(formattedEnd)
126+
.append(Component.text(" gebraucht.", NamedTextColor.BLUE)));
127+
}
128+
129+
if (maintenanceDeadline != null) {
130+
long deadlineDuration = Duration.between(now, maintenanceDeadline).getSeconds();
131+
Component formattedDeadline = FormatNumbers.formatDuration(Math.abs(deadlineDuration));
132+
133+
player.sendMessage(Statements.getPrefix()
134+
.append(Component.text("Die Wartung hätte in ", NamedTextColor.GOLD))
135+
.append(formattedDeadline)
136+
.append(Component.text(" automatisch beendet werden sollen.", NamedTextColor.GOLD)));
137+
}
138+
} else {
139+
player.sendMessage(Statements.getPrefix()
140+
.append(Component.text("The planned maintenance was cancelled.", NamedTextColor.WHITE)));
141+
142+
long startDuration = Math.abs(Duration.between(maintenanceStart, now).getSeconds());
143+
Component formattedStart = FormatNumbers.formatDuration(startDuration);
144+
player.sendMessage(Statements.getPrefix()
145+
.append(Component.text("The maintenance should've started in ", NamedTextColor.GRAY))
146+
.append(formattedStart)
147+
.append(Component.text(".", NamedTextColor.GRAY)));
148+
149+
if (maintenanceEnd != null) {
150+
long endDuration = Duration.between(maintenanceStart, maintenanceEnd).getSeconds();
151+
Component formattedEnd = FormatNumbers.formatDuration(Math.abs(endDuration));
152+
153+
player.sendMessage(Statements.getPrefix()
154+
.append(Component.text("The maintenance was estimated to take ", NamedTextColor.BLUE))
155+
.append(formattedEnd)
156+
.append(Component.text(" .", NamedTextColor.BLUE)));
157+
}
158+
159+
if (maintenanceDeadline != null) {
160+
long deadlineDuration = Duration.between(now, maintenanceDeadline).getSeconds();
161+
Component formattedDeadline = FormatNumbers.formatDuration(Math.abs(deadlineDuration));
162+
163+
player.sendMessage(Statements.getPrefix()
164+
.append(Component.text("The maintenance would have been automatically disabled in ", NamedTextColor.GOLD))
165+
.append(formattedDeadline)
166+
.append(Component.text(".", NamedTextColor.GOLD)));
167+
}
168+
}
83169
}
84170
} else {
85171
Instant maintenanceStart = ServerSettingsAPI.getApi().getMaintenanceStart();
@@ -207,17 +293,6 @@ public void execute(@NotNull CommandSourceStack stack, @NotNull String[] args) {
207293
return;
208294
}
209295

210-
if (!ServerSettingsAPI.getApi().isMaintenanceEnabled()) {
211-
if (LanguageAPI.getApi().getLanguage(player) == 2) {
212-
player.sendMessage(Statements.getPrefix()
213-
.append(Component.text("Nichts hat sich geändert! Aktuell sind keine Wartungen!", NamedTextColor.RED)));
214-
} else {
215-
player.sendMessage(Statements.getPrefix()
216-
.append(Component.text("Nothing changed! There is currently no maintenance!", NamedTextColor.RED)));
217-
}
218-
break;
219-
}
220-
221296
Instant startTime = TimeUtil.parseTimeToInstant(args[1]);
222297
if (startTime == null) {
223298
if (LanguageAPI.getApi().getLanguage(player) == 2) {
@@ -232,10 +307,10 @@ public void execute(@NotNull CommandSourceStack stack, @NotNull String[] args) {
232307
ServerSettingsAPI.getApi().setMaintenanceStart(startTime);
233308
if (LanguageAPI.getApi().getLanguage(player) == 2) {
234309
player.sendMessage(Statements.getPrefix()
235-
.append(Component.text("Der Wartungsstart wurde erfolgreich aktualisiert!", NamedTextColor.GREEN)));
310+
.append(Component.text("Die Wartung wurde erfolgreich geplant!", NamedTextColor.GREEN)));
236311
} else {
237312
player.sendMessage(Statements.getPrefix()
238-
.append(Component.text("The maintenance start was successfully updated!", NamedTextColor.GREEN)));
313+
.append(Component.text("The maintenance was successfully planned!", NamedTextColor.GREEN)));
239314
}
240315
break;
241316
}
@@ -255,7 +330,18 @@ public void execute(@NotNull CommandSourceStack stack, @NotNull String[] args) {
255330
return;
256331
}
257332

258-
if (!ServerSettingsAPI.getApi().isMaintenanceEnabled()) {
333+
if (ServerSettingsAPI.getApi().getMaintenanceStart() == null && !ServerSettingsAPI.getApi().isMaintenanceEnabled()) {
334+
if (LanguageAPI.getApi().getLanguage(player) == 2) {
335+
player.sendMessage(Statements.getPrefix()
336+
.append(Component.text("Nichts hat sich geändert! Aktuell sind keine Wartungen geplant!", NamedTextColor.RED)));
337+
} else {
338+
player.sendMessage(Statements.getPrefix()
339+
.append(Component.text("Nothing changed! There is no maintenance planned!", NamedTextColor.RED)));
340+
}
341+
break;
342+
}
343+
344+
if (ServerSettingsAPI.getApi().getMaintenanceStart() != null && !ServerSettingsAPI.getApi().isMaintenanceEnabled()) {
259345
if (LanguageAPI.getApi().getLanguage(player) == 2) {
260346
player.sendMessage(Statements.getPrefix()
261347
.append(Component.text("Nichts hat sich geändert! Aktuell sind keine Wartungen!", NamedTextColor.RED)));
@@ -303,7 +389,18 @@ public void execute(@NotNull CommandSourceStack stack, @NotNull String[] args) {
303389
return;
304390
}
305391

306-
if (!ServerSettingsAPI.getApi().isMaintenanceEnabled()) {
392+
if (ServerSettingsAPI.getApi().getMaintenanceStart() == null && !ServerSettingsAPI.getApi().isMaintenanceEnabled()) {
393+
if (LanguageAPI.getApi().getLanguage(player) == 2) {
394+
player.sendMessage(Statements.getPrefix()
395+
.append(Component.text("Nichts hat sich geändert! Aktuell sind keine Wartungen geplant!", NamedTextColor.RED)));
396+
} else {
397+
player.sendMessage(Statements.getPrefix()
398+
.append(Component.text("Nothing changed! There is no maintenance planned!", NamedTextColor.RED)));
399+
}
400+
break;
401+
}
402+
403+
if (ServerSettingsAPI.getApi().getMaintenanceStart() != null && !ServerSettingsAPI.getApi().isMaintenanceEnabled()) {
307404
if (LanguageAPI.getApi().getLanguage(player) == 2) {
308405
player.sendMessage(Statements.getPrefix()
309406
.append(Component.text("Nichts hat sich geändert! Aktuell sind keine Wartungen!", NamedTextColor.RED)));
@@ -351,7 +448,18 @@ public void execute(@NotNull CommandSourceStack stack, @NotNull String[] args) {
351448
return;
352449
}
353450

354-
if (!ServerSettingsAPI.getApi().isMaintenanceEnabled()) {
451+
if (ServerSettingsAPI.getApi().getMaintenanceStart() == null && !ServerSettingsAPI.getApi().isMaintenanceEnabled()) {
452+
if (LanguageAPI.getApi().getLanguage(player) == 2) {
453+
player.sendMessage(Statements.getPrefix()
454+
.append(Component.text("Nichts hat sich geändert! Aktuell sind keine Wartungen geplant!", NamedTextColor.RED)));
455+
} else {
456+
player.sendMessage(Statements.getPrefix()
457+
.append(Component.text("Nothing changed! There is no maintenance planned!", NamedTextColor.RED)));
458+
}
459+
break;
460+
}
461+
462+
if (ServerSettingsAPI.getApi().getMaintenanceStart() != null && !ServerSettingsAPI.getApi().isMaintenanceEnabled()) {
355463
if (LanguageAPI.getApi().getLanguage(player) == 2) {
356464
player.sendMessage(Statements.getPrefix()
357465
.append(Component.text("Nichts hat sich geändert! Aktuell sind keine Wartungen!", NamedTextColor.RED)));

0 commit comments

Comments
 (0)