package net.shadowfacts.phycon.networking import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking import net.fabricmc.fabric.api.networking.v1.PacketByteBufs import net.fabricmc.fabric.api.networking.v1.PacketSender import net.minecraft.network.Packet import net.minecraft.network.PacketByteBuf import net.minecraft.server.MinecraftServer import net.minecraft.server.network.ServerPlayNetworkHandler import net.minecraft.server.network.ServerPlayerEntity import net.minecraft.util.Identifier import net.shadowfacts.phycon.PhysicalConnectivity import net.shadowfacts.phycon.PhysicalConnectivityClient import net.shadowfacts.phycon.block.terminal.TerminalBlockEntity import net.shadowfacts.phycon.block.terminal.TerminalScreenHandler import net.shadowfacts.phycon.util.SortMode import net.shadowfacts.phycon.util.TerminalSettings /** * @author shadowfacts */ object C2STerminalUpdateDisplayedItems: ServerReceiver { override val CHANNEL = Identifier(PhysicalConnectivity.MODID, "terminal_update_displayed") operator fun invoke(terminal: TerminalBlockEntity, query: String, scrollPosition: Float): Packet<*> { val buf = PacketByteBufs.create() buf.writeIdentifier(terminal.world!!.registryKey.value) buf.writeBlockPos(terminal.pos) buf.writeString(query) buf.writeCompoundTag(PhysicalConnectivityClient.terminalSettings.toTag()) buf.writeFloat(scrollPosition) return ClientPlayNetworking.createC2SPacket(CHANNEL, buf) } override fun receive(server: MinecraftServer, player: ServerPlayerEntity, handler: ServerPlayNetworkHandler, buf: PacketByteBuf, responseSender: PacketSender) { val dimID = buf.readIdentifier() val pos = buf.readBlockPos() val query = buf.readString() val settings = TerminalSettings() settings.fromTag(buf.readCompoundTag()!!) val scrollPosition = buf.readFloat() server.execute { if (player.world.registryKey.value != dimID) return@execute val screenHandler = player.currentScreenHandler if (screenHandler !is TerminalScreenHandler) return@execute if (screenHandler.terminal.pos != pos) return@execute screenHandler.sendUpdatedItemsToClient(player, query, settings, scrollPosition) } } }