package openmods.sync;
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import cpw.mods.fml.common.registry.GameData;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.nbt.NBTTagCompound;
import openmods.utils.ByteUtils;
public class SyncableBlock extends SyncableObjectBase implements ISyncableValueProvider<Block> {
private Block block;
@Override
public void readFromStream(DataInputStream stream) {
int blockId = ByteUtils.readVLI(stream);
block = Block.getBlockById(blockId);
}
@Override
public void writeToStream(DataOutputStream stream) {
int blockId = Block.getIdFromBlock(block);
if (blockId < 0) blockId = 0;
ByteUtils.writeVLI(stream, blockId);
}
@Override
public void writeToNBT(NBTTagCompound nbt, String name) {
String blockName = GameData.getBlockRegistry().getNameForObject(this.block);
if (!Strings.isNullOrEmpty(blockName)) nbt.setString(name, blockName);
}
@Override
public void readFromNBT(NBTTagCompound nbt, String name) {
String blockName = nbt.getString(name);
if (!Strings.isNullOrEmpty(blockName)) block = GameData.getBlockRegistry().getObject(blockName);
}
@Override
public Block getValue() {
return Objects.firstNonNull(block, Blocks.air);
}
public void setValue(Block block) {
if (this.block != block) {
this.block = Objects.firstNonNull(block, Blocks.air);
markDirty();
}
}
public boolean containsValidBlock() {
return block != null && block != Blocks.air;
}
}