package openmods.structured; import com.google.common.base.Preconditions; import com.google.common.reflect.TypeToken; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.lang.reflect.Field; import openmods.reflection.InstanceFieldAccess; import openmods.reflection.TypeUtils; import openmods.serializable.SerializerRegistry; import openmods.utils.io.IStreamSerializer; public class ElementField extends InstanceFieldAccess<Object> implements IStructureElement { public final IStreamSerializer<Object> serializer; public ElementField(Object parent, Field field) { super(parent, field); final TypeToken<?> fieldType = TypeUtils.resolveFieldType(parent.getClass(), field); this.serializer = SerializerRegistry.instance.findSerializer(fieldType.getType()); Preconditions.checkNotNull(serializer, "Invalid field type"); } @Override public void writeToStream(DataOutput output) throws IOException { Object value = get(); serializer.writeToStream(value, output); } @Override public void readFromStream(DataInput input) throws IOException { Object value = serializer.readFromStream(input); set(value); } }