Update from sk89q/master

This commit is contained in:
Jesse Boyd
2018-09-25 15:35:21 +10:00
14 changed files with 47 additions and 29 deletions

View File

@ -28,21 +28,21 @@ import com.sk89q.jnbt.NBTUtils;
import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.BlockVector;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.DataException;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockStateHolder;
import com.sk89q.worldedit.world.block.BlockTypes;
import com.sk89q.worldedit.world.registry.LegacyMapper;
import com.sk89q.worldedit.world.storage.InvalidFormatException;
import javax.annotation.Nullable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
public class AnvilChunk implements Chunk {
private CompoundTag rootTag;
@ -53,8 +53,6 @@ public class AnvilChunk implements Chunk {
private int rootZ;
private Map<BlockVector, Map<String,Tag>> tileEntities;
@SuppressWarnings("unused")
private World world; // TODO: remove if stays unused.
/**
* Construct the chunk with a compound tag.
@ -65,7 +63,6 @@ public class AnvilChunk implements Chunk {
*/
public AnvilChunk(World world, CompoundTag tag) throws DataException {
rootTag = tag;
this.world = world;
rootX = NBTUtils.getChildTag(rootTag.getValue(), "xPos", IntTag.class).getValue();
rootZ = NBTUtils.getChildTag(rootTag.getValue(), "zPos", IntTag.class).getValue();
@ -257,14 +254,22 @@ public class AnvilChunk implements Chunk {
}
@Override
public BaseBlock getBlock(Vector position) throws DataException {
public BlockStateHolder getBlock(Vector position) throws DataException {
int id = getBlockID(position);
int data = getBlockData(position);
BlockState state = LegacyMapper.getInstance().getBlockFromLegacy(id, data);
CompoundTag tileEntity = getBlockTileEntity(position);
return new BaseBlock(state, tileEntity);
if (state == null) {
WorldEdit.logger.warning("Unknown legacy block " + id + ":" + data + " found when loading legacy anvil chunk.");
return BlockTypes.AIR.getDefaultState();
}
if (state.getMaterial().hasContainer()) {
CompoundTag tileEntity = getBlockTileEntity(position);
if (tileEntity != null) {
return new BaseBlock(state, tileEntity);
}
}
return state;
}
}

View File

@ -32,6 +32,7 @@ import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.registry.state.Property;
import com.sk89q.worldedit.world.DataException;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockStateHolder;
import com.sk89q.worldedit.world.block.BlockType;
import com.sk89q.worldedit.world.block.BlockTypes;
import com.sk89q.worldedit.world.storage.InvalidFormatException;
@ -230,7 +231,7 @@ public class AnvilChunk13 implements Chunk {
}
@Override
public BlockState getBlock(Vector position) throws DataException {
public BlockStateHolder getBlock(Vector position) throws DataException {
int x = position.getBlockX() - rootX * 16;
int y = position.getBlockY();
int z = position.getBlockZ() - rootZ * 16;

View File

@ -20,9 +20,8 @@
package com.sk89q.worldedit.world.chunk;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.DataException;
import com.sk89q.worldedit.world.block.BlockStateHolder;
/**
* A 16 by 16 block chunk.
@ -36,6 +35,5 @@ public interface Chunk {
* @return block the block
* @throws DataException thrown on data error
*/
BlockState getBlock(Vector position) throws DataException;
BlockStateHolder getBlock(Vector position) throws DataException;
}

View File

@ -27,13 +27,13 @@ import com.sk89q.jnbt.NBTUtils;
import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.BlockVector;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.DataException;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockStateHolder;
import com.sk89q.worldedit.world.block.BlockTypes;
import com.sk89q.worldedit.world.DataException;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.registry.LegacyMapper;
import com.sk89q.worldedit.world.storage.InvalidFormatException;
@ -155,7 +155,7 @@ public class OldChunk implements Chunk {
}
@Override
public BlockState getBlock(Vector position) throws DataException {
public BlockStateHolder getBlock(Vector position) throws DataException {
if(position.getBlockY() >= 128) return BlockTypes.VOID_AIR.getDefaultState();
int id, dataVal;
@ -183,6 +183,10 @@ public class OldChunk implements Chunk {
}
BlockState state = LegacyMapper.getInstance().getBlockFromLegacy(id, dataVal);
if (state == null) {
WorldEdit.logger.warning("Unknown legacy block " + id + ":" + dataVal + " found when loading legacy anvil chunk.");
return BlockTypes.AIR.getDefaultState();
}
if (state.getBlockType().getMaterial().hasContainer()) {
CompoundTag tileEntity = getBlockTileEntity(position);
if (tileEntity != null) return new BaseBlock(state, tileEntity);