48 lines
1.8 KiB
Kotlin
48 lines
1.8 KiB
Kotlin
|
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.item.ItemStack
|
||
|
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.minecraft.util.registry.Registry
|
||
|
import net.minecraft.util.registry.RegistryKey
|
||
|
import net.shadowfacts.phycon.PhysicalConnectivity
|
||
|
import net.shadowfacts.phycon.network.block.terminal.TerminalBlockEntity
|
||
|
|
||
|
/**
|
||
|
* @author shadowfacts
|
||
|
*/
|
||
|
object C2STerminalRequestItem: ServerReceiver {
|
||
|
|
||
|
override val CHANNEL = Identifier(PhysicalConnectivity.MODID, "terminal_request_item")
|
||
|
|
||
|
operator fun invoke(terminal: TerminalBlockEntity, stack: ItemStack, amount: Int): Packet<*> {
|
||
|
val buf = PacketByteBufs.create()
|
||
|
buf.writeIdentifier(terminal.world!!.registryKey.value)
|
||
|
buf.writeBlockPos(terminal.pos)
|
||
|
buf.writeItemStack(stack)
|
||
|
buf.writeVarInt(amount)
|
||
|
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 stack = buf.readItemStack()
|
||
|
val amount = buf.readVarInt()
|
||
|
|
||
|
server.execute {
|
||
|
val key = RegistryKey.of(Registry.DIMENSION, dimID)
|
||
|
val world = server.getWorld(key) ?: return@execute
|
||
|
val terminal = world.getBlockEntity(pos) as? TerminalBlockEntity ?: return@execute
|
||
|
terminal.requestItem(stack, amount)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|