| package li.cil.oc.api.detail; |
| |
| import li.cil.oc.api.network.Component; |
| import li.cil.oc.api.network.ComponentConnector; |
| import li.cil.oc.api.network.Connector; |
| import li.cil.oc.api.network.Node; |
| import li.cil.oc.api.network.Visibility; |
| |
| /** |
| * Used for building {@link Node}s via {@link li.cil.oc.api.Network#newNode}. |
| * |
| * @param <T> the type of the node created by this builder. |
| */ |
| public interface Builder<T extends Node> { |
| /** |
| * Finalizes the construction of the node. |
| * <p/> |
| * This performs the actual creation of the node, initializes it to the |
| * settings defined by the current builder and returns it. |
| * |
| * @return the final node. |
| */ |
| T create(); |
| |
| /** |
| * Builder for basic nodes. These nodes merely allow network access and |
| * take on no special role. |
| */ |
| public static interface NodeBuilder extends Builder<Node> { |
| /** |
| * Makes the node a component. |
| * <p/> |
| * Nodes that are components can be accessed from computers, methods |
| * declared in them marked using the {@link li.cil.oc.api.machine.Callback} annotation can |
| * be invoked from computers that can see the component. |
| * |
| * @param name the name of the component. |
| * @param visibility the visibility of the component. |
| * @return a builder for a node that is also a component. |
| * @see li.cil.oc.api.network.Component |
| */ |
| ComponentBuilder withComponent(String name, Visibility visibility); |
| |
| /** |
| * Makes the node a component. |
| * <p/> |
| * Like {@link #withComponent(String, Visibility)}, but with a default |
| * visibility set to the <em>reachability</em> of the node. |
| * |
| * @param name the name of the component. |
| * @return a builder for a node that is also a component. |
| * @see li.cil.oc.api.network.Component |
| */ |
| ComponentBuilder withComponent(String name); |
| |
| /** |
| * Makes the node a connector. |
| * <p/> |
| * A connector node can feed power into the network and extract power |
| * from the network. This is used both for passive energy drain (such |
| * as running screens and computers) and for active power consumption |
| * (such as wireless message sending or robot actions). |
| * |
| * @param bufferSize the size of the local energy buffer. |
| * @return a builder for a node that is also a connector. |
| * @see li.cil.oc.api.network.Connector |
| */ |
| ConnectorBuilder withConnector(double bufferSize); |
| |
| /** |
| * Makes the node a connector. |
| * <p/> |
| * Like {@link #withConnector(double)}, but with a default buffer size |
| * of zero. |
| * |
| * @return a builder for a node that is also a connector. |
| * @see li.cil.oc.api.network.Connector |
| */ |
| ConnectorBuilder withConnector(); |
| } |
| |
| /** |
| * Builder for component nodes. These node can be interacted with from |
| * computers in the same network, that can <em>see</em> the component. |
| */ |
| public static interface ComponentBuilder extends Builder<Component> { |
| /** |
| * Makes the node a connector. |
| * <p/> |
| * A connector node can feed power into the network and extract power |
| * from the network. This is used both for passive energy drain (such |
| * as running screens and computers) and for active power consumption |
| * (such as wireless message sending or robot actions). |
| * |
| * @param bufferSize the size of the local energy buffer. |
| * @return a builder for a node that is also a connector. |
| * @see li.cil.oc.api.network.Connector |
| */ |
| ComponentConnectorBuilder withConnector(double bufferSize); |
| |
| /** |
| * Makes the node a connector. |
| * <p/> |
| * Like {@link #withConnector(double)}, but with a default buffer size |
| * of zero. |
| * |
| * @return a builder for a node that is also a connector. |
| * @see li.cil.oc.api.network.Connector |
| */ |
| ComponentConnectorBuilder withConnector(); |
| } |
| |
| /** |
| * Builder for connector nodes. These nodes can interact with the energy |
| * stored in the network, i.e. increase or reduce it. |
| */ |
| public static interface ConnectorBuilder extends Builder<Connector> { |
| /** |
| * Makes the node a component. |
| * <p/> |
| * Nodes that are components can be accessed from computers, methods |
| * declared in them marked using the {@link li.cil.oc.api.machine.Callback} annotation can |
| * be invoked from computers that can see the component. |
| * |
| * @param name the name of the component. |
| * @param visibility the visibility of the component. |
| * @return a builder for a node that is also a component. |
| * @see li.cil.oc.api.network.Component |
| */ |
| ComponentConnectorBuilder withComponent(String name, Visibility visibility); |
| |
| /** |
| * Makes the node a component. |
| * <p/> |
| * Like {@link #withComponent(String, Visibility)}, but with a default |
| * visibility set to the <em>reachability</em> of the node. |
| * |
| * @param name the name of the component. |
| * @return a builder for a node that is also a component. |
| * @see li.cil.oc.api.network.Component |
| */ |
| ComponentConnectorBuilder withComponent(String name); |
| } |
| |
| /** |
| * Builder for nodes that are both component <em>and</em> connector node. |
| */ |
| public static interface ComponentConnectorBuilder extends Builder<ComponentConnector> { |
| } |
| } |