From 022b15b59b37c17694e3be0d0938b1dbdc206395 Mon Sep 17 00:00:00 2001 From: jurrejelle Date: Sat, 11 Jul 2026 13:14:59 +0200 Subject: [PATCH] Fix prospection data task --- .../common/commands/GTClientCommands.java | 2 - .../gtceu/common/commands/GTCommands.java | 43 ++--------- .../gtceu/common/network/GTNetwork.java | 2 + .../packets/SPacketStartProspectionShare.java | 74 +++++++++++++++++++ 4 files changed, 83 insertions(+), 38 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/network/packets/SPacketStartProspectionShare.java diff --git a/src/main/java/com/gregtechceu/gtceu/common/commands/GTClientCommands.java b/src/main/java/com/gregtechceu/gtceu/common/commands/GTClientCommands.java index 694fac7b462..7c317d545df 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/commands/GTClientCommands.java +++ b/src/main/java/com/gregtechceu/gtceu/common/commands/GTClientCommands.java @@ -5,8 +5,6 @@ import com.mojang.brigadier.CommandDispatcher; -import static net.minecraft.commands.Commands.*; - public class GTClientCommands { public static void register(CommandDispatcher dispatcher, CommandBuildContext buildContext) {} diff --git a/src/main/java/com/gregtechceu/gtceu/common/commands/GTCommands.java b/src/main/java/com/gregtechceu/gtceu/common/commands/GTCommands.java index dbf4d511217..13d3b8618ae 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/commands/GTCommands.java +++ b/src/main/java/com/gregtechceu/gtceu/common/commands/GTCommands.java @@ -12,12 +12,11 @@ import com.gregtechceu.gtceu.api.registry.GTRegistry; import com.gregtechceu.gtceu.common.commands.arguments.GTRegistryArgument; import com.gregtechceu.gtceu.common.network.GTNetwork; -import com.gregtechceu.gtceu.common.network.packets.SCPacketShareProspection; +import com.gregtechceu.gtceu.common.network.packets.SPacketStartProspectionShare; import com.gregtechceu.gtceu.data.loader.BedrockFluidLoader; import com.gregtechceu.gtceu.data.loader.BedrockOreLoader; import com.gregtechceu.gtceu.data.loader.GTOreLoader; import com.gregtechceu.gtceu.data.pack.GTDynamicDataPack; -import com.gregtechceu.gtceu.integration.map.ClientCacheManager; import net.minecraft.commands.*; import net.minecraft.commands.arguments.EntityArgument; @@ -30,7 +29,6 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.RandomSource; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.BulkSectionAccess; import net.minecraft.world.level.levelgen.structure.templatesystem.AlwaysTrueTest; @@ -163,10 +161,12 @@ public static void register(CommandDispatcher dispatcher, Co .then(literal("share_prospection_data") .then(argument("player", EntityArgument.player()) .executes(ctx -> { - Player player = EntityArgument.getPlayer(ctx, "player"); - Thread sendThread = new Thread(new GTCommands.ProspectingShareTask( - ctx.getSource().getPlayerOrException().getUUID(), player.getUUID())); - sendThread.start(); + // resolve both players server-side (uses the server player list), + // then ask the sender's client to read its cache and send the data + ServerPlayer sender = ctx.getSource().getPlayerOrException(); + ServerPlayer receiver = EntityArgument.getPlayer(ctx, "player"); + GTNetwork.sendToPlayer(sender, + new SPacketStartProspectionShare(receiver.getUUID())); return 1; })))); } @@ -346,33 +346,4 @@ private static int placeVein(CommandContext context, BlockPo return 1; } - - private static class ProspectingShareTask implements Runnable { - - private final List prospectionData; - private final UUID sender; - private final UUID receiver; - - public ProspectingShareTask(UUID sender, UUID receiver) { - prospectionData = ClientCacheManager.getProspectionShareData(); - this.sender = sender; - this.receiver = receiver; - } - - @Override - public void run() { - boolean first = true; - for (ClientCacheManager.ProspectionInfo info : prospectionData) { - GTNetwork.sendToServer(new SCPacketShareProspection(sender, receiver, info.cacheName, info.key, - info.isDimCache, info.dim, info.data, first)); - first = false; - - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - } - } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/network/GTNetwork.java b/src/main/java/com/gregtechceu/gtceu/common/network/GTNetwork.java index cd868784583..3ec32a23ea8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/network/GTNetwork.java +++ b/src/main/java/com/gregtechceu/gtceu/common/network/GTNetwork.java @@ -119,5 +119,7 @@ public static void init() { register(SPacketSendWorldID.class, SPacketSendWorldID::new, NetworkDirection.PLAY_TO_CLIENT); register(SPacketNotifyCapeChange.class, SPacketNotifyCapeChange::new, NetworkDirection.PLAY_TO_CLIENT); register(SCPacketShareProspection.class, SCPacketShareProspection::new, null); + register(SPacketStartProspectionShare.class, SPacketStartProspectionShare::new, + NetworkDirection.PLAY_TO_CLIENT); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/network/packets/SPacketStartProspectionShare.java b/src/main/java/com/gregtechceu/gtceu/common/network/packets/SPacketStartProspectionShare.java new file mode 100644 index 00000000000..d176da9509e --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/network/packets/SPacketStartProspectionShare.java @@ -0,0 +1,74 @@ +package com.gregtechceu.gtceu.common.network.packets; + +import com.gregtechceu.gtceu.common.network.GTNetwork; +import com.gregtechceu.gtceu.integration.map.ClientCacheManager; + +import net.minecraft.client.Minecraft; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.network.NetworkEvent; + +import lombok.AllArgsConstructor; + +import java.util.List; +import java.util.UUID; + +/** + * Sent from the server to the sender's client to kick off sharing their local prospection cache. + * + * The {@code /gtceu share_prospection_data} command is a server command. The prospection cache + * only exists on the client, so the server delegates the actual read + send back to the sender's + * client via this packet. + */ +@AllArgsConstructor +public class SPacketStartProspectionShare implements GTNetwork.INetPacket { + + private UUID receiver; + + @SuppressWarnings("unused") + public SPacketStartProspectionShare() {} + + public SPacketStartProspectionShare(FriendlyByteBuf buf) { + receiver = buf.readUUID(); + } + + @Override + public void encode(FriendlyByteBuf buf) { + buf.writeUUID(receiver); + } + + @Override + public void execute(NetworkEvent.Context context) { + UUID sender = Minecraft.getInstance().player.getUUID(); + Thread sendThread = new Thread(new ProspectingShareTask(sender, receiver)); + sendThread.start(); + } + + private static class ProspectingShareTask implements Runnable { + + private final List prospectionData; + private final UUID sender; + private final UUID receiver; + + public ProspectingShareTask(UUID sender, UUID receiver) { + prospectionData = ClientCacheManager.getProspectionShareData(); + this.sender = sender; + this.receiver = receiver; + } + + @Override + public void run() { + boolean first = true; + for (ClientCacheManager.ProspectionInfo info : prospectionData) { + GTNetwork.sendToServer(new SCPacketShareProspection(sender, receiver, info.cacheName, info.key, + info.isDimCache, info.dim, info.data, first)); + first = false; + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } + } +}