Skip to content

Commit c9c924a

Browse files
committed
Stairs : fix placing in corners
1 parent ca2fa46 commit c9c924a

File tree

1 file changed

+70
-17
lines changed

1 file changed

+70
-17
lines changed

src/jfcraft/block/BlockStairs.java

+70-17
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package jfcraft.block;
22

3-
/**
3+
/** Stairs
4+
*
5+
* https://minecraft.fandom.com/wiki/Stairs
46
*
57
* @author pquiring
68
*
@@ -181,37 +183,88 @@ public int getPreferredDir() {
181183
public boolean place(Client client, Coords c) {
182184
//check if creating corner stairs and change dir as required
183185
World world = Static.server.world;
186+
int _N = N << 4, _E = E << 4, _S = S << 4, _W = W << 4;
187+
if (c.face_y == A) {
188+
_N |= VAR_UPPER;
189+
_E |= VAR_UPPER;
190+
_S |= VAR_UPPER;
191+
_W |= VAR_UPPER;
192+
}
184193
char id_n = world.getID(client.player.dim, c.x, c.y, c.z - 1);
194+
int bits_n = world.getBits(client.player.dim, c.x, c.y, c.z - 1) & 0xf8;
185195
char id_e = world.getID(client.player.dim, c.x + 1, c.y, c.z);
196+
int bits_e = world.getBits(client.player.dim, c.x + 1, c.y, c.z) & 0xf8;
186197
char id_s = world.getID(client.player.dim, c.x, c.y, c.z + 1);
198+
int bits_s = world.getBits(client.player.dim, c.x, c.y, c.z + 1) & 0xf8;
187199
char id_w = world.getID(client.player.dim, c.x - 1, c.y, c.z);
200+
int bits_w = world.getBits(client.player.dim, c.x - 1, c.y, c.z) & 0xf8;
188201
switch (c.dir_xz) {
189202
case N:
190-
if (id_e == id) {
191-
c.dir_xz = NE2;
192-
} else if (id_w == id) {
193-
c.dir_xz = NW2;
203+
if (id_s == id) {
204+
//inner corner
205+
if (bits_s == _E) {
206+
c.dir_xz = NE;
207+
} else if (bits_s == _W) {
208+
c.dir_xz = NW;
209+
}
210+
} else if (id_n == id) {
211+
//outer corner
212+
if (bits_n == _E) {
213+
c.dir_xz = NE2;
214+
} else if (bits_n == _W) {
215+
c.dir_xz = NW2;
216+
}
194217
}
195218
break;
196219
case E:
197-
if (id_n == id) {
198-
c.dir_xz = NE2;
199-
} else if (id_s == id) {
200-
c.dir_xz = SE2;
220+
if (id_w == id) {
221+
//inner corner
222+
if (bits_w == _N) {
223+
c.dir_xz = NE;
224+
} else if (bits_w == _S) {
225+
c.dir_xz = SE;
226+
}
227+
} else if (id_e == id) {
228+
//outer corner
229+
if (bits_e == _N) {
230+
c.dir_xz = NE2;
231+
} else if (bits_e == _S) {
232+
c.dir_xz = SE2;
233+
}
201234
}
202235
break;
203236
case S:
204-
if (id_e == id) {
205-
c.dir_xz = SE2;
206-
} else if (id_w == id) {
207-
c.dir_xz = SW2;
237+
if (id_n == id) {
238+
//inner corner
239+
if (bits_n == _E) {
240+
c.dir_xz = SE;
241+
} else if (bits_n == _W) {
242+
c.dir_xz = SW;
243+
}
244+
} else if (id_s == id) {
245+
//outer corner
246+
if (bits_s == _E) {
247+
c.dir_xz = SE2;
248+
} else if (bits_s == _W) {
249+
c.dir_xz = SW2;
250+
}
208251
}
209252
break;
210253
case W:
211-
if (id_n == id) {
212-
c.dir_xz = NW2;
213-
} else if (id_s == id) {
214-
c.dir_xz = SW2;
254+
if (id_e == id) {
255+
//inner corner
256+
if (bits_e == _N) {
257+
c.dir_xz = NW;
258+
} else if (bits_e == _S) {
259+
c.dir_xz = SW;
260+
}
261+
} else if (id_w == id) {
262+
//outer corner
263+
if (bits_w == _N) {
264+
c.dir_xz = NW2;
265+
} else if (bits_w == _S) {
266+
c.dir_xz = SW2;
267+
}
215268
}
216269
break;
217270
}

0 commit comments

Comments
 (0)