package li.cil.oc.common.asm.template;

import li.cil.oc.api.network.Environment;
import li.cil.oc.api.network.SimpleComponent;
import net.minecraft.nbt.NBTTagCompound;

/**
 * This interface defines the names to which existing or placeholders for
 * existing methods will be moved. This allows transparent injection of our
 * functionality, i.e. existing validate() etc. methods will be called as
 * if we didn't inject our code.
 * <p/>
 * Yes, the names are not "conventional", but that is by design, to avoid
 * naming collisions.
 */
public interface SimpleComponentImpl extends Environment, SimpleComponent {
    public static final String PostFix = "_OpenComputers";

    void validate_OpenComputers();

    void invalidate_OpenComputers();

    void onChunkUnload_OpenComputers();

    void readFromNBT_OpenComputers(NBTTagCompound nbt);

    void writeToNBT_OpenComputers(NBTTagCompound nbt);
}
