From 0dfcc5396a60c8d4aaa21f93f3bba1e13682a45a Mon Sep 17 00:00:00 2001 From: anth64 Date: Thu, 30 Jul 2026 23:14:06 +0200 Subject: [PATCH] feat: add client-visualizer network endpoint for buffer geometry --- ClaimLink/ClaimLinkModSystem.cs | 1 + ClaimLink/ClaimLinkVisualizerNetwork.cs | 89 +++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 ClaimLink/ClaimLinkVisualizerNetwork.cs diff --git a/ClaimLink/ClaimLinkModSystem.cs b/ClaimLink/ClaimLinkModSystem.cs index e1f6539..aa1f5a2 100644 --- a/ClaimLink/ClaimLinkModSystem.cs +++ b/ClaimLink/ClaimLinkModSystem.cs @@ -35,6 +35,7 @@ public class ClaimLinkModSystem : ModSystem GroupCmdListener = new GroupCommandListener(); CommandHookModSystem.Register(GroupCmdListener); ClaimLinkChatCommand.Register(api); + ClaimLinkVisualizerNetwork.Start(api); api.Event.PlayerDisconnect += CommandListener.OnPlayerDisconnect; api.Event.PlayerDisconnect += GroupCommandListener.OnPlayerDisconnect; diff --git a/ClaimLink/ClaimLinkVisualizerNetwork.cs b/ClaimLink/ClaimLinkVisualizerNetwork.cs new file mode 100644 index 0000000..a553a48 --- /dev/null +++ b/ClaimLink/ClaimLinkVisualizerNetwork.cs @@ -0,0 +1,89 @@ +using System.Collections.Generic; +using ProtoBuf; +using Vintagestory.API.MathTools; +using Vintagestory.API.Server; + +namespace ClaimLink; + +[ProtoContract] +public class ClaimLinkBufferRequest { } + +[ProtoContract] +public class ClaimLinkBufferCuboidDto +{ + [ProtoMember(1)] + public int MinX; + + [ProtoMember(2)] + public int MinY; + + [ProtoMember(3)] + public int MinZ; + + [ProtoMember(4)] + public int MaxX; + + [ProtoMember(5)] + public int MaxY; + + [ProtoMember(6)] + public int MaxZ; +} + +[ProtoContract] +public class ClaimLinkBufferEntryDto +{ + [ProtoMember(1)] + public int GroupId; + + [ProtoMember(2)] + public List Cuboids = new(); +} + +[ProtoContract] +public class ClaimLinkBufferResponse +{ + [ProtoMember(1)] + public List Entries = new(); +} + +internal static class ClaimLinkVisualizerNetwork +{ + internal const string ChannelName = "claimlinkvisualizer"; + + internal static void Start(ICoreServerAPI api) + { + api.Network + .RegisterChannel(ChannelName) + .RegisterMessageType() + .RegisterMessageType() + .SetMessageHandler((fromPlayer, _) => + SendBuffers(api, fromPlayer) + ); + } + + private static void SendBuffers(ICoreServerAPI api, IServerPlayer toPlayer) + { + ClaimLinkBufferResponse response = new(); + + foreach (int groupId in ClaimLinkModSystem.Registry.All) + { + ClaimLinkBufferEntryDto entry = new() { GroupId = groupId }; + foreach (Cuboidi cuboid in ClaimLinkBuffer.GetBuffer(groupId)) + entry.Cuboids.Add( + new ClaimLinkBufferCuboidDto + { + MinX = cuboid.MinX, + MinY = cuboid.MinY, + MinZ = cuboid.MinZ, + MaxX = cuboid.MaxX, + MaxY = cuboid.MaxY, + MaxZ = cuboid.MaxZ, + } + ); + response.Entries.Add(entry); + } + + api.Network.GetChannel(ChannelName).SendPacket(response, toPlayer); + } +}