So now with
package net.mattias.cobblesnapshot.event;

import com.cobblemon.mod.common.entity.pokemon.PokemonEntity;
import com.cobblemon.mod.common.pokemon.Pokemon;
import net.mattias.cobblesnapshot.item.ModItems;
import net.minecraft.ChatFormatting;
import net.minecraft.core.component.DataComponents;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.component.CustomData;
import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class CameraUseEvents {

    @net.neoforged.bus.api.SubscribeEvent
    public static void onEntityRightClick(PlayerInteractEvent.EntityInteractSpecific event) {
        // We only want to do this on the server to prevent consuming items twice.
        if (event.getLevel().isClientSide()) return;

        if (!(event.getTarget() instanceof PokemonEntity target)) return;
        Player player = event.getEntity();
        ItemStack camera = player.getItemInHand(event.getHand());

        if (!camera.is(ModItems.CAMERA.get())) return;

        // Check for film in inventory
        int filmSlot = findFirstSlotWithItem(player, ModItems.FILM.get());
        if (filmSlot == -1) {
            player.sendSystemMessage(Component.literal("You need film to take a snapshot!").withStyle(ChatFormatting.RED));
            return;
        }

        // Get Pokémon data
        Pokemon pokemon = target.getPokemon();

        // Consume 1 film ONLY AFTER we know the operation is successful
        player.getInventory().removeItem(filmSlot, 1);

        // --- Create the Snapshot Item ---
        ItemStack snapshot = new ItemStack(ModItems.IMAGE_FILM.get());

        // Set custom name
        snapshot.set(DataComponents.CUSTOM_NAME, Component.literal("📸 Snapshot of " + pokemon.getDisplayName().getString()));

        // --- Store Metadata in CUSTOM_DATA ---
        CompoundTag tag = new CompoundTag();
        tag.putString("TakenBy", player.getName().getString());
        tag.putString("TakenOn", LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE));

        // Store Pokémon information for the image
        tag.putString("PokemonSpecies", pokemon.getSpecies().getName());
        tag.putString("PokemonForm", pokemon.getForm().getName());
        tag.putBoolean("IsShiny", pokemon.getShiny());

        // Store the Pokémon's display name for reference
        tag.putString("PokemonName", pokemon.getDisplayName().getString());

        // Apply the data to the item stack
        snapshot.set(DataComponents.CUSTOM_DATA, CustomData.of(tag));

        // Give item to player
        if (!player.addItem(snapshot)) {
            player.drop(snapshot, false);
        }

        player.sendSystemMessage(Component.literal("📸 You took a snapshot of " + pokemon.getDisplayName() + "!"));
        event.setCanceled(true);
        event.setCancellationResult(InteractionResult.SUCCESS);
    }

    private static int findFirstSlotWithItem(Player player, Item item) {
        for (int i = 0; i < player.getInventory().getContainerSize(); i++) {
            ItemStack stack = player.getInventory().getItem(i);
            if (stack.is(item)) return i;
        }
        return -1;
    }
}

and

package net.mattias.cobblesnapshot.item.custom;

import net.minecraft.core.component.DataComponents;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.item.component.CustomData;
import net.minecraft.ChatFormatting;

import java.util.List;

public class ImageFilmItem extends Item {
    public ImageFilmItem(Properties properties) {
        super(properties);
    }

    @Override
    public void appendHoverText(ItemStack stack, TooltipContext context, List<Component> tooltip, TooltipFlag flag) {
        super.appendHoverText(stack, context, tooltip, flag);

        CustomData customData = stack.get(DataComponents.CUSTOM_DATA);
        if (customData != null) {
            CompoundTag tag = customData.copyTag();

            // Add a separator line
            tooltip.add(Component.literal("─────────────────").withStyle(ChatFormatting.GRAY));

            if (tag.contains("PokemonName")) {
                tooltip.add(Component.literal("📸 " + tag.getString("PokemonName")).withStyle(ChatFormatting.YELLOW));
            }

            if (tag.contains("PokemonSpecies")) {
                String species = tag.getString("PokemonSpecies");
                String form = tag.contains("PokemonForm") ? tag.getString("PokemonForm") : "normal";
                boolean isShiny = tag.getBoolean("IsShiny");

                Component speciesComponent = Component.literal("Species: " + species)
                        .withStyle(ChatFormatting.AQUA);
                tooltip.add(speciesComponent);

                if (!form.equals("normal")) {
                    tooltip.add(Component.literal("Form: " + form).withStyle(ChatFormatting.LIGHT_PURPLE));
                }

                if (isShiny) {
                    tooltip.add(Component.literal("✨ Shiny!").withStyle(ChatFormatting.GOLD));
                }
            }

            if (tag.contains("TakenBy")) {
                tooltip.add(Component.literal("Photographer: " + tag.getString("TakenBy")).withStyle(ChatFormatting.GREEN));
            }

            if (tag.contains("TakenOn")) {
                tooltip.add(Component.literal("Date: " + tag.getString("TakenOn")).withStyle(ChatFormatting.GRAY));
            }
        }
    }

    @Override
    public boolean isFoil(ItemStack stack) {
        // Make the item have an enchanted glint to make it look special
        return true;
    }
}

I can take pictures?