package net.shadowfacts.phycon.block.terminal import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory import net.minecraft.block.BlockState import net.minecraft.entity.player.PlayerEntity import net.minecraft.entity.player.PlayerInventory import net.minecraft.network.PacketByteBuf import net.minecraft.screen.ScreenHandler import net.minecraft.server.network.ServerPlayerEntity import net.minecraft.text.TranslatableText import net.minecraft.util.math.BlockPos import net.shadowfacts.phycon.init.PhyBlockEntities import net.shadowfacts.phycon.packet.RequestInventoryPacket /** * @author shadowfacts */ class TerminalBlockEntity(pos: BlockPos, state: BlockState): AbstractTerminalBlockEntity(PhyBlockEntities.TERMINAL, pos, state) { override fun onActivate(player: PlayerEntity) { if (!world!!.isClient) { updateAndSync() inventoryCache.clear() sendPacket(RequestInventoryPacket(ipAddress)) val factory = object: ExtendedScreenHandlerFactory { override fun createMenu(syncId: Int, playerInv: PlayerInventory, player: PlayerEntity): ScreenHandler { return TerminalScreenHandler(syncId, playerInv, this@TerminalBlockEntity) } override fun getDisplayName() = TranslatableText("block.phycon.terminal") override fun writeScreenOpeningData(player: ServerPlayerEntity, buf: PacketByteBuf) { buf.writeBlockPos(this@TerminalBlockEntity.pos) } } player.openHandledScreen(factory) } } }