// Path: src/main/java/moze_intel/projecte/api/capabilities/IKnowledgeProvider.java
// public interface IKnowledgeProvider extends INBTSerializable<NBTTagCompound> {
// 
// 	/**
// 	 * @return Whether the player has the "tome" flag set, meaning all knowledge
// 	 *         checks automatically return true
// 	 */
// 	boolean hasFullKnowledge();
// 
// 	/**
// 	 * @param fullKnowledge
// 	 *            Whether the player has the "tome" flag set, meaning all
// 	 *            knowledge checks automatically return true
// 	 */
// 	void setFullKnowledge(boolean fullKnowledge);
// 
// 	/**
// 	 * Clears all knowledge. Additionally, clears the "tome" flag.
// 	 */
// 	void clearKnowledge();
// 
// 	/**
// 	 * @param stack
// 	 *            The stack to query
// 	 * @return Whether the player has transmutation knowledge for this stack
// 	 */
// 	boolean hasKnowledge(@Nullable ItemStack stack);
// 
// 	/**
// 	 * @param stack
// 	 *            The stack to add to knowledge
// 	 * @return Whether the operation was successful
// 	 */
// 	boolean addKnowledge(@Nonnull ItemStack stack);
// 
// 	/**
// 	 * @param stack
// 	 *            The stack to remove from knowledge
// 	 * @return Whether the operation was successful
// 	 */
// 	boolean removeKnowledge(@Nonnull ItemStack stack);
// 
// 	/**
// 	 * @return An unmodifiable but live view of the knowledge list.
// 	 */
// 	@Nonnull
// 	List<ItemStack> getKnowledge();
// 
// 	/**
// 	 * @return The player's input and lock slots
// 	 */
// 	@Nonnull
// 	IItemHandler getInputAndLocks();
// 
// 	/**
// 	 * @return The emc in this player's transmutation tablet network
// 	 */
// 	double getEmc();
// 
// 	/**
// 	 * @param emc
// 	 *            The emc to set in this player's transmutation tablet network
// 	 */
// 	void setEmc(double emc);
// 
// 	/**
// 	 * @param player
// 	 *            The player to sync to.
// 	 */
// 	void sync(@Nonnull EntityPlayerMP player);
// 
// }


import moze_intel.projecte.api.capabilities.IKnowledgeProvider;
import net.minecraft.block.state.IBlockState;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.UUID;
package moze_intel.projecte.api.proxy;



public interface ITransmutationProxy {
	/**
	 * Register a world transmutation with the Philosopher's Stone Calls this
	 * during the postinit phase
	 * 
	 * @param origin
	 *            Original blockstate when targeting world transmutation
	 * @param result1
	 *            First result blockstate
	 * @param result2
	 *            Alternate result blockstate (when sneaking). You may pass
	 *            null, in which there will be no alternate transmutation
	 * @return Whether the registration succeeded. It may fail if transmutations
	 *         already exist for block origin
	 */
	boolean registerWorldTransmutation(@Nonnull IBlockState origin, @Nonnull IBlockState result1, @Nullable IBlockState result2);

	/**
	 * Gets an {@link IKnowledgeProvider} representing the UUID provided.
	 *
	 * If the provided UUID is offline, note that the returned
	 * {@link IKnowledgeProvider} is immutable! If called clientside,
	 * {@param playerUUID} is ignored and the client player is used instead. If
	 * called serverside, this must be called after the server has reached state
	 * SERVER_STARTED.
	 *
	 * If the provided UUID could not be found both on or offline, an
	 * {@link IKnowledgeProvider} with no knowledge is returned.
	 *
	 * @param playerUUID
	 *            The UUID to query
	 * @return an {@link IKnowledgeProvider} representing the UUID provided, or
	 *         an {@link IKnowledgeProvider} representing no knowledge if the
	 *         requested UUID could not be found
	 */
	@Nonnull
// Path: src/main/java/moze_intel/projecte/api/capabilities/IKnowledgeProvider.java
// public interface IKnowledgeProvider extends INBTSerializable<NBTTagCompound> {
// 
// 	/**
// 	 * @return Whether the player has the "tome" flag set, meaning all knowledge
// 	 *         checks automatically return true
// 	 */
// 	boolean hasFullKnowledge();
// 
// 	/**
// 	 * @param fullKnowledge
// 	 *            Whether the player has the "tome" flag set, meaning all
// 	 *            knowledge checks automatically return true
// 	 */
// 	void setFullKnowledge(boolean fullKnowledge);
// 
// 	/**
// 	 * Clears all knowledge. Additionally, clears the "tome" flag.
// 	 */
// 	void clearKnowledge();
// 
// 	/**
// 	 * @param stack
// 	 *            The stack to query
// 	 * @return Whether the player has transmutation knowledge for this stack
// 	 */
// 	boolean hasKnowledge(@Nullable ItemStack stack);
// 
// 	/**
// 	 * @param stack
// 	 *            The stack to add to knowledge
// 	 * @return Whether the operation was successful
// 	 */
// 	boolean addKnowledge(@Nonnull ItemStack stack);
// 
// 	/**
// 	 * @param stack
// 	 *            The stack to remove from knowledge
// 	 * @return Whether the operation was successful
// 	 */
// 	boolean removeKnowledge(@Nonnull ItemStack stack);
// 
// 	/**
// 	 * @return An unmodifiable but live view of the knowledge list.
// 	 */
// 	@Nonnull
// 	List<ItemStack> getKnowledge();
// 
// 	/**
// 	 * @return The player's input and lock slots
// 	 */
// 	@Nonnull
// 	IItemHandler getInputAndLocks();
// 
// 	/**
// 	 * @return The emc in this player's transmutation tablet network
// 	 */
// 	double getEmc();
// 
// 	/**
// 	 * @param emc
// 	 *            The emc to set in this player's transmutation tablet network
// 	 */
// 	void setEmc(double emc);
// 
// 	/**
// 	 * @param player
// 	 *            The player to sync to.
// 	 */
// 	void sync(@Nonnull EntityPlayerMP player);
// 
// }


// Path: src/main/java/moze_intel/projecte/api/proxy/ITransmutationProxy.java
import moze_intel.projecte.api.capabilities.IKnowledgeProvider;
import net.minecraft.block.state.IBlockState;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.UUID;

package moze_intel.projecte.api.proxy;



public interface ITransmutationProxy {
	/**
	 * Register a world transmutation with the Philosopher's Stone Calls this
	 * during the postinit phase
	 * 
	 * @param origin
	 *            Original blockstate when targeting world transmutation
	 * @param result1
	 *            First result blockstate
	 * @param result2
	 *            Alternate result blockstate (when sneaking). You may pass
	 *            null, in which there will be no alternate transmutation
	 * @return Whether the registration succeeded. It may fail if transmutations
	 *         already exist for block origin
	 */
	boolean registerWorldTransmutation(@Nonnull IBlockState origin, @Nonnull IBlockState result1, @Nullable IBlockState result2);

	/**
	 * Gets an {@link IKnowledgeProvider} representing the UUID provided.
	 *
	 * If the provided UUID is offline, note that the returned
	 * {@link IKnowledgeProvider} is immutable! If called clientside,
	 * {@param playerUUID} is ignored and the client player is used instead. If
	 * called serverside, this must be called after the server has reached state
	 * SERVER_STARTED.
	 *
	 * If the provided UUID could not be found both on or offline, an
	 * {@link IKnowledgeProvider} with no knowledge is returned.
	 *
	 * @param playerUUID
	 *            The UUID to query
	 * @return an {@link IKnowledgeProvider} representing the UUID provided, or
	 *         an {@link IKnowledgeProvider} representing no knowledge if the
	 *         requested UUID could not be found
	 */
	@Nonnull
	IKnowledgeProvider getKnowledgeProviderFor(@Nonnull UUID playerUUID);