package space.autistic.radio.item import net.minecraft.component.DataComponentTypes import net.minecraft.component.type.NbtComponent import net.minecraft.entity.EntityType import net.minecraft.entity.decoration.AbstractDecorationEntity import net.minecraft.item.ItemFrameItem import net.minecraft.item.ItemUsageContext import net.minecraft.util.ActionResult import net.minecraft.world.event.GameEvent import space.autistic.radio.PirateRadioEntityTypes import space.autistic.radio.entity.DisposableTransmitterEntity class DisposableTransmitterItem( private val entityType: EntityType?, settings: Settings? ) : ItemFrameItem(entityType, settings) { override fun useOnBlock(context: ItemUsageContext): ActionResult { val blockPos = context.blockPos val direction = context.side val blockPos2 = blockPos.offset(direction) val playerEntity = context.player val itemStack = context.stack if (playerEntity != null && !this.canPlaceOn(playerEntity, direction, itemStack, blockPos2)) { return ActionResult.FAIL } else { val world = context.world val abstractDecorationEntity: AbstractDecorationEntity if (this.entityType === PirateRadioEntityTypes.DISPOSABLE_TRANSMITTER) { abstractDecorationEntity = DisposableTransmitterEntity(world, blockPos2, direction) } else { return ActionResult.success(world.isClient) } val nbtComponent = itemStack.getOrDefault(DataComponentTypes.ENTITY_DATA, NbtComponent.DEFAULT) if (!nbtComponent.isEmpty) { EntityType.loadFromEntityNbt(world, playerEntity, abstractDecorationEntity, nbtComponent) } if (abstractDecorationEntity.canStayAttached()) { if (!world.isClient) { abstractDecorationEntity.onPlace() world.emitGameEvent(playerEntity, GameEvent.ENTITY_PLACE, abstractDecorationEntity.pos) world.spawnEntity(abstractDecorationEntity) } itemStack.decrement(1) return ActionResult.success(world.isClient) } else { return ActionResult.CONSUME } } } }