2021-02-21 17:00:32 +00:00
|
|
|
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
|
2021-03-24 21:28:03 +00:00
|
|
|
import net.shadowfacts.phycon.PhysicalConnectivityClient
|
2021-03-27 14:22:18 +00:00
|
|
|
import net.shadowfacts.phycon.block.terminal.AbstractTerminalBlockEntity
|
|
|
|
import net.shadowfacts.phycon.block.terminal.AbstractTerminalScreenHandler
|
2021-03-24 21:28:03 +00:00
|
|
|
import net.shadowfacts.phycon.util.TerminalSettings
|
2021-02-21 17:00:32 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @author shadowfacts
|
|
|
|
*/
|
|
|
|
object C2STerminalUpdateDisplayedItems: ServerReceiver {
|
|
|
|
|
|
|
|
override val CHANNEL = Identifier(PhysicalConnectivity.MODID, "terminal_update_displayed")
|
|
|
|
|
2021-03-27 14:22:18 +00:00
|
|
|
operator fun invoke(terminal: AbstractTerminalBlockEntity, query: String, scrollPosition: Float): Packet<*> {
|
2021-02-21 17:00:32 +00:00
|
|
|
val buf = PacketByteBufs.create()
|
|
|
|
|
|
|
|
buf.writeIdentifier(terminal.world!!.registryKey.value)
|
|
|
|
buf.writeBlockPos(terminal.pos)
|
|
|
|
|
|
|
|
buf.writeString(query)
|
2021-12-22 23:59:51 +00:00
|
|
|
buf.writeNbt(PhysicalConnectivityClient.terminalSettings.toTag())
|
2021-03-07 19:02:39 +00:00
|
|
|
buf.writeFloat(scrollPosition)
|
2021-02-21 17:00:32 +00:00
|
|
|
|
|
|
|
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()
|
2021-03-24 21:28:03 +00:00
|
|
|
val settings = TerminalSettings()
|
2021-12-22 23:59:51 +00:00
|
|
|
settings.fromTag(buf.readNbt()!!)
|
2021-03-07 19:02:39 +00:00
|
|
|
val scrollPosition = buf.readFloat()
|
2021-02-21 17:00:32 +00:00
|
|
|
|
|
|
|
server.execute {
|
|
|
|
if (player.world.registryKey.value != dimID) return@execute
|
|
|
|
val screenHandler = player.currentScreenHandler
|
2021-03-27 14:22:18 +00:00
|
|
|
if (screenHandler !is AbstractTerminalScreenHandler<*>) return@execute
|
2021-02-21 17:00:32 +00:00
|
|
|
if (screenHandler.terminal.pos != pos) return@execute
|
2021-03-24 21:28:03 +00:00
|
|
|
screenHandler.sendUpdatedItemsToClient(player, query, settings, scrollPosition)
|
2021-02-21 17:00:32 +00:00
|
|
|
}
|
|
|
|
}
|
2021-02-28 18:48:39 +00:00
|
|
|
}
|