-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
20 changed files
with
182 additions
and
156 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package net.cavoj.servertick; | ||
|
||
import io.netty.buffer.Unpooled; | ||
import net.fabricmc.fabric.api.network.ClientSidePacketRegistry; | ||
import net.minecraft.network.PacketByteBuf; | ||
import net.minecraft.util.Identifier; | ||
|
||
public class NetworkC2S { | ||
public static final Identifier PACKET_ENABLED = new Identifier("servertick", "enabled"); | ||
|
||
public static void sendToggle(boolean state) { | ||
PacketByteBuf data = new PacketByteBuf(Unpooled.buffer()); | ||
data.writeBoolean(state); | ||
ClientSidePacketRegistry.INSTANCE.sendToServer(PACKET_ENABLED, data); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package net.cavoj.servertick; | ||
|
||
import io.netty.buffer.Unpooled; | ||
import net.cavoj.servertick.extensions.SerializableMetricsData; | ||
import net.fabricmc.fabric.api.network.ServerSidePacketRegistry; | ||
import net.minecraft.entity.player.PlayerEntity; | ||
import net.minecraft.network.PacketByteBuf; | ||
import net.minecraft.util.Identifier; | ||
|
||
public class NetworkS2C { | ||
public static final Identifier PACKET_FULL_METRICS = new Identifier("servertick", "metrics/full"); | ||
public static final Identifier PACKET_LAST_SAMPLE = new Identifier("servertick", "metrics/sample"); | ||
|
||
public static void sendFullMetrics(SerializableMetricsData metrics, PlayerEntity player) { | ||
PacketByteBuf data = new PacketByteBuf(Unpooled.buffer()); | ||
metrics.serialize(data); | ||
ServerSidePacketRegistry.INSTANCE.sendToPlayer(player, PACKET_FULL_METRICS, data); | ||
} | ||
|
||
public static void sendLastSample(long sample, PlayerEntity player) { | ||
PacketByteBuf data = new PacketByteBuf(Unpooled.buffer()); | ||
data.writeLong(sample); | ||
ServerSidePacketRegistry.INSTANCE.sendToPlayer(player, PACKET_LAST_SAMPLE, data); | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
package net.cavoj.servertick; | ||
|
||
import net.cavoj.servertick.extensions.MinecraftServerWithST; | ||
import net.fabricmc.api.ModInitializer; | ||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; | ||
import net.fabricmc.fabric.api.network.PacketContext; | ||
import net.fabricmc.fabric.api.network.ServerSidePacketRegistry; | ||
import net.minecraft.entity.player.PlayerEntity; | ||
import net.minecraft.network.PacketByteBuf; | ||
|
||
public class ServerTick implements ModInitializer { | ||
@Override | ||
public void onInitialize() { | ||
ServerSidePacketRegistry.INSTANCE.register(NetworkC2S.PACKET_ENABLED, this::processTogglePacket); | ||
ServerTickEvents.END_SERVER_TICK.register((minecraftServer -> { | ||
((MinecraftServerWithST)minecraftServer).tickST(); | ||
})); | ||
} | ||
|
||
private boolean checkPlayerPrivilege(PlayerEntity player) { | ||
return player.hasPermissionLevel(4) || !player.getServer().isDedicated(); | ||
} | ||
|
||
private void processTogglePacket(PacketContext ctx, PacketByteBuf data) { | ||
boolean state = data.readBoolean(); | ||
ctx.getTaskQueue().execute(() -> { | ||
PlayerEntity player = ctx.getPlayer(); | ||
MinecraftServerWithST server = (MinecraftServerWithST)ctx.getPlayer().getServer(); | ||
assert server != null; | ||
if (state) { | ||
if (checkPlayerPrivilege(player)) { | ||
server.registerSTListener(player); | ||
} | ||
} else { | ||
server.removeSTListener(player); | ||
} | ||
}); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
5 changes: 5 additions & 0 deletions
5
src/main/java/net/cavoj/servertick/extensions/LastSampleMetricsData.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package net.cavoj.servertick.extensions; | ||
|
||
public interface LastSampleMetricsData { | ||
long getLastSample(); | ||
} |
9 changes: 9 additions & 0 deletions
9
src/main/java/net/cavoj/servertick/extensions/MinecraftServerWithST.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package net.cavoj.servertick.extensions; | ||
|
||
import net.minecraft.entity.player.PlayerEntity; | ||
|
||
public interface MinecraftServerWithST { | ||
void registerSTListener(PlayerEntity player); | ||
void removeSTListener(PlayerEntity player); | ||
void tickST(); | ||
} |
2 changes: 1 addition & 1 deletion
2
...j/servertick/SerializableMetricsData.java → ...k/extensions/SerializableMetricsData.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
39 changes: 39 additions & 0 deletions
39
src/main/java/net/cavoj/servertick/mixin/MinecraftServerMixin.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
package net.cavoj.servertick.mixin; | ||
|
||
import net.cavoj.servertick.NetworkS2C; | ||
import net.cavoj.servertick.extensions.LastSampleMetricsData; | ||
import net.cavoj.servertick.extensions.MinecraftServerWithST; | ||
import net.cavoj.servertick.extensions.SerializableMetricsData; | ||
import net.minecraft.entity.player.PlayerEntity; | ||
import net.minecraft.server.MinecraftServer; | ||
import net.minecraft.util.MetricsData; | ||
import org.spongepowered.asm.mixin.Final; | ||
import org.spongepowered.asm.mixin.Mixin; | ||
import org.spongepowered.asm.mixin.Shadow; | ||
|
||
import java.util.HashSet; | ||
|
||
@Mixin(MinecraftServer.class) | ||
public abstract class MinecraftServerMixin implements MinecraftServerWithST { | ||
@Shadow @Final private MetricsData metricsData; | ||
private final HashSet<PlayerEntity> listeners = new HashSet<>(); | ||
|
||
@Override | ||
public void registerSTListener(PlayerEntity player) { | ||
this.listeners.add(player); | ||
NetworkS2C.sendFullMetrics((SerializableMetricsData) this.metricsData, player); | ||
} | ||
|
||
@Override | ||
public void removeSTListener(PlayerEntity player) { | ||
this.listeners.remove(player); | ||
} | ||
|
||
@Override | ||
public void tickST() { | ||
long sample = ((LastSampleMetricsData)this.metricsData).getLastSample(); | ||
for (PlayerEntity player : this.listeners) { | ||
NetworkS2C.sendLastSample(sample, player); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.