-
Notifications
You must be signed in to change notification settings - Fork 79
/
FaceRegion.java
139 lines (118 loc) · 3.45 KB
/
FaceRegion.java
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
package mod.chiselsandbits.render.chiseledblock;
import net.minecraft.util.EnumFacing;
class FaceRegion
{
public FaceRegion(
final EnumFacing myFace,
final int centerX, final int centerY, final int centerZ,
final int blockStateID,
final boolean isEdgeFace )
{
face = myFace;
this.blockStateID = blockStateID;
isEdge = isEdgeFace;
minX = centerX;
minY = centerY;
minZ = centerZ;
maxX = centerX;
maxY = centerY;
maxZ = centerZ;
}
final public EnumFacing face;
final int blockStateID;
final boolean isEdge;
private int minX;
private int minY;
private int minZ;
private int maxX;
private int maxY;
private int maxZ;
public int getMinX() {
return minX;
}
public int getMinY() {
return minY;
}
public int getMinZ() {
return minZ;
}
public int getMaxX() {
return maxX;
}
public int getMaxY() {
return maxY;
}
public int getMaxZ() {
return maxZ;
}
public boolean extend(
final FaceRegion currentFace )
{
if ( currentFace.blockStateID != blockStateID )
{
return false;
}
switch ( face )
{
case DOWN:
case UP:
{
final boolean a = maxX == currentFace.minX - 2 && maxZ == currentFace.maxZ && minZ == currentFace.minZ;
final boolean b = minX == currentFace.maxX + 2 && maxZ == currentFace.maxZ && minZ == currentFace.minZ;
final boolean c = maxZ == currentFace.minZ - 2 && maxX == currentFace.maxX && minX == currentFace.minX;
final boolean d = minZ == currentFace.maxZ + 2 && maxX == currentFace.maxX && minX == currentFace.minX;
if ( a || b || c || d )
{
minX = Math.min(currentFace.minX, minX);
minY = Math.min(currentFace.minY, minY);
minZ = Math.min(currentFace.minZ, minZ);
maxX = Math.max(currentFace.maxX, maxX);
maxY = Math.max(currentFace.maxY, maxY);
maxZ = Math.max(currentFace.maxZ, maxZ);
return true;
}
return false;
}
case WEST:
case EAST:
{
final boolean a = maxY == currentFace.minY - 2 && maxZ == currentFace.maxZ && minZ == currentFace.minZ;
final boolean b = minY == currentFace.maxY + 2 && maxZ == currentFace.maxZ && minZ == currentFace.minZ;
final boolean c = maxZ == currentFace.minZ - 2 && maxY == currentFace.maxY && minY == currentFace.minY;
final boolean d = minZ == currentFace.maxZ + 2 && maxY == currentFace.maxY && minY == currentFace.minY;
if ( a || b || c || d )
{
minX = Math.min(currentFace.minX, minX);
minY = Math.min(currentFace.minY, minY);
minZ = Math.min(currentFace.minZ, minZ);
maxX = Math.max(currentFace.maxX, maxX);
maxY = Math.max(currentFace.maxY, maxY);
maxZ = Math.max(currentFace.maxZ, maxZ);
return true;
}
return false;
}
case NORTH:
case SOUTH:
{
final boolean a = maxY == currentFace.minY - 2 && maxX == currentFace.maxX && minX == currentFace.minX;
final boolean b = minY == currentFace.maxY + 2 && maxX == currentFace.maxX && minX == currentFace.minX;
final boolean c = maxX == currentFace.minX - 2 && maxY == currentFace.maxY && minY == currentFace.minY;
final boolean d = minX == currentFace.maxX + 2 && maxY == currentFace.maxY && minY == currentFace.minY;
if ( a || b || c || d )
{
minX = Math.min(currentFace.minX, minX);
minY = Math.min(currentFace.minY, minY);
minZ = Math.min(currentFace.minZ, minZ);
maxX = Math.max(currentFace.maxX, maxX);
maxY = Math.max(currentFace.maxY, maxY);
maxZ = Math.max(currentFace.maxZ, maxZ);
return true;
}
return false;
}
default:
return false;
}
}
}