oop demo

🧩 Syntax:
package com.tom125813.he.enchantments.effects;

import com.tom125813.he.HeistEnchantments;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;

/**
 * Base class for all enchantment effects
 */
public abstract class EnchantmentEffect {
    
    protected final HeistEnchantments plugin;
    protected final String enchantmentId;
    
    public EnchantmentEffect(HeistEnchantments plugin, String enchantmentId) {
        this.plugin = plugin;
        this.enchantmentId = enchantmentId;
    }
    
    /**
     * Called when the enchantment should trigger its effect
     */
    public abstract void trigger(Player player, ItemStack item, int level, Event event);
    
    /**
     * Called when an item with this enchantment is equipped
     */
    public void onEquip(Player player, ItemStack item, int level) {
        // Override if needed
    }
    
    /**
     * Called when an item with this enchantment is unequipped
     */
    public void onUnequip(Player player, ItemStack item, int level) {
        // Override if needed
    }
    
    /**
     * Called every tick for passive effects
     */
    public void onTick(Player player, ItemStack item, int level) {
        // Override if needed
    }
    
    /**
     * Gets the enchantment ID this effect handles
     */
    public String getEnchantmentId() {
        return enchantmentId;
    }
    
    /**
     * Gets the level of this enchantment on an item
     */
    protected int getEnchantmentLevel(ItemStack item) {
        return plugin.getEnchantmentManager().getEnchantmentLevel(item, enchantmentId);
    }
    
    /**
     * Gets a configurable percentage from config
     */
    protected double getConfigPercentage(String path, double defaultValue) {
        return plugin.getConfigManager().getEnchantmentDouble(enchantmentId, path, defaultValue);
    }
    
    /**
     * Gets a configurable command from config
     */
    protected String getConfigCommand(String path, String defaultValue) {
        return plugin.getConfigManager().getEnchantmentString(enchantmentId, path, defaultValue);
    }
}