Skip to content

Commit 32e07ca

Browse files
committed
fix mixin
1 parent 33aa878 commit 32e07ca

File tree

2 files changed

+35
-44
lines changed

2 files changed

+35
-44
lines changed

src/main/java/dev/ithundxr/railwaystweaks/RailwaysTweaks.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
public class RailwaysTweaks implements ModInitializer {
1010
public static final String MODID = "railwaystweaks";
1111
public static final String NAME = "RailwaysTweaks";
12-
public static final Logger LOGGER = LoggerFactory.getLogger(MODID);
12+
public static final Logger LOGGER = LoggerFactory.getLogger(NAME);
1313
@Override
1414
public void onInitialize() {
1515
LOGGER.info("Railways Tweaks is loading...");
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,15 @@
11
package dev.ithundxr.railwaystweaks.mixin;
22

3-
import com.google.common.collect.Streams;
4-
import com.mojang.datafixers.DataFixer;
5-
import com.mojang.logging.LogUtils;
3+
import dev.ithundxr.railwaystweaks.RailwaysTweaks;
64
import net.minecraft.CrashReport;
7-
import net.minecraft.CrashReportCategory;
85
import net.minecraft.Util;
96
import net.minecraft.server.Bootstrap;
107
import net.minecraft.server.MinecraftServer;
11-
import net.minecraft.server.Services;
12-
import net.minecraft.server.WorldStem;
138
import net.minecraft.server.dedicated.DedicatedServer;
14-
import net.minecraft.server.level.progress.ChunkProgressListenerFactory;
15-
import net.minecraft.server.packs.repository.PackRepository;
16-
import net.minecraft.world.level.GameRules;
17-
import net.minecraft.world.level.storage.LevelStorageSource;
189
import org.slf4j.Logger;
10+
import org.spongepowered.asm.mixin.Final;
1911
import org.spongepowered.asm.mixin.Mixin;
20-
import org.spongepowered.asm.mixin.Unique;
12+
import org.spongepowered.asm.mixin.Shadow;
2113
import org.spongepowered.asm.mixin.injection.At;
2214
import org.spongepowered.asm.mixin.injection.Inject;
2315
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@@ -26,46 +18,45 @@
2618
import java.lang.management.ManagementFactory;
2719
import java.lang.management.ThreadInfo;
2820
import java.lang.management.ThreadMXBean;
29-
import java.net.Proxy;
30-
import java.util.stream.Collectors;
3121

3222
@Mixin(value = DedicatedServer.class, priority = 100000000)
33-
public abstract class DedicatedServerMixin extends MinecraftServer {
34-
@Unique private static final Logger railwaysTweaks$LOGGER = LogUtils.getLogger();
35-
36-
public DedicatedServerMixin(Thread serverThread, LevelStorageSource.LevelStorageAccess storageSource, PackRepository packRepository, WorldStem worldStem, Proxy proxy, DataFixer fixerUpper, Services services, ChunkProgressListenerFactory progressListenerFactory) {
37-
super(serverThread, storageSource, packRepository, worldStem, proxy, fixerUpper, services, progressListenerFactory);
38-
}
39-
23+
public abstract class DedicatedServerMixin {
24+
@Shadow @Final static Logger LOGGER;
25+
4026
@Inject(method = "onServerExit", at = @At("TAIL"))
4127
private void railwaysTweaks$threadDumpOnShutdown(CallbackInfo ci) {
42-
ThreadMXBean threadmxbean = ManagementFactory.getThreadMXBean();
43-
ThreadInfo[] athreadinfo = threadmxbean.dumpAllThreads(true, true);
44-
StringBuilder stringbuilder = new StringBuilder();
45-
Error error = new Error("Shutdown Thread Dump");
46-
47-
for(ThreadInfo threadinfo : athreadinfo) {
48-
if (threadinfo.getThreadId() == this.getRunningThread().getId()) {
49-
error.setStackTrace(threadinfo.getStackTrace());
28+
if ("true".equalsIgnoreCase(System.getProperty("railwaystweaks.shutdown.dumpthreads"))) {
29+
MinecraftServer self = ((MinecraftServer) (Object) this);
30+
31+
ThreadMXBean threadmxbean = ManagementFactory.getThreadMXBean();
32+
ThreadInfo[] athreadinfo = threadmxbean.dumpAllThreads(true, true);
33+
StringBuilder stringbuilder = new StringBuilder();
34+
Error error = new Error("Shutdown Thread Dump");
35+
36+
for (ThreadInfo threadinfo : athreadinfo) {
37+
if (threadinfo.getThreadId() == self.getRunningThread().getId()) {
38+
error.setStackTrace(threadinfo.getStackTrace());
39+
}
40+
41+
stringbuilder.append(threadinfo);
42+
stringbuilder.append("\n");
5043
}
5144

52-
stringbuilder.append(threadinfo);
53-
stringbuilder.append("\n");
45+
CrashReport crashreport = new CrashReport("Server shutdown thread dump", error);
46+
self.fillSystemReport(crashreport.getSystemReport());
47+
crashreport.addCategory("Thread Dump").setDetail("Threads", stringbuilder);
48+
Bootstrap.realStdoutPrintln("Crash report:\n" + crashreport.getFriendlyReport());
49+
File file1 = new File(new File(self.getServerDirectory(), "shutdown-thread-dumps"), "thread-dump-" + Util.getFilenameFormattedDateTime() + "-server.txt");
50+
if (crashreport.saveToFile(file1)) {
51+
LOGGER.error("This thread dump has been saved to: {}", file1.getAbsolutePath());
52+
} else {
53+
LOGGER.error("We were unable to save this crash report to disk.");
54+
}
5455
}
5556

56-
CrashReport crashreport = new CrashReport("Server shutdown thread dump", error);
57-
this.fillSystemReport(crashreport.getSystemReport());
58-
CrashReportCategory crashreportcategory = crashreport.addCategory("Thread Dump");
59-
crashreportcategory.setDetail("Threads", stringbuilder);
60-
CrashReportCategory crashreportcategory1 = crashreport.addCategory("Performance stats");
61-
crashreportcategory1.setDetail("Random tick rate", () -> this.getWorldData().getGameRules().getRule(GameRules.RULE_RANDOMTICKING).toString());
62-
crashreportcategory1.setDetail("Level stats", () -> Streams.stream(this.getAllLevels()).map((level) -> level.dimension() + ": " + level.getWatchdogStats()).collect(Collectors.joining(",\n")));
63-
Bootstrap.realStdoutPrintln("Crash report:\n" + crashreport.getFriendlyReport());
64-
File file1 = new File(new File(this.getServerDirectory(), "shutdown-thread-dumps"), "thread-dump-" + Util.getFilenameFormattedDateTime() + "-server.txt");
65-
if (crashreport.saveToFile(file1)) {
66-
railwaysTweaks$LOGGER.error("This crash report has been saved to: {}", file1.getAbsolutePath());
67-
} else {
68-
railwaysTweaks$LOGGER.error("We were unable to save this crash report to disk.");
57+
if ("true".equalsIgnoreCase(System.getProperty("railwaystweaks.shutdown.forcefully"))) {
58+
RailwaysTweaks.LOGGER.info("Force shutting down server, threads will be stuck");
59+
System.exit(0);
6960
}
7061
}
7162
}

0 commit comments

Comments
 (0)