package net.shadowfacts.phycon.item import net.minecraft.block.Blocks import net.minecraft.entity.ItemEntity import net.minecraft.item.Item import net.minecraft.item.ItemStack import net.minecraft.item.ItemUsageContext import net.minecraft.sound.SoundCategory import net.minecraft.sound.SoundEvents import net.minecraft.util.ActionResult import net.minecraft.util.Identifier import net.shadowfacts.phycon.PhysicalConnectivity import net.shadowfacts.phycon.block.DeviceBlock import net.shadowfacts.phycon.init.PhyBlocks /** * @author shadowfacts */ class ScrewdriverItem: Item(Settings()) { companion object { val ID = Identifier(PhysicalConnectivity.MODID, "screwdriver") } override fun useOnBlock(context: ItemUsageContext): ActionResult { val state = context.world.getBlockState(context.blockPos) val block = state.block if (block is DeviceBlock<*>) { if (!context.world.isClient) { val be = block.getBlockEntity(context.world, context.blockPos)!! val stack = ItemStack(block) val beTag = stack.getOrCreateSubTag("BlockEntityTag") be.toTag(beTag) // remove x, y, z entries for stacking purposes beTag.remove("x") beTag.remove("y") beTag.remove("z") if (block === PhyBlocks.TERMINAL) { // remove the terminal's internal buffer since it drops its items beTag.remove("InternalBuffer") } val entity = ItemEntity(context.world, context.blockPos.x.toDouble(), context.blockPos.y.toDouble(), context.blockPos.z.toDouble(), stack) context.world.spawnEntity(entity) context.world.setBlockState(context.blockPos, Blocks.AIR.defaultState, 3, 512) } context.world.playSound(context.player, context.blockPos, SoundEvents.BLOCK_METAL_PLACE, SoundCategory.BLOCKS, 0.8f, 0.65f) return ActionResult.SUCCESS } else { return ActionResult.PASS } } }