修理最后一分钟不更新置顶的顺序问题,以及使用shutdown命令双重提示的问题
This commit is contained in:
parent
d647b99465
commit
85e1bf1ca4
2 changed files with 34 additions and 20 deletions
|
@ -101,7 +101,7 @@ public class ServerCloser {
|
||||||
while (!lock.isEmpty()) {
|
while (!lock.isEmpty()) {
|
||||||
lock.poll().cancel();
|
lock.poll().cancel();
|
||||||
}
|
}
|
||||||
lock.add(new Counter(INSTANCE, 1, "收到关机命令已经过了 %s 分钟,即将关机。").start());
|
lock.add(new Counter(INSTANCE, 1).reason("收到关机命令已经过了 %s 分钟,即将关机。").noLastWarning().start());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ public class ServerCloser {
|
||||||
while (!lock.isEmpty()) {
|
while (!lock.isEmpty()) {
|
||||||
lock.poll().cancel();
|
lock.poll().cancel();
|
||||||
}
|
}
|
||||||
lock.add(new Counter(INSTANCE, 60, "虽然关机被取消,但 %s 分钟内依旧没有玩家上线,即将关机。").start());
|
lock.add(new Counter(INSTANCE, 60).reason("虽然关机被取消,但 %s 分钟内依旧没有玩家上线,即将关机。").start());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,15 +127,25 @@ public class ServerCloser {
|
||||||
private final int totalMin;
|
private final int totalMin;
|
||||||
private int minLeft;
|
private int minLeft;
|
||||||
private boolean canceled = false;
|
private boolean canceled = false;
|
||||||
private final String reason;
|
private String reason;
|
||||||
|
private static final String DEFAULT_REASON = "距离上一个玩家离开已经过了 %s 分钟,即将关机。";
|
||||||
|
private boolean lastWarning = true;
|
||||||
|
|
||||||
protected Counter(ServerCloser instance, int minute) {this(instance, minute, null);}
|
protected Counter(ServerCloser instance, int minute) {
|
||||||
|
|
||||||
protected Counter(ServerCloser instance, int minute, String reason) {
|
|
||||||
this.instance = instance;
|
this.instance = instance;
|
||||||
totalMin = minute;
|
totalMin = minute;
|
||||||
minLeft = minute;
|
minLeft = minute;
|
||||||
this.reason = Objects.requireNonNullElse(reason, "距离上一个玩家离开已经过了 %s 分钟,即将关机。");
|
this.reason = DEFAULT_REASON;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Counter reason(String reason) {
|
||||||
|
this.reason = reason;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Counter noLastWarning() {
|
||||||
|
lastWarning = false;
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected synchronized void cancel() {
|
protected synchronized void cancel() {
|
||||||
|
@ -159,22 +169,13 @@ public class ServerCloser {
|
||||||
while (true) {
|
while (true) {
|
||||||
if (canceled) return;
|
if (canceled) return;
|
||||||
TGBridge.setShuttingDown(minLeft);
|
TGBridge.setShuttingDown(minLeft);
|
||||||
try {
|
|
||||||
this.wait(MINUTE);
|
|
||||||
} catch (InterruptedException ignored) {}
|
|
||||||
if (canceled) return;
|
|
||||||
if (!instance.server.getAllPlayers().isEmpty()) {
|
|
||||||
instance.plugin.logger.error("ServerCloser: 定时器发现服务器有人。这不应发生,因为定时器本应该被直接打断。");
|
|
||||||
TGBridge.error("ServerCloser: #bug @NaAlOH4 定时器发现服务器有人。这不应发生,因为定时器本应该被直接打断。");
|
|
||||||
canceled = true;
|
|
||||||
}
|
|
||||||
if (canceled) return;
|
|
||||||
minLeft--;
|
|
||||||
switch (minLeft) {
|
switch (minLeft) {
|
||||||
case 1 -> {
|
case 1 -> {
|
||||||
String msg = "服务器即将在一分钟后关机,使用 /fuck 以取消。";
|
String msg = "服务器即将在一分钟后关机,使用 /fuck 以取消。";
|
||||||
instance.plugin.logger.info(msg);
|
instance.plugin.logger.info(msg);
|
||||||
TGBridge.log(msg);
|
if (lastWarning) {
|
||||||
|
TGBridge.log(msg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case 0 -> {
|
case 0 -> {
|
||||||
String msg = "ServerCloser: " + reason.formatted(totalMin);
|
String msg = "ServerCloser: " + reason.formatted(totalMin);
|
||||||
|
@ -190,6 +191,19 @@ public class ServerCloser {
|
||||||
}
|
}
|
||||||
default -> instance.plugin.logger.info("服务器即将在 {} 分钟后关机", minLeft);
|
default -> instance.plugin.logger.info("服务器即将在 {} 分钟后关机", minLeft);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
this.wait(MINUTE);
|
||||||
|
} catch (InterruptedException ignored) {}
|
||||||
|
if (canceled) return;
|
||||||
|
if (!instance.server.getAllPlayers().isEmpty()) {
|
||||||
|
instance.plugin.logger.error("ServerCloser: 定时器发现服务器有人。这不应发生,因为定时器本应该被直接打断。");
|
||||||
|
TGBridge.error("ServerCloser: #bug @NaAlOH4 定时器发现服务器有人。这不应发生,因为定时器本应该被直接打断。");
|
||||||
|
canceled = true;
|
||||||
|
}
|
||||||
|
if (canceled) return;
|
||||||
|
|
||||||
|
minLeft--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,7 +174,7 @@ public class TGBridge {
|
||||||
case "/shutdown" -> {
|
case "/shutdown" -> {
|
||||||
if (server.getAllPlayers().isEmpty()) {
|
if (server.getAllPlayers().isEmpty()) {
|
||||||
ServerCloser.INSTANCE.fastShutdown();
|
ServerCloser.INSTANCE.fastShutdown();
|
||||||
outbound("server will shutdown in 1 minute.\nuse /fuck to cancel.");
|
outbound("服务器即将在一分钟后关机,使用 /fuck 以取消。");
|
||||||
} else {
|
} else {
|
||||||
outbound("still player online, can't shutdown.");
|
outbound("still player online, can't shutdown.");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue