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.AbstractTerminalBlockEntity import net.shadowfacts.phycon.block.terminal.AbstractTerminalScreenHandler import net.shadowfacts.phycon.util.TerminalSettings /** * @author shadowfacts */ object C2STerminalUpdateDisplayedItems: ServerReceiver { override val CHANNEL = Identifier(PhysicalConnectivity.MODID, "terminal_update_displayed") operator fun invoke(terminal: AbstractTerminalBlockEntity, query: String, scrollPosition: Float): Packet<*> { val buf = PacketByteBufs.create() buf.writeIdentifier(terminal.world!!.registryKey.value) buf.writeBlockPos(terminal.pos) buf.writeString(query) buf.writeNbt(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.readNbt()!!) val scrollPosition = buf.readFloat() server.execute { if (player.world.registryKey.value != dimID) return@execute val screenHandler = player.currentScreenHandler if (screenHandler !is AbstractTerminalScreenHandler<*>) return@execute if (screenHandler.terminal.pos != pos) return@execute screenHandler.sendUpdatedItemsToClient(player, query, settings, scrollPosition) } } }