Skip to content

Commit

Permalink
Fixed chunk loading code not properly handling tile entity data.
Browse files Browse the repository at this point in the history
  • Loading branch information
sk89q committed Aug 24, 2012
1 parent 6a162a4 commit 3b59798
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 24 deletions.
23 changes: 11 additions & 12 deletions src/main/java/com/sk89q/worldedit/data/AnvilChunk.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,6 @@
import com.sk89q.worldedit.LocalWorld;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.blocks.BlockID;
import com.sk89q.worldedit.blocks.ChestBlock;
import com.sk89q.worldedit.blocks.DispenserBlock;
import com.sk89q.worldedit.blocks.FurnaceBlock;
import com.sk89q.worldedit.blocks.MobSpawnerBlock;
import com.sk89q.worldedit.blocks.NoteBlock;
import com.sk89q.worldedit.blocks.SignBlock;
import com.sk89q.worldedit.blocks.TileEntityBlock;

public class AnvilChunk implements Chunk {
Expand Down Expand Up @@ -187,7 +180,11 @@ private CompoundTag getBlockTileEntity(Vector pos) throws DataException {
populateTileEntities();
}

return new CompoundTag("", tileEntities.get(new BlockVector(pos)));
Map<String, Tag> values = tileEntities.get(new BlockVector(pos));
if (values == null) {
return null;
}
return new CompoundTag("", values);
}

@Override
Expand All @@ -196,7 +193,7 @@ public BaseBlock getBlock(Vector pos) throws DataException {
int data = getBlockData(pos);
BaseBlock block;

if (id == BlockID.WALL_SIGN || id == BlockID.SIGN_POST) {
/*if (id == BlockID.WALL_SIGN || id == BlockID.SIGN_POST) {
block = new SignBlock(id, data);
} else if (id == BlockID.CHEST) {
block = new ChestBlock(data);
Expand All @@ -208,13 +205,15 @@ public BaseBlock getBlock(Vector pos) throws DataException {
block = new MobSpawnerBlock(data);
} else if (id == BlockID.NOTE_BLOCK) {
block = new NoteBlock(data);
} else {
} else {*/
block = new BaseBlock(id, data);
}
//}

if (block instanceof TileEntityBlock) {
CompoundTag tileEntity = getBlockTileEntity(pos);
((TileEntityBlock) block).setNbtData(tileEntity);
if (tileEntity != null) {
((TileEntityBlock) block).setNbtData(tileEntity);
}
}

return block;
Expand Down
23 changes: 11 additions & 12 deletions src/main/java/com/sk89q/worldedit/data/OldChunk.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,6 @@
import com.sk89q.worldedit.LocalWorld;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.blocks.BlockID;
import com.sk89q.worldedit.blocks.ChestBlock;
import com.sk89q.worldedit.blocks.DispenserBlock;
import com.sk89q.worldedit.blocks.FurnaceBlock;
import com.sk89q.worldedit.blocks.MobSpawnerBlock;
import com.sk89q.worldedit.blocks.NoteBlock;
import com.sk89q.worldedit.blocks.SignBlock;
import com.sk89q.worldedit.blocks.TileEntityBlock;

/**
Expand Down Expand Up @@ -185,7 +178,11 @@ private CompoundTag getBlockTileEntity(Vector pos) throws DataException {
populateTileEntities();
}

return new CompoundTag("", tileEntities.get(new BlockVector(pos)));
Map<String, Tag> values = tileEntities.get(new BlockVector(pos));
if (values == null) {
return null;
}
return new CompoundTag("", values);
}

@Override
Expand All @@ -194,7 +191,7 @@ public BaseBlock getBlock(Vector pos) throws DataException {
int data = getBlockData(pos);
BaseBlock block;

if (id == BlockID.WALL_SIGN || id == BlockID.SIGN_POST) {
/*if (id == BlockID.WALL_SIGN || id == BlockID.SIGN_POST) {
block = new SignBlock(id, data);
} else if (id == BlockID.CHEST) {
block = new ChestBlock(data);
Expand All @@ -206,13 +203,15 @@ public BaseBlock getBlock(Vector pos) throws DataException {
block = new MobSpawnerBlock(data);
} else if (id == BlockID.NOTE_BLOCK) {
block = new NoteBlock(data);
} else {
} else {*/
block = new BaseBlock(id, data);
}
//}

if (block instanceof TileEntityBlock) {
CompoundTag tileEntity = getBlockTileEntity(pos);
((TileEntityBlock) block).setNbtData(tileEntity);
if (tileEntity != null) {
((TileEntityBlock) block).setNbtData(tileEntity);
}
}

return block;
Expand Down

0 comments on commit 3b59798

Please sign in to comment.