package openmods.sync;

import com.google.common.primitives.UnsignedBytes;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.PacketBuffer;

public class SyncableUnsignedByte extends SyncableObjectBase implements ISyncableValueProvider<Integer> {

	private int value;

	public SyncableUnsignedByte(int value) {
		this.value = value;
	}

	public SyncableUnsignedByte() {}

	public void set(int newValue) {
		newValue &= 0xFF;
		if (newValue != value) {
			value = newValue;
			markDirty();
		}
	}

	public int get() {
		return value & 0xFF;
	}

	@Override
	public Integer getValue() {
		return get();
	}

	@Override
	public void readFromStream(PacketBuffer stream) {
		value = stream.readUnsignedByte();
	}

	@Override
	public void writeToStream(PacketBuffer stream) {
		stream.writeByte(value);
	}

	@Override
	public void writeToNBT(NBTTagCompound tag, String name) {
		tag.setByte(name, (byte)(value & 0xFF));
	}

	@Override
	public void readFromNBT(NBTTagCompound tag, String name) {
		value = tag.getByte(name) & 0xFF;
	}

	public void modify(int by) {
		set(UnsignedBytes.saturatedCast(value + by));
	}
}