blob: f4caab3d36f7c86a0c7bfa1cec3c648b7d190a5c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
package common.tileentities;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
public class TE_ItemProxyCable extends TileEntity {
private static final float THICKNESS = 0.5F;
private byte connections = 0;
private byte connectionAllowed = 63;
private String idCache = null;
public TE_ItemProxyCable() {
}
@Override
public void updateEntity() {
// Check all 6 sides and connect the conduit if it is allowed to
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
final TileEntity te = super.getWorldObj().getTileEntity(
super.xCoord + side.offsetX,
super.yCoord + side.offsetY,
super.zCoord + side.offsetZ);
if(te instanceof TE_ItemProxyCable) {
final TE_ItemProxyCable cable = (TE_ItemProxyCable) te;
setConnection(side, cable.isConnectionAllowed(side.getOpposite()));
} else {
setConnection(side, false);
}
}
}
public static float getThickness() {
return THICKNESS;
}
/**
* Builds a simple unique identifier for this TileEntity by appending
* the x, y, and z coordinates in a string.
*
* @return unique identifier for this TileEntity
*/
public String getIdentifier() {
if(idCache == null) {
idCache = "" + super.xCoord + super.yCoord + super.zCoord;
return idCache;
} else {
return idCache;
}
}
/**
* 0 0 0 0 0 0 0 0 = 0 -> no connection </br>
* 0 0 0 0 0 0 0 1 = 1 -> down </br>
* 0 0 0 0 0 0 1 0 = 2 -> up </br>
* 0 0 0 0 0 1 0 0 = 4 -> north </br>
* 0 0 0 0 1 0 0 0 = 8 -> south </br>
* 0 0 0 1 0 0 0 0 = 16 -> west </br>
* 0 0 1 0 0 0 0 0 = 32 -> east </br>
*
* @param side
* The side for which to set the connection status.
* @param connected
* Whether this side should be connected or not
* @return
* True if the connection was allowed
*/
public boolean setConnection(ForgeDirection side, boolean connected) {
if(isConnectionAllowed(side)){
switch(side) {
case DOWN: connections = (byte) ((connected) ? connections | 1 : connections ^ 1); break;
case UP: connections = (byte) ((connected) ? connections | 2 : connections ^ 2); break;
case NORTH: connections = (byte) ((connected) ? connections | 4 : connections ^ 4); break;
case SOUTH: connections = (byte) ((connected) ? connections | 8 : connections ^ 8); break;
case WEST: connections = (byte) ((connected) ? connections | 16 : connections ^ 16); break;
case EAST: connections = (byte) ((connected) ? connections | 32 : connections ^ 32); break;
default: return false;
}
return true;
} else {
return false;
}
}
public boolean isConnected(ForgeDirection side) {
switch(side) {
case DOWN: return (connections & 1) == 1;
case UP: return (connections & 2) == 2;
case NORTH: return (connections & 4) == 4;
case SOUTH: return (connections & 8) == 8;
case WEST: return (connections & 16) == 16;
case EAST: return (connections & 32) == 32;
default: return false;
}
}
public void setConnectionAllowed(ForgeDirection side, boolean allowed) {
switch(side) {
case DOWN: connectionAllowed = (byte) ((allowed) ? connectionAllowed | 1 : connectionAllowed ^ 1); break;
case UP: connectionAllowed = (byte) ((allowed) ? connectionAllowed | 2 : connectionAllowed ^ 2); break;
case NORTH: connectionAllowed = (byte) ((allowed) ? connectionAllowed | 4 : connectionAllowed ^ 4); break;
case SOUTH: connectionAllowed = (byte) ((allowed) ? connectionAllowed | 8 : connectionAllowed ^ 8); break;
case WEST: connectionAllowed = (byte) ((allowed) ? connectionAllowed | 16 : connectionAllowed ^ 16); break;
case EAST: connectionAllowed = (byte) ((allowed) ? connectionAllowed | 32 : connectionAllowed ^ 32); break;
default: break;
}
}
public boolean isConnectionAllowed(ForgeDirection side) {
switch(side) {
case DOWN: return (connectionAllowed & 1) == 1;
case UP: return (connectionAllowed & 2) == 2;
case NORTH: return (connectionAllowed & 4) == 4;
case SOUTH: return (connectionAllowed & 8) == 8;
case WEST: return (connectionAllowed & 16) == 16;
case EAST: return (connectionAllowed & 32) == 32;
default: return false;
}
}
}
|