// Path: src/main/java/com/nisovin/shopkeepers/Log.java
// public class Log {
// 
// 	public static Logger getLogger() {
// 		return ShopkeepersPlugin.getInstance().getLogger();
// 	}
// 
// 	public static void info(String message) {
// 		if (message == null || message.isEmpty()) return;
// 		getLogger().info(message);
// 	}
// 
// 	public static void debug(String message) {
// 		if (Settings.debug) {
// 			info(message);
// 		}
// 	}
// 
// 	public static void warning(String message) {
// 		getLogger().warning(message);
// 	}
// 
// 	public static void severe(String message) {
// 		getLogger().severe(message);
// 	}
// }
// 
// Path: src/main/java/com/nisovin/shopkeepers/compat/api/NMSCallProvider.java
// public interface NMSCallProvider {
// 
// 	public String getVersionId();
// 
// 	public boolean openTradeWindow(String title, List<ItemStack[]> recipes, Player player);
// 
// 	public ItemStack[] getUsedTradingRecipe(MerchantInventory merchantInventory);
// 
// 	public void overwriteLivingEntityAI(LivingEntity entity);
// 
// 	public void setEntitySilent(Entity entity, boolean silent);
// 
// 	public void setNoAI(LivingEntity bukkitEntity);
// 
// 	public ItemStack loadItemAttributesFromString(ItemStack item, String data);
// 
// 	public String saveItemAttributesToString(ItemStack item);
// 
// 	public boolean isMainHandInteraction(PlayerInteractEvent event);
// 
// 	public boolean isMainHandInteraction(PlayerInteractEntityEvent event);
// 
// 	public boolean supportsSpawnEggEntityType();
// 
// 	public void setSpawnEggEntityType(ItemStack spawnEggItem, EntityType entityType);
// 
// 	public EntityType getSpawnEggEntityType(ItemStack spawnEggItem);
// }


import org.bukkit.plugin.Plugin;
import com.nisovin.shopkeepers.Log;
import com.nisovin.shopkeepers.compat.api.NMSCallProvider;
package com.nisovin.shopkeepers.compat;



public final class NMSManager {

	private static NMSCallProvider provider;

	public static NMSCallProvider getProvider() {
		return NMSManager.provider;
	}

	public static void load(Plugin plugin) {
		final String packageName = plugin.getServer().getClass().getPackage().getName();
		String cbversion = packageName.substring(packageName.lastIndexOf('.') + 1);
		try {
			final Class<?> clazz = Class.forName("com.nisovin.shopkeepers.compat." + cbversion + ".NMSHandler");
			if (NMSCallProvider.class.isAssignableFrom(clazz)) {
				NMSManager.provider = (NMSCallProvider) clazz.getConstructor().newInstance();
			} else {
// Path: src/main/java/com/nisovin/shopkeepers/Log.java
// public class Log {
// 
// 	public static Logger getLogger() {
// 		return ShopkeepersPlugin.getInstance().getLogger();
// 	}
// 
// 	public static void info(String message) {
// 		if (message == null || message.isEmpty()) return;
// 		getLogger().info(message);
// 	}
// 
// 	public static void debug(String message) {
// 		if (Settings.debug) {
// 			info(message);
// 		}
// 	}
// 
// 	public static void warning(String message) {
// 		getLogger().warning(message);
// 	}
// 
// 	public static void severe(String message) {
// 		getLogger().severe(message);
// 	}
// }
// 
// Path: src/main/java/com/nisovin/shopkeepers/compat/api/NMSCallProvider.java
// public interface NMSCallProvider {
// 
// 	public String getVersionId();
// 
// 	public boolean openTradeWindow(String title, List<ItemStack[]> recipes, Player player);
// 
// 	public ItemStack[] getUsedTradingRecipe(MerchantInventory merchantInventory);
// 
// 	public void overwriteLivingEntityAI(LivingEntity entity);
// 
// 	public void setEntitySilent(Entity entity, boolean silent);
// 
// 	public void setNoAI(LivingEntity bukkitEntity);
// 
// 	public ItemStack loadItemAttributesFromString(ItemStack item, String data);
// 
// 	public String saveItemAttributesToString(ItemStack item);
// 
// 	public boolean isMainHandInteraction(PlayerInteractEvent event);
// 
// 	public boolean isMainHandInteraction(PlayerInteractEntityEvent event);
// 
// 	public boolean supportsSpawnEggEntityType();
// 
// 	public void setSpawnEggEntityType(ItemStack spawnEggItem, EntityType entityType);
// 
// 	public EntityType getSpawnEggEntityType(ItemStack spawnEggItem);
// }


// Path: src/main/java/com/nisovin/shopkeepers/compat/NMSManager.java
import org.bukkit.plugin.Plugin;
import com.nisovin.shopkeepers.Log;
import com.nisovin.shopkeepers.compat.api.NMSCallProvider;

package com.nisovin.shopkeepers.compat;



public final class NMSManager {

	private static NMSCallProvider provider;

	public static NMSCallProvider getProvider() {
		return NMSManager.provider;
	}

	public static void load(Plugin plugin) {
		final String packageName = plugin.getServer().getClass().getPackage().getName();
		String cbversion = packageName.substring(packageName.lastIndexOf('.') + 1);
		try {
			final Class<?> clazz = Class.forName("com.nisovin.shopkeepers.compat." + cbversion + ".NMSHandler");
			if (NMSCallProvider.class.isAssignableFrom(clazz)) {
				NMSManager.provider = (NMSCallProvider) clazz.getConstructor().newInstance();
			} else {
				throw new Exception("Nope");