// Path: src/main/java/com/minecraftlegend/inventoryapi/utils/Vector2i.java
// public class Vector2i implements Cloneable {
// 
//     private int x, y;
// 
//     public Vector2i( int x, int y ) {
//         this.x = x;
//         this.y = y;
//     }
// 
//     public Vector2i( Vector2i vec ) {
//         this.x = vec.getX();
//         this.y = vec.getY();
//     }
// 
//     public void add( Vector2i vector2i ) {
//         x += vector2i.getX();
//         y += vector2i.getY();
//     }
// 
// 
//     public void sub( Vector2i vec ) {
//         this.x -= vec.getX();
//         this.y -= vec.getY();
//     }
// 
//     public void multiply( Vector2i vec ) {
//         x *= vec.getX();
//         y *= vec.getY();
//     }
// 
//     public void multiply( int m ) {
//         x *= m;
//         y *= m;
//     }
// 
//     public void divide( Vector2i vec ) {
//         x /= vec.getX();
//         y /= vec.getY();
//     }
// 
//     public void divide( int m ) {
//         x /= m;
//         y /= m;
//     }
// 
//     public int scalar( Vector2i vec ) {
//         return ( x + vec.getX() ) * ( y + vec.getY() );
//     }
// 
//     public double distance( Vector2i vec ) {
//         int dx = vec.getX() - x;
//         int dy = vec.getY() - y;
//         return new Vector2i( dx, dy ).length();
//     }
// 
//     public double angle( Vector2i vec ) {
//         double dx = vec.getX() - x;
//         double dy = vec.getY() - y;
//         return Math.atan2( dy, dx );
//     }
// 
// 
//     public Vector2i toPixelPrecision( int pixelMask ) {
//         return new Vector2i( (int) x << pixelMask, (int) y << pixelMask );
//     }
// 
//     public Vector2i toBlockPrecision( int pixelMask ) {
//         return new Vector2i( (int) x >> pixelMask, (int) y >> pixelMask );
//     }
// 
//     public int toInventoryPosition(){
//         return x + y * 9;
//     }
// 
//     public Vector2i max( Vector2i vec ) {
//         if ( x + y > vec.getX() + vec.getY() ) {
//             return this;
//         }
//         else return vec;
//     }
// 
//     public Vector2i min( Vector2i vec ) {
// 
//         if ( x + y < vec.getX() + vec.getY() ) {
//             return this;
//         }
//         else return vec;
//     }
// 
// 
//     public double length() {
//         return Math.sqrt( x * x + y * y );
//     }
// 
//     @Override
//     public Vector2i clone() {
//         try {
//             return (Vector2i) super.clone();
//         }
//         catch ( CloneNotSupportedException e ) {
//             e.printStackTrace();
//         }
//         return null;
//     }
// 
//     @Override
//     public boolean equals( Object obj ) {
//         Validate.notNull( obj);
//         Validate.isInstanceOf( Vector2i.class, obj, "Object has to be from type Vector2i" );
// 
//         Vector2i other = (Vector2i) obj;
// 
//         if(other.getX() != x) return false;
//         if(other.getY() != y) return false;
//         return true;
//     }
// 
//     @Override
//     public String toString() {
//         return "[x:" + x + ",y:" + y + "]";
//     }
// 
//     public int getX() {
//         return x;
//     }
// 
//     public void setX( int x ) {
//         this.x = x;
//     }
// 
// 
//     public int getY() {
//         return y;
//     }
// 
//     public void setY( int y ) {
//         this.y = y;
//     }
// }


import com.minecraftlegend.inventoryapi.utils.Vector2i;
import org.bukkit.inventory.ItemStack;
package com.minecraftlegend.inventoryapi;



/**
 * @Author Sauerbier | Jan
 * @Copyright 2016 by Jan Hof
 * All rights reserved.
 **/
public interface GUIElement extends GUIComponent {

    /**
     *
     * @return the parent this element belongs to
     */
    GUIComponent getParent();

    /**
     *
     * @param parent sets a new parent component
     */
    void setParent( GUIComponent parent );

    /**
     *
     * @return the size of this element, you can have mulit-slot elements such as {@link com.legend.cloud.clientapi.api.gui.elements.GUIProgressBar}
     */
    Vector2i getSize();

    /**
     *
     * @param dimension sets a new size
     */
    void setSize( Vector2i dimension );

    /**
     *
     * @return the current position in the parent component
     */
// Path: src/main/java/com/minecraftlegend/inventoryapi/utils/Vector2i.java
// public class Vector2i implements Cloneable {
// 
//     private int x, y;
// 
//     public Vector2i( int x, int y ) {
//         this.x = x;
//         this.y = y;
//     }
// 
//     public Vector2i( Vector2i vec ) {
//         this.x = vec.getX();
//         this.y = vec.getY();
//     }
// 
//     public void add( Vector2i vector2i ) {
//         x += vector2i.getX();
//         y += vector2i.getY();
//     }
// 
// 
//     public void sub( Vector2i vec ) {
//         this.x -= vec.getX();
//         this.y -= vec.getY();
//     }
// 
//     public void multiply( Vector2i vec ) {
//         x *= vec.getX();
//         y *= vec.getY();
//     }
// 
//     public void multiply( int m ) {
//         x *= m;
//         y *= m;
//     }
// 
//     public void divide( Vector2i vec ) {
//         x /= vec.getX();
//         y /= vec.getY();
//     }
// 
//     public void divide( int m ) {
//         x /= m;
//         y /= m;
//     }
// 
//     public int scalar( Vector2i vec ) {
//         return ( x + vec.getX() ) * ( y + vec.getY() );
//     }
// 
//     public double distance( Vector2i vec ) {
//         int dx = vec.getX() - x;
//         int dy = vec.getY() - y;
//         return new Vector2i( dx, dy ).length();
//     }
// 
//     public double angle( Vector2i vec ) {
//         double dx = vec.getX() - x;
//         double dy = vec.getY() - y;
//         return Math.atan2( dy, dx );
//     }
// 
// 
//     public Vector2i toPixelPrecision( int pixelMask ) {
//         return new Vector2i( (int) x << pixelMask, (int) y << pixelMask );
//     }
// 
//     public Vector2i toBlockPrecision( int pixelMask ) {
//         return new Vector2i( (int) x >> pixelMask, (int) y >> pixelMask );
//     }
// 
//     public int toInventoryPosition(){
//         return x + y * 9;
//     }
// 
//     public Vector2i max( Vector2i vec ) {
//         if ( x + y > vec.getX() + vec.getY() ) {
//             return this;
//         }
//         else return vec;
//     }
// 
//     public Vector2i min( Vector2i vec ) {
// 
//         if ( x + y < vec.getX() + vec.getY() ) {
//             return this;
//         }
//         else return vec;
//     }
// 
// 
//     public double length() {
//         return Math.sqrt( x * x + y * y );
//     }
// 
//     @Override
//     public Vector2i clone() {
//         try {
//             return (Vector2i) super.clone();
//         }
//         catch ( CloneNotSupportedException e ) {
//             e.printStackTrace();
//         }
//         return null;
//     }
// 
//     @Override
//     public boolean equals( Object obj ) {
//         Validate.notNull( obj);
//         Validate.isInstanceOf( Vector2i.class, obj, "Object has to be from type Vector2i" );
// 
//         Vector2i other = (Vector2i) obj;
// 
//         if(other.getX() != x) return false;
//         if(other.getY() != y) return false;
//         return true;
//     }
// 
//     @Override
//     public String toString() {
//         return "[x:" + x + ",y:" + y + "]";
//     }
// 
//     public int getX() {
//         return x;
//     }
// 
//     public void setX( int x ) {
//         this.x = x;
//     }
// 
// 
//     public int getY() {
//         return y;
//     }
// 
//     public void setY( int y ) {
//         this.y = y;
//     }
// }


// Path: src/main/java/com/minecraftlegend/inventoryapi/GUIElement.java
import com.minecraftlegend.inventoryapi.utils.Vector2i;
import org.bukkit.inventory.ItemStack;

package com.minecraftlegend.inventoryapi;



/**
 * @Author Sauerbier | Jan
 * @Copyright 2016 by Jan Hof
 * All rights reserved.
 **/
public interface GUIElement extends GUIComponent {

    /**
     *
     * @return the parent this element belongs to
     */
    GUIComponent getParent();

    /**
     *
     * @param parent sets a new parent component
     */
    void setParent( GUIComponent parent );

    /**
     *
     * @return the size of this element, you can have mulit-slot elements such as {@link com.legend.cloud.clientapi.api.gui.elements.GUIProgressBar}
     */
    Vector2i getSize();

    /**
     *
     * @param dimension sets a new size
     */
    void setSize( Vector2i dimension );

    /**
     *
     * @return the current position in the parent component
     */
    Vector2i getPosition();