// Path: src/main/java/com/minecraftlegend/inventoryapi/GUIComponent.java
// public interface GUIComponent extends Listener, Cloneable, Serializable{
// 
// 
//     default void registerNativeListeners( JavaPlugin plugin) {
//         plugin.getServer().getPluginManager().registerEvents( this, plugin );
//     }
// 
// 
//     default void init() {
//     }
// 
//     default void postInit() {
//     }
// 
//     /**
//      * Adds gui events to this component.
//      * All Events will be specified for this component
//      * @param event to register
//      */
//     void addEvent( GUIEvent event );
// 
//     /**
//      * Removes an earlier registered event
//      * @param event to remove
//      */
//     void removeEvent( GUIEvent event );
// 
//     /**
//      *
//      * @param event is fired globalized (like a normal event listener) therefor gui components will be null
//      */
//     void addGlobalEvent( GUIEvent event );
// 
//     /**
//      * Removes an earlier registered global event
//      * @param event to remove
//      */
//     void removeGlobalEvent( GUIEvent event );
// 
//     /**
//      *
//      * @return all global events
//      */
//     List<GUIEvent> getGlobalEvents();
// 
//     /**
//      *
//      * @return all registered events for this component
//      */
//     List<GUIEvent> getEvents();
// 
//     void setEvents(List<GUIEvent> events);
//     void setGlobalEvents(List<GUIEvent> events);
// 
//     /**
//      * Locks this component
//      * -> if this is an Inventory, the whole inventory will be locked and no items can be moved
//      * -> if this is an gui element, this specific element will be locked
//      * Note: in most cases components are already locked by default
//      */
//     void lock();
// 
//     /**
//      * unlocks this component
//      */
//     void unlock();
// 
//     /**
//      *
//      * @return the current lock state of this component
//      */
//     boolean isLocked();
// 
//     Object clone();
// 
// }


import com.minecraftlegend.inventoryapi.GUIComponent;
import org.bukkit.entity.HumanEntity;
package com.minecraftlegend.inventoryapi.Events;



/**
 * @Author Sauerbier | Jan
 * @Copyright 2017 by Jan Hof
 * All rights reserved.
 **/
public class InputChangeEvent implements EventWrapper {

    private InputActionType action;
    private GUIComponent component;
    private HumanEntity player;

    /**
     * This event is triggered whenever a change to a {@link com.minecraftlegend.inventoryapi.Elements.GUInput} element is made
     * @param action the type of action
     * @param component the triggered component
     * @param player who triggered the event
     */
    public InputChangeEvent( InputActionType action, GUIComponent component, HumanEntity player ) {
        this.action = action;
        this.component = component;
        this.player = player;
    }

    /**
     *
     * @return the triggered {@link GUIComponent}
     */
// Path: src/main/java/com/minecraftlegend/inventoryapi/GUIComponent.java
// public interface GUIComponent extends Listener, Cloneable, Serializable{
// 
// 
//     default void registerNativeListeners( JavaPlugin plugin) {
//         plugin.getServer().getPluginManager().registerEvents( this, plugin );
//     }
// 
// 
//     default void init() {
//     }
// 
//     default void postInit() {
//     }
// 
//     /**
//      * Adds gui events to this component.
//      * All Events will be specified for this component
//      * @param event to register
//      */
//     void addEvent( GUIEvent event );
// 
//     /**
//      * Removes an earlier registered event
//      * @param event to remove
//      */
//     void removeEvent( GUIEvent event );
// 
//     /**
//      *
//      * @param event is fired globalized (like a normal event listener) therefor gui components will be null
//      */
//     void addGlobalEvent( GUIEvent event );
// 
//     /**
//      * Removes an earlier registered global event
//      * @param event to remove
//      */
//     void removeGlobalEvent( GUIEvent event );
// 
//     /**
//      *
//      * @return all global events
//      */
//     List<GUIEvent> getGlobalEvents();
// 
//     /**
//      *
//      * @return all registered events for this component
//      */
//     List<GUIEvent> getEvents();
// 
//     void setEvents(List<GUIEvent> events);
//     void setGlobalEvents(List<GUIEvent> events);
// 
//     /**
//      * Locks this component
//      * -> if this is an Inventory, the whole inventory will be locked and no items can be moved
//      * -> if this is an gui element, this specific element will be locked
//      * Note: in most cases components are already locked by default
//      */
//     void lock();
// 
//     /**
//      * unlocks this component
//      */
//     void unlock();
// 
//     /**
//      *
//      * @return the current lock state of this component
//      */
//     boolean isLocked();
// 
//     Object clone();
// 
// }


// Path: src/main/java/com/minecraftlegend/inventoryapi/Events/InputChangeEvent.java
import com.minecraftlegend.inventoryapi.GUIComponent;
import org.bukkit.entity.HumanEntity;

package com.minecraftlegend.inventoryapi.Events;



/**
 * @Author Sauerbier | Jan
 * @Copyright 2017 by Jan Hof
 * All rights reserved.
 **/
public class InputChangeEvent implements EventWrapper {

    private InputActionType action;
    private GUIComponent component;
    private HumanEntity player;

    /**
     * This event is triggered whenever a change to a {@link com.minecraftlegend.inventoryapi.Elements.GUInput} element is made
     * @param action the type of action
     * @param component the triggered component
     * @param player who triggered the event
     */
    public InputChangeEvent( InputActionType action, GUIComponent component, HumanEntity player ) {
        this.action = action;
        this.component = component;
        this.player = player;
    }

    /**
     *
     * @return the triggered {@link GUIComponent}
     */
    public GUIComponent getComponent() {