// Path: src/main/java/com/devotedmc/ExilePearl/broadcast/BroadcastListener.java
// public interface BroadcastListener {
// 
// 	/**
// 	 * Broadcasts the pearl location
// 	 * @param pearl The pearl to broadcast
// 	 */
// 	void broadcast(ExilePearl pearl);
// 
// 	/**
// 	 * Gets whether the broadcast listener contains an underlying object
// 	 * @param o the object to check
// 	 * @return true if it exists
// 	 */
// 	boolean contains(Object o);
// 
// }
// 
// Path: src/main/java/com/devotedmc/ExilePearl/holder/PearlHolder.java
// public interface PearlHolder {
// 
// 	/**
// 	 * Gets the holder name
// 	 * @return The holder name
// 	 */
// 	public String getName();
// 
// 	/**
// 	 * Gets the holder location
// 	 * @return The holder location
// 	 */
// 	public Location getLocation();
// 
// 	/**
// 	 * Validate that the given pearl still exists in this holder instance
// 	 * @param pearl The exile pearl
// 	 * @return the validation result
// 	 */
// 	public HolderVerifyResult validate(final ExilePearl pearl);
// 
// 	/**
// 	 * Gets whether the holder is a block
// 	 * @return true if the holder is a block
// 	 */
// 	public boolean isBlock();
// 
// 	/**
// 	 * Gets whether the holder is in a loaded chunk
// 	 * @return true if the holder is in a loaded chunk
// 	 */
// 	public default boolean inLoadedChunk() {
// 		Location loc = getLocation();
// 		World world = loc.getWorld();
// 
// 		if (world == null) {
// 			return false;
// 		}
// 
// 		return world.isChunkLoaded(BlockBasedChunkMeta.toChunkCoord(loc.getBlockX()), BlockBasedChunkMeta.toChunkCoord(loc.getBlockZ()));
// 	}
// }


import java.util.Date;
import java.util.UUID;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import com.devotedmc.ExilePearl.broadcast.BroadcastListener;
import com.devotedmc.ExilePearl.holder.PearlHolder;
	 */
	boolean verifyLocation();

	/**
	 * Validates that an item stack is the exile pearl
	 * @param is The item stack
	 * @return true if validation passes
	 */
	boolean validateItemStack(ItemStack is);

	/**
	 * Enables storage updates when writing values
	 */
	void enableStorage();

	/**
	 * Broadcasts the pearl location to all the listeners
	 */
	void performBroadcast();

	/**
	 * Adds a broadcast target
	 * @param bcast The broadcast target
	 */
	void addBroadcastListener(BroadcastListener bcast);

	/**
	 * Removes a broadcast target
	 * @param bcast The broadcast target
	 */
// Path: src/main/java/com/devotedmc/ExilePearl/broadcast/BroadcastListener.java
// public interface BroadcastListener {
// 
// 	/**
// 	 * Broadcasts the pearl location
// 	 * @param pearl The pearl to broadcast
// 	 */
// 	void broadcast(ExilePearl pearl);
// 
// 	/**
// 	 * Gets whether the broadcast listener contains an underlying object
// 	 * @param o the object to check
// 	 * @return true if it exists
// 	 */
// 	boolean contains(Object o);
// 
// }
// 
// Path: src/main/java/com/devotedmc/ExilePearl/holder/PearlHolder.java
// public interface PearlHolder {
// 
// 	/**
// 	 * Gets the holder name
// 	 * @return The holder name
// 	 */
// 	public String getName();
// 
// 	/**
// 	 * Gets the holder location
// 	 * @return The holder location
// 	 */
// 	public Location getLocation();
// 
// 	/**
// 	 * Validate that the given pearl still exists in this holder instance
// 	 * @param pearl The exile pearl
// 	 * @return the validation result
// 	 */
// 	public HolderVerifyResult validate(final ExilePearl pearl);
// 
// 	/**
// 	 * Gets whether the holder is a block
// 	 * @return true if the holder is a block
// 	 */
// 	public boolean isBlock();
// 
// 	/**
// 	 * Gets whether the holder is in a loaded chunk
// 	 * @return true if the holder is in a loaded chunk
// 	 */
// 	public default boolean inLoadedChunk() {
// 		Location loc = getLocation();
// 		World world = loc.getWorld();
// 
// 		if (world == null) {
// 			return false;
// 		}
// 
// 		return world.isChunkLoaded(BlockBasedChunkMeta.toChunkCoord(loc.getBlockX()), BlockBasedChunkMeta.toChunkCoord(loc.getBlockZ()));
// 	}
// }


// Path: src/main/java/com/devotedmc/ExilePearl/ExilePearl.java
import java.util.Date;
import java.util.UUID;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import com.devotedmc.ExilePearl.broadcast.BroadcastListener;
import com.devotedmc.ExilePearl.holder.PearlHolder;

	 */
	boolean verifyLocation();

	/**
	 * Validates that an item stack is the exile pearl
	 * @param is The item stack
	 * @return true if validation passes
	 */
	boolean validateItemStack(ItemStack is);

	/**
	 * Enables storage updates when writing values
	 */
	void enableStorage();

	/**
	 * Broadcasts the pearl location to all the listeners
	 */
	void performBroadcast();

	/**
	 * Adds a broadcast target
	 * @param bcast The broadcast target
	 */
	void addBroadcastListener(BroadcastListener bcast);

	/**
	 * Removes a broadcast target
	 * @param bcast The broadcast target
	 */
	void removeBroadcastListener(Object bcast);