mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-06-08 00:23:38 +02:00
87 lines
3.7 KiB
Java
87 lines
3.7 KiB
Java
package powercrystals.minefactoryreloaded.api.rednet.connectivity;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* Defines how RedNet cable connects to a block
|
|
* <p>
|
|
* None: RedNet will never connect to this block (if this is all you want: use IRedNetNoConnection)
|
|
* <p>
|
|
* CableSingle: Connections will use the cable renderer with a single band, best used for whole blocks
|
|
* <br>
|
|
* PlateSingle: Connections will use the plate renderer with a single band, used for conveyers and rails
|
|
* <p>
|
|
* CableAll: Connections permit access to all 16 bands
|
|
* <br>
|
|
* PlateAll: Connections permit access to all 16 bands
|
|
* <p><p>
|
|
* Forced connection modes are best used for decoration blocks: RedNet will not connect normally,
|
|
* but will if the user forces it. Typically, IRedNetDecorative is desired for this instead
|
|
* <p>
|
|
* ForcedCableSingle: Connections permit access to a single band, only when the cable is in forced connection mode
|
|
* <br>
|
|
* ForcedPlateSingle: Connections permit access to a single band, only when the cable is in forced connection mode
|
|
* <p>
|
|
* ForcedCableAll: Connections permit access to all 16 bands, only when the cable is in forced connection mode
|
|
* <br>
|
|
* ForcedPlateAll: Connections permit access to all 16 bands, only when the cable is in forced connection mode
|
|
* <p><p>
|
|
* The decorative nodes are for when you want rednet to decide how to connect to your block,
|
|
* but also need to receive full updates from the network.
|
|
* <p>
|
|
* DecorativeSingle: Connections permit access to a single band, using standard connection logic
|
|
* <br>
|
|
* DecorativeAll: Connections permit access to all 16 bands, using standard connection logic
|
|
* <br>
|
|
* ForcedDecorativeSingle: Connections permit access to a single band, only when the cable is in forced connection mode
|
|
* <br>
|
|
* ForcedDecorativeAll: Connections permit access to all 16 bands, only when the cable is in forced connection mode
|
|
*/
|
|
public enum RedNetConnectionType
|
|
{
|
|
None, // 0; 0000000
|
|
CableSingle, // 11; 0001011
|
|
PlateSingle, // 13; 0001101
|
|
CableAll, // 19; 0010011
|
|
PlateAll, // 21; 0010101
|
|
ForcedCableSingle, // 43; 0101011
|
|
ForcedPlateSingle, // 45; 0101101
|
|
ForcedCableAll, // 51; 0110011
|
|
ForcedPlateAll, // 53; 0110101
|
|
DecorativeSingle, // NA; 0001001
|
|
DecorativeAll, // NA; 0010001
|
|
ForcedDecorativeSingle, // NA; 0101001
|
|
ForcedDecorativeAll; // NA; 0110001
|
|
|
|
public final boolean isConnected = this.ordinal() != 0; // 0 bit (mask: 1)
|
|
public final boolean isSingleSubnet = this.name().endsWith("Single"); // 3 bit (mask: 8)
|
|
public final boolean isAllSubnets = this.name().endsWith("All"); // 4 bit (mask: 16)
|
|
public final boolean isPlate = this.name().contains("Plate"); // 2 bit (mask: 4)
|
|
public final boolean isCable = this.name().contains("Cable"); // 1 bit (mask: 2)
|
|
public final boolean isConnectionForced = this.name().startsWith("Forced"); // 5 bit (mask: 32)
|
|
public final boolean isDecorative = this.name().contains("Decorative");
|
|
public final short flags = toFlags(isConnected, isCable, isPlate,
|
|
isSingleSubnet, isAllSubnets, isConnectionForced);
|
|
|
|
public static final RedNetConnectionType fromFlags(short flags)
|
|
{
|
|
return connections.get(flags);
|
|
}
|
|
|
|
private static final short toFlags(boolean ...flags)
|
|
{
|
|
short ret = 0;
|
|
for (int i = flags.length; i --> 0;)
|
|
ret |= (flags[i] ? 1 : 0) << i;
|
|
return ret;
|
|
}
|
|
|
|
private static final Map<Short, RedNetConnectionType> connections = new HashMap<Short, RedNetConnectionType>();
|
|
|
|
static {
|
|
for (RedNetConnectionType type : RedNetConnectionType.values())
|
|
connections.put(type.flags, type);
|
|
}
|
|
}
|