Fixed getting and setting of blocks in unloaded chunks

This commit is contained in:
zml2008 2011-08-29 17:31:08 -07:00
parent 02d8acfa81
commit bc6315fb24
3 changed files with 18 additions and 0 deletions

View File

@ -162,6 +162,8 @@ public class EditSession {
return false; return false;
} }
world.checkLoadedChuck(pt);
// No invalid blocks // No invalid blocks
if (!world.isValidBlockType(type)) { if (!world.isValidBlockType(type)) {
return false; return false;
@ -414,6 +416,8 @@ public class EditSession {
* @return BaseBlock * @return BaseBlock
*/ */
public BaseBlock rawGetBlock(Vector pt) { public BaseBlock rawGetBlock(Vector pt) {
world.checkLoadedChuck(pt);
int type = world.getBlockType(pt); int type = world.getBlockType(pt);
int data = world.getBlockData(pt); int data = world.getBlockData(pt);

View File

@ -349,6 +349,13 @@ public abstract class LocalWorld {
return type >= 0 && type < 96; return type >= 0 && type < 96;
} }
/**
* Checks if the chunk pt is in is loaded. if not, loads the chunk
*
* @param pt Position to check
*/
public abstract void checkLoadedChuck(Vector pt);
/** /**
* Compare if the other world is equal. * Compare if the other world is equal.
* *

View File

@ -673,6 +673,13 @@ public class BukkitWorld extends LocalWorld {
return type <= 255 && Material.getMaterial(type) != null; return type <= 255 && Material.getMaterial(type) != null;
} }
@Override
public void checkLoadedChuck(Vector pt) {
if (!world.isChunkLoaded(pt.getBlockX() >> 4, pt.getBlockZ() >> 4)) {
world.loadChunk(pt.getBlockX() >> 4, pt.getBlockZ() >> 4);
}
}
@Override @Override
public boolean equals(Object other) { public boolean equals(Object other) {
if (!(other instanceof BukkitWorld)) { if (!(other instanceof BukkitWorld)) {