2021-02-21 17:00:32 +00:00
|
|
|
package net.shadowfacts.phycon.networking
|
|
|
|
|
|
|
|
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs
|
|
|
|
import net.fabricmc.fabric.api.networking.v1.PacketSender
|
|
|
|
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking
|
|
|
|
import net.minecraft.client.MinecraftClient
|
|
|
|
import net.minecraft.client.network.ClientPlayNetworkHandler
|
|
|
|
import net.minecraft.network.Packet
|
|
|
|
import net.minecraft.network.PacketByteBuf
|
2021-02-28 18:48:39 +00:00
|
|
|
import net.shadowfacts.phycon.block.terminal.TerminalBlockEntity
|
|
|
|
import net.shadowfacts.phycon.block.terminal.TerminalScreenHandler
|
2021-02-21 17:00:32 +00:00
|
|
|
import net.shadowfacts.phycon.util.SortMode
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author shadowfacts
|
|
|
|
*/
|
|
|
|
object S2CTerminalUpdateDisplayedItems: ClientReceiver {
|
|
|
|
override val CHANNEL = C2STerminalUpdateDisplayedItems.CHANNEL
|
|
|
|
|
|
|
|
operator fun invoke(terminal: TerminalBlockEntity, entries: List<TerminalScreenHandler.Entry>, query: String, sortMode: SortMode): Packet<*> {
|
|
|
|
val buf = PacketByteBufs.create()
|
|
|
|
|
|
|
|
buf.writeIdentifier(terminal.world!!.registryKey.value)
|
|
|
|
buf.writeBlockPos(terminal.pos)
|
|
|
|
|
|
|
|
buf.writeVarInt(entries.size)
|
|
|
|
for (e in entries) {
|
|
|
|
buf.writeItemStack(e.stack)
|
|
|
|
buf.writeVarInt(e.amount)
|
|
|
|
}
|
|
|
|
|
|
|
|
buf.writeString(query)
|
|
|
|
buf.writeVarInt(sortMode.ordinal)
|
|
|
|
|
|
|
|
return ServerPlayNetworking.createS2CPacket(CHANNEL, buf)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun receive(client: MinecraftClient, handler: ClientPlayNetworkHandler, buf: PacketByteBuf, responseSender: PacketSender) {
|
|
|
|
val dimID = buf.readIdentifier()
|
|
|
|
val pos = buf.readBlockPos()
|
|
|
|
val entryCount = buf.readVarInt()
|
|
|
|
val entries = ArrayList<TerminalScreenHandler.Entry>(entryCount)
|
|
|
|
for (i in 0 until entryCount) {
|
|
|
|
entries.add(TerminalScreenHandler.Entry(buf.readItemStack(), buf.readVarInt()))
|
|
|
|
}
|
|
|
|
val query = buf.readString()
|
|
|
|
val sortMode = SortMode.values()[buf.readVarInt()]
|
|
|
|
|
|
|
|
client.execute {
|
|
|
|
if (client.player!!.world.registryKey.value != dimID) return@execute
|
|
|
|
val screenHandler = client.player!!.currentScreenHandler
|
|
|
|
if (screenHandler !is TerminalScreenHandler) return@execute
|
|
|
|
if (screenHandler.terminal.pos != pos) return@execute
|
|
|
|
screenHandler.receivedUpdatedItemsFromServer(entries, query, sortMode)
|
|
|
|
}
|
|
|
|
}
|
2021-02-28 18:48:39 +00:00
|
|
|
}
|