package net.shadowfacts.phycon.block.redstone_emitter import net.minecraft.entity.player.PlayerEntity import net.minecraft.entity.player.PlayerInventory import net.minecraft.item.ItemStack import net.minecraft.network.PacketByteBuf import net.minecraft.screen.ScreenHandler import net.minecraft.screen.slot.Slot import net.minecraft.screen.slot.SlotActionType import net.minecraft.util.Identifier import net.shadowfacts.phycon.PhysicalConnectivity import net.shadowfacts.phycon.init.PhyBlocks import net.shadowfacts.phycon.init.PhyScreens import net.shadowfacts.phycon.util.GhostSlot import net.shadowfacts.phycon.util.copyWithCount /** * @author shadowfacts */ class RedstoneEmitterScreenHandler( syncId: Int, playerInv: PlayerInventory, val emitter: RedstoneEmitterBlockEntity, ): ScreenHandler(PhyScreens.REDSTONE_EMITTER, syncId) { companion object { val ID = Identifier(PhysicalConnectivity.MODID, "redstone_emitter") } constructor(syncId: Int, playerInv: PlayerInventory, buf: PacketByteBuf): this( syncId, playerInv, PhyBlocks.REDSTONE_EMITTER.getBlockEntity(playerInv.player.world, buf.readBlockPos())!! ) init { // fake slot addSlot(GhostSlot(emitter, 31, 20)) // player inv for (y in 0 until 3) { for (x in 0 until 9) { addSlot(Slot(playerInv, x + y * 9 + 9, 8 + x * 18, 84 + y * 18)) } } // hotbar for (x in 0 until 9) { addSlot(Slot(playerInv, x, 8 + x * 18, 142)) } } override fun canUse(player: PlayerEntity): Boolean { return true } override fun onSlotClick(slotId: Int, clickData: Int, slotActionType: SlotActionType, player: PlayerEntity) { // fake slot if (slotId == 0) { if (cursorStack.isEmpty) { emitter.stackToMonitor = ItemStack.EMPTY } else { emitter.stackToMonitor = cursorStack.copyWithCount(1) } } super.onSlotClick(slotId, clickData, slotActionType, player) } override fun transferSlot(player: PlayerEntity, slotId: Int): ItemStack { val slot = slots[slotId] emitter.stackToMonitor = slot.stack.copyWithCount(1) return ItemStack.EMPTY } }