Skip to content

Commit 57abcfe

Browse files
committed
Make Schematicannon fire rate depend on the avg MSPT
1 parent f113218 commit 57abcfe

File tree

6 files changed

+90
-2
lines changed

6 files changed

+90
-2
lines changed

Diff for: gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
org.gradle.jvmargs=-Xmx2G
33

44
# Mod Properties
5-
mod_version = 0.0.37
5+
mod_version = 0.0.38
66
maven_group = dev.ithundxr
77
archives_base_name = RailwaysTweaks
88

Diff for: src/main/java/dev/ithundxr/railwaystweaks/RailwaysTweaks.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.ithundxr.railwaystweaks;
22

33
import dev.ithundxr.railwaystweaks.compat.BanModCompat;
4+
import dev.ithundxr.railwaystweaks.utils.MSPTTracker;
45
import net.fabricmc.api.EnvType;
56
import net.fabricmc.api.ModInitializer;
67
import net.fabricmc.loader.api.FabricLoader;
@@ -12,7 +13,9 @@ public class RailwaysTweaks implements ModInitializer {
1213
public static final String MODID = "railwaystweaks";
1314
public static final String NAME = "RailwaysTweaks";
1415
public static final Logger LOGGER = LoggerFactory.getLogger(NAME);
15-
16+
17+
public static final MSPTTracker MSPT_TRACKER = new MSPTTracker(200);
18+
1619
@Override
1720
public void onInitialize() {
1821
LOGGER.info("Railways Tweaks is loading...");

Diff for: src/main/java/dev/ithundxr/railwaystweaks/commands/RailwaysTweaksCommands.java

+12
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.mojang.brigadier.builder.ArgumentBuilder;
44
import com.simibubi.create.Create;
55
import com.simibubi.create.content.trains.entity.CarriageContraptionEntity;
6+
import dev.ithundxr.railwaystweaks.RailwaysTweaks;
67
import dev.ithundxr.railwaystweaks.mixin.compat.tconstruct.SimpleChannelAccessor;
78
import me.pepperbell.simplenetworking.C2SPacket;
89
import me.pepperbell.simplenetworking.S2CPacket;
@@ -29,6 +30,12 @@ public static void init() {
2930
dispatcher.register(literal("railwaystweaks")
3031
.then($dump_trains()));
3132
});
33+
34+
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> {
35+
dispatcher.register(literal("avgmspt")
36+
.requires(cs -> cs.hasPermission(2))
37+
.executes(ctx -> avgMSPT(ctx.getSource())));
38+
});
3239
}
3340

3441
private static ArgumentBuilder<CommandSourceStack, ?> $dump_hephaestus_packets() {
@@ -97,4 +104,9 @@ private static int dumpCreateTrains(CommandSourceStack source) {
97104

98105
return 0;
99106
}
107+
108+
private static int avgMSPT(CommandSourceStack source) {
109+
source.sendSuccess(() -> Component.literal("Average MSPT (10s): " + String.format("%.1f", RailwaysTweaks.MSPT_TRACKER.getAverageMSPT())), true);
110+
return 0;
111+
}
100112
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package dev.ithundxr.railwaystweaks.mixin.compat.create;
2+
3+
import com.simibubi.create.content.schematics.cannon.SchematicannonBlockEntity;
4+
import dev.ithundxr.railwaystweaks.RailwaysTweaks;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.Overwrite;
7+
import org.spongepowered.asm.mixin.Shadow;
8+
import org.spongepowered.asm.mixin.injection.At;
9+
import org.spongepowered.asm.mixin.injection.Inject;
10+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
11+
12+
@Mixin(SchematicannonBlockEntity.class)
13+
public class SchematicannonBlockEntityMixin {
14+
15+
@Shadow private int printerCooldown;
16+
17+
@Inject(method = "tickPrinter", at = @At("TAIL"), remap = false)
18+
private void railwaytweaks$tickPrinter(CallbackInfo ci) {
19+
double mspt = RailwaysTweaks.MSPT_TRACKER.getAverageMSPT();
20+
21+
if (mspt > 55)
22+
this.printerCooldown = 60;
23+
else if (mspt > 45)
24+
this.printerCooldown = 20;
25+
else
26+
this.printerCooldown = 10;
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package dev.ithundxr.railwaystweaks.utils;
2+
3+
import dev.ithundxr.railwaystweaks.RailwaysTweaks;
4+
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
5+
import net.minecraft.server.MinecraftServer;
6+
import net.minecraft.server.level.ServerLevel;
7+
8+
public class MSPTTracker {
9+
private final int averageIntervalTicks;
10+
private long lastTickTime = System.nanoTime();
11+
private double totalMSPT = 0;
12+
private double averageMSPT = 30;
13+
private int tickCount = 0;
14+
15+
public MSPTTracker(int averageIntervalTicks) {
16+
this.averageIntervalTicks = averageIntervalTicks;
17+
ServerTickEvents.END_SERVER_TICK.register(this::endServerTick);
18+
}
19+
20+
private void endServerTick(MinecraftServer server) {
21+
long now = System.nanoTime();
22+
long tickDuration = now - lastTickTime;
23+
double mspt = tickDuration / 1_000_000.0;
24+
lastTickTime = now;
25+
26+
// Accumulate the MSPT and increment the tick counter
27+
totalMSPT += mspt;
28+
tickCount++;
29+
30+
// Calculate the average MSPT every AVERAGE_INTERVAL_TICKS
31+
if (tickCount >= averageIntervalTicks) {
32+
averageMSPT = totalMSPT / tickCount;
33+
RailwaysTweaks.LOGGER.info("MSPT: " + averageMSPT);
34+
35+
// Reset for the next interval
36+
totalMSPT = 0;
37+
tickCount = 0;
38+
}
39+
}
40+
41+
public double getAverageMSPT() {
42+
return averageMSPT;
43+
}
44+
}

Diff for: src/main/resources/railwaystweaks.mixins.json

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"compat.appleskin.SyncHandlerMixin",
1414
"compat.create.Carriage$DimensionalCarriageEntityMixin",
1515
"compat.create.CarriageAccessor",
16+
"compat.create.SchematicannonBlockEntityMixin",
1617
"compat.dcintegration.DiscordEventListenerMixin",
1718
"compat.enchancement.SlideComponentMixin",
1819
"compat.tconstruct.SimpleChannelAccessor"

0 commit comments

Comments
 (0)