--- a/net/minecraft/server/ServerTickRateManager.java
+++ b/net/minecraft/server/ServerTickRateManager.java
@@ -8,6 +8,7 @@
 import net.minecraft.world.TickRateManager;
 
 public class ServerTickRateManager extends TickRateManager {
+
     private long remainingSprintTicks = 0L;
     private long sprintTickStartTime = 0L;
     private long sprintTimeSpend = 0L;
@@ -58,8 +59,14 @@
     }
 
     public boolean stopSprinting() {
+        // CraftBukkit start, add sendLog parameter
+        return this.stopSprinting(true);
+    }
+
+    public boolean stopSprinting(boolean sendLog) {
+        // CraftBukkit end
         if (this.remainingSprintTicks > 0L) {
-            this.finishTickSprint();
+            this.finishTickSprint(sendLog); // CraftBukkit - add sendLog parameter
             return true;
         } else {
             return false;
@@ -67,23 +74,31 @@
     }
 
     public boolean requestGameToSprint(int ticks) {
-        boolean bl = this.remainingSprintTicks > 0L;
+        boolean flag = this.remainingSprintTicks > 0L;
+
         this.sprintTimeSpend = 0L;
-        this.scheduledCurrentSprintTicks = (long)ticks;
-        this.remainingSprintTicks = (long)ticks;
+        this.scheduledCurrentSprintTicks = (long) ticks;
+        this.remainingSprintTicks = (long) ticks;
         this.previousIsFrozen = this.isFrozen();
         this.setFrozen(false);
-        return bl;
+        return flag;
     }
 
-    private void finishTickSprint() {
-        long l = this.scheduledCurrentSprintTicks - this.remainingSprintTicks;
-        double d = Math.max(1.0, (double)this.sprintTimeSpend) / (double)TimeUtil.NANOSECONDS_PER_MILLISECOND;
-        int i = (int)((double)(TimeUtil.MILLISECONDS_PER_SECOND * l) / d);
-        String string = String.format("%.2f", l == 0L ? (double)this.millisecondsPerTick() : d / (double)l);
+    private void finishTickSprint(boolean sendLog) { // CraftBukkit - add sendLog parameter
+        long i = this.scheduledCurrentSprintTicks - this.remainingSprintTicks;
+        double d0 = Math.max(1.0D, (double) this.sprintTimeSpend) / (double) TimeUtil.NANOSECONDS_PER_MILLISECOND;
+        int j = (int) ((double) (TimeUtil.MILLISECONDS_PER_SECOND * i) / d0);
+        String s = String.format("%.2f", i == 0L ? (double) this.millisecondsPerTick() : d0 / (double) i);
+
         this.scheduledCurrentSprintTicks = 0L;
         this.sprintTimeSpend = 0L;
-        this.server.createCommandSourceStack().sendSuccess(() -> Component.translatable("commands.tick.sprint.report", i, string), true);
+        // CraftBukkit start - add sendLog parameter
+        if (sendLog) {
+            this.server.createCommandSourceStack().sendSuccess(() -> {
+                return Component.translatable("commands.tick.sprint.report", j, s);
+            }, true);
+        }
+        // CraftBukkit end
         this.remainingSprintTicks = 0L;
         this.setFrozen(this.previousIsFrozen);
         this.server.onTickRateChanged();
@@ -94,16 +109,16 @@
             return false;
         } else if (this.remainingSprintTicks > 0L) {
             this.sprintTickStartTime = System.nanoTime();
-            this.remainingSprintTicks--;
+            --this.remainingSprintTicks;
             return true;
         } else {
-            this.finishTickSprint();
+            this.finishTickSprint(true); // CraftBukkit - add sendLog parameter
             return false;
         }
     }
 
     public void endTickWork() {
-        this.sprintTimeSpend = this.sprintTimeSpend + (System.nanoTime() - this.sprintTickStartTime);
+        this.sprintTimeSpend += System.nanoTime() - this.sprintTickStartTime;
     }
 
     @Override
