// ============================================
// MINI-MOD NEOFORGE - LOCKPICK SYSTEM
// ============================================
// Ébauche de structure pour le mod lockpick

/*
STRUCTURE DU MOD:
-----------------
lockpick-mod/
├── gradle.properties
├── build.gradle
├── settings.gradle
├── src/main/java/com/yourname/lockpick/
│   ├── LockpickMod.java (main)
│   ├── item/LockpickItem.java
│   ├── event/PlayerInteractEvent.java
│   ├── capability/ChestLockCapability.java
│   ├── gui/LockpickingMinigame.java
│   └── util/LockpickUtil.java
└── src/main/resources/
    ├── META-INF/mods.toml
    └── assets/lockpick/textures/item/lockpick.png

FONCTIONNALITÉS:
----------------
1. Item "Lockpick" craftable en KubeJS
2. Interaction sur chest = minigame ou % success
3. Consume lockpick après use
4. Cooldown entre les tentatives
5. Message nettoyage si fail

CODE CLÉS:
---------
*/

// LockpickMod.java
public class LockpickMod {
    public static final String MOD_ID = "lockpick";
    public static final String MOD_NAME = "Lockpick System";
    
    public LockpickMod() {
        NeoForge.BUS.addListener(PlayerInteractEvent::onRightClick);
        ItemInit.register();
    }
}

// LockpickItem.java
public class LockpickItem extends Item {
    public LockpickItem(Item.Properties properties) {
        super(properties
            .rarity(Rarity.UNCOMMON)
            .stackTo(16)
        );
    }
}

// PlayerInteractEvent.java - LOGIC PRINCIPALE
public class PlayerInteractEvent {
    private static final int LOCKPICK_COOLDOWN_TICKS = 100; // 5 secondes
    private static final double SUCCESS_RATE = 0.65; // 65% de réussite
    
    @SubscribeEvent
    public static void onRightClick(PlayerInteractEvent.RightClickBlock event) {
        Player player = event.getEntity();
        Level level = player.level();
        BlockPos pos = event.getHitVec().getBlockPos();
        BlockState state = level.getBlockState(pos);
        
        // Vérifier si c'est un chest
        if (state.getBlock() instanceof ChestBlock) {
            ItemStack lockpick = player.getMainHandItem();
            
            // Vérifier si le joueur a un lockpick
            if (lockpick.getItem() instanceof LockpickItem) {
                event.setCanceled(true);
                
                if (!level.isClientSide) {
                    // Vérifier cooldown
                    if (player.getCooldowns().isOnCooldown(lockpick.getItem())) {
                        player.displayClientMessage(
                            Component.literal("§c⏳ Attends avant de réessayer..."), 
                            true
                        );
                        return;
                    }
                    
                    // Tentative de lockpicking
                    if (Math.random() < SUCCESS_RATE) {
                        // SUCCÈS
                        player.displayClientMessage(
                            Component.literal("§a✓ Coffre déverrouillé!"), 
                            true
                        );
                        player.serverLevel().playSound(null, pos, 
                            SoundEvents.ITEM_FRAME_ROTATE_ITEM, 
                            SoundSource.PLAYERS, 1.0f, 1.0f
                        );
                        
                        // Consommer le lockpick (50% chance)
                        if (Math.random() < 0.5) {
                            lockpick.shrink(1);
                            player.displayClientMessage(
                                Component.literal("§6Lockpick usé"), 
                                true
                            );
                        }
                    } else {
                        // ÉCHEC
                        player.displayClientMessage(
                            Component.literal("§c✗ Échec du déverrouillage!"), 
                            true
                        );
                        player.serverLevel().playSound(null, pos, 
                            SoundEvents.ITEM_BREAK, 
                            SoundSource.PLAYERS, 0.8f, 0.5f
                        );
                        
                        // Consommer le lockpick
                        lockpick.shrink(1);
                    }
                    
                    // Cooldown
                    player.getCooldowns().addCooldown(lockpick.getItem(), LOCKPICK_COOLDOWN_TICKS);
                }
            }
        }
    }
}

// Crafting recipe (à faire en KubeJS après)
// 1 Stick + 1 Iron Ingot + 1 Copper Ingot = Lockpick
