# Questions on Chunk getX() and getZ()

Discussion in 'Spigot Plugin Development' started by TheDigitalDev, May 10, 2017.

1. ### TheDigitalDev

Hey! I'm sorta new to spigot, so I have a question on the getX() and getZ() functions of Chunk. It seems to only repeat the getChunkAt/Location coordinates that you provide. I feel like i'm missing something here... thanks!.

What do you expect it to do?
Sometimes you might have just the chunk and want to know where it came from.

3. ### TheDigitalDev

Oh that makes sense then, I was hoping for a corner coordinate or something, I guess i'll have to figure out how to do that. Thanks for the response!

Chunks are 16 blocks wide, so just multiply x / z by 16

5. ### 1Rogue

Though if you want to get the corner block (from a location), it'd be faster to modulo:

Code (Java):
int xCorner = loc.getX() - (loc.getX() % 16)

6. ### TheDigitalDev

Oh I just made a method with a for loop that added x until it made a number divisible by 16, I guess you're method is way more effecient .-. thanks

7. ### BillyGalbreath

If you have chunk coords and you want block coords just do

Code (Text):
int blockX = chunkX << 4;
int blockZ = chunkZ << 4;
This will effectively give you the northwest block's world coordinate (minus the y/height coordinate).

Just reverse the bitshift signs for the opposite (block coords to chunk coords).

Code (Text):
int chunkX = blockX >> 4;
int chunkZ = blockZ >> 4;
Bitshifting like this is arguably faster than multiplying/dividing by 16. Especially in a heavy/repeating setting.

• Winner x 1
8. ### 1Rogue

You know for literally writing this an hour ago:
Code (Java):
long val = Long.reverse((((long) 0x48454c4c) << 8 | 0x4f) << 8 | 0b1010) >>> 0x40 - (8 * 6);
while (val > 0) { System.out.print((char) (Long.reverse(val & 0xFF) >>> 0x38)); val >>>= 8; }
You'd think I'd have suggested that too. Billy's idea is better here.