Skip to content

Commit c4c579c

Browse files
committed
feat: printTpsInfoWhenCantKeepUp
1 parent 861931c commit c4c579c

File tree

3 files changed

+65
-21
lines changed

3 files changed

+65
-21
lines changed

src/main/java/io/github/optijava/opt_carpet_addition/OptCarpetSettings.java

+7
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
//#if MC >= 11900
44
//$$ import carpet.api.settings.RuleCategory;
55
//#else
6+
67
import carpet.settings.RuleCategory;
78
//#endif
89
import carpet.settings.Rule;
@@ -230,4 +231,10 @@ public class OptCarpetSettings {
230231
options = {"true", "false", "ops"}
231232
)
232233
public static String commandLoggerBroadcastToPlayer = FALSE;
234+
235+
@Rule(
236+
desc = "Append tps information in `cant keep up!` logs.",
237+
category = RuleCategory.FEATURE
238+
)
239+
public static boolean printTpsInfoWhenCantKeepUp = false;
233240
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package io.github.optijava.opt_carpet_addition.mixins.rule.printTpsInfoWhenCantKeepUp;
2+
3+
import carpet.CarpetServer;
4+
import io.github.optijava.opt_carpet_addition.OptCarpetAddition;
5+
import io.github.optijava.opt_carpet_addition.OptCarpetSettings;
6+
import net.minecraft.server.MinecraftServer;
7+
//#if MC >= 12004
8+
//$$ import net.minecraft.server.ServerTickManager;
9+
//$$ import net.minecraft.util.TimeHelper;
10+
//#else
11+
import carpet.helpers.TickSpeed;
12+
//#endif
13+
import net.minecraft.util.math.MathHelper;
14+
import org.spongepowered.asm.mixin.Mixin;
15+
import org.spongepowered.asm.mixin.injection.At;
16+
import org.spongepowered.asm.mixin.injection.Inject;
17+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
18+
19+
@Mixin(MinecraftServer.class)
20+
public class MinecraftServer_Mixin {
21+
22+
@Inject(
23+
method = "runServer",
24+
at = @At(value = "INVOKE", target = "Lorg/apache/logging/log4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", shift = At.Shift.AFTER),
25+
remap = false
26+
)
27+
private void injectRunServer(CallbackInfo ci) {
28+
// reference: carpet logger `tps`
29+
// carpet.logging.HUDController#126 `send_tps_display(MinecraftServer server)`
30+
31+
if (OptCarpetSettings.printTpsInfoWhenCantKeepUp) {
32+
//#if MC >= 12004
33+
//$$ double mspt = (double)CarpetServer.minecraft_server.getAverageNanosPerTick() / (double) TimeHelper.MILLI_IN_NANOS;
34+
//$$ ServerTickManager trm = CarpetServer.minecraft_server.getTickManager();
35+
//$$ double tps = 1000.0 / Math.max(trm.isSprinting() ? 0.0 : (double)trm.getMillisPerTick(), mspt);
36+
//$$ if (trm.isFrozen()) {
37+
//$$ tps = 0.0;
38+
//$$ }
39+
//#else
40+
double mspt = MathHelper.average(CarpetServer.minecraft_server.lastTickLengths) * 1.0E-6;
41+
double tps = 1000.0 / Math.max(TickSpeed.time_warp_start_time != 0L ? 0.0 : (double) TickSpeed.mspt, mspt);
42+
if (TickSpeed.isPaused()) {
43+
tps = 0.0;
44+
}
45+
//#endif
46+
47+
OptCarpetAddition.LOGGER.warn("Server TPS: %s, MSPT: %s".formatted(tps, mspt));
48+
}
49+
}
50+
}

src/main/resources/opt-carpet-addition.mixins.json

+8-21
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
"compatibilityLevel": "JAVA_16",
99
//#endif
1010
"mixins": [
11-
//#if MC < 11900
11+
"logger.HUDController_Mixin",
12+
"logger.blockUpdate.LoggerRegistry_Mixin",
13+
"logger.blockUpdate.World_Mixin",
1214
"logger.updateSuppression.World_Mixin",
1315
"rule.async.MinecraftServer_Mixin",
1416
"rule.async.optimizePlayerConnect.EntityTrackerEntry_Mixin",
@@ -18,37 +20,22 @@
1820
"rule.async.optimizePlayerConnect.World_Mixin",
1921
"rule.async.optimizeTeleport.ServerPlayerEntity_Mixin",
2022
"rule.async.optimizeTeleport.ServerPlayNetworkHandler_Mixin",
21-
"rule.disabledUpdateSuppressionErrorStackTrace.ThreadExecutor_Mixin",
22-
"rule.dropperCrashFix.DispenserBlock_Mixin",
23-
"rule.dropperCrashFix.DropperBlock_Mixin",
24-
//#if MC >= 11800
25-
//$$ "rule.disabledUpdateSuppressionErrorStackTrace.NetworkThreadUtils_Mixin",
26-
//#endif
27-
//#endif
28-
"logger.HUDController_Mixin",
2923
"rule.cceSuppressionCrashFix.MinecraftServer_Mixin",
3024
"rule.cceSuppressionCrashFix.ShulkerBoxBlock_Mixin",
3125
"rule.commandLogger.CommandManager_Mixin",
26+
"rule.customItemDiscardTime.ItemEntity_Mixin",
3227
"rule.disabledEnderManPickupGoal.EnderManEntity_Mixin",
3328
"rule.disabledEnderManPlaceBlockGoal.EndermanEntity_Mixin",
3429
"rule.disabledEntityTick.ServerWorld_Mixin",
3530
"rule.disabledLayEggs.ChickenEntity_Mixin",
3631
"rule.disabledNetherPortalSpawn.NetherPortalBlock_Mixin",
32+
"rule.disabledUpdateSuppressionErrorStackTrace.ThreadExecutor_Mixin",
33+
"rule.dropperCrashFix.DispenserBlock_Mixin",
34+
"rule.dropperCrashFix.DropperBlock_Mixin",
3735
"rule.optimizeFakePlayerSpawn.EntityPlayerMPFake_Mixin",
3836
"rule.optimizeFakePlayerSpawn.PlayerCommand_Mixin",
37+
"rule.printTpsInfoWhenCantKeepUp.MinecraftServer_Mixin",
3938
"rule.removeAllCurseOfBindingArmorWhenPlayerDeadInWall.ServerPlayerEntity_Mixin",
40-
//#if MC >= 12000
41-
//$$ "rule.disallowRedstoneWireConnectsToOpenTrapdoor.RedstoneWireBlock_Mixin",
42-
//#endif
43-
//#if MC >= 11900
44-
//$$ "logger.blockUpdate.SimpleNeighborUpdater_Mixin",
45-
//$$ "logger.blockUpdate.ChainRestrictedNeighborUpdater_Mixin",
46-
//#endif
47-
//#if MC <= 11900
48-
"logger.blockUpdate.World_Mixin",
49-
//#endif
50-
"rule.customItemDiscardTime.ItemEntity_Mixin",
51-
"logger.blockUpdate.LoggerRegistry_Mixin",
5239
"rule.removeBats.BatEntity_Mixin"
5340
],
5441
"client": [

0 commit comments

Comments
 (0)