// Path: src/main/java/de/dosmike/sponge/vshop/systems/ShopType.java
// public enum ShopType {
// 	PlayerShop,
// 	AdminShop;
// 
// 	public static ShopType fromInstance(ShopEntity shop) {
// 		return shop.getShopOwner().isPresent() ? PlayerShop : AdminShop;
// 	}
// 
// 	public static ShopType fromInternalFlag(boolean shopTypeFlag) {
// 		return shopTypeFlag ? AdminShop : PlayerShop;
// 	}
// }


import de.dosmike.sponge.vshop.systems.ShopType;
import org.spongepowered.api.item.ItemType;
import org.spongepowered.api.item.inventory.Inventory;
import org.spongepowered.api.item.inventory.ItemStack;
import org.spongepowered.api.item.inventory.ItemStackSnapshot;
import org.spongepowered.api.item.inventory.Slot;
import java.util.Optional;
package de.dosmike.sponge.vshop.systems.pluginfilter;



public interface PluginItemFilter {

	/**
	 * Used to filter {@link Slot}s out of an {@link Inventory}. Don't forget to check basic properties like
	 * {@link ItemType} here!
	 *
	 * @return true if item represents an item of this filter-type
	 */
	boolean isItem(ItemStack item);

	/**
	 * Can be used to enforce the use of this PluginItemFilter for items.
	 *
	 * @return true if this filter should automatically set in place, if an added item matched isItem()
	 */
	@SuppressWarnings("SameReturnValue")
	default boolean enforce() {
		return false;
	}

	/**
	 * If you want to block this item from being resold by players or admin shops you can use this
	 * to prevent the item from being added to a shop (or sold, if you change this later)
	 *
	 * @param shopType the type of shop this item is currently listed in
	 * @return true if the item can be added to this shop
	 */
	@SuppressWarnings({"SameReturnValue"})
// Path: src/main/java/de/dosmike/sponge/vshop/systems/ShopType.java
// public enum ShopType {
// 	PlayerShop,
// 	AdminShop;
// 
// 	public static ShopType fromInstance(ShopEntity shop) {
// 		return shop.getShopOwner().isPresent() ? PlayerShop : AdminShop;
// 	}
// 
// 	public static ShopType fromInternalFlag(boolean shopTypeFlag) {
// 		return shopTypeFlag ? AdminShop : PlayerShop;
// 	}
// }


// Path: src/main/java/de/dosmike/sponge/vshop/systems/pluginfilter/PluginItemFilter.java
import de.dosmike.sponge.vshop.systems.ShopType;
import org.spongepowered.api.item.ItemType;
import org.spongepowered.api.item.inventory.Inventory;
import org.spongepowered.api.item.inventory.ItemStack;
import org.spongepowered.api.item.inventory.ItemStackSnapshot;
import org.spongepowered.api.item.inventory.Slot;
import java.util.Optional;

package de.dosmike.sponge.vshop.systems.pluginfilter;



public interface PluginItemFilter {

	/**
	 * Used to filter {@link Slot}s out of an {@link Inventory}. Don't forget to check basic properties like
	 * {@link ItemType} here!
	 *
	 * @return true if item represents an item of this filter-type
	 */
	boolean isItem(ItemStack item);

	/**
	 * Can be used to enforce the use of this PluginItemFilter for items.
	 *
	 * @return true if this filter should automatically set in place, if an added item matched isItem()
	 */
	@SuppressWarnings("SameReturnValue")
	default boolean enforce() {
		return false;
	}

	/**
	 * If you want to block this item from being resold by players or admin shops you can use this
	 * to prevent the item from being added to a shop (or sold, if you change this later)
	 *
	 * @param shopType the type of shop this item is currently listed in
	 * @return true if the item can be added to this shop
	 */
	@SuppressWarnings({"SameReturnValue"})
	default boolean supportShopType(ShopType shopType) {