// Path: src/main/java/baubles/api/IBauble.java
// public interface IBauble {
// 
// 	/**
// 	 * This method return the type of bauble this is. 
// 	 * Type is used to determine the slots it can go into.
// 	 */
// 	public BaubleType getBaubleType(ItemStack itemstack);
// 
// 	/**
// 	 * This method is called once per tick if the bauble is being worn by a player
// 	 */
// 	public default void onWornTick(ItemStack itemstack, EntityLivingBase player) {		
// 	}
// 
// 	/**
// 	 * This method is called when the bauble is equipped by a player
// 	 */
// 	public default void onEquipped(ItemStack itemstack, EntityLivingBase player) {		
// 	}
// 
// 	/**
// 	 * This method is called when the bauble is unequipped by a player
// 	 */
// 	public default void onUnequipped(ItemStack itemstack, EntityLivingBase player) {		
// 	}
// 
// 	/**
// 	 * can this bauble be placed in a bauble slot
// 	 */
// 	public default boolean canEquip(ItemStack itemstack, EntityLivingBase player) {		
// 		return true;
// 	}
// 
// 	/**
// 	 * Can this bauble be removed from a bauble slot
// 	 */
// 	public default boolean canUnequip(ItemStack itemstack, EntityLivingBase player) {
// 		return true;
// 	}
// 
// 	/**
// 	 * Will bauble automatically sync to client if a change is detected in its NBT or damage values?
// 	 * Default is off, so override and set to true if you want to auto sync.
// 	 * This sync is not instant, but occurs every 10 ticks (.5 seconds).
// 	 */
// 	public default boolean willAutoSync(ItemStack itemstack, EntityLivingBase player) {
// 		return false;
// 	}
// }


import baubles.api.IBauble;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.ItemStackHandler;

	@Override
	public boolean isEventBlocked() {
		return blockEvents;
	}

	@Override
	public void setEventBlock(boolean blockEvents) {
		this.blockEvents = blockEvents;
	}

	@Override
	protected void onContentsChanged(int slot)
	{
		setChanged(slot,true);
	}

	@Override
	public boolean isChanged(int slot) {
		if (changed==null) {
			changed = new boolean[this.getSlots()];
		}
		return changed[slot];
	}

	@Override
	public void setChanged(int slot, boolean change) {
		if (changed==null) {
			changed = new boolean[this.getSlots()];
		}
// Path: src/main/java/baubles/api/IBauble.java
// public interface IBauble {
// 
// 	/**
// 	 * This method return the type of bauble this is. 
// 	 * Type is used to determine the slots it can go into.
// 	 */
// 	public BaubleType getBaubleType(ItemStack itemstack);
// 
// 	/**
// 	 * This method is called once per tick if the bauble is being worn by a player
// 	 */
// 	public default void onWornTick(ItemStack itemstack, EntityLivingBase player) {		
// 	}
// 
// 	/**
// 	 * This method is called when the bauble is equipped by a player
// 	 */
// 	public default void onEquipped(ItemStack itemstack, EntityLivingBase player) {		
// 	}
// 
// 	/**
// 	 * This method is called when the bauble is unequipped by a player
// 	 */
// 	public default void onUnequipped(ItemStack itemstack, EntityLivingBase player) {		
// 	}
// 
// 	/**
// 	 * can this bauble be placed in a bauble slot
// 	 */
// 	public default boolean canEquip(ItemStack itemstack, EntityLivingBase player) {		
// 		return true;
// 	}
// 
// 	/**
// 	 * Can this bauble be removed from a bauble slot
// 	 */
// 	public default boolean canUnequip(ItemStack itemstack, EntityLivingBase player) {
// 		return true;
// 	}
// 
// 	/**
// 	 * Will bauble automatically sync to client if a change is detected in its NBT or damage values?
// 	 * Default is off, so override and set to true if you want to auto sync.
// 	 * This sync is not instant, but occurs every 10 ticks (.5 seconds).
// 	 */
// 	public default boolean willAutoSync(ItemStack itemstack, EntityLivingBase player) {
// 		return false;
// 	}
// }


// Path: src/main/java/baubles/api/cap/BaublesContainer.java
import baubles.api.IBauble;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.ItemStackHandler;


	@Override
	public boolean isEventBlocked() {
		return blockEvents;
	}

	@Override
	public void setEventBlock(boolean blockEvents) {
		this.blockEvents = blockEvents;
	}

	@Override
	protected void onContentsChanged(int slot)
	{
		setChanged(slot,true);
	}

	@Override
	public boolean isChanged(int slot) {
		if (changed==null) {
			changed = new boolean[this.getSlots()];
		}
		return changed[slot];
	}

	@Override
	public void setChanged(int slot, boolean change) {
		if (changed==null) {
			changed = new boolean[this.getSlots()];
		}
		this.changed[slot] = change;