package li.cil.oc.api.prefab;

import li.cil.oc.api.network.Message;
import li.cil.oc.api.network.Node;
import net.minecraft.nbt.NBTTagCompound;

/**
 * Simple base implementation of the <tt>ManagedEnvironment</tt> interface, so
 * unused methods don't clutter the implementing class.
 */
public abstract class ManagedEnvironment implements li.cil.oc.api.network.ManagedEnvironment {
    // Should be initialized using api.Network.newNode(). See TileEntityEnvironment.
    protected Node node;

    @Override
    public Node node() {
        return node;
    }

    @Override
    public boolean canUpdate() {
        return false;
    }

    @Override
    public void update() {
    }

    @Override
    public void onConnect(final Node node) {
    }

    @Override
    public void onDisconnect(final Node node) {
    }

    @Override
    public void onMessage(final Message message) {
    }

    @Override
    public void load(final NBTTagCompound nbt) {
        if (node != null) node.load(nbt.getCompoundTag("node"));
    }

    @Override
    public void save(final NBTTagCompound nbt) {
        if (node != null) {
            final NBTTagCompound nodeTag = new NBTTagCompound();
            node.save(nodeTag);
            nbt.setCompoundTag("node", nodeTag);
        }
    }
}
