blob: 1dc539c89e04f5d1553a626ae9bd78f00cf60a41 (
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
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;
}
}
}
|